우리가 컴퓨터를 할 때 카톡을 하면서 유튜브도 보고 게임을 할 수 있는 이유는 여러 개의 프로세스가 실행되고 있기 때문이다. (동시에 실행되고 있는 것처럼 보이지만 정확하게 동시에 실행되는 것은 아니다.)
이렇게 실행되고 있는 프로세스들은 Life Cycle은 위와 같다.
new
프로세스를 생성하고 있는 단계로 커널 공간에 PCB가 만들어진 상태
ready
프로세스가 메모리에 적재된 상태로 실행하는데 필요한 자원을 모두 얻은 상태
running
프로세스가 CPU를 할당 받아 명령어를 수행 중인 상태
일반적으로 CPU가 하나이기 때문에 여러 프로세스가 동시에 실행되어도 실제로 실행 중인 프로세스는 매 시점 하나 뿐이다.
blocked
현재 프로세스가 I/O 작업 등을 처리 중인 상태
*blocked?
프로세스 A가 CPU를 할당 받고 (Running 상태) 명령어를 실행하다가 I/O 작업을 해야 하는 경우, 디스크 I/O 작업은 CPU 처리 속도에 비해 오래 걸리는 작업이므로 디스크 I/O 작업 동안은 CPU를 점유하고 있어도 다음 명령어를 수행하지 못한다.
-> 이는, CPU 낭비다.
그러므로 디스크 I/O 작업을 하는 프로세스는 CPU를 반납하고 장치 큐에 가서 줄을 서게 된다. (= blocked 상태)
이후 디스크 컨트롤러에 의해 서비스를 받아 일을 수행하면 CPU에게 일을 끝났음을 말한다. (= 인터럽트) 이후 프로세스 A는 큐에서 나와 준비 큐로 넣어주고 프로세스 A가 한 일(로컬 버퍼에 저장)은 메모리에 올라가게 된다.
terminated
프로세스의 실행이 완료 되고 할당된 CPU를 반납, 커널 공간 내의 PCB는 남아 있는 상태
suspended
메모리를 강제로 뺏긴 상태, 특정한 이유로 인해 프로세스의 수행이 정지된 상태를 의미
외부에서 다시 재개시키지 않는 이상 다시 활성화 될 수 없는 상태를 말한다.
중기 스케줄러에 의해서 디스크로 스왑 아웃된 프로세스의 상태가 대표적인 suspended 상태라고 할 수 있다.
- suspended ready : 준비 상태에 있던 프로세스가 디스크로 스왑 아웃
- suspended blocked : 봉쇄 상태에 있던 프로세스가 디스크로 스왑 아웃
프로세스 스케줄링을 위한 큐
다중 프로그래밍 환경에서는 여러 개의 프로세스를 사용하기 때문에 이런 프로세스들을 관리하기 위한 자료 구조가 필요하다.
CPU 할당을 위한 준비를 하고 있는 여러 개의 프로세스들을 저장/관리할 자료 구조가 필요하다.
작업 큐
시스템의 모든 프로세스를 관리하기 위한 큐로 프로세스의 상태와 무관하게 현재 시스템 내에 있는 모든 프로세스를 관리한다.
(그러므로 작업 큐에 있다고 해서 반드시 메모리를 갖고 있는 것은 아니다.)
준비 큐
CPU를 할당 받기를 기다리고 있는 프로세스들을 관리하며 준비 큐에 있는 프로세들은 준비 상태에 있게 된다.
여기서 프로세스들을 줄 세우는 방법이 곧 CPU 스케줄링 알고리즘이다. (= 어떻게 공평하게 CPU를 나눠줄까?)
장치 큐
각각의 장치마다 서비스를 기다리며 줄 서 있는 프로세스들을 관리한다.
장치 큐에 속한 프로세스는 blocked 상태가 된다 > 이후, 해당 장치의 서비스를 받고 나서 장치 컨트롤러가 인터럽트를 발생시키면 준비 상태로 바뀌어 준비 큐로 이동한다.
프로세스 상태 전이
각각의 프로세스들은 매 시점마다 5가지 상태 중 하나의 상태를 갖게 된다.
하나의 상태에서 다른 상태로 가는 것이 어떤 의미일까?
new -> ready
new 상태에서 OS에 의해 승인을 받아 프로세스가 생성되면 해당 프로세스의 PCB가 OS의 준비 큐에 올라온다.
ready -> running
준비 큐에 있는 프로세스들 중에서 스케줄링 알고리즘에 의해 선택받은 프로세스가 CPU를 할당 받는다.
running -> ready
CPU를 할당 받아 일을 하다가 특정한 이유로 다른 프로세스에게 CPU를 주고 다시 CPU를 기다린다.
- time out : 프로세스 A가 정해진 시간만큼 CPU를 사용하고 다음 프로세스에게 CPU를 반납
- interrupt : 프로세스 A보다 우선순위가 높은 프로세스 B가 Ready Queue에 존재하는 경우 프로세스 B에게 CPU를 전달
blocked -> ready
I/O 작업을 위해 장치 큐에 있던 프로세스가 디스크 컨트롤러에 의해 서비스를 받아 일을 하고 디스크 컨트롤러가 인터럽트를 발생하여 프로세스가 한 일을(로컬 버퍼에 있던 데이터) 메모리에 올려놓고 프로세스는 다시 준비 큐에 들어가게 된다 .
running -> terminated
프로세스 실행이 완료되어 자원을 반납한 상태
blocked, ready -> suspended blocked, suspended ready
봉쇄, 준비상태에 있던 프로세스들이 어떠한 요인에 의해 suspended 상태
suspended blocked인 프로세스가 봉쇄 되었던 조건을 만족하게 되면 suspended ready 상태로 바뀌게 된다. suspended 상태에 있는 프로세스들은 메모리를 조금도 보유하지 않고 디스크로 통째로 swap out 된 상태로 존재하게 된다
ex)) 대표적으로 메모리가 부족하여 봉쇄, 준비상태의 프로세스들이 디스크로 swap되는 경우
'OS' 카테고리의 다른 글
[질문] 프로세스, 쓰레드 (0) | 2022.08.29 |
---|---|
시스템 콜과 인터럽트 (0) | 2022.08.29 |
쓰레드 (0) | 2022.08.29 |
프로세스 - 개념, 메모리 구조, 상태변화 (0) | 2022.08.29 |
운영체제란 무엇인가? (0) | 2022.08.22 |