프로세스의 이해
프로세스란?
- 실행 중인 프로그램을 프로세스라 한다.
- 프로세스란 운영체제에서의 작업 단위이다.
- 프로세스를 실행하려면 자원이 필요하다.(CPU time, memory, files, I/O devices)
Memory layout of a process
프로그램이 실행될 때 운영체제는 프로세스가 사용할 가상 메모리 공간을 받는데, 이 메모리의 구성을 메모리 레이아웃이라고 한다.
- Text section: 실행 가능한 코드가 차지하는 영역
- Data section: 전역 변수가 차지하는 영역
- Heap sction: 동적 할당으로 저장되는 데이터가 차지하는 영역. 런타임 시에 크기가 결정되며, 사용자가 관리해 줘야 한다. 낮은 주소의 메모리에서부터 높은 주소의 메모리로 할당된다.
- Stack section: 지역변수, 매개변수, 함수의 return addresses가 저장되는 영역. 높은 주소의 메모리에서부터 낮은 주소의 메모리로 할당된다.
프로세스의 상태
- New: 프로세스가 생성된 상태(메모리에 할당된 상태)
- Running: 프로세스가 CPU를 점유해서 명령어를
- Waiting: I/O request나 이벤트가 끝날 때까지 기다리는 상태. 해당 상태가 끝나면 Ready 상태가 된다.
- Ready: CPU를 사용할 준비를 마치고 할당을 기다리는 상태.
- Terminated: 프로세스가 종료된 상태. 사용하던 메모리 영역이 해제된다.
프로세스는 어떻게 관리하는가?
- PCB(Process Control Block): 프로세스에 관한 정보를 저장하는 테이블. 프로세스가 생성될 때마다 그에 대응하는 PCB가 생성되며 운영체제는 PCB를 이용해 프로세스를 제어한다. PCB에는 다음과 같은 정보가 담긴다.
- Process state:
- Program counter: 중앙처리장치의 프로그램 카운터라는 레지스터에 저장된 값으로, 다음에 실행될 명령어의
주기억장치 주소를 의미
- CPU registers
- CPU-scheduling information: 다음에 실행될 프로세스를 결정하는 데 필요한 정보로, 프로세스 스케줄링 정책, 우선 순위 등을 의미
- Memory-management information
- Accounting information
- I/O status information
멀티프로그래밍의 목적
- 동시에 여러 개의 프로세스를 실행하는 것
- 그렇게 해야 CPU 사용율을 최대한 높일 수 있음
타임 쉐어링의 목적
- 프로세스를 계속 전환하며 사용자가 여러 프로그램을 동시에 사용하는 것처럼 느끼게 함.
프로세스 스케줄링
- 프로세스를 관리할 때 프로세스 간에 우선 순위를 두어 효율성을 높이는 것을 말한다.
스케줄링 큐(Scheduling Queues)
-프로세스가 시스템에 올라가면 Ready queue에 올라가고 CPU의 코어에서 실행될 때까지 대기한다.
- 실행될 이벤트를 기다리는 프로세스는 wait queue로 옮겨진다.
- 이러한 큐들은 일반적으로 PCB로 이루어진 linked list로 구현된다.
Context Switch
- 프로세스의 맥락은 PCB로 나타난다.
- Interrupt가 시행될 때 시스템은 작동 중이던 프로세스를 중단한 뒤 나중에 이어서 처리할 수 있도록 현재 작동 중인 프로세스의 맥락을 저장한다.
- Context switch는 CPU core를 다른 프로세스와 바꾼다. Context switch 현재 프로세스의 상태를 저장하고 앞으로 수행할 프로세스의 상태를 복원한다.
Process creation
- 프로세스는 부모와 자식 관계의 트리 구조를 띠며, 프로세스 ID가 1인 init 프로세스에서 뻗어 나간다.
- 자식 프로세스가 생길 때 부모 프로세스는 두 가지 실행 옵션이 있다. 하나는 자식 프로세스와 동시에 작동하는 것이고 하나는 자식 프로젝트가 종료될 때까지 기다리는 것이다.
- 자식 프로세스의 주소 공간 사용 방식은 두 경우로 나뉜다. 첫 번째는 자식 프로세스와 부모 프로세스가 실행하는 명령어가 똑같아서 PCB만 따로 생성한 뒤 부모 프로세스의 주소 공간을 그대로 복제해서 사용하는 경우다. 두 번째는 자식 프로세스가 새로운 프로그램을 불러오는 경우다.
Process terminates
- 마지막 구문을 처리한 뒤에 프로세스가 종료된다.
- exit() ststem call: 운영체제에 프로세스를 즉시 종료하라고 요청한다.
- 운영체제는 모든 자원(메모리, 오픈 파일, I/O 버퍼 등)에 대한 할당을 해제하고 복구한다.
Zombie and Orphan
- zombie process: 자식 프로세스가 종료되었으나 부모 프로세스가 아직 wait()를 호출하지 않았을 때 자식 프로세스를 좀비 프로세스라고 한다. 자식 프로세스가 죽지 않고 남아 있는 상태.
- Orphan: 부모 프로세스가 wait()를 실행하지 않고 종료되었을 때 자식 프로세스를 고아 프로세스라 한다.
wait() system call: 자식 프로세스가 종료될 때까지 해당 프로세스를 기다리게 한다.
'운영체제 > 공룡책' 카테고리의 다른 글
2. 운영체제의 개념과 구조 (0) | 2022.03.09 |
---|---|
1. 운영체제란 무엇인가 (0) | 2022.03.08 |