CS/OS

[OS] 프로세스 상태(Process State)

Jutudy 2021. 5. 23. 01:04

 프로세스 상태(Process State)

개인적으로 공부하면서 정리하는 글입니다. 내용에 오류가 있는 경우 댓글 달아주시면 수정하도록 하겠습니다.

 

프로세스는 일반적으로 실행중인 프로그램이라고 말합니다. 하지만 주기억장치에 적재되어있는 프로세스 중 CPU에 할당되어 실행되는 것은 하나의 프로세스 뿐입니다.(CPU가 1개인 경우로 가정)

그래서 앞 글에서 프로세스를 주기억장치에 적재되어 커널 영역에 PCB를 부여받은 프로그램이라고 표현했는데요. 프로세스는 '실행' 상태를 포함하여 여러 상태 변화를 거치게 됩니다.

프로세스 상태 변화 과정

생성 상태

프로그램이 커널 영역에 PCB를 부여받은 상태를 생성 상태라고 합니다. 프로세스로 생성되고 바로 보류 준비 또는 준비 상태로 가기 때문에 잠시 거쳐가는 상태입니다.

운영체제는 프로세스를 생성한 후 주기억장치 공간이 여유로운지 확인하고, 공간이 충분하면 프로세스 주소 공간을 할당한 후 프로세스를 준비 상태로 바꾸어줍니다.

주기억장치의 공간이 충분하지 않은 경우 보류 준비 상태로 바꾸게 됩니다.

준비 상태

준비 상태의 프로세스는 CPU를 할당받기 위해 기다리고 있는 상태입니다. 준비 상태의 프로세스가 CPU를 할당받게 되면 바로 실행 상태가 됩니다.

다중 프로그래밍(여러 프로세스가 주기억장치에 적재)에서는 여러 준비상태의 프로세스를 위해 큐, 리스트가 사용됩니다.

운영체제가 준비 상태의 여러 프로세스 중 CPU에 할당하는 순서를 정하는 것을 CPU 스케줄링이라고 합니다.

실행 상태

준비 상태의 프로세스가 CPU를 할당받게 되면(디스패치) 실행 상태가 되고, CPU는 해당 프로세스를 실행합니다. 다중 프로그래밍에서 CPU가 1개이면 실행 상태인 프로세스도 당연히 1개만 존재합니다. CPU가 여러 개면 CPU 개수 만큼 동시에 프로세스를 처리할 수 있습니다.(다중 처리)

실행 상태의 프로세스는 CPU 스케줄링 정책에 의해 CPU를 뺏길 수 있습니다(선점). CPU를 뺏긴 프로세스는 준비 상태로 바뀌게 됩니다.

또한, 실행 상태인 프로세스가 입출력이 필요하여 시스템 콜(System Call)을 하게 되면 입출력이 종료될 때 까지 대기 상태로 바뀌게 됩니다.

입출력이 완료될 때 까지 실행 상태로 기다리게 되면 그동안 CPU는 아무 일도 하지 않기 때문에 비효율적입니다. 그래서 입출력이 완료될 때 까지 대기 상태로 바뀌게 되고, CPU는 준비 상태에 있는 다른 프로세스를 바로 할당받게 됩니다.

대기 상태

실행 상태인 프로세스가 입출력을 요청하거나, 바로 확보될 수 없는 자원을 요청하면 CPU를 반납하고 요청한 일이 완료될 때 까지 대기 상태가 됩니다. 대기 상태 역시 큐 또는 리스트로 관리됩니다.

요청한 일이 완료되면 대기 상태의 프로세스는 다시 준비 상태로 들어갑니다.

종료 상태

프로세스가 정상적으로 실행이 완료되면 종료 상태가 됩니다. 종료 상태의 프로세스는 할당된 모든 자원들이 회수되고 PCB만 커널에 남아 있습니다. 운영체제가 해당 프로세스의 흔적들을 최종적으로 정리한 후 PCB를 삭제하면 프로세스는 완전히 사라지게 됩니다.

 

위에서 설명한 다섯 가지 상태 중 '생성 상태'와 '종료 상태'는 프로세스가 생성되고 사라지는 과정에서 잠시 있게 되는 상태이기 때문에 제외하고, '준비 상태', '실행 상태', '대기 상태'를 '활성 상태(Active State)'라고 합니다.

활성 상태는 메모리 공간을 일정량 부여받았음을 의미합니다. 즉, 주기억장치에 적재되어 있는 프로세스들을 활성 상태라고 합니다. 주기억장치의 용량은 한정되어 있고, 메모리가 부족하거나 다른 이유에 의해 시스템은 활성 상태의 프로세스로부터 메모리를 회수하고 보조기억장치로 내보내는 경우가 있는데, 이 상태를 보류 상태라고 합니다.

보류 상태

보류 상태는 프로세스가 메모리 공간을 뺏기고 보조기억장치로 나가는 경우를 말하는데, 이것을 Swapped Out이라고 합니다. Swapped Out된 프로세스가 나중에 다시 주기억장치로 들어오면 Swapped In이라고 하고, 두 경우를 통틀어서 스와핑(Swapping)이라고 합니다.

보류 준비 상태

보류 준비 상태는 생성된 프로세스가 바로 메모리를 받지 못하거나, 준비 또는 실행 상태의 프로세스가 메모리를 잃게 될 때를 위해 필요합니다. 보류 준비 상태의 프로세스는 주기억장치에 여유가 생기거나, 준비 상태의 프로세스가 전혀 없을 때 대기 상태의 프로세스를 보류 대기 상태로 만들고 준비 상태로 바뀌게 됩니다.

보류 대기 상태

보류 대기 상태는 대기 상태에서 메모리 공간을 잃은 상태입니다. 보류 대기 상태의 프로세스는 입출력이나 기다리던 사건의 종료 시 보류 준비 상태로 바뀌게 됩니다.

'CS > OS' 카테고리의 다른 글

[OS] CPU 스케줄링  (0) 2021.06.06
[OS] 프로세스와 스레드(Process, Thread)  (0) 2021.05.23
[OS] 프로세스(Process)  (1) 2021.05.22
[OS] 인터럽트  (0) 2021.05.15
[OS] 운영체제란?  (0) 2021.05.15