Post

[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로 알려주세요 😊

This post is licensed under CC BY 4.0 by the author.