운영체제/공룡책

3. 프로세스의 이해

기리도 2022. 3. 15. 23:05
728x90

  프로세스의 이해

 

  프로세스란?

  - 실행 중인 프로그램을 프로세스라 한다.

  - 프로세스란 운영체제에서의 작업 단위이다.

  - 프로세스를 실행하려면 자원이 필요하다.(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로 구현된다.

Queueing Diagram as a common representation of process scheduling

 

  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: 자식 프로세스가 종료될 때까지 해당 프로세스를 기다리게 한다.
728x90