MinChur

운영체제: 프로세스와 스레드의 모든 것

|
2 min read

실행 중인 프로그램인 프로세스의 구조와 상태 변화, 그리고 멀티태스킹의 핵심인 스레드와 프로세스 간 통신(IPC) 기법을 정리합니다.

1. 프로세스(Process)와 PCB

프로세스는 '실행 중인 프로그램'을 의미합니다. 운영체제는 각 프로세스를 관리하기 위해 **PCB(Process Control Block)**라는 꼬리표를 붙입니다. 여기에는 PID, 상태 정보, 레지스터 값 등이 담겨 있어, 실행 중단 후 다시 재개할 때 원래의 문맥(Context)을 유지할 수 있게 해줍니다.

2. 프로세스의 메모리 구조

프로세스는 메모리 공간을 크게 4가지 영역으로 나누어 사용합니다.

  • 코드 영역: 실행할 명령어가 저장된 공간 (읽기 전용)
  • 데이터 영역: 전역 변수 등 프로그램 종료 시까지 유지할 데이터가 저장됩니다.
  • 힙 영역: 개발자가 동적으로 할당하는 공간입니다. 낮은 주소에서 높은 주소로 쌓입니다.
  • 스택 영역: 지역 변수, 매개 변수 등 임시 데이터가 저장됩니다. 높은 주소에서 낮은 주소로 쌓여 힙과의 충돌을 방지합니다.

3. 프로세스의 상태 변화

프로세스는 수명 주기 동안 여러 상태를 거칩니다.

  • 생성(New): 이제 막 생성된 상태
  • 준비(Ready): CPU 할당을 기다리는 상태
  • 실행(Running): 실제로 CPU를 점유하여 실행 중인 상태
  • 대기(Blocked): 입출력 완료 등을 기다리며 잠시 멈춘 상태
  • 종료(Terminated): 모든 실행을 마치고 자원을 반환하는 상태

4. 스레드(Thread)와 자원 공유

스레드는 프로세스 내에서 실행되는 흐름의 단위입니다.

  • 프로세스 vs 스레드: 프로세스는 각자의 독립적인 자원을 가지며 기본적으로 공유하지 않지만, 스레드는 프로세스의 코드, 데이터, 힙 영역을 공유합니다. 덕분에 멀티 스레드 환경에서는 데이터 공유가 쉽고 문맥 교환 비용이 저렴합니다.
  • IPC (Inter-Process Communication): 독립적인 프로세스끼리 통신이 필요한 경우, 공유 메모리, 파이프, 소켓 등을 이용해 자원을 주고받을 수 있습니다.