운영체제

운영체제 기본 6 - 프로세스 관리

hs-archive 2023. 1. 19. 21:52

http://www.kocw.net/home/search/kemView.do?kemId=978503

 

운영체제

운영체제의 정의 및 역할 등에 대해 알아보고, 운영체제의 주요 요소들, 즉 프로세스 관리, 주기억장치 관리, 파일 시스템 등에 대해 공부한다.

www.kocw.net


프로세스 관리(Process management)

프로세스 관리는 이름 그대로 프로세스에 관한 모든 것을 관리한다. 프로세스 관리가 관리하는 '프로세스', 'PCB', 'queue- scheduling', 'swapping'에 대해 배워보자.

 

프로세스(Process)

프로세스는 메모리에 올라가 실행 중인 프로그램을 뜻한다. 프로그램과 프로세스의 차이는 메모리에서 실행 중인가 hdd에서 가만히 있는 중인가의 차이다. hdd에 있는 프로그램이 메모리에 올라가서 실행되면 그것을 프로세스라고 불린다. 프로세스는 task, job이라고도 불리며 text(code) + data + stack 등을 갖는다. 프로세스는 new, ready, running waiting, terminated의 상태를 갖는다. 아래 그림을 참고하자.

프로세스 상태 천이도

 

Process Control Block(PCB)

프로세스에 대한 모든 정보, process state(new, ready, running waiting, terminated), PC(program counter), registers, MMU info, process ID, ... 등을 담고 있는 블록이다. 1개의 프로세스당 1개의 PCB가 존재한다.

PCB 예시

 

PCB는 OS 안에 있는 process management 안에 기록되어 있다. 정부가 우리의 정보(주민 등록 번호, 나이, 주소, 가족 관계 등등)를 갖고 있는 것과 비슷하다.

PCB가 저장되어 있는 위치

 

Queues(대기 줄)

queue는 대기 줄을 뜻한다. 서울에서 대구로 가는 사람이 한 명만 있다면 문제없이 갈 것이다. 하지만 서울에서 대구로 가는 사람이 백억 명이라면 분명히 어떤 방식으로든 길게 줄을 서야 할 것이다. 컴퓨터 속 다양한 길목에도 이러한 queue(대기 줄)가 있다. 컴퓨터의 queue는 크게 세 가지 Job queue, Ready queue, Device queue가 있으며 이는 아래 그림과 같다. 참고로 scheduler란 queue에 있는 녀석들 중 어느 것을 먼저 내보낼지에 관련된 일을 하는 녀석들이다. 먼저 온 것을 먼저 나가게 해 줄 수도 있도 또 다른 로직이 있을 수도 있다.

컴퓨터 속 다양한 길목에 존재하는 queue

 

 

** I/O bound process란 I/O 작업을 많이 하는 process(e.g. 워드 프로세스)를 뜻하고 CPU bound process란 CPU 작업을 많이 하는 process(e.g. 일기예보)를 뜻한다. 메모리에 I/O bound process들만 잔뜩 있으면 CPU가 놀고 반대로 CPU bound process들만 잔뜩 있으면 I/O가 논다. 따라서 Job scheduler는 I/O, CPU bound process들을 적절히 섞어서 올려주는 것이 좋다.

 

** Job scheduler는 long-term scheduler라고 부르기도 하는데, memory 속도가 CPU 속도보다 현저히 느리기 때문에 자연스럽게 Job scheduler가 호출되는 텀도 그만큼 길어지기 때문이다. 반대로 CPU scheduler는 short-term scheduler라고 부르기도 한다.

 

** medium-term scheduler라는 것도 있다. 이것은 Swapping을 뜻하는데 swapping이란 다음과 같다. 아래 그림과 같이 하나의 서버에 세 명의 유저가 접속하여 각자의 프로세스를 메모리에 올린 경우를 생각해 보자. 이때 user2가 잠시 화장실을 간다면 메모리에 올려져 있는 process2는 그 시간 동안 굳이 메모리에 올라와 있을 필요가 없다. 이때 OS는 process2를 swap device(하드디스크 안에 일정 부분을 swap device로 사용하며 backing store라고도 부른다.)로 쫓아버린다. 이처럼 PCB를 통해 process를 감시하는 OS가 오랫동안 사용되지 않는 process를 발견하여 swap device로 쫓아버리는 작업을 swap out이라고 한다. 반대로 사용자가 돌아와 process를 사용할 때 다시 메모리에 올리는데 이런 작업은 swap in이라 한다. 이렇게 사용되지 않는 process를 쫓아내고 다시 들이고 하는 작업을 통 들어 swapping이라 한다. OS는 swap out 된 프로세스를 다시 swap in 할 때 원래 본인의 자리였던 곳에 다른 프로세스가 들어서 있을 수 있으니 어디에 올릴지 계산을 해야 한다.

swapping

 

** context switching / context switching overhead

: CPU가 process1을 실행하다가 process2를 실행하려 할 때 문맥 전환(context switching)이 일어난다. 문맥 전환이란 process1의 정보를 process1의 PCB에 저장 하고 process2의 정보를 PCB에서 불러들이는 작업 등의 일 하기 전 사전 준비를 뜻한다. 문맥 전환은 전체적인 속도에 부담을 주는 작업이기 때문에 너무 빈번하게 일어나면 좋지 않다. 이러한 부담(문맥 전환의 전처리 과정에서오는 부담)을 context switching overhead라 한다. 이 오버헤드를 줄이기 위해 OS 개발자들은 해당 context switching에 관한 작업을 C가 아닌 어셈블리로 작성한다든지 하는 여러 고민이 필요하다.

 

** dispatcher

: 문맥 전환이 일어날 때 실행하던 프로세스에 관한 정보(어디까지 진행했고, 총 CPU 점유 시간은 얼마고, MMU info, ...)들을 PCB에 저장하고 다음 실행할 프로세스의 PCB를 불러와서 restore하는 일을 하는 녀석을 dispatcher라고 한다.