
프로세스의 상태
운영체제에서 프로세스(Process) 는 실행 중 여러 가지 상태(state) 를 가집니다. 대표적인 상태는 다음과 같습니다.
1. 프로세스의 주요 상태
상태설명
생성 상태 (New) | 프로세스가 생성되어 PCB가 할당 된 상태 |
준비 상태 (Ready) | 실행 가능한 상태이지만 CPU를 할당받지 못한 상태 |
실행 상태 (Running) | CPU를 할당받아 실행 중 인 상태 |
대기 상태 (Waiting, Blocked) | 입출력 작업 등 특정 이벤트를 기다리는 상태 |
종료 상태 (Terminated) | 실행이 끝나 PCB가 폐기되고 자원이 반환된 상태 |
2. 프로세스 상태 전이 (State Transition)
- 준비 → 실행: CPU를 할당받으면 실행 상태로 전환
- 실행 → 준비: 타이머 인터럽트 발생 시 다시 준비 상태로 이동
- 실행 → 대기: 입출력 요청 등으로 실행이 불가능해지면 대기 상태로 이동
- 대기 → 준비: 대기 중이던 이벤트가 완료되면 다시 준비 상태로 전환
- 실행 → 종료: 프로세스가 정상 종료되거나 강제 종료될 경우 종료 상태로 이동
3. 프로세스 계층 구조
운영체제에서는 프로세스가 계층적으로 관리 됩니다.
Linux, Unix, macOS 등 대부분의 OS에서 프로세스는 트리(tree) 구조 를 형성하며 부모-자식 관계를 가집니다.
- 최초의 프로세스 (Init 또는 systemd)
- 운영체제가 부팅되면 최초의 프로세스(예: init 또는 systemd)가 실행됩니다.
- 이후 다른 프로세스를 생성하며, 생성된 프로세스는 부모 프로세스의 자식 프로세스 가 됩니다.
- 프로세스 생성 방식
- fork(): 기존 프로세스를 복제하여 새로운 프로세스(자식 프로세스)를 생성
- exec(): 기존 프로세스를 새로운 프로그램으로 대체하여 실행
이와 같은 방식으로 운영체제 내에서 프로세스들이 계층적으로 생성되고 관리 됩니다.
fork()와 exec() 시스템 콜
운영체제에서 새로운 프로세스를 생성하고 실행하는 방식 으로 fork()와 exec() 시스템 콜이 사용됩니다.
1. fork() - 프로세스 복제
fork()는 부모 프로세스를 복제하여 자식 프로세스를 생성 하는 시스템 콜입니다.
특징
- 부모 프로세스와 거의 동일한 자식 프로세스 가 생성됨
- 메모리(코드, 데이터, 힙, 스택)를 복제 하지만 PID(프로세스 ID)는 다름
- 새로운 프로세스가 병렬로 실행됨 (독립적인 실행 흐름)
동작 방식
- 부모 프로세스가 fork()를 호출
- 자식 프로세스가 생성됨 (부모 프로세스의 복사본)
- 자식 프로세스는 부모 프로세스의 이후 코드부터 실행
- 부모와 자식은 개별적으로 실행되며, 각자 PID를 가짐
. exec() - 새로운 프로그램 실행
exec()는 기존 프로세스의 메모리를 새로운 프로그램으로 덮어쓰기 하는 시스템 콜입니다.
즉, exec()를 호출하면 기존 코드가 사라지고 새로운 프로그램이 실행됩니다.
특징
- exec()가 실행되면 현재 프로세스의 코드, 데이터, 힙, 스택이 새로운 프로그램으로 변경
- PID는 유지되지만, 실행 중이던 프로그램은 사라짐
동작 방식
- 부모 프로세스가 fork()를 호출하여 자식 프로세스를 생성
- 자식 프로세스에서 exec()를 호출하여 새로운 프로그램을 실행
- 기존 프로세스의 코드가 새로운 프로그램으로 대체됨
3. fork()와 exec() 비교
시스템 콜동작 방식메모리 공유PID 변경 여부사용 목적
fork() | 부모 프로세스를 복제하여 자식 프로세스 생성 | 코드, 데이터, 힙, 스택 복제됨 | 새로운 PID 할당 | 새로운 프로세스 생성 |
exec() | 기존 프로세스를 새로운 프로그램으로 대체 | 기존 메모리 삭제, 새로운 코드 로드 | PID 유지 | 새로운 프로그램 실행 |
4. fork()와 exec()의 조합
- 일반적으로 fork()로 자식 프로세스를 만든 후, 자식 프로세스에서 exec()를 호출 하여 새로운 프로그램을 실행하는 방식이 사용됨.
- 이를 통해 부모 프로세스는 그대로 유지 되고, 자식 프로세스만 새로운 프로그램을 실행 가능
'IT 프로그래밍 > 운영체제' 카테고리의 다른 글
[운영체제] 프로세스 통신 구현 (0) | 2025.04.02 |
---|---|
[FT] [운영체제] 프로세스의 생성과 삭제 (0) | 2025.03.28 |
[FT][운영체제] 프로세스와 스레드 (0) | 2025.03.28 |
[운영체제] 프로세스 (0) | 2025.03.26 |
[운영체제] 스케쥴러 (0) | 2025.03.25 |