2022. 1. 7. 17:01ㆍCS/OS
(서로 다른 동기로 만들어짐.)
- 유닉스(UNIX)
초창기의 운영체제
대형 컴퓨터를 위해 만들어짐.
기본 multitasking 목적.
기계어에 가까운 어셈블리 언어로만듬 : 코드가 복잡하고 어려움.
아예 프로그래밍 언어를 새로 만듦
-> C언어(시스템 sw 만드는 데에 현재에도 사용. 기계어와 유사. 기계를 직접 다루는 운영체제를 프로그래밍하기에 상당히 좋은 언어).
초창기에는 소스코드 오픈.
학교에서 운영체제 공부할 때 좋음.
높은 이식성(portability : 기계어가 전혀 다른 컴퓨터에 이식하기 쉬움. 컴퓨터에서 다시 컴파일을 하면 됨.)
커널을 작게 만들어 놓음.
프로그램 개발에 용이
다양한 버전이 있음. (System V, FreeBSD, Solaris, Linux : 오픈 소스 정신, 누구나 자유롭게 사용할 수 있음.)
서버에 접속해서 여러명이 사용할 수 있을뿐더러 개인도 설치해서 사용하기 좋은 컴퓨터.
- DOS
PC가 용량이 작고 단일 프로그램만 지원.
단일 작업용 운영체제. (메모리를 640KB만 지원하게끔 함. 하드웨어 발전속도가 빨라지면서 쓸 수 없게 됨.)
- MS Windows
개인용 컴퓨터 PC를 위해 만들어짐.
초창기에는 단일 사용자 단일 운영체제 목적.
MS DOS 소스코드 오픈하지 않음.
불안정성 (초창기의 경우, 지금에는 불안전하지는 않음. )
운영체제의 구조
각 자원에 관련한 이슈 ( 어떻게 하면 효율적으로 활용할 것인가?)
- CPU : 어떤 프로그램에게 CPU를 할당하나? -> CPU 스케쥴링
(CPU 스케줄링 : 작업들이 CPU를 혼자 쓰려고 한다면 자원을 효율적으로 활용할 수 없음. 짧은 시간 간격으로 주고 뺏고하는 방법 활용. 이론적으로는 CPU를 짧게 활용할 프로그램에게 주는 것이 좋다. -> 결국에는 CPU를 짧은 간격으로 주고 뺏는 방법으로 변화)
일상적인 스케쥴링은 먼저 온 것을 먼저 처리.
BUT 효율적이지 않음. (천문학적인 시간 차가 발생하기 때문)
시간차이를 완충해주면서 주어진 자원의 특성을 최대한 활용하는 관리방식 필요.
- 메모리 : 한정된 메모리를 어떻게 쪼개어 쓰는가? -> 메모리 관리
메모리를 분배하는 이슈에서 프로그램들이 점점 많아지면 각 프로그램당 메모리 작아짐.
-> 원활하게 실행되지 않음.
-> 메모리에 필요한 프로그램을 동시에 올려놓는 것 보다는 필요한 메모리 용량을 프로그램 하나가 메모리를 줄 수 있도록 지원.
=> 워킹셋 (특정 프로그램에게 몰아줌.)
- 디스크 : 디스크에 파일을 어떻게 보관하는가? -> 파일 관리
조각/연속적으로 관리하는 방법.
디스크의 특성에 맞게 파일을 관리. 디스크도 스케줄링이 필요.
디스크에 들어온 요청을 계속 보낼 때 먼저 들어온 순서로 해결할 수 있음.
가까운 요청이 있다면 나중에 들어왔더라도 순서를 바꿔서 디스크 head의 이동을 줄임.
-> 전체적인 성능 증가.
(엘리베이터 스케쥴링과 유사)
- 각각 다른 입출력장치와 컴퓨터 간에 어떻게 정보를 주고 받는가? -> 입출력 관리
인터럽트에 기반하여 관리.
CPU는 빠르기에 자기 일을 하고 있음, 그러다가 i/o장치가 보고해야할 일이 있다면 인터럽트를 걸음.
CPU는 다음 작업을 하기 전에 요청한 것을 해결. 최대한 방해받지 않도록 함.
'CS > OS' 카테고리의 다른 글
[운영체제] Process 3 (0) | 2022.01.24 |
---|---|
[운영체제] Process 2 (0) | 2022.01.24 |
[운영체제] Process 1 (0) | 2022.01.20 |
[운영체제] System Structure & Program Execution 1 (0) | 2022.01.13 |
[운영체제] 2. Introduction to Operating Systems (1) (0) | 2022.01.07 |