http://www.kocw.net/home/cview.do?lid=04a13d7898f46d1b
프로세스의 개념, 상태, 문맥과 운영체제가 프로세스를 큐에 넣고 관리하는 형태에 대해 알아본다.
process is a program in execution, 프로세스는 실행 중인 프로그램
이 프로세스가 어떤 상태에 있느냐? 시간에 따라 바뀌는 개념!
운영체제는 이 프로세스의 문맥을 굉장히 중요하게 생각함
CPU가 하나밖에 없기 때문에 CPU에서 기계어를 실행하고 있는 프로세스는 매 순간 한 개
그 프로세스를 우리는 RUNNING
상태에 있다 라고 부른다.
CPU를 사용하기 위해 기다리고 있는 프로세스는 READY
상태에 있다 라고 부른다.
오래 걸리는 작업 때문에 당장 CPU를 얻어봤자 의미가 없는 프로세스는 BLOCKED
, WAIT
, SLEEP
상태에 있다 라고 부른다.
프로세스는 상태가 변경되며 수행된다.
Running
- cpu를 잡고 insturction을 수행 중인 상태
Ready
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
Blocked(wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event(예:I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- ex) 디스크에서 FILE을 읽어와야 하는 경우
- NEW : 프로세스가 생성 중인 상태
- Terminated : 수행(execution)이 끝난 상태
운영체제는 PCB를 통해 프로세스의 상태를 관리한다
자료구조 Queue를 통해 줄세워놓고 처리함
디스크에서 어떤 file을 읽어오는 작업을 기다린다면, 디스크 I/O Queue에 줄 세워놓고, ... 운영체제가 다음번 cpu를 줄 때 Ready Queue 상태에 있는 프로세스에 cpu를 준다
. Blocked Queue 상태에 있는 프로세스에는 주지 않음
오래 걸리는 작업이 해소 되어 Ready Queue로 들어가는 작업
예를 들어, keyboard I/O 또는 Disk I/O를 기다리는 Queue가 있다.
이 때 keyboard I/O 발생 또는 Disk I/O가 완료된다면,
운영체제에게 바로 CPU가 넘어가는 게 아니라 키보드 컨트롤러가 CPU에게 인터럽트를 걸면 CPU 제어권이 운영체제로 넘어감.
키보드 I/O 기다리는 프로그램은 Blocked Queue -> Ready Queue
공유 데이터
프로세스들이 동시에 사용하고 있는 데이터
프로세스 하나가 사용하고 있으면 다른 프로세스는 Blocked 상태로 기다리고 있음
프로세스가 생성되지 않거나 종료됐을 때에는 프로세스가 아님.
따라서 종료될 때 후처리가 좀 남은 상태가 terminated
또한 프로세스가 생성 중인 상태 new
온전하게 프로세스가 생성되면 Ready 상태
Ready 상태는 CPU만 주면 바로 실행 상태가 됨
그러기 위해서는 기본적으로 당장 필요한 부분은 Memory에 올라가 있어야 함
즉,
Ready 상태
는 프로세스가 메모리에 존재하는 상태
프로세스가 cpu에서 기계어를 실행하다가, cpu를 내놓는 경우는 3가지 경우가 있다.
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
모든 프로세스가 동등한 게 아니기 때문에 PCB에서 관리가 되고 있다.
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- 사용자 프로세스에서 다른 사용자 프로세스로 CPU가 넘어가는 과정
현재 cpu가 어디까지 수행했는지, register에 어떤 값을 넣었는지 등을 저장
CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
프로세스A가 프로세스B에 CPU를 넘기는 과정
이런 과정을 문맥 교환이라고 한다.
문맥 교환과 문맥 교환이 아닌 것을 구분해야 한다
(1)번은 문맥 교환이 아님.
프로세스 A가 실행되다가 인터럽트 또는 시스템 콜이 발생
CPU가 커널로 넘어감 : 문맥 교환이 아님
문맥 교환은 사용자 프로세스에서 다른 사용자 프로세스로 CPU가 넘어가는 과정이며, 이 과정 중에 반드시 운영체제의 커널의 개입이 존재하나 사용자 프로세스에서 커널로 넘어가는 것을 문맥 교환이라고 부르지는 않음
(2)번
결과적으로 사용자 프로그램에서 다른 사용자 프로그램으로 CPU가 넘어가면 문맥 교환이 맞음
USER MODE <-> 커널 모드 : 문맥 교환에 비해서는 오버헤드가 적음
1번의 경우, CPU 수행 정보 등 context의 일부를 PCB에 save해야 하지만,
문맥 교환을 하는 2번의 경우 그 부담이 훨씬 큼
- 문맥 교환할 떄 Cache memory flush하는데, 이 때의 오버헤드가 심함
프로세스들은 각 큐들을 오가며 수행된다.
Job Queue
모든 프로세스는 Job Queue에 존재
현재 시스템 내에 있는 모든 프로세스의 집합
Ready Queue
현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
Device Queues
오래 걸리는 작업의 원인이 되는, I/O device의 처리를 기다리는 프로세스의 집합
실제로 운영체제를 관리하는 자료구조..
ready queue에 pcb가 줄줄이 연결되어있다
프로세스가 처음에 실행되면
1. Ready Queue에 들어옴 -> 본인 차례가 되면 CPU를 얻어서 사용
2. CPU를 사용하다가 오래 기다리는 작업을 요청하면, I/O Queue
3. I/O가 종료되면 다시 Ready Queue로 가서 CPU를 얻을 수 있는 권한 획득
4. cpu를 계속 사용하고 싶은 상황에서 timer interrupt -> cpu 할당 시간 종료되면 다시 ready queue
5. ready queue에 있다가 다시 본인 차례가 되면 cpu를 얻고..
fork a child?
프로세스가 자식 프로세스를 생성할 수 있음
자식 프로세스
: 자신과 똑같은, 복제한 프로세스.
프로세스가 자식 프로세스를 만들면, 자식 프로세스가 실행되고 자신도 동시에 실행이 되는데, 이 때 자식 프로세스와 경쟁을 하게 됨.
wait for an interrupt
오래 걸리는 I/O 작업일 수도 있지만 다른 이유로 기다리다가 인터럽트가 발생하면 다시 Ready Queue로 넘어가고..