운영체제

프로세스 & 스레드

탁재민 2024. 3. 12. 17:48

프로세스(Process)

실행되어 작업중인 컴퓨터 프로그램, 운영체제로부터 자원을 할당받은 작업의 단위

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html

  • 각각의 메모리 공간(Code, Data, Stack, Heap)과 CPU 시간을 할당 받음
    • Stack
      • 함수 호출 시 생성되는 지역 변수와 매개변수 저장
      • 함수 호출 종료 시 해당 영역 데이터 소멸
      • 너무 많은 함수 호출 또는 지역변수 사용 시 stack overflow 발생.
    • Heap
      • 런타임에 크기가 결정되며, 동적으로 할당 및 해제
      • 참조형 데이터(객체, 배열 등) 저장.
    • Data 영역
      • 전역 변수와 Static 변수 저장
      • 프로그램 시작과 동시에 할당, 종료 시 소멸
    • Code
      • 프로세스가 실행할 프로그램의 바이너리 코드 저장.
      • ReadOnly 
  • 최소 1개의 스레드 가짐
  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신(IPC)을 사용

스레드(Thread)

프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
  • 각각 Stack만 따로 할당받고 프로세스의 Code, Data, Heap 영역은 공유

멀티프로세스

  • 하나의 프로그램을 여러개의 프로세스로 병렬적으로 작업 수행
  • 부모 프로세스가 자식 프로세스 제어
  • 예시: 크롬 브라우저의 각 탭은 별개의 프로세스임
  • 장점
    • 안정성: 하나의 프로세스에 문제가 생겨도 다른 프로세스에 영향을 미치지 않음
  • 단점
    • Context Switching Overhead: CPU가 하나의 프로세스 에서 다른 프로세스로 작업을 전환하는 과정에서 오버헤드 발생
    • 비효율적 자원 관리: 각각의 프로세스가 메모리 영역을 가지므로 더 많은 공간을 차지하고, 자원 공유도 어려움

 

멀티스레드

  • 단일 프로세스 내에서 여러 개의 스레드가 동시에 실행
  • 예시: 브롬 브라우저의 각 탭 내에서 브라우저 이벤트 루프, 네트워크 처리, I/O 등을 별개의 스레드로 관리
  • 장점
    • 효율적 자원 관리: 각각의 스레드가 Code, Data, Heap 영역을 공유, 자원 공유가 쉽고 가벼움
    • Context Switching Overhead 감소: stack, register만 교체하므로 오버헤드 감소
  • 단점
    • 안정성: 하나의 스레드에 문제가 생기면 프로세스 전체에 영향
    • 동기화, 데드락 문제: 여러 스레드가 동시에 자원에 접근하므로 이를 통제해야 함