1. 프로세스의 부모-자식 관계
시스템 부팅 시 가장 먼저 실행되는 #0 프로세스는 모든 프로세스의 조상으로, 이후 생성되는 모든 프로세스의 부모 역할을 합니다.
일반적으로 모든 프로세스는 부모 프로세스를 가지며, 부모는 여러 자식 프로세스를 생성할 수 있습니다.
프로세스의 생성은 대부분 시스템 호출을 통해 이루어지며, 이 호출은 부모 프로세스가 자식 프로세스를 생성하는 유일한 방법입니다.
다만, PID 0, 1, 2와 같은 조상 프로세스는 예외로, 시스템 호출이 아닌 수작업(hand-crafted)으로 생성됩니다.
2. 리눅스의 프로세스 사례
리눅스 시스템에서 #0 프로세스(hand-craft)는 swapper/idle 프로세스로, 부팅 시 가장 먼저 실행됩니다.
#1 프로세스는 부팅 후 생성되는 모든 프로세스의 조상입니다.
#2 프로세스는 kthreadd 프로세스로, 커널 모드에서 실행되는 모든 커널 프로세스의 조상입니다.
#0 프로세스는 운영체제에서 특별한 위치를 차지합니다. Unix 시스템에서는 swapper로 불리며, 시스템 부팅을 담당합니다.
리눅스에서는 idle 프로세스로, 부팅 과정에 관여하지 않고, 시스템에서 실행할 프로세스가 없을 때 CPU를 점유하며 대기하는 역할을 합니다.
이 프로세스는 우선순위가 가장 낮아, 다른 프로세스가 있으면 실행될 일 없습니다.
3. 프로세스를 다루는 시스템 호출
프로세스의 생성과 종료는 주요 시스템 호출을 통해 관리됩니다:
- fork(): 새로운 자식 프로세스를 생성하는 시스템 호출입니다.
- exit(): 현재 프로세스의 종료를 처리하는 시스템 호출로, 프로세스가 종료될 때 프로세스 제어 블록(PCB)에 종료 코드가 저장됩니다.
- wait(): 부모 프로세스가 자식 프로세스의 종료를 기다리고, 종료 코드를 확인하는 시스템 호출입니다.
4. 부모-자식 프로세스의 실행 관계
부모와 자식 프로세스는 다양한 실행 관계를 가질 수 있습니다.
부모 프로세스가 자식의 종료를 기다리거나, 자식 프로세스가 부모보다 먼저 종료될 수도 있습니다.
자식 프로세스가 먼저 종료되고 부모가 이를 인식하지 못하면 좀비 프로세스(zombie process)가 발생할 수 있습니다.
좀비 프로세스는 종료된 후에도 시스템 자원을 차지한 채 남아있는 프로세스입니다.
5. 좀비 프로세스의 처리
좀비 프로세스를 제거하려면 부모 프로세스가 wait() 시스템 호출을 통해 자식의 종료 코드를 읽어야 합니다.
부모가 이를 수행하지 않으면 좀비 프로세스는 시스템 자원을 계속해서 점유하게 됩니다.
만약 부모 프로세스에 SIGCHLD 신호를 보내서 좀비 프로세스를 처리할 수 있습니다.
부모 프로세스가 종료되면 좀비 프로세스는 init 프로세스에 의해 자동으로 처리됩니다.
6. 고아 프로세스와 입양
고아 프로세스(Orphan Process)는 부모 프로세스가 먼저 종료된 자식 프로세스를 의미합니다.
운영체제는 이러한 고아 프로세스를 init 프로세스에 입양시켜 관리하며, 이는 시스템의 안정성을 유지하는 중요한 역할을 합니다.
6. 여러 종류의 프로세스
백그라운드 프로세스와 포그라운드 프로세스로 나뉩니다.
- 백그라운드 프로세스는 터미널에서 실행되지만, 사용자와의 직접적인 상호작용 없이 실행됩니다.
- 포그라운드 프로세스는 실행 중 터미널 사용자와의 상호작용을 필요로 하는 프로세스입니다.
CPU 집중 프로세스(CPU intensive process)와 I/O 집중 프로세스로 구분됩니다:
- CPU 집중 프로세스는 대부분의 시간을 계산 작업에 소비하며, CPU 자원을 많이 사용합니다.
- I/O 집중 프로세스는 네트워크 전송이나 파일 입출력과 같은 작업에 집중하며, 입출력 시스템의 성능에 따라 성능이 좌우됩니다.
운영체제는 스케줄링 시 I/O 집중 프로세스에 더 높은 우선순위를 부여하여, I/O 작업이 진행되는 동안 다른 프로세스가 CPU를 사용할 수 있도록 합니다.
결론
운영체제에서 프로세스의 계층 구조는 시스템의 안정성과 효율성을 유지하는 데 필수적입니다.
부모-자식 관계를 통해 프로세스가 생성되고 종료되며, 시스템 호출을 통해 이 과정이 관리됩니다.
백그라운드와 포그라운드 프로세스, CPU 집중 프로세스와 I/O 집중 프로세스의 개념을 이해하면 시스템 자원의 효율적인 사용과 최적화된 성능을 유지할 수 있습니다.
'운영체제' 카테고리의 다른 글
프로세스와 스레드: 실행 단위의 진화 (0) | 2024.08.18 |
---|---|
프로세스 제어: 생성부터 종료까지 (0) | 2024.08.17 |
커널의 프로세스 관리: 프로세스 테이블, PCB, 그리고 스케줄링 (0) | 2024.08.15 |
프로세스와 프로세스 관리 : 프로그램이 메모리에서 어떻게 실행되는가? (0) | 2024.08.14 |
운영체제가 가지고 있는 두 번째 인터페이스: 인터럽트 (0) | 2024.08.13 |