PROCESS

2024. 8. 16. 17:44정보처리,전산/운영체제

반응형

■ 실행중인 프로그램


- 프로그램(Program): 디스크에 저장된 실행 가능한 명령어 파일로, 정적인 객체이다. 프로그램은 실행되기 전까지는 단순한 코드 집합이다.
  
- 프로세스(Process): 프로그램이 메모리에 올라와 실제로 실행되는 상태를 의미하며, 동적인 객체이다. 프로세스는 CPU에 의해 실행되며, 실행 중인 프로그램이라고 이해할 수 있다.

 


■  프로세스의 특성

- 프로세스 식별자(PID): 각 프로세스는 시스템에서 유일한 프로세스 식별자(PID)를 가진다. 이 식별자를 통해 시스템은 각 프로세스를 구분하고 관리한다.

- 부모 프로세스: 프로세스는 일반적으로 다른 프로세스에 의해 생성된다. 이를 부모 프로세스라고 하며, 새롭게 생성된 프로세스를 자식 프로세스라고 한다.

 

 


■  프로세스 스케줄링

프로세스가 CPU를 사용하는 순서를 결정하는 작업을 스케줄링이라고 한다.

1. 장기 스케줄링(Long term scheduling):
   - 시스템에 들어오는 작업 중에서 어떤 작업을 메모리에 올려 실행할 것인지를 결정한다.
   - 작업(job)들이 Ready Queue에 들어가는 시점을 결정한다.

2. 중기 스케줄링(Medium term scheduling):
   - 현재 실행 중인 프로세스 중 일부를 메모리에서 일시적으로 제거하거나, 일시적으로 제거된 프로세스를 다시 메모리에 올리는 작업을 관리한다.
   - 프로세스를 Ready Queue와 Suspended Queue 사이에서 이동시킨다.

3. 단기 스케줄링(Short term scheduling):
   - 메모리에 올라와 실행 준비가 완료된 프로세스 중에서 CPU를 할당할 프로세스를 결정한다. 
   - Ready Queue에 있는 프로세스들 중에서 CPU를 어떤 프로세스가 사용할지를 결정한다.

 

 

 

■  프로세스 상태

- Ready(준비 상태): 실행할 준비가 되어 CPU 할당을 기다리는 상태.
- Running(실행 상태): CPU를 할당받아 실행 중인 상태.
- Blocked(대기 상태): 프로세스가 I/O 작업 등의 이유로 잠시 실행을 멈추고 외부 이벤트를 기다리는 상태.

 

 

 


■  멀티프로세싱과 멀티태스킹

- 멀티프로세싱(Multiprocessing): 여러 개의 프로세서(CPU)를 함께 사용하는 것이다. 여러 CPU가 동시에 여러 프로세스를 처리할 수 있다.

- 멀티태스킹(Multitasking): 같은 시간에 여러 프로그램을 동시에 실행하는 것을 의미한다. 이는 단일 CPU에서도 가능하며, 시분할(time-sharing) 방식 등을 사용해 프로세스들이 번갈아 가며 CPU를 사용하는 것이다.

 

 

 


■  프로세스 우선순위

- 프로세스는 기본적으로 우선순위 0에서 실행된다. 우선순위는 nice나 renice 명령어로 조정할 수 있다.
- 우선순위는 -20(제일 높음)부터 19(제일 낮음)까지 조정 가능하다. 높은 우선순위를 가진 프로세스는 CPU를 먼저 할당받을 가능성이 크다.

 


■  프로세스 큐

- Ready Queue: 실행 대기 중인 프로세스들이 대기하는 큐.
- Blocked Queue: I/O 작업 등으로 인해 대기 상태에 있는 프로세스들이 대기하는 큐.
- Suspended Queue: 메모리에서 내려와 대기 중인 프로세스들이 대기하는 큐.

 

 


■  이벤트 처리

- Event Occurs: 특정 이벤트가 발생했을 때 프로세스가 Blocked 상태에서 Ready 상태로 전환될 수 있다. I/O 작업이 완료되면 해당 프로세스는 다시 실행 가능 상태로 전환된다.

 

 

 

 

 

■ 프로세스를 관리하기 위한 자료구조

 

 1. 프로세스 관리 자료구조

운영체제는 커널 내에서 준비 큐(Ready Queue), 대기 큐(Blocked Queue), 실행 큐(Running Queue) 등의 자료구조를 이용하여 프로세스를 관리한다. 이러한 큐들은 프로세스의 상태에 따라 프로세스를 분류하고, CPU 스케줄링을 효율적으로 관리하는 데 사용된다.

 2. 프로세스 제어 블록(PCB: Process Control Block)

PCB(Process Control Block)는 운영체제가 각 프로세스를 관리하기 위해 사용하는 핵심 자료구조이다. PCB는 특정 프로세스의 상태, 속성, 리소스 등을 저장하며, 이 정보를 바탕으로 운영체제가 프로세스를 제어하고 스케줄링한다.

 PCB에 포함된 주요 정보:

- PID (Process ID): 프로세스의 고유 식별자.
- Program Counter: 프로세스가 다음에 실행할 명령어의 위치를 나타낸다.
- CPU 레지스터(CPU Registers): 프로세스가 사용하는 CPU 레지스터의 값들을 저장한다.
- 프로세스 상태(State): 프로세스의 현재 상태 (예: 준비, 실행, 대기 등).
- 우선순위(Priority): 프로세스의 우선순위 정보로, 스케줄링에 사용된다.
- 주소 공간(Address Space): 프로세스가 사용하는 메모리 영역의 정보.
- 열린 파일 목록(Open Files): 프로세스가 열어둔 파일들의 목록.

PCB는 프로세스가 생성될 때마다 고유하게 생성되며, 프로세스가 완료되면 PCB는 제거되고 프로세스의 시작과 끝을 관리하는 중요한 역할을 한다.

 3. 프로세스 테이블 (Process Table)

운영체제는 프로세스 테이블(Process Table)이라는 자료구조를 통해 PCB들을 관리한다. 프로세스 테이블은 시스템에 존재하는 모든 프로세스의 PCB를 포함하는 데이터베이스 역할을 하며 스케줄링, 메모리 관리, 입출력 관리 등의 작업에서 이 테이블을 참조한다.

 4. 작업 제어 블록 (TCB: Task Control Block)

작업 제어 블록(TCB; Task Control Block)는 PCB와 비슷한 개념으로, 일부 시스템에서는 프로세스를 작업(task)으로 표현하고 이를 관리하기 위해 TCB라는 자료구조를 사용한다. TCB는 PCB와 같은 역할을 하지만, 주로 작업 단위로 관리하는 경우 사용된다. 

 

 

 

 

■  프로세스의 5가지 주요 상태

 

프로세스의 상태는 운영체제가 프로세스를 관리하기 위해 정의한 여러 가지 상태로, 프로세스의 생애주기 동안의 다양한 상태를 나타낸다. 

 



1. 생성 (Create/New):
   - 프로세스가 처음 생성되는 상태이다. 운영체제가 새로운 프로세스를 만들고 초기화하는 단계이다.
   - 이 단계에서는 프로세스가 아직 준비 큐에 들어가 실행을 기다리기 전의 상태이다.

2. 준비 (Ready):
   - 프로세스가 CPU를 사용하고 있지는 않지만, 언제든지 사용할 준비가 된 상태이다.
   - 준비 상태의 프로세스들은 CPU 할당을 기다리며, 일반적으로 준비 상태에 있는 프로세스 중 우선순위가 높은 프로세스가 CPU를 할당받게 된다.

3. 실행 (Running):
   - 프로세스가 CPU를 차지하여 실제로 명령어들이 실행되고 있는 상태이다.
   - 이 상태에서는 CPU가 프로세스의 명령을 처리하고 있다.

4. 대기 (Waiting/Blocked):
   - 프로세스가 입출력 작업의 완료나 특정 이벤트(예: 파일 읽기/쓰기, 사용자 입력 등)를 기다리고 있는 상태이다.
   - CPU는 이 상태에 있는 프로세스에게 할당되지 않고, 프로세스는 이벤트가 발생할 때까지 대기하게 된다.

5. 종료 (Terminated):
   - 프로세스의 실행이 완료된 상태이다.
   - 프로세스가 더 이상 실행되지 않으며, 시스템 자원이 해제된다.

 

 

 

 

■ 추가 상태

 



1. 유예 준비 (Suspended Ready):
   - 준비 상태에 있는 프로세스가 일시적으로 메모리에서 내려와 디스크에 위치하는 상태이다.
   - 메모리 부족 등으로 인해 프로세스를 일시적으로 중지하고, 필요할 때 다시 메모리에 불러와 준비 상태로 복귀할 수 있다.

2. 유예 대기 (Suspended Waiting):
   - 대기 상태에 있는 프로세스가 메모리에서 내려와 디스크에 위치하는 상태이다.
   - 대기 상태에서 대기 중인 이벤트가 발생하면 유예 준비 상태로 전환될 수 있다.

 3. 상태 전이 (State Transitions)

- Admitted : 새로운 프로세스가 생성되어 준비 상태로 전환.
- Scheduler Dispatch : 준비 상태에 있는 프로세스가 CPU를 할당받아 실행 상태로 전환.
- Interrupt : 실행 중인 프로세스가 외부 인터럽트 등으로 인해 다시 준비 상태로 전환.
- I/O or Event Wait (입출력 또는 이벤트 대기): 실행 중인 프로세스가 I/O 작업이나 이벤트를 기다리기 위해 대기 상태로 전환.
- I/O or Event Completion (입출력 또는 이벤트 완료): 대기 상태에 있던 프로세스가 이벤트 완료 후 준비 상태로 전환.
- Exit (종료): 실행 중이던 프로세스가 작업을 완료하여 종료 상태로 전환.


 

 

■ 프로세스 종류

 1. 시스템 프로세스
시스템 프로세스는 운영체제의 핵심 기능을 지원하기 위해 실행되는 프로세스들이다. 이들은 시스템 부팅 시 자동으로 생성되며, 운영체제의 안정적인 동작을 보장하는 데 필수적인 역할을 한다.

- PID 0 (Swapper 또는 sched):
  - 리눅스 시스템에서는 부팅 과정에서 가장 먼저 생성되는 프로세스이다. PID 0은 swapper 또는 sched라고 불리며, 메모리 관리와 스케줄링과 같은 기본적인 시스템 작업을 수행한다.
  - 이 프로세스는 직접적으로 사용자와 상호작용하지 않으며, 운영체제의 내부 작업을 관리한다.

- PID 1 (init 또는 systemd):
  - PID 1은 init 또는 systemd 프로세스로, 시스템에서 가장 중요한 시스템 프로세스 중 하나이다. 이 프로세스는 시스템이 부팅될 때 실행되며, 다른 모든 시스템 프로세스와 사용자 프로세스를 생성하고 관리한다.
  - 이 프로세스는 시스템의 기본적인 초기화 작업을 수행하며, 다양한 데몬(daemon) 프로세스를 시작한다.

- kthreadd:
  - kthreadd는 커널 스레드를 관리하는 시스템 프로세스이다. 커널에서 여러 스레드를 생성하고 관리하는 데 사용된다.

- ksoftirqd:
  - ksoftirqd는 소프트웨어 인터럽트를 처리하는 시스템 프로세스이다. 주로 네트워크 패킷 처리와 같은 작업을 수행한다.

 


 2. 사용자 프로세스
사용자 프로세스는 사용자가 직접 실행하는 프로그램들로, 사용자가 시스템에서 실행하는 모든 응용 프로그램을 포함한다. 

- bash:
  - bash는 리눅스 및 유닉스 시스템에서 널리 사용되는 셸 프로그램이다. 사용자 프로세스로서, 사용자가 명령을 입력하면 이를 실행하고 결과를 반환하는 역할을 한다.

- top:
  - top은 시스템 모니터링 프로그램으로, 현재 실행 중인 프로세스 목록을 표시하고, CPU 및 메모리 사용량을 실시간으로 보여주는 사용자 프로세스이다.

 


 3. MBR (Master Boot Record)

  - MBR은 디스크의 첫 번째 섹터(섹터 0)에 위치하며, 시스템이 부팅될 때 가장 먼저 실행된다.
  - MBR은 디스크 파티션 정보를 가지고 있으며, 부팅할 파티션을 선택하여 해당 파티션의 부트 로더를 실행한다.

- POST (Power-On Self-Test):
  - 시스템이 부팅될 때, 하드웨어가 정상적으로 작동하는지 확인하는 과정이다. 이 과정이 완료되면 MBR이 실행된다.

 

 

 

 

 

■ 프로세스의 유형 구분

 1. 부모 프로세스 (Parent Process)
-  자식 프로세스를 생성하고 이를 관리하는 프로세스이다. 부모 프로세스는 자식 프로세스가 종료될 때까지 대기한다.
 - 자식 프로세스가 종료되면 부모 프로세스는 자식 프로세스의 종료 상태를 확인하고, 자식 프로세스가 반환한 결과를 수집한다.
  - 부모 프로세스는 자식 프로세스의 상태를 추적하고, 필요한 경우 자식 프로세스를 종료할 수 있다.

 2. 자식 프로세스 (Child Process)
-  부모 프로세스에 의해 생성된 프로세스이다. 자식 프로세스는 독립적으로 실행되며, 실행이 끝나면 부모 프로세스에 결과를 반환하고 종료한다.
  - 자식 프로세스는 부모 프로세스와 자원을 공유할 수 있지만, 각자의 메모리 공간을 가진다.
  - 자식 프로세스는 부모 프로세스가 종료되면 고아 프로세스가 될 수 있다.

 3. 고아 프로세스 (Orphan Process)
-  실행 도중에 부모 프로세스가 먼저 종료된 프로세스이다. 부모 프로세스가 종료되면 고아 프로세스는 시스템의 init 프로세스(부모 프로세스)를 가지게 된다.
- 특징: 
  - 고아 프로세스는 시스템의 init 프로세스에 의해 관리되며, init 프로세스가 자식으로 가진다.
  - 고아 프로세스는 메모리 누수와 같은 문제를 예방하기 위해 init 프로세스에 의해 적절히 관리된다.

 4. 좀비 프로세스 (Zombie Process)
-  종료되었지만, 부모 프로세스가 종료 상태를 확인하지 않아 여전히 시스템에 남아 있는 프로세스이다.
- 특징:
  - 좀비 프로세스는 프로세스가 종료된 후에도 프로세스 제어 블록이 시스템에 남아 있다.
  - 부모 프로세스가 자식 프로세스의 종료 상태를 수집하지 않으면 좀비 프로세스가 발생한다.
  - 좀비 프로세스는 시스템 리소스를 소모하지 않지만, 프로세스 ID를 차지하여 시스템 자원을 낭비할 수 있다.

 5. 데몬 프로세스 (Daemon Process)
-  특정 서비스나 작업을 수행하기 위해 백그라운드에서 실행되는 프로세스이다.
  - 데몬 프로세스는 일반적으로 사용자와 직접 상호작용하지 않으며, 시스템 부팅 시 자동으로 시작된다.
  - 데몬 프로세스는 서비스 제공, 로그 기록, 시스템 모니터링 등과 같은 작업을 수행한다.
  - 데몬 프로세스는 부모 프로세스 없이 시스템의 init 프로세스나 다른 시스템 관리 프로세스에 의해 관리된다.

 
 

 

 

반응형

'정보처리,전산 > 운영체제' 카테고리의 다른 글

운영체제의 발달 과정  (0) 2024.09.27
UNIX CPU 스케줄링  (1) 2024.08.16
복구시간목표(RTO)와 복구시점목표(RPO)  (0) 2024.07.26
펌웨어(Firmware)  (0) 2024.06.26
Cache  (0) 2024.04.29