본문 바로가기
운영체제

운영체제 4장 - 프로세스 관리(1) -

by ChocoPeanut 2017. 4. 16.

운영체제 4

- 프로세스 관리(1) -

 

운영체제가 하는 역할은 매우 많다. 하지만 프로세스 관리는 그 역할 중 가장 중요한 역할이라고 할 수 있다. 그러면 프로세스에 대해 먼저 알아보자.


프로세스는 실행 중인 프로그램이다. 하드디스크에 있는 프로그램이 메인 메모리로 적재되어 있을 때 프로세스라고 부른다. 프로세스는 다섯 가지의 상태 중 하나의 상태에 존재한다. 메인 메모리에 올라오는 상태인 new, CPU 할당을 받는 것을 기다리는 ready, CPU가 할당되어 작업을 수행 중인 running, I/O와 같은 CPU 외의 할당을 받아 기다리는 waiting, 이러한 모든 작업이 끝날 경우 terminated라는 상태에 존재하게 된다.

이러한 상태를 나타내기 위해서는 프로세스에 대한 모든 정보가 저장되어 있는 곳이 필요한데 그것이 PCB(Process Control Block)이다. PCB는 각 프로세스마다 하나 씩 존재하며 프로세스 상태, PC, MMU 정보, CPU time 등 프로세스에 관련된 모든 사항을 기록하게 된다.



프로세스는 줄을 서야한다.



메인 메모리에는 많은 프로세스들이 존재하게 된다. 또한 하드디스크에는 더 많은 프로그램들이 존재하게 된다. 하지만 할당할 수 있는 CPU는 하나이고 메인 메모리의 공간에도 한계가 존재한다. 따라서 프로세스들이 수행하기 위해서는 줄을 서서 기다릴 필요가 있다.


프로세스가 기다리는 줄에는 세 가지의 종류가 있다.


프로그램이 프로세스로 되기 위해서는 메인 메모리로 올라가야한다. 하지만 메인 메모리에는 공간이 한정되어 있어 메인 메모리의 적당한 공간이 없을 경우 줄을 기다려야한다. 이러한 경우를 Job Queue라는 공간에서 줄을 선다. Job QueueJob scheduler에 의해서 관리가 된다. Job schedulerLong-term scheduler이라고도 불리는데 다른 프로세스가 모든 작업을 끝낼 때까지 기다려야하므로 기다리는 시간이 상대적으로 오래 걸리기 때문이다.


Ready 상태에 있는 프로세스는 CPU할당을 받기 위해 기다리고 있는데 이 또한 줄을 서는 것과 같다. 이 줄은 Ready Queue라고 불리며 CPU scheduler에 의해 관리된다. 위의 Job scheduler와 달리 Short-term scheduler라고 불리는데 CPU 할당은 프로세스가 모든 작업을 끝내는 것보다 상대적으로 적은 시간이 소요되기 때문에 이러한 이름을 붙인다.


하드디스크나 I/O의 할당을 받기 위해서도 프로세스는 기다리는데 그 때는 Device Queue를 이용한다. Device scheduler에 의해 제어가 된다.

위의 모든 scheduler는 운영체제에 존재하며 각 Queues의 순서를 관리하는 역할을 한다.


 

이번에는 Multiprogramming에 대해 소개를 보려한다. 앞 장에서도 설명한 적이 있는 다중프로세스를 활용하는 다중 프로그래밍 시스템이다. 메인 메모리에 여러 가지 프로세스를 올려 작업을 처리할 수 있게 해주는 시스템이다. 프로세스의 종류 중에는 I/O와 같이 Device를 주로 사용하는 프로세스가 있을 수 있고 CPU를 주로 사용하는 프로세스가 있을 수 있다. 그런데 메인 메모리로 올라오는 프로세스의 종료가 한 쪽으로 치우친다면 프로세스를 처리하는데 사용되는 시간이 매우 오래 걸리게 될 것이다. 그래서 Job scheduler에서는 두 종류의 프로세스를 적절히 조화를 시켜 메인 메모리에 올린다

다중 프로그래밍 시스템에서 가장 중요한 작업은 메모리에 있는 안 쓰는 프로세스는 하드디스크로 보내고 다시 사용하는 프로그램은 적절하게 메인 메모리로 올리는 작업을 진행하여야 한다. 이런 작동을 Swapping이라고 한다. 이런 작동을 하기 위해서는 적절한 문맥전환(Context switching)이 필수적이다. 그런 역할을 하는 장치들은 SchedulerDispatcher가 있다. Scheduler는 위에 설명하였듯이 선택을 하는 존재이다. 어떤 프로세스가 적절한지에 대한 선택을 Scheduler가 진행하며 그에 대한 실행, 할당은 Dispatcher가 진행하게 된다.