프로세스 생명주기
프로세스 상태 (Status)
- 신규 (New)
- 프로세스가 막 메인메모리에 올라온 상태
- 아직 실행은 불가능
- 수용 (admit) 동작을 거쳐야 준비단계로 넘어감
- 준비 (Ready)
- 변수 초기화 등 기초 준비작업을 모두 끝내고 실행을 할 수 있는 상태
- 스케쥴러를 통해 dispatch되어야 수행상태가 됨
- 준비상태가 되는 경우
- 신규 프로세스가 수용됐을 때
- 대기 프로세스의 입출력/이벤트가 완료됐을 때
- 수행 프로세스가 중단됐을 때
- 수행 (Running)
- CPU가 실제로 프로세스를 수행하는 상태
- 선점 스케쥴링에 의해 중단되면 준비상태가 됨 (CPU 과부하)
- 입출력/이벤트가 필요하면 대기상태가 됨
- 수행이 완료되면 종료상태가 됨
- 수행상태가 되는 경우
- 준비 프로세스가 스케쥴러를 통해 발송될 때
- 대기 (Waiting)
- I/O 작업이 필요하여 I/O 작업을 수행하는 상태
- CPU는 I/O를 기다리며, 다른 프로세스를 수행함
- 대기 상태가 끝난 후 준비 상태가 되고, 잠시 후 수행 상태가 됨
- 종료 (Terminated)
- 프로세스 종료
- 사용하던 메모리 영역 해제
대기 큐 (Waiting Queue)
- Job Queue
- HDD에 있던 프로그램들이 메모리에 올라올 때, 만약 메인 메모리가 가득 찼거나 CPU가 다른 작업을 수행 중이라면 메모리에 올라오기 전에 기다리는 곳
- Ready Queue
- 메인메모리에 프로그램이 올라와도 바로 CPU의 서비스를 받을 수 있는 것이 아님
- 다른 프로그램이 수행중이면 기다리고, 해당 프로그램이 I/O를 시작하거나, 시공유시스템의 경우 기존 프로세스가 시간초과되면 실행됨
- 메모리에 올라온 프로세스들이 실행을 위해 기다리는 곳
- Device Queue
- I/O 장치를 이용하려면 기존 I/O 작업이 끝나기를 기다렸다가 밀려있던 모든 작업이 끝나야 I/O 장치를 사용할 수 있음
- 프린터큐, 마우스큐 등 각각 I/O 장치들은 각자의 대기큐를 갖고 있는데, 이 큐들을 통틀어서 Device Queue라고 함
- Terminate는 대기큐가 없음
스케쥴링 (Scheduling)
- Job Scheduler
- Job Queue의 프로그램들을 어떤 순서로 메모리에 올릴지 결정
- 이 과정은 프로그램이 새로 시작될 때, 메인메모리가 가득찬 경우 등의 상황에만 발생함
- 어쩌다 한번 발생
- Long Term Scheduler
- CPU Scheduler
- Ready Queue의 프로세스들을 어떤 순서로 서비스 할 것인지 결정
- 가장 중요한 스케쥴링
- Short Term Scheduler
- Device Scheduler
- Device Queue의 프로세스들을 어떤 순서로 I/O 장치를 이용하게 할 것인지 결정
- Disk Scheduler, Printer Scheduler, Mouse Scheduler 등 I/O, 보조기억 장치 스케줄러를 통틀어 가리킴
- 운영체제(Job Scheduler)는 I/O Bound Process와 CPU Bound Process를 적절하게 배합하여 I/O 장치와 CPU가 모두 오랫동안 쉬게하지 않아야 함
주 - 보조 교환 (Swapping)
- Swapping
- CB(Process Control Block)의 CPU Time등을 확인해서 오랫동안 동작이 없는 프로세스는 잠시 HDD로 내려놓고, 다른 프로세스를 실행하거나 기존 프로세스에 메모리를 더 할당하는 등 메모리를 더 효율적으로 활용
- Swap Out : 메모리 >> HDD
- Swap In : HDD >> 메모리
- Medium Term Scheduler
문맥 교환 (Context Switching)
- Context Switching
- CPU 시간공유 시스템의 경우 일정 시간이 지나면 기존 프로세스를 준비 상태로 만들고 다른 프로세스를 수행 상태로 만들어서 실행함
- 이렇게 실행하는 프로세스를 Switch 하는 것을 통틀어서 문맥 교환이라고 함
- Scheduler
- 문맥 교환을 전문적으로 담당하는 스케쥴러는 CPU 스케쥴러
- CPU 스케쥴러는 Ready Queeu에 대기 중인 프로세스를 어떤 순서로 실행시킬 것인지 결정
- Dispatcher
- 만일 프로세스 A의 코드 중 100번 라인까지 실행했고 작업 중에 10개의 데이터를 레지스터에 저장했었다면, 스위치할 때 이 정보들을 보존해야 A의 차례가 돌아왔을 때 이전에 수행하던 작업이 끊기지 않고 수행될 수 있습니다.
- 때문에 프로세스 A를 수행하다가 B로 넘어가면 그러한 정보를 저장하고, 다시 A의 차례가 왔을 때, 정보를 다시 꺼내서 PC, SP, Register 등에 할당합니다.
- 이러한 작업을 수행하는 프로그램을 Dispatcher라고 합니다.