[운영체제] 2. Introduction to Operating Systems (2)

2022. 1. 7. 17:01CS/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