@ 앞에서 Process는 어떤 state 위에서,
// 수행되는 execution stream이라고 표현했었습니다.
// 이 때, state라고 하는 것은
> 그 프로세스가 수행하기 위해서 기억해야할 정보입니다.
@ State Transition 에서 말하는 State는 그것과는 차이가 있습니다.
// 이는, 어떤 프로세스가 지금 어떤 상황에 있는가를 얘기합니다.
// State Transition은 각 프로세스들의 State를 변화시키는 것이라고 보시면 되겠습니다.
// 프로세스 역시 탄생과 사망을 경험하게 됩니다.
> 이렇게 프로세스가 생성되었을 때 부터 종료될 때 까지 발생하는 일련의 상태 변화를
.. 프로세스 생명 주기(Process Life Cycle)이라고 부릅니다.
@ Process Life Cycle은 다음과 같습니다.
// New
> 생성
// Ready
> active한 프로세스이지만, CPU를 받지 못해서 수행을 하지 못하고 있는 상태
> 여러개 있을 수 있을 것입니다.
.. 이런 상황에서는 어떤 Data structure를 이용할까요?
.. Ready queue 혹은 Ready List라고 부릅니다.
.. 이는 Ready 상태의 프로세스들을 관리하기 위한 Queue 형태의 자료구조로,
.. 일반적으로 PCB들을 Linked List로 연결하여 구현합니다.
// OS 선택 -> Running
> Single Process System에서는 0개 혹은 1개일 것입니다.
// 이 때 Running 상태의 Process가 sync I/O request를 하게 되면
// Waiting 상태로 전이가 됩니다.
> 이는 어떤 event가 발생하기를 기다리기에 CPU를 내주고
.. 대피해 있는 상태라고 생각하시면 됩니다.
> 원하는 event가 들어오게 되면 Ready상태로 전이됩니다.
@ 위에서 설명한 일련의 상태를
// State Transition이라고 부릅니다.
?Question Waiting 상태에도 여러개의 Process가 있을 수 있나요?
// 있을 수 있습니다.
// 이 때 각 Process들이 Waiting상태에 있는 이유는 다를 수 있습니다.
> 어떤 이는 Keyboard 입력
> 어떤 이는 Memory block data 등
// 그렇기에 OS는 Waiting 이유에 따라 별도의 큐를 사용하게 됩니다.
> 각 I/O Device 별로 별도의 device queue가 존재하게 됩니다.
@ OS의 Process는 이렇게 일련의 상태를 거치는데
// 위에서 설명한,
> Ready
> Running
> Waiting
.. 이 3가지가 가장 Basic합니다.
// 사실은 이 외에도 많은 상태가 존재합니다.
> Ex) zombi state
@ OS는 그렇다면 결국 어떤 활동을 하는 것인가 살펴보겠습니다.
// Process가 생성되면,
> PCB를 할당합니다. (물론 자원도 할당합니다)
.. 그 프로세스를 일련의 조건에 따라 다른 상태로 전이시킵니다.
// 이것이 바로 OS가 Algoritmical하게 수행해야 하는 일입니다.
@ 그렇다면 이제 상태의 전이를 조금 더 자세히 살펴보겠습니다.
// Ready to Running?
> OS System scheduler가 수행합니다.
// Running to Ready
> 수행중 interrupt가 발생하여,
.. CPU를 빼앗기는 현상입니다.
.. 이를 선점(preemptive) Scheduling이라고 합니다.
// Running to Waiting
> (생략하겠습니다.)
// Waiting to Ready
> 원하는 event가 발생하면 됩니다.
@ 이와 같이 OS은 여러 State별로 Data structure(queue)를 만들어두고,
// 여러 프로세스들에 해당하는 event가 발생하면
> State Transition을 drive하게 됩니다.