프로세스의 개념
Process is a program in execution
프로세스의 문맥(context)
- 프로그램의 코드가 어디까지 실행을 했는가, data의 변수가 어떻게 되었는가? Register에 어떤 값을 넣어놓고, instruction을 어디까지 실행을 해야했는가에 대한 모든 요소를 문맥이라 한다.
- CPU의 수행상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 register
- 프로세스의 주소공간
- 프로세스 관련 커널 자료구조
- PCB(Process Control Block) - 운영체제는 프로그램이 실행될때마다, 프로그램을 컨트롤 하기 위한 1개의 PCB block이 생성된다.
- Kernal stack - 각 프로세스의 코드를 실행 중에, 시스템콜이 일어났을때, 해당 프로세스만의 커널 스택
Time sharing, Multi Process이기 때문에, 현재 실행중인 프로세스가 다른 프로세스에게 넘겨줄때, 현재의 작업현황을 백업을 해놔야, 다음 실행때, 이어서 작업이 가능하다.
프로세스의 상태(Process State)
프로세스는 상태가 변경되며 수행한다.
Running
- CPU를 잡고 instruction을 수행중인 상태
Reday
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고 있는상태)
Blocked(wait, sleep)
- CPU를 주어도, 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event(I/O)가 즉시 만족되지않아 이를 기다리는 상태( 디스크에서 file을 읽어와야하는 경우 )
New : 프로세스가 생성중인 상태
Terminated : 수행이 끝난 상태
CPU의 Redey Queue에 대기를 한다. 그러다가 CPU에서 Process가 동작을 하다가, I/O 작업이 있을때, Disk Queue에서 대기를 하면서 Process의 상태를 blocked(wait/sleep) 상태로 바뀌어서 들어간다.
이러한 큐들은 Kenal Address space의 자료구조로 있고, 프로세스의 상태를 조정하고, 위치에 따라 queue에 넣어준다.
Process Control Block(PCB)
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- OS가 관리상 사용하는 정보
- Process state, Process ID
- scheduling information, priority
- CPU 수행 관련 하드웨어 값
- Program counter, registers
- 메모리 관련
- Code, data, stack의 위치정복
- 파일 관련
- Open file descriptors
문맥 교환(Context Switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈때 운영체제는 다음을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
- System call이나 Interrupt 발생시 반드시 context switch가 일어나는 것은 아님
- System call이나 interrupt 발생시 Kernal mode로 변환이 일어나지만, 이 것을 Context switch를 의미하지 않고, 사용자 프로세스가 변환이 일어나는 것이 Context switch라고 한다.
- 운영체제로 변환이 일어날때에도 PCB에 저장을 하기 하지만, Context switch가 일어나는 경우보다 부담이 덜하다. ( cache memory flush : 프로세스가 달라지면, 캐쉬 메모리를 다 지워버리는 것을 의미)
프로세스를 스케쥴링하기 위한 큐
- Job queue
- Ready queue
- 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device queues
- I/O device의 처리를 기다리는 프로세스의 집합
- 프로세스들은 각 큐들을 오가며 수행된다.
- Linked List (head, tail)
- 인터럽트일때 ready queue에 대기를 하는것을 아니다.
스케줄러
- Long-term-scheduler(장기 스케쥴러 or job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정
- 메모리가 생성 시, memory에 올라가는걸 허락
- 프로세스에 memory을 주는 문제
- degree of Multiprogramming을 제어
- time sharing system에는 보통 장기 스케쥴러가 없음(무조건 ready)
- 우리가 사용하는 대부분의 시스템에서는 장기 스케쥴러가 없음
- Short-term scheduler(단기 스케쥴러 or CPu scheduler)
- 어떤 프로세스를 다음번에 running 시킬지 결정
- 프로세스에 CPU를 주는 문제
- 빨라야함(ms 단위)
- Medium Term Scheduler(중기 스케줄러 or Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫒아냄
- 프로세스에게서 memory를 뺏는 문제
- degree of Multiprogramming을 제어
- 메모리에 동시에 올라간 프로그램 수가 많으면, 프로세스를 뺏는다.
- 요즘 컴퓨터에서 쓰이는 방법
프로세스의 상태 2(현대 운영체제)
- Running , Ready, Blocked은 동일
- Suspended(stopped) : 중기 스케줄러 때문에 생긴 개념
- 외부적인 이유로 프로세스 수행이 정지된 상태
- 프로세스는 통째로 디스크에서 swap out 된다.
- 사용자가 프로그램을 일시정지시킨 경우(break key)
- 시스템이 여러이유로 프로세스를 잠시 중단시킴
- Blocked는 자신이 요청한 event가 만족되면 Ready로 바뀜
- Suspended는 외부에서 resume 해주어야 Active