📌 프로세스 개념
‘process is a program ins execution’
실행 중인 프로그램
📌 프로세스 문맥
- cpu수행 상태를 나타내는 하드워드 문맥이다.
- program counter,각종 register
- 프로세스는 어디까지 도달해있는가를 나타내는것
- (program counter가 어느부분을 가리키고 있는가?어떤 instruction까지 연산을 수행하고 있는가를 알게해준다.
- 프로세스 주소공간
- code,data,stack
- 주소 공간에는 어떤 내용이 들어있는가
- 프로세스 관련 커널 자료구조
- 프로세스가 생길때마다 운영체제는 자신의 PCB(데이터안에 있는 자료구조)를 관리한다.
- 운영체제가 프로세스에 대해서 어떻게 관리해야하는 가를 알아야한다.
📌 프로세스의 상태
- 프로세스는 상태(state)가 변경되며 수행된다.
- running
- CPU를 잡고 instuction을 수행중인 상태
- ready
- CPU가 하나라고 가정한 상태에서 cpu를 기다리는 프로세스가 많은데, 이때 프로세스들이 CPU를 기다리는 상태 (메모리 등 다른 조건을 모두 만족하고 cpu만 있으면 바로 수행이 가능한 상태)
- blocked
-
CPU를 얻어도 당장 instruction을 수행 할 수 없는 상태 (디스크에서 file을 읽어와야 하는 경우,I/O장치가 실행되는 경우)
-
process자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태
cpu를 오랜 시간동안 사용해야하는 경우에는 timer에 의해 cpu를 얻었다 뺐겼다 할 수 있다. (ready → running → ready ….)
📍 I/O작업이 실행됐을 때 발생하는 프로세스의 상태 변화
Ready 상태의 queue가 존재, I/O장치들의 queue가 존재하여 process가 줄지어 기다리고 있다.
만약 키보드의 입력이 발생한다면 keyboard I/o queue에 process가 줄을 선다. 이때의 process의 상태는 Blocked로 바뀐다. i/o controller의 지휘하에 순서대로 처리가 된다. 작업이 끝나면 i/o controller가 끝냈음을 알리기위해 cpu에게 interrupt를 건다. cpu는 실행하던 작업을 없애고 cpu제어권을 os에게 넘기고 os가 메모리 영역에 해당 데이터를 넘긴다. Blocked상태를 ready로 바꾸고, ready queue 에 줄을 세운다.
📍프로세를 스케줄링하기 위한 queue
-
job queue
-
Ready queue
-
I/O device queue
📍 blocked : 자신이 요청한 event가 만족되면 Ready
📍 Suspended:외부에서 resume해주어야 Active
📌 Process Control Block(PCB)
- prcess하나당 존재한다.
- 운영체제가 각 프로세스를 관리하기 위한 프로세스의 정보
- os가 관리상 사용하는 정보(스케줄링,우선순위값 등등)
- cpu수행 관련 하드웨어값 , 프로세스 문맥 관련한 정보(program counter,register)
- 메모리 관련 (code,data,stack의 위치 정보)
- 파일 관련 (open file descriptors)
📌 문맥 교환(Context Switch)
cpu는 한 프로세스가 독점적으로 가지지 않고, 빠르게 이동한다. 이때 다시 cpu를 넘겨받을 때 처음으로 돌아가지 않고 넘겨주던 시점으로 유지된다.
- cpu를 프로세스에서 다른 프로세스로 넘겨주는 과정이다.
- cpu가 다른 프로세스로 넘어갈때 운영체제가 하는 일
- cpu를 내어주는 프로세스 상태를 커널 주소 공간안의 PCB에 저장한다.
- CPU를 얻게 되는 프로세스의 상태를 PCB에서 읽어온다.
📍 이때 system call이나 interrupt발생시 반드시 context switch가 일어나는 것은 아니다. 커널 모드로 변환되는 것과 헷갈리지 말아야한다. 이때도 수행정보를 PCB에 일부 저장해야하지만 부담이 적다.
📍 timer interrupt 나 I/O요청 system call시에는 context switch가 발생한다. 이 두경우는 모두 한프로세스에서 다른 프로세스로 넘어가는 경우이다.
📌 스케줄러
- long-term scheduler (time share에는 보통 없음)
- 시작 프로세스 중 어떤 프로세스를 running시킬지 결정한다.
- 메모리에 올라갈 것을 admitted한다.
- short-term scheduler (cpu scheduler)
- 어떤 프로세스를 다음번에 running시킬지 결정한다.
- 프로세스에 cpu를 주는 문제
- 빨라야한다.
- Medium-term scheduler (swapper)
- 메모리가 너무 많이 차있다면 프로세스를 메모리에서 디스크로 쫓아낸다.
✏주로 모든 memory를 올려놓는데, 너무 많은 메모리를 차지한다면 프로세스를 통째로 메모리에서 디스크로 쫓아낸다. (suspensed state)