[OS] 프로세스
3줄 요약
프로세스는 실행 중인 프로그램과 그 상태를 관리하는 운영체제의 기본 단위
CPU와 메모리 등 자원을 효율적으로 관리하기 위해 PCB를 이용해 관리
fork와 exec를 통해 프로세스를 생성하고 새로운 프로그램으로 실행 전환
💻 컴퓨터 구조 & 운영체제 시리즈
이 시리즈는 『혼자 공부하는 컴퓨터 구조+운영체제』 (강민철 저)
+ 인프런 강의를 기반으로 개인적으로 복습 및 정리한 기록입니다.
📌 프로세스란?
실행 중인 프로그램 + 그 상태를 관리하는 운영체제의 기본 단위
프로세스들은 돌아가며 한정된 시간 만큼 CPU 사용
→ 자신의 차례에 정해진 시간 만큼만 CPU 사용
→ 타이머 인터럽트가 발생하면 차례 양보포그라운드 프로세스(foreground process)
→ 사용자가 볼 수 있는 공간에서 실행되는 프로스백그라운드 프로세스(background process)
→ 사용자가 볼 수 없는 공간에서 실행되는 프로세스
→ 사용자가 직접 상호작용하는 경우와, 상호작용 없이 정해진 일만 수행하는 경우로 구분
→ 데몬(daemon), 서비스(service)
🧠 프로세스 제어 블록 (PCB, Process Control Block)
- 프로세스 관련 정보를 저장하는 자료구조
- 프로세스 생성 시 커널 영역에 생성, 종료 시 폐기
- 상품에 달린 태그와 같은 정보
PCB에 저장되는 주요 정보
프로세스 ID (PID)
→ 특정 프로세스를 식별하는 고유 번호레지스터 값
→ 문맥 교환 시 복원해야 할 중간 정보
→ 자신의 차례가 돌아왔을 때 프로세스 실행 재개를 위해 이전까지 했던 작업의 위치를 알기 위해프로세스 상태
→ 준비, 실행, 대기 등의 상태CPU 스케줄링 정보
→ 언제, 얼마나, 어떤 순서로 CPU를 할당할지에 대한 정보메모리 정보
→ 코드, 데이터, 힙, 스택 영역 등파일 및 입출력 정보
→ 사용 중인 파일과 입출력 장치 정보
🔁 문맥 교환 (Context Switch)
- 한 프로세스에서 다른 프로세스로 전환할 때 발생
- 현재 프로세스의 중간정보(==문맥, context)를 PCB에 저장
- 새롭게 실행할 프로세스의 문맥을 PCB에서 복구
- 이러한 일련의 과정들
🧩 프로세스 메모리 구조
코드(텍스트) 영역
→ 실행할 수 있는 코드
→ 기계어 명령어 저장 (읽기 전용)
→ 정적 할당 영역(크기가 변하지 않음)데이터 영역
→ 전역 변수 및 정적 데이터 저장
→ 정적 할당 영역(크기가 변하지 않음)힙(Heap) 영역
→ 프로그래머가 직접 할당할 수 있는 저장 공간
→ 동적 메모리 할당 (낮은 주소 → 높은 주소)스택(Stack) 영역
→ 데이터가 일시적으로 저장되는 공간
→ 함수 호출, 지역 변수 저장
→ 동적 메모리 할당 (높은 주소 → 낮은 주소)
힙과 스택은 크기가 가변적이며 서로 반대 방향으로 확장
🔥 프로세스 상태 전이
프로세스는 실행되는 동안 다양한 상태를 오가며 운영체제의 관리를 받는다.
운영체제마다 세부 용어는 다를 수 있지만, 기본 개념은 비슷하다.
주요 상태
출처: 『혼자 공부하는 컴퓨터 구조+운영체제』 - 강민철 저
상태 | 설명 |
---|---|
생성 상태 (New) | 메모리에 적재되고 PCB가 생성된 상태. 준비를 마치면 준비 상태로 전이 |
준비 상태 (Ready) | CPU를 할당받기 위해 대기하는 상태. 차례가 오면 실행 상태로 전이 |
실행 상태 (Running) | CPU를 할당받아 명령어를 실행하는 상태. 타임아웃 시 준비 상태로 전이, 입출력 요청 시 대기 상태로 전이 |
대기 상태 (Waiting) | 입출력 처리를 기다리는 상태. 입출력 완료 인터럽트 발생 시 준비 상태로 복귀 |
종료 상태 (Terminated) | 프로그램 실행이 끝나고 PCB와 자원을 해제한 상태 |
상태 전이 흐름
생성 → 준비
프로그램이 메모리에 적재되고 PCB가 만들어지면 준비 상태로 이동준비 → 실행
스케줄러에 의해 CPU를 할당받으면 실행 상태로 이동 (Dispatch)실행 → 준비
할당된 시간 소진(타임아웃) 시 준비 상태로 전이되어 다시 대기실행 → 대기
입출력 요청 발생 시 대기 상태로 전이대기 → 준비
입출력 완료 인터럽트가 발생하면 준비 상태로 복귀실행 → 종료
프로그램 실행을 완료하면 종료 상태로 이동, PCB와 자원 정리
🔹 추가 개념: 스케줄링 포인트
- 운영체제는 특정 지점(예: 타임 슬라이스 종료, 입출력 요청 시점 등)에서 프로세스 상태를 전이시키며 CPU를 다른 프로세스에 넘긴다.
- 이를 통해 여러 프로세스가 협력적으로 CPU를 공유할 수 있다.
🌱 프로세스 계층 구조
- 부모 프로세스: 새 프로세스를 생성한 주체
- 자식 프로세스: 부모 프로세스에 의해 생성된 프로세스
각 프로세스는 고유한 PID를 가지며, 계층 구조를 형성
🚀 프로세스 생성 기법
fork 시스템 호출
→ 부모 프로세스 복제, PCB 정보 일부 상속
→ 부모 PID(PPID) 저장하는 경우도 있음exec 시스템 호출
→ 현재 프로세스 메모리 공간을 새로운 프로그램으로 덮어쓰기
→ 코드/데이터 영역 교체, 힙/스택 초기화
✅ 마무리 정리
프로세스는 운영체제에서 프로그램을 실제로 실행하는 기본 단위
PCB를 통해 상태를 관리하고, Context Switch로 문맥을 교환
fork와 exec를 통해 새로운 프로세스를 만들고, 다양한 프로그램 실행 가능
📚 참고 자료
- 『혼자 공부하는 컴퓨터 구조+운영체제』 - 강민철 저
- 인프런 강의 - 혼자 공부하는 컴퓨터 구조+운영체제 기반 강의
읽어주셔서 감사합니다 🙌
내용이 도움이 되었거나, 틀린 부분이 있다면 댓글이나 GitHub Issue로 알려주세요 😊