※ 질문/내용오류/공유할 내용이 있다면 jinkilee73@gmail.com으로 메일 주세요 :-)
이번 장에서는 프로세스에 관하여 이야기해보자. 프로세스를 논하기 전에 프로그램을 논해보자. 프로그램은 executable file을 의미한다. executable file은 OS의 메모리 관리 기법에 의해 메모리에 load된다. 이 때 여러 개의 executable file이 load될 수 있다. 이 여러 개의 executable file은 아직 프로세스라고 하지 않는다. 이 여러 파일 중 하나가 OS의 scheduling에 의해 선택되어 CPU에 의해 실행되면, 그것을 우리가 프로세스라고 한다. 한 마디로 실행 중인 executable file이라고 보면 된다.
프로세스의 정보는 메모리에 두 가지 형태로 존재할 수 있다.
PCB는 프로세스의 정보들을 한 곳에 모아둔 정보이다. 반면 process in memory라고 적어 놓은 저 부분에는 프로세스가 실행되면서 추가되는 변수 값이나 사용되는 값들이 저장되어있는 공간이다. 이러한 프로세스는 OS에 의해 특정한 상태 흐름도에 따라 움직인다.
위 그림은 개인적으로 굉장히 중요하다고 생각한다. 공부를 할 때 가장 중요한 것은 전체적인 흐름이 아닌가 싶다. 그래야 나중에 잊어먹어도 다시 공부하기가 쉽다. 아무튼 위의 개념을 설명해보자.
모든 프로세스는 처음에 created 상태에서 시작한다. 이 상태에서 ready 상태로 넘어가는 단계는 사용자가 프로세스를 실행시키는 단계라고 볼 수 있다. 앞에서 몇 번이고 말했듯이 모든 프로세스는 secondary storage에 저장되어있다. ready 상태로 넘어가는 단계는 secondary storage에 저장되어있는 실행파일(executable file)이 메모리에 load되는 과정이다.
메모리에는 여러 개의 프로세스가 load되어 있을 수 있다. 그렇다면 그 중에 어떤 프로세스를 실행시킬 것이냐? 즉, 어떤 프로세스가 running 상태로 갈 것이냐? 이것은 CPU의 스케줄링에 의해 결정된다.(실제로는 dispatcher가 한다.)
그렇게 running 상태에 있는 프로세스는 time-sharing system에서 한 프로세스를 실행시킬 수 있는 최대시간이 지나면 CPU 점유권을 빼앗기게 된다. 이 과정이 있는 OS를 선점형 OS(preemption OS)라고 한다.
running 상태에서 I/O request가 발생하면 asleep상태에 빠지게 된다. I/O 작업을 하는 동안 메모리에서 자고 있다고 생각하면 된다.
I/O가 끝나면 다시 ready 상태로 들어가게 된다. running 상태로 가는 것이 아니라는 것을 주의하자.
여기서, 잠시 다른 것을 생각해보자. 오로지 하나의 프로세스만 running 상태에 있을 수 있는 반면, 여러 개의 프로세스가 ready 상태나 asleep 상태에 있을 수 있다. 그러면 다음과 같은 프로세스도 있을 수 있다.
- ready 상태에서 계속 CPU의 점유권을 못 가져가는 프로세스
- asleep 상태에서 ready 상태로 못 넘어가는 프로세스
이러한 여러 과정을 거쳐 결국 프로세스가 종료되면 running 상태에서 terminated 상태로 가서 프로세스가 종료된다. (= 할당되어있던 모든 메모리나 CPU 점유권을 내놓는다.)
suspended block 상태에서 I/O가 끝나면 어떻게 될까? 다시 suspended ready 상태로 변해서 asleep 상태가 아닌 ready 상태로 갈 수 있다.
마지막으로, created 상태에서 suspended ready 상태로 갈 수도 있다. 원래는 메모리를 할당 받아서 ready 상태로 가야하나 여러 가지 문제로 인해서 메모리 할당을 못 받으면 suspended ready 상태로 가게 된다.
전체적인 프로세스의 흐름은 이와 같다. 다음 포스팅에서는 스케줄러에 대해서 이야기해보자.
'Operating Systems' 카테고리의 다른 글
[OS] Job Queue, Ready Queue 그리고 Device Queue (1) | 2013.01.01 |
---|---|
[OS] 스케쥴러 (scheduler) (2) | 2012.12.31 |
[OS] Interrupt Service Routine (ISR) (2) | 2012.12.24 |
[OS] OS의 역할 (more details) (0) | 2012.12.24 |
[OS] OS의 역할 (0) | 2012.12.24 |