이 포스팅은 숙명여자대학교 김주균 교수님의 운영체제 강의를 바탕으로 작성되었습니다. 자세한 내용은 OS? Oh Yes! 누워서 보는 운영체제 이야기를 참고하세요. (누워서 볼 만한 책은 아닙니다 하지만 쉽게 쓰여진 책은 맞음)
프로세스란?
- 디스크에서 메모리에 올라오는 단위 (자원의 소유자)
CPU를 할당 받는 단위 -> 스레드가 대신함
프로세스는 수행 중인 프로그램
- execution : 프로그램과 실행에 필요한 값들이 표현되어 커널에 등록되어 있다
- 프로그램과 데이터를 기본으로 정상적인 실행을 위해 필요한 환경을 시스템으로부터 부여받은 능동적인 존재
PCB (Process Control Block)
- 하나의 프로세스가 시스템에 존재할 때의 모습
- 프로세스에 대한 모든 것을 표현하는 것이 PCB이다.
- 운영체제가 프로세스를 관리한다는 것은 PCB의 생성, 수정, 리스트 연결, 지우는 등의 행위이다.
- PCB 작업은 매우 빈번한 일이라 PCB는 메모리에 저장시킨다.
다음과 같은 정보들을 저장한다.
- PID, Status, Priority, PC 값, 메모리 포인터
- 문맥 데이터 : 문맥 교환시 CPU 레지스터 값을 저장하는 영역
- 할당받은 자원에 대한 목록 - 프로세스가 자원의 소유자기 때문
- 계정 정보 : 멀티 유저 시스템의 경우 필요
- 입출력 정보
프로세스의 상태와 변화
프로세스가 만들어져 시스템에 존재하는 동안 여러 사건들에 의해 일련의 상태 변화를 거친다. Created, Active State(Ready, Running, Blocked), Suspended State(Suspended Ready, Suspended Blocked), Terminated 상태 등이 있다.
Active State vs Suspended State
- Active : 메모리 공간의 일정량을 부여받은 상태
- Suspended : 메모리가 회수된 상태
- Active <-> Suspended : Swapping
- A -> S : Swap out
- S -> A : Swap in
- 스와핑도 결국은 입출력이기 때문에 발생하는 횟수가 적으면 좋다. 스와핑과 프로세스의 우선순위가 충돌하는 경우, 스와핑을 줄일 수 있는 방법을 택하는 것이 맞다.
프로세스의 State
-
Created (생성)
- 사용자가 요청한 작업이 커널에 등록되고 PCB가 만들어져 프로세스가 만들어진 상태.
- Created -> Ready : 메모리 공간을 검사하여 충분한 공간이 있으면 메모리를 할당하고 준비 상태로 바꾼다.
- Created -> Suspended Ready : 공간이 없으면 메모리를 할당하지 않고 보류 준비로 바꾼다.
-
Ready (준비)
- CPU를 할당 받기 위해 기다리고 있는 상태. CPU만 주어지면 바로 실행할 준비가 된 상태이다.
- Ready -> Running (Dispatch) : CPU를 할당 받으면 실행 상태로 바뀌고 실행된다.
- Ready -> Suspended Ready : 준비 상태였다가 메모리를 뺏긴 상태
-
Running (실행)
- CPU를 할당받아 실행 중인 상태
- Running -> Ready (Timeout) : CPU를 받아 실행하다가 시간 할당량을 소진하여 뺏긴 상태
- Running -> Blocked : 실행 상태의 프로세스가 입출력이 필요하게 되어 시스템 호출을 하고, 입출력 처리의 종료를 기다리는 상태. 이때 CPU는 바로 준비 상태의 프로세스 하나를 선택해 실행한다.
-
Blocked (대기)
- 프로세스가 실행되다가 입출력 처리를 요청하거나, 바로 확보될 수 없는 자원을 요청하면 CPU를 양도하고 요청한 일이 완료되기를 기다린다.
- Blocked -> Ready : 입출력이 완료되어 CPU 할당을 기다리는 상태.
- Blocked -> Suspended Blocked : 메모리의 여유 공간 확보를 위해 대기 상태에서 메모리를 뺏겨 보류 대기 상태로 바뀜.
-
Terminated (종료)
- 프로세스가 종료될 때 아주 잠시 거치는 상태
- 모든 자원이 회수되고 PCB를 삭제한다.
-
Suspended Ready
- 생성된 프로세스가 바로 메모리를 받지 못할 때, 준비 또는 실행 상태에서 메모리를 잃게 될 때
- 충분한 메모리 공간의 확보를 위해 준비 상태의 프로세스를 보류시키는 경우
- Running -> Suspended Ready : 높은 우선순위의 보류 대기 상태 프로세스가 준비 상태가 되어, 실행 상태의 프로세스로부터 CPU를 뺏는 경우
- Suspended Blocked -> Suspended Ready : 보류 대기 상태에 있던 프로세스가 기다리던 입출력이 완료된 경우
- Suspended Ready -> Ready : 다시 메모리를 받은 경우
-
Suspended Blocked
- 대기 상태일 때 메모리 공간을 잃은 상태
- Blocked -> Suspended Blocked : 메모리 공간 확보를 위해 메모리를 잃은 상태. 준비 상태인 프로세스가 아예 없는 경우 발생하기도 한다.
- Suspended Blocked -> Blocked : 메모리가 확보되어 대기가 된 경우.
- Suspended Blocked -> Suspended Ready : 입출력이나 기다리던 사건이 종료된 경우.