alt

3주차

Shared on April 16, 2026

프로세스와 스레드 개념 및 관리

개요

  • 운영체제에서 프로세스는 실행 중인 프로그램이며, CPU와 메모리, I/O 자원을 사용한다.
  • 프로세스는 메모리 세그먼트(코드, 데이터, 힙, 스택)로 구성되고, 프로세스 제어 블럭(PCB) 에서 상태와 컨텍스트를 관리한다.
  • 프로세스의 생명주기는 생성 → 준비 → 실행 → 대기 → 종료이며, 스케줄러컨텍스트 스위치가 이를 조정한다.
  • fork() 같은 시스템 호출로 프로세스가 복제될 때 부모‑자식 관계가 형성된다.
  • 프로세스 내부에 스레드가 존재하면, 스레드는 공통 주소공간을 공유하지만 스택만 별도이며, 스레드 단위의 컨텍스트 스위치가 빠르다.

핵심 개념

용어의미
프로세스실행 중인 프로그램, CPU 할당 필요
PCB프로세스 식별자, 상태, PC, 레지스터, 우선순위 등 저장
메모리 세그먼트텍스트(코드), 데이터(전역, 정적), 힙(동적 할당), 스택(함수 호출)
스케줄러프로세스 상태 변화를 관리, 작업 스케줄러(프로세스 생성), 프로세스 스케줄러(CPU 할당)
컨텍스트 스위치현재 프로세스의 PCB에 상태 저장 후 다른 프로세스의 PCB에서 로드
fork()현재 프로세스를 복제해 자식 프로세스 생성, 부모는 자식 PID 반환, 자식은 0 반환
스레드프로세스 내부 실행 단위, 공통 주소공간, 별도 스택, TCB(스레드 제어 블럭)
스레드와 프로세스 차이프로세스는 자원 단위, 스레드는 실행 단위; 스레드 간 컨텍스트 스위치가 가볍다

상세 내용

1. 프로세스 정의와 메모리 구조

  • 프로세스는 디스크에 있는 실행 파일이 메모리에 올라와 실행되는 주체.
  • 메모리 영역 분할:
    • 텍스트 영역: 실행 파일의 명령어 코드 저장.
    • 데이터 영역: 전역·정적 변수 저장.
    • : malloc 같은 동적 할당 영역; 실행 중에 크기 변동.
    • 스택: 함수 호출 시 지역 변수·매개변수·리턴 주소 저장.
  • 각 영역은 OS가 별도 관리하며, 코드·데이터는 공유 가능하지만 힙·스택은 프로세스마다 독립.

2. 프로세스 제어 블럭(PCB)

  • PCB에는 다음 정보가 포함:
    • PID(프로세스 식별자), PPID(부모 PID)
    • 프로세스 상태(생성, 준비, 실행, 대기, 종료)
    • 프로그램 카운터(PC), 레지스터 값(CPU 컨텍스트)
    • 우선순위, 우선순위 큐 포인터
    • 스케줄링 정보(큐 위치, 타이머 값)
  • 컨텍스트 스위치 시 현재 프로세스의 PCB에 상태 저장 후, 새 프로세스 PCB에서 레지스터 로드.

3. 프로세스 상태 전이

  • 생성 → 준비: 프로세스 생성 후 CPU 할당 대기.
  • 준비 → 실행: 스케줄러가 선택 → CPU 할당 → 실행 상태.
  • 실행 → 대기: I/O 요청 시 CPU 반환, 대기 큐에 이동.
  • 대기 → 준비: I/O 완료 시 다시 준비 큐 삽입.
  • 실행 → 종료: 프로그램 종료 시 PCB 해제.

핵심: 프로세스는 항상 하나의 상태에만 존재하며, 스케줄러와 타이머가 상태 변화를 조정한다.

4. 스케줄링

  • 작업 스케줄러: 디스크에 저장된 프로그램을 선택해 프로세스로 변환하고 준비 큐에 넣음. 빈번한 실행으로 메모리 프로세스 수를 결정.
  • 프로세스 스케줄러: 준비 큐에서 프로세스를 선택해 CPU 할당(디스패치). 우선순위, 라운드 로빈 등 다양.
  • 타이머 인터럽트: 실행 중 프로세스가 할당된 CPU 시간을 초과하면 타임아웃 → 준비 큐 재삽입.
  • I/O 인터럽트: I/O 완료 시 프로세스 대기 → 준비 상태 전환.

5. fork()와 부모‑자식 관계

  • fork() 호출 시:
    • 부모 프로세스와 동일한 주소공간, PCB(가장 부분) 복제.
    • PID는 새로운 값, PPID는 부모 PID.
    • 부모는 자식 PID 반환, 자식은 0 반환.
  • 자식 프로세스는 독립적으로 실행되며, 필요 시 exec()로 다른 프로그램으로 교체 가능.

6. 스레드 개념

  • 스레드는 프로세스 내부의 실행 단위; 프로세스와 동일한 코드·데이터·힙을 공유하지만 스택은 별도.
  • **TCB(스레드 제어 블럭)**에 스레드 ID, 레지스터, 스택 포인터 등 저장.
  • 스레드 간 컨텍스트 스위치가 가볍고, 멀티스레딩으로 I/O 대기 중에도 다른 스레드가 CPU를 사용할 수 있어 응답성 향상.
  • 운영체제는 스레드 단위로 스케줄링하고, 필요 시 스레드 컨텍스트 스위치 또는 프로세스 컨텍스트 스위치를 수행.

7. 응용 예시

  • 크롬 브라우저: 디스크에서 실행 파일 로드 → 프로세스 생성 → fork()로 탭마다 스레드 생성 → 각 스레드가 이미지 로딩, 입력 처리 등 병렬 수행.
  • I/O 중심 프로그램: 대기 상태에서 CPU를 반환해 다른 프로세스·스레드가 실행, 이벤트 발생 시 wake‑up.

정리

  • 프로세스는 OS 자원을 관리하며, PCB와 상태 전이를 통해 스케줄링된다.
  • fork()를 통해 부모와 자식이 생성되고, 각 프로세스는 독립적인 힙·스택을 갖는다.
  • 스레드는 프로세스 내부에서 실행 단위를 분할해 성능을 높이며, 스레드 전환은 프로세스 전환보다 비용이 적다.
  • 효율적인 운영체제는 스케줄링, 컨텍스트 스위치자원 회수를 최적화하여 시스템 성능을 극대화한다.