Process, Thread 란?

Seoyeon·2024년 4월 3일

Process

운영체제로부터 자원을 할당받은 작업의 단위

  • 운영체제가 PCB(Process Control Block) 생성 -> 레지스터와 물리메모리에 있는 값을 이용해 디스크에 있는 정보를 읽어 실행
  • 프로세스 간 자원 공유를 위해 IPC(Inter Process Communication) 필요
  • 프로세스 하나가 죽더라도 다른 프로세스에 영향 X
  • 시분할로 프로세스 돌아가며 Context Switching 느림( ∵ 캐시 데이터 버리고 다시 캐시 만드는 과정)

Context Switching

CPU가 실행하는 작업을 변경하는 것
동작 중인 프로세스가 대기하며 해당 프로세스 상태(Context) 보관하고 대기하고 있던 다음 순서의 프로세스가 동작하면서 이전에 보관했던 프로세스의 상태를 복구하는 작업

Thread

프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위

  • 하나의 프로세스는 반드시 하나 이상의 스레드를 가짐
  • 실제로 작업을 하는 주체(job이라고도 함)
  • 스레드간 자원 공유는 쉽지만 쓰기 작업 시 동기화 문제가 있을 수 있음
  • Context Switching 빠름 (∵ CPU의 캐시 데이터 사용 가능)

Process 자원 구조

Stack
Heap
Data
Code
  • Stack: 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등)
    -> 동적 영역
  • Heap: 생성자, 인스턴스 같이 동적으로 할당되는 데이터 저장 공간, 프로그래머가 필요할 때 사용하는 공간
    -> 동적 영역
  • Data: 프로그램이 사용하는 데이터 공간, 전역변수 static변수
  • Code: 사용자가 작성한 프로그램 함수, CPU가 해석 가능한 기계어 형태

Thread 자원 공유

  • 한 프로세스 내 여러 스레드는 동일한 Code, Data, Heap을 공유자원
    -> 자원의 생성 및 관리 중복성 최소화하여 수행 능력 높임
  • stack은 함수 관련 값 저장하는 메모리 공간이므로 각 thread에서 독립적인 함수 호출 가능
    -> stack을 가짐으로써 스레드는 독립적인 실행 흐름 가질 수 있음

Process 자원 공유

각 프로세스는 메모리 별도 주소 공간에서 실행되므로 다른 프로세스 정보에 접근 불가능

IPC(Inter-Process Communication)

운영체제 상에서 실행 중인 프로세스 간에 정보를 주고받는 것

  • Pipe: 한 쪽 방향으로 통신(반이중 통신), 한 프로세스는 데이터 쓰기만, 다른 프로세스는 데이터 읽기만 가능, 두 프로세스 송/수신 모두 원하면 파이프 2개 필요
  • Named Pipe(FIFO): 부모 프로세스와 무관하게 전혀 다른 모든 프로세스들 사이에서 통신 가능
  • Message Queue: 입출력 방식은 Named Pipe와 동일, 메모리 공간, 데이터에 번호를 붙여 여러 개의 프로세스가 동시에 데이터 쉽게 다룰 수 있음
  • Shared Memory: 데이터 자체를 공유, 중개자가 없으므로 IPC 중에서 가장 빠름
    but 프로세스의 메모리 영역은 기본적으로 반드시 보호되는 형식
  • Memory Map: Shared Memory와 유사, 열린 파일을 메모리에 맵핑시켜 공유
  • Socket: 프로세스와 시스템의 기초적인 부분, 원격에서 프로세스 간 데이터 공유 시 사용
  • Semaphore: 메시지 전송보단 프로세스 간 데이터 동기화하고 보호하는데 목적을 둠
    공유된 자원에 한 번에 하나의 프로세스만 접근 가능하도록할 때 사용됨

멀티프로세싱 vs 멀티스레딩 vs 멀티태스킹

Multi Processing


다수의 프로세서(CPU)가 다수의 프로세스를 동시에 처리하는 것

  • 여러 프로세서가 작업을 병렬처리 하는 것
  • 각 프로세서가 자원 공유하며 프로세스 처리하므로 하나의 프로세서가 고장나도 작업은 계속 진행됨

Multi Threading

하나의 프로세스를 다수의 스레도 구성해 서로 자원을 공유하고 이를 통해 자원을 효율적으로 사용하여 작업 처리 속도를 향상시키는 것

  • IPC에 비해 통신 오버헤드가 적고 속도가 빠름
  • 시스템 처리량 향상 및 자원 소모 줄어들어 프로그램 응답시간 단축됨
  • 자원 공유로 인해 동기화 처리 필수 -> Lock을 통해 동기화 처리하는데 과도하면 병목 현상으로 인해 성능 저하 있을 수 있음

Multi Tasking

다수의 작업을 운영체제 스케줄링에 의해 번갈아가면서 처리하는 것

  • Task는 프로세스보다 조금 더 확장된 개념
  • 빠른 속도로 번갈아 가면서 task 처리하면 user 입장에서 동시에 처리되는 것처럼 느껴짐
  • 스케줄링 방식: Multi-programming, Time-sharing, Real-time 등

참고
https://frozenpond.tistory.com/124
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4
https://jwprogramming.tistory.com/54
https://net-gate.tistory.com/87

profile
백엔드합니다.

0개의 댓글