[운영체제] 프로세스 관리

yeonjkim·2021년 11월 9일
0

운영체제

목록 보기
6/11

프로세스 관리

운영체제는 자원을 효율적으로 할당해 주는 역할을 한다. 이를 위해서는 각 프로그램이 메모리의 어디에 적재되는지, 어떤 프로세스가 먼저 실행되어야 하는지의 관리가 필요하다. 오늘은 이 프로세스 관리에 대해 알아보자.

프로세스 vs 프로그램

프로세스 관리에 대해 알아보기 위해서는 먼저 프로세스와 프로그램의 차이에 대해 알아야 한다.

프로그램 : 하드디스크에 저장된 명령어들의 집합. 프로그램의 상태(메모리에 적재되지 않은 상태)에서는 아무 일도 수행하지 않는다.

프로세스 : 프로그램이 메모리에 적재된 상태. 즉 프로세스는 프로그램의 인스턴스라고도 할 수 있다.

프로세스(process)는 job, task라고도 불리며 실행 중인 프로그램이라고도 한다. process의 code나 data, stack, program counter, register 등의 값이 프로세스 실행 중에 계속 바뀌며 한 컴퓨터 내에서 여러 프로세스가 돌아갈 수 있다.

한 컴퓨터 내에 여러 프로세스가 돌아가는 것을 멀티프로그래밍(Multi Programming, 뒤에 설명)이라고 하며, cpu 효율을 높이기 위해 고안되었다.

프로세스는 여러 상태를 가질 수 있으며 상태의 종류는 다음과 같다.

<프로세스의 상태>

  • new : program이 메인 메모리로 적재된 상태
  • ready : process가 실행될 모든 준비가 끝난 상태
  • running : cpu가 실제로 process를 실행한 상태
  • waiting : process가 대기하는 상태. process에 입출력 등의 명령이 있으면 이 process는 입출력이 동작하는 동안 waiting함.
  • terminated : process가 종료된 상태

<프로세스의 상태 천이도>

(1) 프로그램이 메모리에 적재되어 프로세스가 생성(new)되었다.
(2) 프로세스가 실행될 모든 준비를 마쳤다(ready).
(3) cpu가 실제로 process를 실행하였다(run). 이 과정에서 어떤 프로세스를 실행할 것인지 결정하는 dispatch가 동작한다(뒤에 설명).
(4) process에서 입출력 명령이 있어 입출력이 동작하는 동안 process는 대기한다(waiting).
(5) 입출력이 끝나 process가 cpu의 서비스를 받을 준비를 한다(waiting). 이 과정은 wait하다가 일어난 것이기 때문에 wake up과정이라고 불린다.
(6) 다시 cpu가 실제로 process를 실행한다(run). 이 과정에서도 dispatch가 수행된다.
(7) 만약 이 system이 Time Sharing System이고, 이 프로세스가 cpu 시간을 모두 소진했다면 다시 준비 상태로 올 수 있다.
(8) run의 상태에서 프로세스의 모든 명령어가 실행되었다면 이제 프로세스는 종료된다.(exit)

PCB

프로세스에 관한 정보를 나타내는 자료 구조에는 PCB가 있다.

PCB(Process Control Block, 프로세스 제어 블록) : 프로세스에 대한 모든 정보를 블럭 속에 저장하고 있으며, 한 개의 프로세스에 대해 한 개의 PCB가 배정된다.

<PCB 내부의 정보>

  • process state(running, ready, waiting, ...), pc, registers, MMU info(base, limit), CPU time, process id, list of open files, ...

Queue

프로그램의 메모리 적재 과정과 실행 등에서 queue라는 버퍼를 이용한다. 용량의 한계와 성능의 향상 때문에 queue를 이용하는데, 이 queue에 대해 알아보자.

<Queue의 종류>

1) Job Queue
job queue는 하드 디스크에서 메모리로 프로그램이 적재될 때 바로 적재되지 못하기 때문에 queue에 잠시 대기하는 공간을 말한다. 이는 프로그램은 많으나 메인 메모리의 용량이 작기 때문에 모든 프로그램이 한번에 메인 메모리에 적재되지 못하고 순서를 기다려야 하는 것이다.

이 job queue에 올라온 job들은 순서를 기다리며 메인 메모리에 올라올 때까지 대기한다. 보통 queue라면 First In First Out이라고 해서 먼저 들어간 프로그램이 먼저 적재되지만, 이 job queue에서는 job scheduler(=long term scheduler)를 통해 어떤 job을 먼저 적재할 것인지 판단한다.

< job queue가 long term scheduler인 이유>

일어나는 빈도가 적기 때문. 메모리로 프로그램이 적재되려면 메모리에 빈 공간이 있어야 하기 때문에 하나의 프로세스가 종료되어야 비로소 일어날 수 있다. 따라서 long term.

2) Ready Queue
Ready Queue는 cpu 서비스를 받기 위해 프로세스가 대기하는 공간을 말한다. cpu 개수의 한계 때문에 메모리로 올라온 모든 프로세스가 cpu의 서비스를 받을 수 없다. 따라서 ready queue에 잠시 대기하고 cpu의 서비스를 기다리는 것이다.

이 Ready Queue또한 마찬가지로 cpu scheduler(short term scheduler)를 통해 어떤 프로세스를 먼저 cpu서비스를 받게 할 것인지 판단한다.

< Ready Queue가 short term scheduler인 이유>

일어나는 빈도가 잦다. 현대에는 하나의 컴퓨터에서 여러 프로세스를 돌리는 멀티 프로그래밍이 쓰이고 있고, Time Sharing System으로 인해 일정 시간이 지나면 cpu 서비스 받는 프로세스를 바꾼다. 이로 인해 Ready Queue의 cpu scheduler는 short term scheduler이다.

3) Device Queue
Device Queue는 입출력 서비스를 받기 위해 프로세스가 대기하는 공간을 말한다. 입출력은 시간이 오래 걸리기 때문에 입출력 명령을 호출한다고 해서 바로 받을 수 있는 것이 아니다(앞서 다른 이가 호출한 입출력 명령이 있어 겹칠 수 있음). 따라서 Device Queue를 통해 입출력을 위한 공간을 마련하였다.

또, Device Queue는 Device Scheduler를 통해 어떤 프로세스가 먼저 입출력 서비스를 받게 할 것인지를 스케줄링한다.

이러한 각 큐에는 PCB가 저장되어 있다.

Multi Programming

multi programming : 하나의 프로세서에 여러 개의 프로그램이 동시에 실행될 수 있는 것을 말한다. 그러나 프로세서는 한번에 하나의 작업만 할 수 있기 때문에 사실 동시에 라는 말은 틀리다.
한 프로세스의 일부가 실행된 뒤 다른 프로세스의 일부가 실행되는 식으로 진행되는데 이 텀이 매우 짧아 사용자의 입장에서는 동시에 실행되는 것처럼 보이는 것이다.

1 ) degree of multi programming : memory에 process가 몇 개 올라와 있는지를 말한다
2 ) i/o bound vs cpu-bound process

  • i/o bound process는 주로 i/o작업을 하는 프로세스를 말하며, 워드 프로세스 등을 예시로 들 수 있다.

  • cpu-bound process는 주로 cpu를 사용하는 프로세스를 말하며, 일기예보 등 슈퍼컴퓨터를 사용하는 프로세스들이 여기에 속한다고 볼 수 있다.

  • job scheduler는 효율을 위해 i/o bound process와 cpu bound process를 적절히 분배해 스케줄링 해야 한다.

3) Medium-term scheduler

  • medium-term scheduler는 말 그대로 long term scheduler보다는 빈도가 잦고, short term scheduler보다는 빈도가 덜하다. 이 medium term scheduler는 프로세스들을 검사하여 장시간 이용되지 않은 프로세스들을 추출해 하드디스크로 옮기는(swap out)하는 역할을 한다.

  • 일반적으로 하드디스크는 file system과 swap device로 이루어져 있어 장시간 사용되지 않는 프로세스를 이 하드디스크로 옮기고, 이 프로세스가 나중에 사용되려고 하면 다시 메모리로 옮기는 (swap in)의 역할을 이 스케줄러가 한다.

즉 medium term scheduler는 os의 프로세스 관리부서가 프로세스를 뒤져 어떤 프로세스를 swap in하고, 어떤 프로세스를 swap out할 지 결정하는 스케줄러이다.

4) Context Switchiing (문맥 전환)

Context Switching : CPU가 process 1 돌다가 process 2로 넘어가는 것을 context switching이라고 한다.

  • scheduler : process 1개가 끝나고, 이후 어떤 프로세스를 실행할 것인지 결정.
  • dispatcher : scheduler가 선택한 process를 실행하도록 상태라 레지스터 값을 바꾼다. 이전 process의 정보를 프로세스 관리부서의 PCB 1에 저장하고, PCB 2 값을 복원한다. 즉 실행했던 프로세스 정보를 PCB에 저장, 실행할 프로세스 정보를 복원.
  • Context Switching Overhead : context switching 부담. 효율을 높이기 위해 이 overhead를 최대한 줄여야 한다.

0개의 댓글