프로세스 관리
프로그램 vs 프로세스 = task = job
프로그램은 하드 디스크에 있고 프로세스는 메모리에서 실행중인 프로그램이다.
프로세스의 상태
new -> ready <-> running -> (waitng -> ready) or terminiated
ready: 실행준비가 다 되었다, TSS의 경우 I/O를 안만나도 일정 시간이 지나면 running에서 ready로 강제로 스위칭된다.
running: CPU가 프로그램을 실행
waiting: I/O을 할 때 혹은
terminated: 프로그램 종료
PCB(Process Control Block)
다른 말로 TCB(Task Control Block)이라 하며 이 안에 프로세스에 대한 모든 정보가 있다.
일정 시간 후 다시 작업하기 위해 기록해두는 것이다.
PCB는 OS안의 프로세스 관리 부서안에 있음.
주민등록정보와 비슷하다고 생각하면 된다.
프로세스 큐
프로그램은 바로 메모리에 올라가지 못하고 큐에 저장되어 차례를 기다린다. (job queue)
메인 메모리에 올라와도 CPU 서비스를 기다린다. (ready queue)
I/O을 사용하려 해도 차례를 기다린다. 각 장치를 기다리는 큐가 존재(device queue)
그러나 terminated로 가는 것은 기다리지 않는다.
job queue에 대기한 것 중 어떤 것을 올려야 할까?
job 스케쥴링은 long term 스케쥴러이다. -> 프로세스가 끝나고 메모리가 비워져야지 결정할 수 있으므로 수 분이 걸린다.
해당 프로그램은 OS안에 코드로 들어있다.
CPU 스케쥴러는 short term 스케쥴러이다. -> 어떤 프로그램을 실행시킬지 1초에 수 십 ~ 수 백번 스위칭이 빠르게 일어나야하기 때문
device queue는 device 스케쥴러가 있으며 각 장치마다 스케쥴러가 각각 존재한다.
멀티 프로그래밍
한 메모리에 여러 프로그램을 올리는 것으로 동시에 실행하지는 않는다.
degree of multiprogramming
메인 메모리에 프로세스가 몇개 올라올 수 있나?
I/O bound process: 주로 I/O 관련 작업(입출력) ex) 워드, 한글
CPU bound process: 주로 CPU를 사용하는 작업(계산) ex) 일기예보
컴퓨터는 I/O bound, CPU bound가 골고루 되도록 job 스케쥴러가 적절하게 작업을 믹스한다.
따라서 하나가 놀지 않도록 한다.
medium-term 스케쥴러(OS가 메인메모리에서 몰아낼 프로세스를 정한다.)
자리를 비운 process의 일이 없으면 해당 프로세스를 메모리에서 쫓아낸다. 그 후, 다른 프로세스를 올리거나 기존 다른 작업에게 나눠준다. -> 이것을 swap out이라고 한다.
일반적은 하드디스크는 swap device(= backing system) + 파일 시스템으로 구성된다.
swap device로 쫓겨나고 다시 돌아오면 프로그램이 동작해야 하므로 다시 메모리를 할당해주는 것을 swap in이라 한다.
이러한 과정을 swaping이라고 한다.
또한 다시 돌아갈 때 원래의 자리로 돌아간다는 보장이 없으며(OS가 추적 및 기억) 비어있는 다른 자리로 갈 수 있다.