들어가며
어찌보면 당연한거지만 프로세스에도 생애주기가 있었습니다. 사람도 세포도, 여러 대사 작용들도 모두 cycle이 있습니다. SDLC 개념도 처음 들으면서 재밌다 생각했는데, “프로세스 생명주기”도 있다는 걸 깨닫지 못한 게 오히려 신기한 건가 싶기도 합니다.
이번 포스트에서는 프로세스 생명주기에 대해 공부한 내용을 정리해보았습니다.
프로세스 상태변화
“process state in operating system” 혹은 “process state diagram”을 검색하면 대부분 위의 5개의 프로세스 상태로 구성된 다이어그램이 나옵니다.
타원형은 프로세스의 상태를 의미하고 화살표는 스케줄링의 상태가 변화되는 동작을 나타냅니다.
프로세스 상태
상태 | 설명 |
---|---|
New | 프로세스가 생성되고 있지만 아직 시스템에 승인되지 않았으며 메모리에는 할당되었지만 CPU 시간이 할당되지 않았습니다. |
Ready | 프로세스가 실행을 위해 CPU 시간 할당을 기다리고 있습니다. 필요한 모든 자원을 사용할 수 있습니다. |
Running | 프로세스는 현재 CPU에 의해 실행되고 있습니다. Ready에서 CPU 스케줄링에 CPU 시간이 할당되고 실행이 되는 겁니다. |
Waiting | 프로세스는 실행을 계속하기 전에 I/O 완료와 같은 이벤트가 발생하기를 기다리고 있습니다. |
Terminated | 프로세스 실행이 완료되어 메모리에서 제거되었습니다. |
프로세스 동작
동작 | 설명 |
---|---|
Admitted | 프로세스는 일반적으로 생성 후 시스템에 허용되고 메모리와 같은 리소스가 할당됩니다. 이 단계에는 프로세스 제어 블록(PCB)*을 초기화하고 필요한 리소스를 할당하는 작업이 포함됩니다. |
Interrupt | 외부 이벤트 발생이나 우선순위가 높은 작업으로 인해 프로세스가 일시적으로 일시 중지되거나 중단되는 경우가 많습니다. 이러한 중단으로 인해 프로세스가 대기 상태로 전환될 수 있습니다. |
Despatch** | 프로세스는 실행을 위해 디스패치되며, CPU 스케줄러는 CPU 할당 wating queue에서 해당 프로세스를 선택합니다. 이 단계에는 프로세스의 컨텍스트를 CPU에 로드하고 실행을 시작하는 작업이 포함됩니다. |
I/O wait | 일반적으로 I/O 작업을 시작하고 작업이 완료되기를 기다리기 때문에 프로세스가 대기 상태에 들어갑니다. 이 대기 상태를 통해 프로세스가 I/O를 기다리는 동안 CPU는 다른 작업을 수행할 수 있습니다. |
I/O completion | 프로세스는 기다리고 있던 I/O 작업이 완료된 후 실행을 재개하고 준비 상태로 다시 전환됩니다. I/O 작업이 완료되면 프로세스는 다시 CPU 할당 대상이 됩니다. |
Exit | 프로세스는 실행을 마치고 시스템을 종료하며 할당된 자원을 해제하고 존재를 종료합니다. 이 단계에는 메모리 할당 해제, 파일 닫기, 시스템 계정 정보 업데이트가 포함됩니다. |
* Dispatcher : 컨텍스트 스위칭할 때 필요한 정보(PCB)를 저장하고 꺼내는 프로그램
대기 큐 (Waiting Queue)
I/O 작업과 같은 일시적으로 실행을 진행할 수 없는 프로세스를 관리하려면 “대기 큐”가 필요합니다.
대기 큐에는 Job Queue
, Ready Queue
, Device Queue
3종류가 있습니다.
Job Queue
새로운 작업이나 프로세스를 저장하는 대기열로, 아직 실행되지 않은 작업들이 포함되어 있습니다.
작업이 신규상태에서 준비 상태로 이동하기 전에 이 대기열에서 대기합니다.
Ready Queue
실행 가능한 프로세스들을 저장하는 대기열로, CPU를 할당 받을 준비가 된 프로세스들이 대기합니다.
대기 상태에 있다가 스케줄러에 의해 선택된 프로세스가 CPU를 사용하게 됩니다.
Device Queue
입출력 디바이스의 작업을 관리하는 대기열로, 입출력 작업이 완료되기를 기다리는 프로세스들이 대기합니다.
입출력 디바이스의 사용을 조정하여 시스템의 효율성을 유지합니다.
스케줄링 큐 (Scheduling queues)
프로세스 스케줄링은 여러 프로세스 간에 CPU 시간을 효율적으로 할당하여 공정하고 시기적절한 실행을 보장하는 데 필요합니다.
프로세스 스케줄링은 대기 큐에서 다음에 CPU 시간을 할당할 프로세스를 결정합니다.
프로세스를 관리하는 3가지의 스케줄러가 존재합니다.
작업 스케줄러
Job Queue의 프로그램들을 어떤 순서로 메모리에 올릴 것인지 결정합니다.
이러한 과정은 프로그램이 새로 시작될 때, 메인 메모리가 가득 찬 경우 등의 상황에만 발생하므로 자주 일어나지 않습니다.
CPU 스케줄러
모든 스케줄링 중에서 CPU 스케줄링이 가장 중요합니다.
ready queue에서 다음에 CPU 시간을 할당할 프로세스를 선택하는 역할을 담당합니다.
라운드 로빈 또는 최단 작업 다음과 같은 스케줄링 알고리즘을 통해 CPU 활용률을 최대화하고 응답 시간을 최소화하며 모든 프로세스에 대해 CPU에 대한 공정한 액세스를 보장하는 것을 목표로 합니다.
장치 스케줄러
I/O 장치에 대한 액세스를 제어하고 장치 대기열에서 대기 중인 프로세스의 요청을 관리합니다.
장치 가용성 및 프로세스 우선순위와 같은 요소를 기반으로 장치 액세스 요청의 우선순위를 지정하고 예약하여 장치 활용도를 최적화하고 장치 유휴 시간을 최소화하며 리소스 경합을 방지합니다.
Long-Term 스케줄러, Short-Term 스케줄러
Long Term Scheduler (job 스케줄러)
프로그램이 새로 시작될 때, 메인 메모리가 가득 찬 경우 등의 상황에만 발생하므로 자주 일어나지 않고 어쩌다 한번 일어나며, 이처럼 긴 간격으로 동작하는 스케줄러를 Long Term Scheduler라고 합니다
Short Term Scheduler (cpu 스케줄러)
시공유 시스템의 경우 이러한 과정은 1초에도 수십번에서 많게는 수백번도 일어나기 때문에 이러한 스케줄러를 Short Term Scheduler라고 합니다.
프로세스 스케줄링 종류
프로세스 스케줄링은 다양한 시스템 요구 사항과 우선 순위를 수용하기 위해 선점형과 비선점형으로 구분됩니다.
선점형 스케줄링
운영 체제는 현재 실행 중인 프로세스를 중단하여 우선 순위가 더 높은 다른 프로세스에 CPU 시간을 할당함으로써 공정성과 응답성을 보장할 수 있습니다.
비선점형 스케줄링
프로세스가 실행을 시작하면 운영 체제의 중단 없이 완료될 때까지 계속되거나 자발적으로 CPU를 양보하므로 우선순위가 높은 작업에 대한 응답 시간이 길어질 수 있습니다.
여기서 수행->종료, 수행->대기는 프로세스가 스스로 CPU를 반환하기에 비선점 스케쥴링입니다.
수행->준비, 대기->준비는 프로세스에서 CPU를 강제로 할당(회수)해야 하므로 선점 스케쥴링입니다.
선점형 스케줄링과 비선점형 스케줄링 간의 선택은 시스템 응답성, 공정성, 실시간 제약 조건 및 구현 단순성과 같은 요소에 따라 달라집니다
주-보조 교환 (primary-subsidiary swapping)
운영 체제 영역에서 주-보조 교환 개념은 메모리를 효율적으로 관리하는 데 중요한 역할을 합니다
가상 메모리 스와핑이라고도 하는 주-보조 스와핑은 수요에 따라 기본 스토리지(예: RAM)와 보조 스토리지(예: 디스크 또는 SSD) 간에 메모리 블록을 이동하는 작업이 포함됩니다.
Swap Out
스왑 아웃은 현재 주기억장치에 저장된 메모리 블록을 보조 저장장치로 이동시키는 과정입니다.
주기억장치에 있는 메모리 블록 중에서 필요하지 않은 페이지를 선택하여 보조 저장장치로 내보내고, 해당 메모리 공간을 다른 메모리 블록에 할당합니다.
Swap In
스왑 인은 보조 저장장치에서 주기억장치로 메모리 블록을 다시 로드하는 과정입니다.
주기억장치에 필요한 메모리 블록이 부재한 경우, 해당 메모리 블록을 보조 저장장치에서 주기억장치로 복구하여 로드합니다.
Backing Store
백킹 스토어는 보조저장장치의 임시 메모리 목적으로 쓰이는 디스크 공간을 의미합니다.
Swap Device라고도 불립니다.
가상 메모리에서 스왑 아웃된 메모리 블록은 보조저장장치의 백킹 스토어에 저장됩니다.
마치며
많은 컴퓨터 공학자들이 컴퓨터라는 시스템을 무자비하면서도 효율적으로 부려먹을까 얼마나 고민했는지 알 수 있게 되는 시간이였습니다…
(생명공학자들은 동물들과 미생물들을 그렇게 착취하더니 컴퓨터 공학자들은 컴퓨터를 아주 쏙쏙 뽑아 먹네….)
큐에서 기다리고 있다가 스케줄러 지시대로 CPU로 들어갔다가 스와핑도 했다가 정말 너 정신 없었구나 싶었습니다….ㅠㅜ
앞으로는 컴퓨터가 살짝 버벅거리더라도 고생하고 있는 것을 생각하면서 한 번은 참아주리라 다짐하게 되는 시간이 되었습니다.
참고하면 좋은 글
https://www.notesjam.com/2018/07/cpu-scheduling-in-operating-system.html