취미가 좋다
운영체제 3 : Process Management 본문
간단하게 넘어갔던 프로세스에 대해 자세히 알아보자.
Windows 작업 관리자를 보면 프로세스들을 쉽게 볼 수 있다.
먼저 작업과 프로세스를 구별해보자.
작업 (Job) / 프로그램 (Program)
- 실행할 프로그램 + 데이터
- 디스크에 보관이 되어 있는 상태로 컴퓨터 시스템에 실행 요정 전의 상태
프로세스 (Process)
- 프로그램을 실행해 달라는 요청에 의해 프로그램이 시스템(커널)에 등록된 상태를 가진다.
- 시스템 성능을 향상시키기 위해 커널에 의해 관리된다.
- 프로그램이 시스템에 등록되어 메모리를 할당 받는다면 프로세스라고 할 수 있다.
- 각종 자원들을 요청하고 할당 받을 수 있고, 프로세스 관리 블록(PCB)을 할당받을 수 있다.
- 실행 중에 각종 자원을 요구, 할당, 반납하면서 진행하기 때문에, 능동적인 개체 (active entity)라고 볼 수있다.
프로세스의 종류
역할에 따라 시스템(커널) 프로세스, 사용자 프로세스로 나눌 수 있다.
병행 수행 방법에 따라 독립 프로세스, 협력 프로세스로 나눌 수 있다.
자원 (Resource)의 개념
: 커널의 관리 하에 프로세스에게 할당되고 반납되는 수동적 개체 (passive entity)이다.
H/W resource
- Processor, memory, disk, monitor, Etc.
S/W resource
- Message, signal, files, Etc.
Process Control Block (PCB)
: 프로세스를 관리하기 위해 필요한 정보들을 모아둔 것
- 프로세스가 생성이 되면 커널에 PCB가 생성된다.
- 메모리에는 커널이 쓰는 영역이 있고, 사용자와 프로세스들이 쓰는 영역이 있다.
- PCB 정보는 OS 별로 서로 다르고, PCB 참조 및 갱신 속도는 OS의 성능을 결정 짓는 중요한 요수 중 하나이다.
PCB가 관리하는 정보
1. PID
- 프로세스 고유 식별 번호
2. 스케줄링 정보
- 프로세스 우선순위 등과 같은 스케줄링 관련 정보
3. 프로세스 상태
- 프로세스가 어떤 자원을 요청했고 가지고 있는지에 대한 정보
4. 메모리 관리 정보
- 어떤 메모리를 할당 받았는 지에 대한 정보
5. 입출력 상태 정보
6. 문맥 저장 영역 (context sava area)
- 프로세스의 레지스터 상태를 저장하는 공간
7. 계정 정보
프로세스의 상태 (Process States)
- 프로세스는 시스템에 등록된 후에, 여러 가지 상태를 거치면서 작업을 수행한다.
- 그 상태는 자원 간의 상호작용에 의해 결정된다.
1. Created State (생성)
: 어떤 작업(Job)이 커널에 등록되어 생성된 상태이다.
PCB가 할당되고 프로세스가 생성된다.
사용할 수 있는 가용 메모리 공간을 확인하여, 메모리가 충분하면 ready로 가고 그렇지 않으면 suspended ready로 간다.
2. Ready State (준비)
: 프로세스(CPU)가 프로세서 외의 다른 모든 자원을 할당 받아 프로세서 할당을 기다리는 상태이다.
프로세서만 할당받으면 즉시 실행 가능하다.
Dispatch / Schedule
: 프로세서를 할당받는 것을 의미한다.
3. Running State (실행)
: 프로세스가 필요한 모든 자원을 할당받아 작업을 실행하고 있는 상태이다.
두 가지 경로로 Running State에서 벗어난다.
Preemption
: 프로세스를 뺏기면 Ready 상태로 넘어가는 것을 말한다.
프로세서의 스케줄링에 따라 다른 프로세스가 들어오면 일어난다.
또는 time sharing 시스템에서 자신에게 할당된 시간이 모두 끝나면 Ready로 넘어와 다시 자신의 차례를 기다린다.
Block / Sleep
: I/O 자원 할당이 필요할 때 asleep로 넘어간 후, 자원을 할당받을 때까지 기다리는 것을 의미한다.
4. Blocked / Asleep State (대기)
: 기다리던 I/O 자원을 받았을 때, Ready 상태로 넘어가 다음 CPU 할당을 기다린다.
wakeup
: I/O 자원을 받아 asleep 상태에서 ready 상태로 넘어가는 것을 의미한다.
Suspended Blocked 상태에서 Suspended ready 상태로 넘어갈 때도 의미한다.
5. Suspended ready State (지연 준비)
: 메모리를 할당받지 못해 기다리는 상태이다.
6. Suspended blocked State (지연 대기)
: blocked 되어 asleep 상태에 있는 데, 메모리를 뺏긴 상태이다.
- 이후 메모리를 할당받아서 다시 동작하려고 할 때, 이전의 작업을 이어서 하려고 한다.
- 마지막 메모리의 상태 (Memory Image)를 저장하고, Swap device에 저장한다.
Swap-out (suspended)
: 메모리를 할당받은 상태에서 배앗긴 상태가 될 때, swap device에 memory image를 저장하는 것을 의미한다.
Swap-in (resume)
: 메모리가 할당되어 suspended blocked 상테에서 asleep 상태가 될 때, swap device로 이전 정보를 복구하는 것을 의미한다.
7. Terminated / Zombie State (종료)
: 프로세스가 자신의 할 일을 다 마쳤을 때, 소멸되기 전의 상태이다.
모든 자원을 반납한 상태이다.
이후 프로세스를 더 쉽게 관리하기 위해, 커널이 일부 PCB 정보를 수집한다.
수집이 끝나면 프로세스가 삭제된다.
상태 | 자원 할당 상태 | ||
Active (swapped-in) |
Running | 프로세서 o | 메모리 o |
Ready | 프로세서 x, 기타 자원 o | ||
Blocked, asleep | 프로세서 x, 기타 자원 x | ||
Suspended (Swapped-out) |
Suspended ready | 프로세서 x | 메모리 x |
suspended block | 프로세서 x, 기타 자원 x |
프로세스 관리를 위한 자료구조
Ready Queue
: ready state의 프로세스들이 줄을 서있는 공간이다.
프로세서 이외의 다른 자원들을 요청하여 asleep 상태에 있는 프로세스들은 자원 별로 따로 관리한다.
I/O Queue
Device Queue
인터럽트 (Interrupt)
: 예상치 못한 외부에서 발생한 이벤트이다.
키보드나 마우스를 예상하지 못한 타이밍에 입력하는 것으로 생각하면 된다.
인터럽트의 종류
- I/O interrupt
- Clock interrupt
- Consol interrupt
- Program check interrupt
- Machine check interrupt
- Inter-process interrupt
- System call interrupt
인터럽트 처리 과정
1. 인터럽트 발생
2. 커널이 개입하여 프로세스를 중단시킨다.
- context saving
: 어디까지 작업하고 있었는지 흐름을 PCB에 저장하는 것이다.,
3. 인터럽트 처리 (interrupt handling)
- 인터럽트 발생 장소, 원인 파악
- 인터럽트 서비스 할 것인지 결정
4. Interrupt service
- 인터럽트 서비스 루틴 (interrupt service routine) 호출
5. 이후
- 작업하던 프로세스가 다시 프로세서에서 실행되는 것이 아니라 ready 상태에 있었던 다른 프로세스가 프로세서에 올라온다.
- context restoring
: 그 프로세스가 저장한 문맥을 불러오는 것을 의미한다.
Context Switching (문맥 교환)
Context
: 어떤 작업을 수행하고 있었는 지에 대한 흐름, 즉 프로세스와 관련된 정보들의 집합이다.
프로세스에 관련된 정보는 2 곳에 저장된다.
- (CPU) CPU register context
- (Memory) Code & data, Stack, PCB
Context saving
인터럽트 발생시 프로세스가 뺏긴 자원은 CPU이다.
따라서 CPU register context를 메모리의 PCB에 저장한다.
Context restoring
프로세스가 다시 프로세서에 올라갈 때, 저장했던 register context를 프로세스로 복구하는 작업이다.
위의 두 과정을 포함하여 Context switching (Process switching) 라고 한다.
Context Switch Overhead
: Context switching에 소요되는 비용이다.
OS마다 다르고 굉장히 자주 일어나기 때문에, OS 성능에 큰 영향을 준다.
그래서 불필요한 Context switching을 줄이는 것이 중요하고 대표적인 방법으로 thread가 있다.
thread는 다음 글에서 살펴보자.
본 글은 HPC Lab. KOREAHECH YOUTUBE 채널의 김덕수 교수님 강의를 보고 작성되었습니다.
'Computer Science > 운영체제' 카테고리의 다른 글
운영체제 5 : Process Scheduling (2) (0) | 2021.01.06 |
---|---|
운영체제 5 : Process Scheduling (1) (0) | 2021.01.06 |
운영체제 4 : Thread management (0) | 2021.01.05 |
운영체제 2 : Operating Systems overview (0) | 2021.01.04 |
운영체제 1 : Computer System Overview (0) | 2021.01.04 |