1. 프로세스 개요
- 커널에 등록된 실행 단위 (실행 중인 프로그램)
- 사용자 요청/프로그램의 수행 주체(entity)
라는 것을 2.OS개요 포스트에서 정리하였다.
프로세스를 세부적으로 정의하면 다음과 같이 분류하여 정의할 수 있다.
작업(Job) / 프로그램(Program)
- 실행할 프로그램 + 데이터
- 컴퓨터 시스템에 실행 요청 전의 상태
- (Job은 디스크에 보관되어 있는 상태 이다.)
프로세스(Process)
- 실행을 위해 시스템(커널)에 등록된 작업
- 시스템 성능 향상을 위해 커널에 의해 관리됨
Job은 디스크에 있는 형태이고 이를 실행하기 위해 시스템에 처리해 달라고 요청을 한다.
시스템에 등록된 상태를 프로세스라고 부른다.
(프로그램이 시스템에 등록되서 메모리를 할당 받았을 때 프로세스 라고 한다.)
2. 프로세스의 정의
실행중인 프로그램
- 커널에 등록되고 커널의 관리하에 있는 작업
- 각종 자원들을 요청하고 할당 받을 수 있는 개체
- 프로세스 관리 블록(PCB)을 할당 받은 개체
- 능동적인 개체(active entity)
- 실행 중에 각종 자원을 요구, 할당, 반납하며 진행
Process Control Block(PCB)
• 커널 공간 (kernel space) 내에 존재
• 각 프로세스들에 대한 정보를 관리
3. 프로세스의 종류
구분 | 종류 | 설명 |
역할 | 시스템(커널)프로세스 | 모든 시스템 메모리와 프로세서의 명령에 액세스 할 수 있는 프로세스 프로세스 실행 순서를 제어, 다른 사용자 및 커널(운영체제) 영역을 침범하지 못하게 감시, 사용자 프로세스를 생성 기능 |
사용자 프로세스 | 사용자 코드를 수행하는 프로세스 | |
병행 수행 방법 | 독립 프로세스 | 다른 프로세스에 영향을 주지 않거나 다른 프로세스의 영향을 받지 않으면서 수행하는 병행 프로세스 |
협력 프로세스 | 다른 프로세스에 영향을 주거나 다른 프로세스에서 영향을 받는 병행 프로세스 |
자원(Resource)의 개념
커널의 관리하에 프로세스에게 할당/반납 되는 수동적 개체
자원이라는 것은 프로세스에게 할당되어서 프로세스가 자원을 사용해서 작업을 처리함.
자원의 분류
- H/W resource: 프로세서, 메모리, 디스크, 모니터, 키보드 등
- S/W resource: 메세지, 시그널, 파일들 등
Process Control Block (PCB)
프로세스를 컨트롤하기 위해 필요한 정보들을 모아놓은 것
- OS가 프로세스 관리에 필요한 정보 저장
- 프로세스 생성시, 생성 됨
PCB가 관리하는 정보
- PID(Process Identification Number): 프로세스 고유 식별 번호
- 스케줄링 정보
- 프로세스 우선순위 등과 같은 스케줄링 관련 정보들
- 프로세스 상태
- 자원 할당, 요청 정보 등
- 메모리 관리 정보
- Page table, segment table 등
- 입출력 상태 정보
- 할당 받은 입출력 장치, 파일 등에 대한 정보 등
- 문맥 저장 영역 (context save area)
- 프로세스의 레지스터 상태를 저장하는 공간 등
- 계정 정보
- 자원 사용 시간 등을 관리
PCB라는 것은 운영체제가 프로세스를 관리하기 위해 사용하는 것이므로 운영체제 별로 PCB정보는 서로 다르다.
PCB 참조 및 갱신 속도는 OS의 성능을 결정 짓는 중요한 요소 중 하나이다.
프로세스의 상태
프로세스: 자원간의 상호작용에 의해 결정
Process State Transition Diagram
Created State (생성된 상태)
프로세스는 커널에 등록된 Job이라고 정의했었다. 어떤 Job이 커널에 등록된(생성된) 상태를 Created State라고 한다. PCB할당 및 프로세스 생성한다.
Created State에 오면 프로세스는 어디로 갈것인지 기로에 서게 된다.
이 기준은 내가 쓸 수 있는 메모리 공간이 있느냐를 통해서 어디로 갈지 결정함.
만약 Memory 가 있다면 ready 상태 Memory가 없다면 중지 상태로 간다.
(메모리 할당 받으면 ready 상태로 간다.)
Ready State
프로세서 외에 다른 모든 자원을 할당 받은 상태
- 프로세서 할당 대기 상태
- 즉시 실행 가능 상태
CPU를 할당받으면 running상태가 되고 이를 dispatch 되었다고 한다.
Running State
프로세서와 필요한 자원을 모두 할당 받은 상태
Preemption
- Running state -> ready states
- 프로세서 스케줄링(e.g, time-out, priority changes)
running 상태에서 프로세서를 뺐기면 ready 상태가 된다. 이 때 preemption이라고 한다.
발생하는 원인은 프로세서 스케쥴링에 따라 다른애가 들어오거나
time sharing system에서 할당된 시간이 끝나면 기다리는 경우 이다.
Block/sleep
- Running state -> asleep state
- I/O 등 자원 할당 요청
예를들어 은행에 가서 업무를 처리하는데 신분증을 놓고왔다고 하자. 그렇다면 집으로 가서 신분증을 챙기러 갈 것이다.
시스템에서는 이를 I/O(입출력) 이라 한다.
집에가서 신분증을 챙기고 나올 때 다른 사람이 내 집에 함부로 들어가지 못하게 문을 잠궈놓는다.
이상태를 Block 이라고 한다. 서류를 가지고 올때까지 잠자면서 대기하고 있을 것이다.
asleep
I/O를 대기하는 중
Blocked/Asleep State
프로세서 외에 다른 자원을 기다리는 상태
- 자원 할당은 System call에 의해 이루어 짐
Wake-up
- Asleep state --> ready state
I/O를 하려고 asleep상태로 가서 대기중이다. 데이터가 도착을 했다면 asleep가 running이 해도 될까?
정책에 따라 다르겠지만 다른 프로세스가 작업 중 갑자기 들어오지 못한다.
I/O가 끝났다면(데이터 입출력이 완료되면) asleep에서 ready상태로 가서 다음 CPU할당을 기다린다.
Suspended State
메모리를 할당 받지 못한(빼앗긴) 상태
- Memory image를 swap device에 보관한다.
- (Swap device: 프로그램 정보 저장을 위한 특별한 파일 시스템)
- 커널 또는 사용자에 의해 발생한다.
처음에 created 상태에서 suspended ready로 오는 경우는 메모리가 없을 때 이다.
suspended는 메모리가 없음을 의미한다.
asleep상태에서 Blocked되서 suspended blocked 상태가 됬는데 이때는 메모리, 공간 모두 뺐긴것을 의미한다.
메모리와 공간을 내놓으라고 하면 그 공간은 지워진다.
프로세스가 메모리를 할당받아서 일을 하려고 하는데 이미 공간은 지워져서 처음부터 일을 하게 된다.
이럴때 손해가 발생한다.
중간부터 할 수 있게 지금까지 했던 작업을 저장할 수 있게 해야한다.
이 상태를 (메모리의 상태) 를 저장한 것이 Memory Image라고 한다.
이 Memory Image를 Swap device에 저장한다.
Terminated / Zombie State
프로세스 수행이 끝난 상태
모든 자원을 반납한 상태
커널 내에 일부 PCB정보만 남아 있는 상태 (이후 프로세스 관리를 위해 정보를 수집함)
프로세스가 작업을 마치면 바로 없어지면 되지만, terminated에 잠시 들리게 된다.
커널이 나중에 동일한 작업을 요청할 때 이 프로세스가 자원을 얼마나 썼는지, 일을 얼마나 했는지 등의 정보를 알 수 있으면 좋을 것이다. 이러한 정보를 수집하기 위해 잠시 들리는 것이다.
정보 수집이 끝나면 프로세스를 삭제 시킨다.
프로세스 관리를 위한 자료구조
- Ready Queue
- I/O Queue
- Device Queue
본 포스트는 KOREATECH의 HPC LAB. Duksu Kim 교수님 OS강의를 기반으로 정리한 내용입니다.
상업적 의도가 아닌 공부한 것을 정리해 놓은 목적으로 게시한 포스트입니다.
아래의 출처에서 자세한 내용을 수강하실 수 있습니다.
https://www.youtube.com/playlist?list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN
'CS > OS' 카테고리의 다른 글
[OS] 4. 운영체제 스레드 관리 (Thread) (0) | 2022.03.11 |
---|---|
[OS] 3-2. 프로세스 관리(Interrupt, Context Switching) (0) | 2022.03.09 |
[OS] 2. OS개요, 운영체제 역할, 구조 (0) | 2022.03.07 |
[OS] 1. 컴퓨터 시스템의 개요 (0) | 2022.03.06 |
[OS] 0. 운영체제 목차 및 키워드 정리 (0) | 2022.03.06 |