본문 바로가기

Dev.Basic/운영체제

[OS] 1. Introduction to Operating System

Chapter 1. Introduction to Operating System


운영체제란 무엇인가?

운영체제란 컴퓨터 하드웨어 바로 윗단에 설치되는 소프트웨어이다. 좁은 의미에서는 커널을 의미한다. 커널이란 운영체제의 핵심 부분으로 메모리에 상주하는 부분이다. 여기서 메모리란 주기억장치 상의 Main Memory를 의미한다. 넓은 의미에서는 커널 뿐만 아니라 주변 시스템 유틸리티를 포함한 개념으로 말할 수 있다. 메모리에 상주하지 않고 독립적으로 실행되고 종료될 수 있는 프로그램들을 말한다.


운영체제란 왜 필요한 것인가? 존재의 목적은 무엇인가?

일반 사용자들이 컴퓨터란 기계를 사용할 때, 하드웨어적인 요소를 모두 고려하면서 사용하게 된다면, 전문화된 고도의 지식을 필요로 할 것이다. 그러나 이 운영체제가 하드웨어와 일반 사용자들 간에 중개자 역할을 하여 그 사용을 돕고, 하드웨어 관리를 돕는다. 구체적으로 살펴보자.



하드웨어 측면에서의 운영체제의 역할

컴퓨터 시스템 자원, 리소스를 효율적으로 관리한다.

컴퓨터의 자원은 한정되어 있다. 여기에서의 자원이란 CPU를 의미한다. 10년 후 지구에서 생산되는 원유가 얼마 남지 않았고 매우 한정적이라고 가정하자. 그렇다면 이 세계는 원유를 대체할만한 자원을 개발하기 전까지 그 원유를 필요한 곳에만 효율적으로 사용해야 할 것이다. 이처럼, 운영체제도 한정되어 있는 CPU자원을 사용자가 컴퓨터를 이용하는데 있어서 가장 효율적으로 사용할 수 있도록 돕는다. 돕는 정도가 아니라 맡아서 수행한다.


컴퓨터 시스템 자원을 형평성 있게 분배해야 한다.

실행되는 프로그램들도 어느 한 쪽에만 자원이 제공되면 안된다. 원유가 어느 한 나라에만 집중적으로 공급되면 다른 나라에서 반발이 일어날 것이다. 이와 마찬가지로 실행되고 있는 프로그램에게 공평하게 CPU자원들이 분배되어야 한다. 운영체제는 이 CPU자원 뿐만 아니라 다른 소프트웨어에 대한 지원도 관리한다.



사용자 측면에서의 운영체제의 역할

실행되고 있는 프로그램 중 어떤 것을 보여줘야 하고 사용자의 요청에 맞는 화면을 보여준다.

즉, 컴퓨터라는 기계를 사용하는데 있어서 적절한 인터페이스를 제공하는 것이다. MicroSoft에서 GUI(Graffic User Interface)를 제공한 것과 일관된 이야기이다. 그리고 사용자가 여러 프로그램을 동시에 실행시켰을 때, 그 프로그램들이 동시에 수행되는 것과 같은 느낌을 제공하는 역할을 한다.




운영체제에는 어떠한 것들이 있는가?

여러 가지 기준에 의해서 운영체제를 분류할 수 있다.

동시 작업이 가능한지 여부에 따른 분류

Single tasking / Multi tasking

동시 접속이 가능한지 여부에 따른 분류

Single User / Multi User

처리 방식에 따른 분류

일괄처리(batch processing) / 시분할 처리(time sharing) / 실시간 처리(real time)




운영체제가 역할을 수행하는데 있어서 구체적으로 하는 일은 무엇인가?

CPU Scheduling

어떤 Task에, 어떤 Process에, 즉 실행되고 있는 프로그램 중 어떤 프로그램에게 CPU를 할당해줄까를 고민하고, 어느 정도의 시간 동안 할당해줄까를 고민한다. 그것을 스케줄링이라고 한다. 일상적인 삶 속에서는 먼저 줄을 서서 기다리고 있으면 먼저 일 처리를 할 수 있다. 하지만 컴퓨터에서는 다르다. 먼저 요청했다고 해서 먼저 자원을 할당해주는 것이 아니다. 그 작업이 얼마나 걸리는 작업인지, 그 작업이 어느 정도의 중요성을 갖고 있는지를 판단해서 CPU를 할당해준다. 이러한 스케줄링에는 여러 가지의 기법들이 존재한다.


메모리 관리

메모리 공간은 CPU자원과 마찬가지로 한정되어 있다. RAM을 무한의 공간으로는 사용할 수 없다는 말이다. 하지만 일단 운영체제가 올라가야 하는 공간이며, 사용자는 동시에 여러 프로그램을 실행시켜야 한다. 각각의 프로그램마다 필요한 메모리의 용량이 다르며, 할당하고 나서 그 프로그램이 종료되면 할당되었던 메모리 공간을 회수해아 한다.

이렇게 여러 가지 요소들이 복합적으로 작용하는 문제인 것이다. 여기에 한 가지 요소가 더 추가되자면, 이미 메모리에 공간이 없는데, 프로그램이 하나가 더 메모리에 올라와야 하는 경우에는 이미 메모리에 올라와 있던 프로그램 중 어떠한 것들을 메모리에서 내려놓아야 하는지도 판단해야 한다. 각각의 상황에 맞는 메모리를 할당해주는 기능을 수행하는 것이다.


디스크 관리

디스크의 용량도 한정적이다. 컴퓨터 자원들은 한정적일 수 밖에 없다. 그렇다면 사용자가 필요로 하는 파일들을 어떻게 보관할 지 결정해야 한다. 최대한의 효율을 낼 수 있는 방법을 고안해야하며, 그렇다고해서 효율성만을 따지다가는 많은 양의 파일을 저장할 수 없게 될지도 모르는 일이다.

연속적인 공간에 저장하여 파일을 찾기 쉽게 저장할 것인지 많은 양의 파일을 저장하기 위해서 파일을 조각조각 잘라 여기 저기에 저장할 것인지 판단하는 것이다. 파일을 읽어올 때가 컴퓨터의 성능과 직결되는 부분이기에 이 부분이 가장 중요하다고 할 수 있다.


디스크에서 파일을 읽어올 때는 디스크에 있는 헤더라는 녀석이 해당 파일을 찾아 읽어오는 방식을 취한다. 이 과정은 엘레베이터의 과정과 비슷하다. 100층에서 1층으로 내려가는 경우에 88층에서의 요청이 들어오면 1층으로 가는 도중에 88층에 잠깐 멈춘다. 이것과 마찬가지로 디스크 헤더도 읽으려고 해당 파일의 위치로 가는 도중 또 한 번에 파일 리딩 요청이 들어왔는데 그 요청이 가는 길목이면 그 요청부터 수행한다. 최소한의 움직임으로 최대한의 효율을 내기 위한 방법을 생각하는 것이다.


입출력 관리

입출력이란 정말 여러 가지 요소들이 존재한다. 키보드도 입출력 장치 중 하나이고, 마우스, 그리고 모니터 까지 우리가 접하고 있는 대부분의 장치가 입출력 장치이다. 이 I/O 디바이스들은 CPU에 비해 매우 느리다. 그래서 이 디바이스들과 컴퓨터가 어떠한 방식으로 정보를 주고 받는지가 컴퓨터의 성능과 직결되게 된다. I/O 디바이스들은 각각 I/O device controller라는 독자적인 작은 CPU를 갖고 있으며, Interrupt라는 요소를 중심으로 컴퓨터와 정보를 주고 받는다.


프로세스 관리

프로세스란 현재 실행중인 프로그램을 말한다. 위에서 말한 모든 관리의 종합 선물 세트와 같으므로, 후에 구체적으로 다루기로 한다.




Chapter 1 끝.

이 포스팅은 이화여대 반효경 교수님 강의를 듣고 요약한 내용을 담고 있습니다.