작업(Job)과 프로그램(Program)은 컴퓨터 시스템에서 실행 요청 전의 상태라 프로그램과 프로세스는 다르다. 프로세스가 정확히 무엇인지 알아보도록 하자.
프로세스(process)란 실행을 위해서 커널에 등록된 작업으로 커널에 의해 관리되는 실행 중인 프로그램이라고 할 수 있다. 프로세스는 프로세스 관리 블록(PCB)을 할당받는 개체로 각종 자원들을 요청하고 할당받을 수 있다. 따라서 실행 중에 각종 자원을 요구하고 할당받고 반납하는 능동적인 개체이다.
프로세스 관리 블록(PCB, Process Control Block)이란 ❓
메모리 영역은 프로세스가 쓰는 공간과 커널 공간이 있으며 PCB는 커널 공간 내에 존재하고 프로세스가 생성 시 생성된다. OS가 프로세스 관리에 필요한 정보를 저장하는 곳으로 각 프로세스들에 대한 정보를 관리하는 곳이다. PCB가 관리하는 정보에는 프로세스 상태, PID(프로세스 고유 식별 번호), 스케줄링 정보, 메모리 관리 정보, 입출력 상태 정보 등이 들어가 있다. PCB 정보는 OS별로 다르며 PCB 참조 및 갱신 속도가 OS의 성능을 결정짓는 중요한 요소이다.
자원이란 커널의 관리하에 프로세스에게 할당/반납되는 수동적 개체로써 HW자원과 SW 자원으로 나뉜다. HW자원으로는 프로세서, 메모리, 디스트등이 있으며 SW 자원으로는 파일, 메시지 등이 있다.
프로세스 상태변화를 알아보자.
Created State
Job이 커널에 등록되어 PCB가 할당되고 프로세스가 생성된다. 메모리 공간을 기준으로 쓸 수 있는 메모리 공간이 있다면 ready , 쓸 수 있는 메모리 공간이 없다면 suspended ready로 이동된다.
Ready State
프로세서 외에 다른 자원들은 모두 할당받은 상태이다. 프로세서의 할당을 대기하고 있는 상태 즉 아직 프로세서를 할당받지 못한 상태이다.
Ready State -> Running State로 넘어가는 것을 Dispatch 혹은 Schedule이라고 부른다 ❗
Running State
프로세서와 필요한 자원을 모두 할당 받은 상태로 다시 ready state로 내려가는 Preemption 경우가 있다. 이 경우는 타임아웃이 되었거나 우선순위 변화에 따라서 cpu를 빼앗긴 상태이다. Running state에서 asleep state로 내려가는 것으로 Block/sleep이라 부른다. 이 경우는 I/O 등 자원 할당을 요청하거나 메모리에서 데이터를 읽거나 써야 할 때 다른 프로세스가 CPU를 사용할 수 있도록 하기 위해 block 된다고 보면 된다.
Blocked/Asleep State
프로세서외에 다른 자원을 기다리는 상태로 기다리는 자원이 왔다고 하여 바로 Running state로 올라갈 수 없다. 따라서 ready state에 가서(Wake-up) 프로세서의 할당을 기다려야 한다.
Suspended Sate
- suspended ready : 메모리를 할당받지 못한 상태
- suspended blocked : 메모리를 빼앗긴 상태 (메모리 이미지를 swap device에 보관)
여태까지 메모리 한 작업들이 다른 프로세스의 작업으로 인해 전부 지워질 경우 다시 처음부터 해야 하는 비효율이 발생하므로 여태까지 메모리에서 한 작업들을 사진처럼 찍어두어 sawp device에 저장시키는 것이다.
Terminated State
프로세스 수행이 끝나서 모든 자원을 반납 후 커널 내에 일부 PCB정보만을 수집한 상태이다. PCB정보를 수집하는 이유는 똑같은 작업이 또 들어올 경우 더 빠르게 처리하기 위해서이다. 수집이 전부 끝나면 프로세스를 삭제시킨다.
프로세스 관리를 위한 자료구조
Ready list에 프로세스들이 대기하게 되고 스케줄러에 의해서 프로세스들의 순위가 결정된다. Blocked lists에서는 자원별로 프로세스들을 관리한다.
참고자료
www.youtube.com/watch?v=jZuTw2tRT7w&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=5
'OS' 카테고리의 다른 글
프로세스 스케줄링이 뭘까❓ (0) | 2021.01.04 |
---|---|
스레드에 대해 알아보자 (0) | 2021.01.03 |
인터럽트를 알아보자 (0) | 2020.12.31 |
운영체제의 구조와 기능을 간단히 살펴보자 (0) | 2020.12.31 |
운영체제를 본격적으로 들어가기 전에 - 컴퓨터 시스템 개요 (0) | 2020.12.30 |