운영체제라는 과목에서 발생하는 이벤트들의 주체는 프로세스인 경우가 많다. 그래서 프로세스라는 말이 수없이 나오게 되는데, 도대체 이 프로세스가 뭘까? 정리해보고자 한다.
Process vs Job(Application)
우선 프로세스의 개념을 알아보려면, Job과 Process의 차이부터 명확하게 짚고 넘어가야 한다.
- Job(Application, Execution/Image file): 설치된 것(실행중이 아닌 상태)
- Process: 현재 실행중어서 커널에 등록된 상태 → 커널이 프로세스를 관리한다.
보다시피 Job(App)이 실행되면 커널 내부로 들어와 커널에 등록되고, Process로 불리게 된다.
Process vs Processor
그런데 프로세스는 프로세서와 혼동되어 사용되기 쉽다. 확실하게 구분해보자.
- Processor: 중앙처리 장치를 의미하며, CPU라고 불리기도 한다.
- 하드웨어적인 관점
- 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛
- 중앙 처리 장치를 뜻하며, 적어도 하나 이상의 ALU와 처리 레지스터를 내장한 것
- 소프트웨어적 측면
- 데이터 포맷을 변환하는 역할을 수행하는 데이터 프로세싱 시스템
- 하드웨어적인 관점
- Process: 위에 설명했듯이 메모리 영역에 들어와 커널에 등록된 상태의 프로그램이다.
Process Structure
- text: 컴파일된 소스 코드가 저장되는 영역
- data: 전역 변수 또는 초기화된 데이터가 저장되는 영역
- stack: 임시 데이터(함수 호출, 로컬 변수, 반환 주소값 등)가 저장되는 영역
- heap: 실행 중인 코드에 의해 동적으로 할당되는 영역
stack은 높은 주소값에서 낮은 주소값 방향으로, heap은 낮은 주소값에서 높은 주소값 방향으로 채워지게 된다.
PCB(Process Context Block)
프로세스의 정보는 프로세스 스스로가 온전히 가지고 있을까? 그렇지 않다. 프로세스는 PCB라고 하는 곳에 자신의 정보를 저장해놓고, 별도로 관리한다. 따라서 프로세스가 생성될 때, PCB를 할당받게 된다. 자신의 ID카드와 같은 셈이다!
PCB는 Table 자료구조 형태를 가지고 있으며, 프로세스와 마찬가지로 커널 공간에 존재한다.
PCB는 다음과 같은 정보들을 가지고 있다.
- PID(Process Identification Number)
- Process state
- Scheduling information
- Process priority, scheduling parameters, etc.
- Memory management information
- Base/limit registers, page tables, segment tables, etc.
- I/O status information
- List of I/O devices allocated, list of open files, etc.
- Accounting information
- Context save area
- Space for saving register context of the process
- Context Switching의 핵심적인 요소이다.
물론 PCB 정보는 OS별로 다르지만, 모든 OS에 있어 PCB의 개념은 다르지 않기 때문에 공통적으로 PCB에 접근하는 속도가 시스템 전반적인 성능에 영향을 미치는 중요한 요소이다.
Process States
프로세스와 리소스 간의 상호작용을 하는 과정(요청, 할당, 할당 해제)에서 프로세스는 여러 상태를 가질 수 있다.
위는 프로세스 상태에 대한 전반적인 그림인데(필기만 따라가도 대략적인 흐름을 알 수 있다~), 하나하나 알아보자.
- Created state
- 사용자의 요청으로 인해 커널에 등록된 상태이다.
- PCB가 할당되고, 일시적인 상태다.
- 커널은 이용가능한 메모리 공간이 있는지 확인하고, 프로세스를 ready 또는 suspended ready state로 전환시킨다.
- Ready state
- 프로세서(CPU)를 제외한 모든 자원들이 할당된 상태이다.
- 따라서 프로세서의 할당을 기다리면서, 프로세서가 할당된다면 즉시 실행될 수 있다.
- 프로세서가 할당되면 dispatch(schedule) 과정을 거쳐 running state가 된다.
- Running state
- 필요한 모든 자원들 뿐만 아니라 프로세서까지 모두 소유한 상태이다.
- time quantum(time slice) 또는 우선순위에 밀려 preemption이 발생해 ready state로 돌아갈 수 있다.
- 또는 자원 할당을 다시 기다리거나, I/O 입출력과 같은 시스템콜로 인해 sleep을 통해 asleep state로 전환될 수 있다.
- Blocked/asleep state
- 프로세서나 메모리보다는 일부 자원을 부여받기를 기다리는 상태이다. 그래서 자원을 요청하는데, 시스템콜을 통해 이루어진다.
- 요청한 자원의 할당 또는 이벤트의 발생으로 wakeup 과정을 거쳐 ready state로 돌아갈 수 있다.
- Suspended state
- Suspended ready state
- ready state에서 메모리를 빼앗긴 상태이며, 메모리에 할당되지 못한 정보들은 swap device에 임시로 저장한다.
- Suspended asleep state
- asleep state에서 메모리를 빼앗긴 상태이다.
- 메모리를 빼앗기고 다시 부여받는 과정은 각각 swap-out(suspend), swap-in(resume)이다.
- Suspended ready state
- Terminated/zombie state
- 프로세스가 실행을 끝마친 상태로, 모든 자원을 할당 해제한다.
- PCB에 일부 정보만 남게 된다.
※ 프로세스 상태도 PCB와 마찬가지로 OS별로 조금씩 상이하다. Unix와 Linux에서의 Process States는 아래 그림들을 참고할 수 있다.
System States
프로세스를 어느정도 안 상태에서 컴퓨터 시스템을 내려다보면, 전체적인 그림을 볼 수 있다. 컴퓨터 시스템은 크게 Process, Resource, Kernel 이 3가지 요소로 이루어져 있는데, Active한 Process와 Passive한 Resource와 둘 사이의 요청/할당/반납 과정을 중재하는 Kernel 이렇게 3종류의 entity들이 존재한다.
Reference
프로세스 구조 사진 출처
'CS 지식 > Operating System' 카테고리의 다른 글
[OS] Scheduling Schemes (스케줄링 기법 종류) (2) | 2024.01.23 |
---|---|
[OS] Process Scheduling (프로세스 스케줄링) (0) | 2024.01.09 |
[OS] IPC (Inter-Process Communication)와 RPC (Remote Procedure Call) (0) | 2023.12.27 |
[OS] Context Switching (컨텍스트 스위칭) (0) | 2023.12.22 |
[OS] Interrupt, Trap, System Call (인터럽트, 트랩, 시스템 콜) (2) | 2023.09.20 |