본문 바로가기
computer science/운영체제

[운영체제] 프로세스 상태

by 박연호의 개발 블로그 2020. 2. 9.

 

프로세스 상태 

앞선 포스팅에서 프로세스에 대해 설명을 드렸습니다. 우리가 카톡을 하면서 유튜브도 보고 또 음악을 들을 수 있는 것은 여러개의 프로세스(카톡, 유뷰브, 음악)이 같이 실행되고 있기 때문인데요(정확히 동시에는 아닙니다 !!). 이렇게 실행되고 있는 프로세스들의 생로병사, lifecycle 을 한번 그림으로 보겠습니다.

 

new : 프로세스 생성중

프로세스를 생성하고 있는 단계로 커널 공간에 PCB가 만들어진 상태

 

ready : 프로세스가 CPU를 기다리는 상태

프로세스가 메모리에 적재된 상태로 실행하는데 필요한 자원을 모두 얻은 상태

아직 CPU를 받지는 않았지만 CPU를 할당 받으면 바로 실행 가능한 상태

ready상태를 가지는 여러개의 프로세스들이 존재할 수 있음

 

running : 프로세스가 CPU를 할당받아 명령어를 수행중인 상태

일반적으로 CPU가 하나이기 때문에, 여러 프로세스가 동시에 실행되도 실제로 실행중인 프로세스는 매 시점 하나 뿐임

 

blocked : 프로세스가 CPU를 할당 받아도 당장 실행할 수 없는 상태

현재 프로세스가 I/O작업 등을 을 처리중 상태를 의미

                  

terminated : 프로세스의 실행 종료

프로세스의 실행이 완료되고 할당된 CPU를 반납, 커널공간내의 PCB는 남아 있음

 

suspended : 프로세스의 중지 상태

suspended 상태의 프로세스는 메모리를 강제로 뺏긴 상태로 특정한 이유로 프로세스의 수행이 정지된 상태를 의미하며, 외                  부에서 다시 재개시키지 않는 이상 다시 활성화 될 수 없음중기 스케줄러에 의해 디스크로 스왑 아웃된 프로세스의 상태가 대표적인 suspenden상태라 할 수 있음. suspended ready와 suspended  blocked가 있음

 

1. suspended ready : 준비 상태에 있던 프로세스가 디스크로 스왑아웃

2. suspended blocked : 봉쇄 상태에 있던 프로세스가 디스크로 스왑아웃

 

 

※ blocked ?

프로세스 A가 CPU를 할당받고(running상태) 명령어를 실행하다 I/O 작업을 해야 하는 경우, 디스크 I/O 작업은 CPU 처리 속도에 비해 오래 걸리는 작업이기 때문에 디스크 I/O 작업 동안은 CPU를 점유하고 있어도 다음 명령어를 수행하지 못합니다. ㅡ> CPU 낭비

 때문에 디스크 I/O 작업을 하는 프로세스는 CPU를 반납하고 장치 큐에가서 줄을 서게 된다(blocked 상태). 이후 디스크 컨트롤러에 의해 서비스를 받아 일을 수행하면(마그네틱 원판에서 원하는 데이터를 로컬 버퍼로 읽어오고 나면) 디스크 컨트롤러가 CPU에게 일을 끝났음을 알린다(인터럽트). 이후 프로세스 A는 장비 큐에서 빼내어 준비큐로 넣어주고 프로세스 A가 한 일(로컬버퍼에 저장)은 메모리에 올라가게 된다.

 

※ blocked 와 suspended의 차이

blocked : 잠시 중지되어있다(blocked) 끝나면 다시 ready상태로 돌아옴 

suspended : 잠시 중지되어 있다(suspendedn) 누군가가 재개시켜줘야 다시 ready상태로 돌아옴.


프로세스를 스케줄링 하기 위한 큐

다중 프로그래밍 환경에서는 여러개의 프로세스를 사용하기 때문에 이런 프로세스들을 관리하기 위한 자료구조가 필요합니다. 예를 들어 CPU를 할당받 준비를 하고 있는 여러개의 프로세스들을 저장할, 관리할 자료구조가 필요하죠 ?

이런 자료구조에는 작업 큐(Job Queue), 준비 큐(Ready Queue), 장치 큐(Device Queue)가 있습니다.

 

작업큐(Job Queue)

시스템의 모든 프로세스를 관리하기 위한 큐로 프로세스의 상태와 무관하게 현재 시스템 내에 있는 모든 프로세스를 관리합니다. 그렇기 때문에 작업큐에 있다고해서 반드시 메모리를 가지고 있는 것은 아닙니다.

 

준비 큐(Ready Queue)

CPU를 할당받기를 기다리고 있는 프로세스들을 관리하며 준비 큐에 있는 프로세스들은 준비 상태에 있게 됩니다.

여기서 프로세스들을 줄 세우는 방법으로 스케줄링 알고리즘(어떻게 공평하게 CPU를 나눠줄까 ?)을 사용합니다.

 

장치 큐(Device Queue)

각각의 장치마다 서비스를 기다리며 줄 서 있는 프로세스들을 관리합니다. 장치 큐에 속한 프로세스는 봉쇄 상태(blocked)가 됩니다. 장치큐에 속한 프로세스들을 봉쇄 상태에 있다가 해당 장치의 서비스를 받고나서 장치 컨트롤러가 인터럽트를 발생시키면 준비 상태로 바뀌어 준비큐로 이동합니다.


프로세스들의 상태 전이

위에서 저희는 각각의 프로세스들은 매 시점마다 5가지 상태 중 하나의 상태를 가진다고 했습니다. 그렇다면 하나의 상태에서 다른 상태로 가는것이 어떤 의미를 가지는지 한번 살펴 보겠습니다.

 

new  ㅡ>  ready

new 상태에서 OS에 의해 승인을 받아 프로세스가 생성되면 해당 프로세스의 PCB(Process Control Block, 커널 내 자료구조)이 OS커널의 Ready Queue에 올라옴

 

ready ㅡ> running

Ready Queue에 있는 프로세스들 중에서 스케줄링 알고리즘에 의해 선택받은 프로세스가 CPU를 할당받음

 

running ㅡ> ready

CPU를 할당받아 일을 하다 특정 이유로 다른 프로세스에게 CPU를 주고(dispatch) 다시 CPU를 기다림

 

1. time out : 프로세스 A가 정해진 시간만큼 CPU를 사용하고 CPU를 반납

2. interrupt : 프로세스 A보다 우선순위가 높은 프로세스 B가 Ready Queue에 존재하는 경우, 프로세스 B에게 CPU를 줌

 

running ㅡ> blocked

현재 CPU를 받아 명령어를 수행중인 프로세스가 I/O 작업을 해야하는 경우로 CPU를 반납하고 해당 장치 큐에 들어가게 되며 이 상태를  blocked 상태라 함

 

blocked ㅡ> ready

I/O 작업을 위해 장치 큐에있던 프로세스가 디스크 컨트롤러에 의해 서비스를 받아 일을 하고 디스크 컨트롤러가 인터럽트를 발생하여 프로세스가 한 일을(로컬버퍼에 저장된 데이터) 메모리에 올려놓고 프로세스는 다시 Ready Queue에 들어가게 됨 

                                                                            

running ㅡ> terminated

프로세스 실행이 완료되어 자원을 반납한 상태

 

blocked, ready -> suspended blocked, suspended ready

봉쇄, 준비상태에 있던 프로세스들이 어떠한 요인에 의해 suspended 상태

suspended blocked인 프로세스가 봉쇄 되었던 조건을 만족하게 되면 suspended ready 상태로 바뀌게 된다. suspended 상태에 있는 프로세스들은 메모리를 조금도 보유하지 않고 디스크로 통째로 swap out 된 상태로 존재하게 된다

ex)) 대표적으로 메모리가 부족하여 봉쇄, 준비상태의 프로세스들이 디스크로 swap되는 경우