본문 바로가기

공부/CS공부

[CS] 프로세스(Process)와 스레드(Thread) 핵심 요약


[CS/OS] 프로세스(Process)와 스레드(Thread) 핵심 요약

1. 정의 및 개념

프로세스 (Process)

  • 정의: 운영체제로부터 시스템 자원을 할당받아 실행 중인 프로그램(Program in execution).
  • 특징: 각각 독립된 메모리 영역(Address Space)을 가진다. 기본적으로 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
  • 관리: 커널 내의 PCB(Process Control Block)에 프로세스 상태, PID, PC 등의 정보가 저장된다.

스레드 (Thread)

  • 정의: 프로세스 내에서 실행되는 흐름의 단위(Light Weight Process).
  • 특징: 프로세스가 할당받은 자원을 공유하며, 하나의 프로세스 내에 여러 개의 스레드가 존재할 수 있다.
  • 관리: 커널 내의 TCB(Thread Control Block)에 스레드 별 레지스터, PC 등의 정보가 저장된다.

2. 메모리 구조의 차이 (핵심)

가장 중요한 차이는 자원 공유 여부이다.

프로세스의 메모리 (독립적)

각 프로세스는 다음 4가지 영역을 독립적으로 할당받는다.

  • Code: 실행할 프로그램의 코드.
  • Data: 전역 변수, 정적 변수.
  • Heap: 동적 할당 영역 (malloc/new).
  • Stack: 지역 변수, 매개 변수, 리턴 주소.

스레드의 메모리 (공유 vs 독립)

스레드는 프로세스 내에서 다음 규칙을 따른다.

  • 공유 영역: Code, Data, Heap. (모든 스레드가 접근 가능)
  • 독립 영역: Stack, PC(Program Counter), Register.

Why? Stack과 PC는 왜 독립적인가?

  • Stack: 독립적인 함수 호출과 실행 흐름을 가지기 위해선 독립된 스택이 필수적이다.
  • PC/Register: 스레드 간 문맥 교환(Context Switching) 시, 현재 어디까지 실행했는지를 개별적으로 기억해야 하기 때문이다.

3. 컨텍스트 스위칭 (Context Switching) 오버헤드

CPU가 실행 대상을 변경할 때 발생하는 비용의 차이이다.

프로세스 컨텍스트 스위칭 (비용 큼)

  • CPU 캐시 메모리를 비워야 한다.
  • TLB(Translation Lookaside Buffer) 초기화가 발생한다. 가상 주소를 물리 주소로 변환하는 캐시가 날아가므로, 스위칭 직후 메모리 접근 성능이 떨어진다.

스레드 컨텍스트 스위칭 (비용 작음)

  • 같은 프로세스 내의 스레드끼리 전환될 때는 메모리 주소 공간(Code, Data, Heap)이 동일하다.
  • 따라서 TLB를 비울 필요가 없고, 메모리 캐시 적중률(Cache Hit Ratio)이 유지된다.
  • Stack과 Register 값만 교체하면 되므로 훨씬 빠르다.

4. 멀티 프로세스 vs 멀티 스레드 비교

구분 멀티 프로세스 (Multi-Process) 멀티 스레드 (Multi-Thread)
자원 효율성 낮음 (메모리 중복 사용) 높음 (자원 공유)
통신 비용 높음 (IPC 필요) 낮음 (메모리 직접 접근)
안정성 높음 (하나가 죽어도 독립적) 낮음 (하나가 죽으면 전체 종료)
구현 난이도 복잡함 (IPC, 분산 처리) 까다로움 (동기화 문제)

5. 동기화 (Synchronization) 이슈

멀티 스레드 환경에서 필수적으로 이해해야 할 기술적 문제이다.

경쟁 상태 (Race Condition)

여러 스레드가 공유 자원(Heap, Data 영역)에 동시에 접근하여 쓰기 작업을 할 때, 실행 순서에 따라 결과가 달라지는 현상.

해결 방법

상호 배제(Mutual Exclusion)를 달성하기 위한 기법을 사용한다.

  • Mutex (뮤텍스): 공유 자원에 대한 Lock/Unlock 메커니즘. (Key를 가진 1개 스레드만 접근)
  • Semaphore (세마포어): 공유 자원에 접근할 수 있는 스레드의 최대 허용 개수를 제어(Signaling).

주의점: 교착 상태 (Deadlock)

두 개 이상의 스레드가 서로가 가진 자원을 기다리며 무한 대기 상태에 빠지는 것.


6. IPC (Inter-Process Communication)

프로세스는 메모리가 독립적이므로 통신을 위해 별도의 매커니즘이 필요하다.

  • 종류: 파이프(Pipe), 소켓(Socket), 메시지 큐(Message Queue), 공유 메모리(Shared Memory).
  • 특징: 커널 영역을 거쳐야 하므로 스레드 간 통신보다 오버헤드가 크다.