안녕하세요? 허니입니다. 오늘은 운영체제가 구체적으로 어떤 일들을 수행할까에 대한 내용으로 포스팅 하겠습니다. 학생이나 연구원분들에게 많은 도움이 될 것이라고 생각하며 언제든지 질문은 환영입니다.

 


오늘의 주제


 OS는 구체적으로 어떤 일들을 수행할까.

 OS의 역사

 


과연 OS는 구체적으로 어떤 일들을 수행할까.

 

OS가 수행하는 일은 프로세스 관리(Process management), 메모리 관리(Memory management), 파일 관리(File management)로 나누어 설명할 수 있다.

 

첫째, 프로세스 관리

요즘 거의 모든 개인용 컴퓨터들은 윈도우 환경에서 사용된다. 윈도우 환경에는 다양한 장점이 있겠지만 그 중 여러 창을 동시에 열어 여러 프로그램에 자유롭게 접근하여 사용할 수 있다는 것이 사용자 입장에서는 대단히 편리할 것이다. 그러나 정작 컴퓨터 내부를 살펴보면 몇 개의 창이 동시에 열렸다 하더라도 모든 작업들이 동시에 이뤄지는 건 아니다. 바로 OS가 각각의 창마다 작업 시간을 할당해주고 그 작업에 우선 순위를 매기는 것이다. 또한 대량의 처리능력을 가진 컴퓨터에 많은 사람이 접근할 수 있을 경우 OS는 제한된 CPU 시간을 사용자에게 할당하고 혼선을 피하게 하는 기능을 수행한다. A, B, C 작업이 수행될 경우 작업시간을 1초(컴퓨터에서의 1초는 어마어마하게 긴 시간이다)로 정했다고 하자. A작업이 1초 안에 완결되지 않을 경우 B, C, A의 순서로 재작업이 시작된다. 작업 시간을 얼마로 할 것인가, 작업의 우선순위를 어떤 기준으로 할 것인가는 시스템 설계자의 몫인 것이다.

 

둘째, 메모리 관리

동시에 여러 개의 프로그램이 실행되는 멀티프로그래밍 환경에서 주어진 시스템의 메모리 용량을 가장 효율적으로 사용하면서 각각의 프로세스들이 이들 메모리를 사용할 수 있도록 하는 OS의 기능을 메모리 관리라고 한다. 보다 구체적으로 설명해 보면 메모리에 저장되어 있는 프로그램을 보호하고 메모리 용량보다 큰 양을 차지하는 프로그램을 수행할 수 있도록 돕고 또한 사용자의 영역을 보호하는 역할도 한다. OS의 중요한 임무 중 하나는 자기 자신을 보호하는 일이다. OS는 자신이 차지하고 있는 메모리용량이 얼마나 되는지를 파악하고 그 영역 안에는 어떤 내용도 쓸 수 없게 함으로써 자신을 보호한다. 유사한 방법으로 OS는 다른 프로그램도 보호해준다. 어떤 프로그램이 메모리 안에 처음 저장 될 때 OS는 메모리영역을 할당하고 보호해준다. 또한 메모리 용량보다 큰 용량을 차지하는 프로그램이 수행될 경우 메모리용량에 맞는 작은 크기로 분할하여 수행한다. 사용자 서로간을 보호하는 역할도 OS가 하게 되는데 한 사용자가 다른 사용자의 프로그램이나 자료 위에 쓰지 못하도록 하고 두 사용자가 동일한 파일이나 자원을 사용하려는 갈등이 일어날 때 이를 중재하게 된다. OS는 또한 사용자간의 작업 영역을 보호해준다. 한 사용자의 프로그램이 다른 사람의 프로그램 영역과 겹치지 않도록 하는 가장 일반적인 방법은 CPU의 메모리를 몇 개의 구획으로 구분해서 한 부분씩을 각 사용자에게 할당하는 것이다. 이러한 기능들을 통틀어 바로 메모리관리라고 한다.

 

셋째, 파일 관리

시스템에는 엄청나게 많은 수의 파일이 존재 한다. 그리고 그러한 파일인 하드 디스크나 CD-ROM에는 각기 매체(media)의 특성에 맞도록 저장되어 있다. 하드 디스크의 경우는 블록 단위로 나뉘어 지고, 특정 블록에 디스크 파티션의 정보와 파일의 정보들이 저장되어 있으며 나머지 블록에는 데이터 등이 저장된다. 하지만 응용 프로그램의 입장에서 파일을 사용하고자 할 때에는 장치에 저장되어 있는 파일의 정보를 일일이 알아서 사용 하기에는 곤란하다. 예를 들어 워드 프로그램에서 문서 파일을 읽어 오고자 할 때 응용 프로그램에서 직접 디스크 드라이버에게 특정 디스크의 어느 블록을 읽어오도록 하기에는 응용 프로그램에서 관리해야 할 일들이 상당히 많아 질 것이다. OS에서는 이러한 일련의 작업들을 대신 수행해 준다. 즉, 경로명을 포함한 파일 이름과 실제 디스크에 저장된 정보와 매핑(mapping)한 정보를 유지하여 응용프로그램이 요청하면 OS에서 직접 장치 드라이버를 통해서 파일에 대한 작업을 수행하게 된다. 그리고 멀티 프로세스 환경이 되어 가면서 파일에 대한 작업이 반드시 하나의 프로세스에서 행해지지는 않는다. 가령 하나의 파일을 여러 개의 프로세스에서 사용을 할 경우 파일 정보에 대한 동기화 내지는 하나의 파일을 하나의 프로세스만이 접근 할 수 있도록 하는 기능 등을 OS에서 제공해야 할 필요성이 대두되었다.


이 밖에도 많은 기능을 OS가 제공하지만 자세한 내용은 이 교제의 뒤 부분에 나올 파일 시스템에서 좀더 자세히 살펴 보도록 하자. 지금까지 간략하게 OS의 역할을 살펴보았다. 얼핏 보아도 OS는 잠시 한숨 돌릴 틈도 없을 듯 하다. 이러한 OS의 역할을 분석해 볼 때 그것의 특성은 몇 가지로 요약될 수 있다. 그것은 타 프로그램과의 차별적 요소이기도 하다.

 

첫째, OS는 항상 동작 중에 있다.

컴퓨터의 전기 스위치를 올렸을 때 컴퓨터는 저절로 켜지는 것이 결코 아니다. OS에 의해 컴퓨터 초기 화면이 뜨는 것이다. 컴퓨터 시스템을 종료할 때도 마찬가지이다. 누구나 처음 컴퓨터를 사용할 때 자칫 컴퓨터 전원스위치를 눌러 컴퓨터를 끈 경험이 있을 것이다. 그것을 누군가 옆에서 보았다면 분명 야단을 맞았을 것이다. 컴퓨터를 끌 때도 사용자는 OS에게 통보를 해 줘야 한다. 그래야만 OS는 운영되었던 프로그램을 정리할 시간을 갖는 것이다. 디스크를 읽고 있는 중간에 전원스위치를 껐다면 디스크 표면에 손상을 입기도 한다. 이와 같이 OS는 컴퓨터 전원이 들어왔을 때부터 프로그램이 수행되고 꺼질 때까지 항상 작동 중이다.

 

둘째, OS 통제기능으로서 항상 자원에 대한 감시 활동을 한다.

OS는 자신의 상위 계층에서 수행되고 있는 응용프로그램이 실행하기 위한 서비스(service)와 응용프로그램이 사용하고 있는 자원에 대한 보호(protection)을 제공하여 응용프로그램이 실행하기 위한 최적의 조건을 제공하고자 한다.

 

마지막으로 하드웨어에 대한 제어 기능을 갖고 있다.

 


OS의 역사

 

1. 사람이 OS의 역할을 대신 수행

 컴퓨터라는 것이 만들어졌을 당시, 프로그램을 만들기 위해서는 먼저 프로그램을 기계어로 작성하고 입력하고 실행하며 테스트하는 작업을 반복적으로 하였다. 프로그램이 필요로 하는 모든 기능들을 프로그래머가 책임져야 했기 때문에 엄청난 노력과 시간을 필요로 하였다. 그렇기 때문에 이런 어려움을 극복하기 위해 공통된 기능과 자원을 제공하여 주는 운영체제가 만들어진 것이다. (아마도 이 시대 프로그래머들은 육체노동에 가까운 작업을 했을 것 같다.) 컴퓨터의 크기 또한 현재와는 비교도 되지 않을 만큼 어마어마하게 컸었다. 1946년 미국 펜실베니아 대학에서 연구 개발된 ENIAC는 19,000여 개의 진공관이 사용되었고 무게도 30톤 이상이나 되는 기계였다.

 

그림 4 당시의 컴퓨터 모습

 

2. Automatic job sequencing

이것은 펀치카드로 작성된 프로그램을 테이프에 저장시킨 후 그것을 모아서 수행시키는 것이다. (서울에 한 동사무소에서 사무를 볼 때 각 지역마다 처리될 서류를 모아 한꺼번에 보낸다면 일을 처리하는 것이 휠씬 수월할 것이다.)

 이러한 방법은 스풀링(Spooling)을 통해 가능하다. 아마도 누구나 프린터 작업을 하는 동안 더 이상 아무런 작업을 할 수 없는 컴퓨터를 사용해 봤을 것이다. 글 문서작업을 하고 있었다면 더 이상 커서가 나타나지 조차 않았을 것이다. 조금 느린 프린터가 사용됐다면 과장을 조금 섞어 문서작업시간보다 프린터 작업이 더 길게 느껴졌을 지도 모른다. 그렇다면 출력이 이뤄지는 동안 CPU는 출력을 위한 작업을 계속해서 하고 있을까? 그것은 아니다. 단순히 CPU는 하나의 통과의례 절차처럼 존재하는 것이다. 이렇듯 긴 프린터 작업 시간 동안 CPU가 본연의 업무에 집중할 수 없음을 느낀 시스템 설계자들은 스풀링 방식을 고안해내게 되었다. 스풀링의 장점은 A작업의 입력이나 출력을 수행시킬 때 B작업은 계산을 수행할 수 있다는 것이다. 보통의 컴퓨터가 프린터 작업을 하는 도중에도 한글문서작업이나 또는 통신 등의 작업들을 동시에 수행 가능한 것은 스풀링의 기능 덕분이다. 출력을 위한 정보들이 디스크에 차곡차곡 정리되어 있는 것이다. 카드 입력 역시 디스크에 정리되어 CPU의 여유시간 동안 처리되게 되는 것이다.  이때 OS는 작업을 하나씩 차례로 수행(Batch처리) 시키며 프로그램을 테이프에 가득 채워 넣는 기능을 한다.

 

그림 5 스풀링(Spooling) 구조 시스템

 

그림 6 스풀링(Spooling) 구조가 아닌 시스템

 

3. Multiprogramming

멀티프로그래밍은 메모리상에 여러 프로그램을 놓고 수행하는 기법이다. 이 방법에 대해 어떤 이는 이런 의문을 갖게 될지도 모르겠다. “메모리상에 단 하나의 프로그램만 올라와 있다면 무엇이 문제가 될까? 어차피 CPU에서 처리되는 것은 하나의 프로그램인데?“

예를 들어 지은이가 몸이 아파 병원에 갔다고 생각해 보자. 지은이는 접수를 끝내고 순서를 기다릴 것이다. 간호사가 지은이의 이름을 호명했다 하더라도 바로 의사 앞으로 갈 수는 없다. 진찰실 바로 곁에는 나보다 먼저 호명된 환자들이 2-3명 정도는 않아 순서를 기다릴 것이다. 간호사는 분명 이렇게 말할 것이다. ‘이곳에 앉아 있다가 다시 이름을 부르면 선생님께 가세요.’라고. 그렇다면 간호사는 왜 2번이나 환자를 호명하는 불편함을 겪어야 할까?

그것은 바로 의사가 보다 많은 환자를 진료할 수 있도록 하기 위해서다. 한 환자가 진료를 끝내고 나간 후(출력) 다음 환자를 처음 호명한다면 그가 의사에게 가기까지는(INPUT) 단 1분이라도 시간이 더 걸릴 것이다. 보다 많은 환자(프로그램)를 진찰해야 하는 의사(CPU)에겐 그 1분의 시간조차 대단한 낭비일 수밖에 없다. 이렇듯 CPU가 잠시의 쉼 없이 100% 활용되는 것이 멀티프로그래밍의 목표인 것이다. 다시 말해 이는 컴퓨터의 느린 입력/출력 속도와 빠른 처리속도간에 차이를 이용해 입력/출력이 끝나기를 기다리지 않고 다른 프로그램을 수행하게 된다. 이를 위해 입력/출력 채널이 만들어져 CPU의 입력/출력 작업을 대신 수행하는 것이다. 사용자의 입장에서는 마치 동시에 여러 프로그램이 수행되는 것처럼 느껴지지만 그것은 아니다. 멀티프로그래밍에서 OS는 첫 번째 프로세스가 수행되다가 여유가 생기면 몇 번째 프로세스를 수행할 것인가를 판단하고 또한 첫 번째 프로세스의 상태를 보존시킨다.

 

4. Time sharing

멀티프로그래밍을 사용하던 사람들은 하나의 긴 프로그램 처리가 CPU를 독점해서 사용하는 난감함에 부딪혔다. 이러한 독점에 대한 문제를 고민하던 시스템 설계자들은 타임쉐어링이라는 방법을 고안해내었다. 이는 하나의 프로그램이 CPU를 사용할 수 있는 시간을 고정시켜 제한된 시간을 하나의 작업이 다 쓰고 나면 다음작업을 수행하는 기법이다. 놀이동산에서 하나의 놀이기구는 사용시간이 일정하게 정해져 있다. 그것은 보다 많은 사람이 놀이기구를 이용하게 하기 위해서이다. 만약 놀이기구를 한번 이용하고 또다시 이용하고 싶다면 그 사람은 기다리는 행렬의 가장 끝으로 가서 줄을 서야 할 것이다. 이렇게 한 놀이기구에 사람마다 제한된 사용시간이 있다는 점이 타임쉐어링의 개념과 동일하다. 시분할의 목적은 모든 컴퓨터 사용자에게 공평한 서비스를 제공하기 위한 것이다. 긴 시간을 수행해야 하는 프로그램이 앞에 놓였을 때 그 작업이 끝나기를 하염없이 기다리는 것은 대단히 비효율적이다. 타임쉐어링에서는 일정한 CPU 사용시간을 정해놓고 계속해서 작업을 바꿔가며 수행하게 되는데 이러한 사용시간을 타임 퀀텀(time quantum) 또는 time slice라고 한다. 정해진 시간의 timer가 인터럽트를 걸어 다른 작업으로 전환하게 되는 것이다. 참고로 타임 쉐어링의 단점은 타임 퀀텀 내에 완성되지 못한 작업을 저장하는 오버헤드(overhead)가 커져 CPU 자원이 많이 소모되게 된다는 점이다.

 

5. Multitasking

Multitasking은 Multi-programming이나 timesharing과 유사한 의미로 받아들여지기도 한다. 그러나 또 다른 의미로는 하나의 프로그램이 자신을 복제한 sub 프로그램을 만들 수 있는 기능을 뜻하기도 한다. 자신이 필요로 하는 기능을 나누어주기 위해 sub 프로그램을 만드는 것이다. 윈도우즈 환경 내에서 여러 창을 열어 자유롭게 이동하며 다양한 프로그램을 이용해보았을 것이다. 아마도 이런 사용방법을 처음 대했을 때 누구나 ‘컴퓨터가 참 편리해졌구나’ 하고 생각했을 것이다. 바로 멀티태스킹이 개발되었기에 가능한 일인 것이었다.

 

그림 7 윈도우 프로그램 내에 다양하게 열린 창

 


요점정리

 OS가 수행하는 일

Process management: 각 프로세스의 작업 시간을 얼마로 할 것인가, 작업의 우선순위를 어떤 기준으로 할 것인가 등의 기준을 마련하는 역할이다.

Memory management: 내부 메모리에 저장되어 있는 프로그램을 보호하고 메모리 용량보다 큰 양을 차지하는 프로그램을 수행할 수 있도록 돕는 것을 말한다. 또한 사용자 서로간을 보호하는 역할도 한다.

File management: 응용 프로그램이 실행되는 것을 감시하고 입, 출력 활동을 통제하는 역할을 말한다.

 

 OS의 특성

첫째, OS는 컴퓨터 시스템에서 항상 동작 중이다.

둘째, OS 통제기능으로서 항상 감시 활동을 한다.

셋째, 하드웨어를 제어하는 기능을 갖고 있다.

 

 OS의 역사

1. 사람이 OS를 수행

컴퓨터라는 것이 만들어졌을 당시, 프로그램을 만들기 위해서는 먼저 프로그램을 기계어로 작성/입력하고 실행하며 테스트하는 작업을 반복적으로 하였다.

2. Automatic job sequencing

이것은 펀치카드로 작성된 프로그램을 테이프에 저장시킨 후 그것을 모아서 수행시키는 것이다.

3. Multiprogramming

메모리상에 여러 프로그램을 놓고 수행하는 기법이다. 이는 컴퓨터의 느린 입력/출력 속도와 빠른 처리속도간에 차이를 이용해 입력/출력이 끝나기를 기다리지 않고 다른 프로그램을 수행하게 된다.

4. Timesharing

하나의 프로그램이 CPU를 사용할 수 있는 시간을 고정시켜 제한된 시간을 하나의 작업이 다 쓰고 나면 다음작업을 수행하는 기법이다.

5. Multitasking

자신이 필요로 하는 기능을 나누어주기 위해 sub 프로그램을 만드는 것이다.



목 차

 운영체제를 시작하는 분들을 위해

 운영체제의 역사와 구체적으로 어떤 일들을 수행하나요?

 운영체제의 목표와 역할이 미래에도 계속 증대될까요?

 운영체제를 이해하기 위해 필요한 기본 개념들은 무엇인가요?

 운영체제 프로세스 생애주기(Process Lifecycle)는 무엇인가요?

 운영체제 프로세스 관리(Process Management)는 어떻게 하나요?

 운영체제 프로세스(Process)의 처리 속도는 어떻게 높일까?

 운영체제 스레드(Thread)는 무엇인가요?

 운영체제 스케줄링 (Scheduling)은 어떻게 하나요?

 운영체제 스케줄링 알고리즘의 비교 기준이 있나요?

 운영체제 프로세스 동기화가 무엇인가요?

 운영체제에서 세마포어(Semaphore)란?

 운영체제 메모리 관리(Memory Management)는 어떻게 하나요?

 운영체제 메모리 분할 방법은 어떻게 하나요?

 운영체제 가상메모리(Virtual Memory)는 무엇인가요?

 운영체제 Page in/out, Swapping 등이 Page Table Entry와 어떤 관계인가요?

 운영체제 메모리 관련해서 알아야 할 개념은 어떤것이 있나요? (TLB, Locality, Working Set, Overlay)

 운영체제 Page replacement (페이지 대체) 알고리즘이란?

 운영체제 파일시스템(File System)은 어떻게 운영되나요?

 운영체제 파일시스템 내부구조는 어떻게 되나요?

 운영체제 디스크 공간 할당(Disk Space Allocation) 알고리즘과 효과적 알고리즘의 판단 기준은?

 운영체제 파일시스템에서 접근 시간, 디스크 스케줄링을 위한 알고리즘, I/O 시스템이란?

 리눅스 인터럽트 (Interrupt)에 대해 자세히 설명해 주세요.

 인텔 구조에서 운영체제 가상 메모리 (Virtual Memory)는?

 운영체제 아키텍처의 종류는 얼마나 있나요?


+ Recent posts