Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

은학의 코딩 일기장

[운영체제] 프로세스(Process) 본문

카테고리 없음

[운영체제] 프로세스(Process)

<Eunhak> 2025. 12. 29. 09:05

프로세스(Process)는 실행 중인 프로그램을 의미하며,
운영체제가 CPU, 메모리, 파일과 같은 시스템 자원을 할당하고 관리하는 기본 단위입니다.
단순히 디스크에 저장된 프로그램 파일이 아니라,
메모리에 적재되어 실제로 실행되고 있는 상태를 프로세스라고 부릅니다.

운영체제는 다수의 프로세스를 동시에 관리하며,
각 프로세스가 서로 간섭하지 않고 효율적으로 실행되도록 제어합니다.


프로세스의 주요 개념

1. 프로그램 vs 프로세스

  • 프로그램(Program)
    디스크에 저장된 실행 파일 (정적인 상태)
  • 프로세스(Process)
    프로그램이 메모리에 올라가 실행 중인 상태 (동적인 상태)

같은 프로그램이라도 여러 번 실행하면
서로 다른 프로세스가 생성됩니다.


2. 프로세스의 구성 요소

프로세스는 다음과 같은 정보들을 포함합니다.

  • 코드(Code)
    실행할 프로그램 명령어
  • 데이터(Data)
    전역 변수, 정적 변수
  • 힙(Heap)
    동적 메모리 영역
  • 스택(Stack)
    함수 호출, 지역 변수, 매개변수 저장
  • PCB(Process Control Block)
    프로세스 상태, PID, 레지스터 정보, 메모리 정보 등 관리용 데이터

PCB는 운영체제가 프로세스를 관리하기 위해 사용하는 핵심 자료구조입니다.


3. 프로세스 상태(Process State)

프로세스는 실행 과정에서 여러 상태를 오갑니다.

  • New
    프로세스가 생성된 상태
  • Ready
    실행 준비 완료, CPU 할당 대기 상태
  • Running
    CPU를 할당받아 실행 중
  • Waiting (Blocked)
    I/O 작업 등으로 인해 대기 중
  • Terminated
    실행 종료 상태

운영체제는 이 상태 전이를 통해
CPU 자원을 효율적으로 분배합니다.


4. 프로세스 생성

프로세스는 다음과 같은 상황에서 생성됩니다.

  • 시스템 부팅 시
  • 사용자가 프로그램 실행 시
  • 부모 프로세스가 자식 프로세스를 생성할 때

대표적인 예:

  • UNIX 계열: fork(), exec()
  • Windows: CreateProcess()

부모 프로세스와 자식 프로세스는
독립적인 메모리 공간을 가지는 것이 특징입니다.


5. 프로세스 간 통신 (IPC)

프로세스는 기본적으로 서로 메모리를 공유하지 않기 때문에
IPC(Inter-Process Communication) 기법을 통해 통신합니다.

  • 파이프(Pipe)
  • 메시지 큐(Message Queue)
  • 공유 메모리(Shared Memory)
  • 소켓(Socket)
  • 시그널(Signal)

IPC는 협력 프로세스 환경에서 필수적인 개념입니다.


프로세스의 장점

  • 안정성
    프로세스 간 메모리 보호로 인해 하나의 프로세스 오류가 전체 시스템에 영향을 주지 않음
  • 독립성
    각 프로세스는 고유한 주소 공간을 가짐
  • 보안성
    접근 권한이 명확히 분리됨

프로세스의 단점

  • 생성 비용 큼
    메모리 할당 및 PCB 생성 비용 발생
  • 컨텍스트 스위칭 비용
    CPU 레지스터 및 상태 저장/복원에 따른 오버헤드
  • 통신 복잡성
    IPC 구현이 상대적으로 까다로움

이러한 단점을 보완하기 위해 스레드(Thread) 개념이 등장했습니다.


마무리

프로세스는 운영체제의 가장 기본적인 실행 단위로,
CPU 스케줄링, 메모리 관리, 동기화 등
다양한 운영체제 개념의 출발점이 됩니다.

운영체제를 이해하려면
프로세스 → 스레드 → 스케줄링 → 동기화 흐름으로 학습하는 것이 매우 효과적입니다.