on
운영체제 - 6
KOCW 운영체제 6강
양희재 교수님 강의를 듣고 쓴 글입니다.
Process Management
CPU를 어떻게 하면 각 process에게 효과적으로 나눠줄 수 있는가?
- process : program in execution (== task, job)
-
New : Storage(HDD, SSD)의 program이 main memory로 처음 loading된 상태.
-
Ready : ‘New’에 loading된 program이 모든 초기화를 끝내고 CPU가 실행시킬 준비가 됨.
-
Running : CPU가 실제로 program(process)을 실행하고 있는 상태.
-
상황1 : 만약 여기서 process1이 프린터기를 사용하고 싶다면?
-
CPU는 더이상 이 process1를 running할 필요가 없어짐. 따라서 현재 process1는 ‘Waiting’ 상태로 간다. 이 때 프린트 시작.(I/O Queue에 아무것도 없었다고 가정)
-
Mulitprogramming System이므로 CPU는 그 다음 process2를 ‘Running’.
-
프린트가 끝나면 다시 process1는 ‘Ready’상태가 된다.
→ 프린트가 끝났으니 다시 CPU의 서비스를 받을 준비를 하는 것이다
-
-
-
Terminated : process 종료.
-
Time expired : time-sharing System에서는 일정시간이 지나면 강제로 switching하기 때문에 해당 루트가 있다.
→ multiprogramming System에서는 process가 CPU를 사용 하다가 I/O 장치 등 CPU를 필요로 하지 않을 때 다른 process가 CPU를 사용하게 switching을 시켜 새로운 작업을 수행하게 해 CPU의 효율을 극대화한다.
PCB(Process Control Block)
process에 대한 모든 정보가 들어있다. process당 1개씩 할당된다. OS영역 안의 process management 안에 있다.
- process state : process가 어떤 상태(New, Ready, Waiting…)인지에 대한 정보.
- pc, register : waiting or time expired 돼서 CPU가 다른 process에 가게된 후, 다시 돌아왔을 때 이전 진행상태로 복귀하기 위함.
- MMU Info : 여기에 적힌 값들로 MMU의 base, limit 값 바꿔준다.
- CPU Time : 한 process가 CPU를 너무 많이 사용하는 것을 방지하기 위해서 각 process마다 CPU 점유율을 기록한다. (CPU Protection)
- PID : process ID
- list of open files : process가 Storage(HDD, SSD)의 file을 열어서 사용할 수도 있다. 어떤 file을 사용하고 있는지에 대한 정보를 갖고 있다.
Queue, Schedular
위에서 process의 state에 대해서 배웠다. 그 그림을 아래와 같이 확장시킬 수 있다.
- Job Queue : 사실 Storage의 program들은 바로 main memory로 loading되지 못한다. Job Queue에서 대기하다가 main memory에 loading된다. loading되는 순서는 OS의 Job Schedular가 정해준다.
- Ready Queue : CPU로 실행시킬 process가 대기하는 곳. 어떤 process를 실행시킬지에 대한 순서는 OS의 CPU Schedular가 관리한다.
- Device Queue : Device에 접근하게 될 때 이전 process가 사용중이라면 대기하는 곳. OS의 Device Schedular가 관리한다.
main memory의 공간은 Storage에 비해서 작은데 마구잡이로 main memory에 program을 loading했다가는 memory의 크기를 넘어갈 것이다. Queue가 존재하는 이유는 어떤 program이 loading돼야 할지를 정해서 memory공간을 관리해야 하기 때문이다.
Multiprogramming System에서는 main memory에 여러개의 program을 load하기 때문에 이러한 Queue가 필요한 것이다.
- Job Schedular : long-term. 굉장히 더디게 발생한다. 왜냐하면 main memory가 비워져야(process 하나가 완전히 끝나야) 발생하기 때문이다.
- CPU Schedular : short-term. 굉장히 자주 발생한다. Time-sharing system, multiprogramming system에서 CPU를 효율적으로 쓰기 위해 process가 CPU를 안쓰게 되는 순간 다른 process에게 CPU resource를 할당하거나 모든 process에게 균등하게 CPU resource를 배분해야하기 때문이다.
I/O, CPU Bounded Process
- I/O Bounded Process : process가 주로 하는 일이 I/O를 사용하는 process. Ex) word, hwp
- CPU Bounded Process : process가 주로 하는 일이 CPU를 사용하는 process. Ex) 일기예보 계산
하나의 bounded process종류만 main memory에 loading하게 되면 CPU는 바쁜데 I/O는 아무일 안하거나 그 반대의 경우가 나올 수 있다. HW resource를 효율적으로 못 쓰는 것이기 때문에 Job Schedular는 main memory에 loading할 때 위 2개의 process를 적절히 섞어주는게 중요하다.
Medium-term Schedular
Time-sharing system : 각 process에게 균등하게 CPU time을 주는 것.
상황 : 서버컴퓨터 1대에 A, B, C, D, E 총 5명의 사용자가 접속하여 사용 중.
근데 만약에 B라는 사용자가 쉬러 가느라 컴퓨터를 사용하지 않는다면 어떻게 될까? Time-sharing system에서는 모든 process에게 균등하게 CPU time을 주는데 현재 B는 쉬러갔지만, B가 사용하는 process는 main memory에 존재하기 때문에 그대로 CPU time을 계속 받게 된다. → CPU resource를 비효율적으로 사용하게 됨.
따라서 B가 쓰는 process를 swap out하여 CPU time을 다른 사용자들에게 더 할당해주거나, 다른 process를 main memory에 loading할 수 있다.
- swapping
- swap out : main memory에 있는데 잘 안쓰이는 process를 Storage로 쫓아내는 것.
- swap in : storage로 간 process를 다시 main memory로 loading하는 것.
Long-term보다는 자주 일어나고, short-term보다는 덜 일어나기 때문에 medium-term schedular이다.