Process Thread
동시성
: 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
Process
: 자원 할당의 단위
: 프로세서에 의해 실행되는 프로그램
- 하나의 Process는 반드시 하나 이상의 Thread를 가지고 있다.
: Process에 속한 모든 Thread는 Process의 Virtual Memory로 공간이 제약된다.
보통 OS는 Process를 처리하기 위해 CPU에게 Proces 처리 명령을 하는데, 그 때 OS는 (CPU를 위해) Process에게 Virtual Memory(제한된 공간)를 쥐어(할당)주고, CPU에게 넘긴다.
참고) OS는 연산을 수행(Process를 수행)하기 위해서는 이를 관리하고 지원해주기 위한 CPU(연산 수행 실세)가 반드시 필요하다. CPU는 RAM(연습장)을 무조건 필요로 한다.
Thread
: 하나의 Process 내에서 구분지어진 하나 이상의 작업 단위
작업 단위란?
- cpu core에서 실행하는 하나의 단위
- Process와 Thread를 포괄하는 개념
Thread 내 자원(메모리) 공유
- 하나의 Process안에 다수의 Thread가 있을 때, 공유되는 자원(코드, 데이터, 힙) 영역을 사용한다.
- 각 Thread는 스택 영역만을 따로 보유하고 있다.
- 이 때 생기는 프로세스와의 차이점은??
- 쓰레드 간 공유 자원에 대한 동기화(Synchronize) 이슈 발생
- 쓰레드 간 통신을 공유 메모리(heap영역) 을 통해 가능 / 프로세스는 IPC(Signal, Pipe, Socket)등의 기술이 필요하다.
Process와 Thread 예시)
한 가구: Process
한 가구에 할당된 집(한정된 공간): OS가 제공한 Virtual Memory
집 내에서만 일을 하는 인원: Thread
- 반드시 한 명 이상 존재
화장실, 부엌(공용 공간): 공유 자원 (Heap, Code, Data)
각자의 방: Thread Local Storage
- Thread마다 각자 고유한 TLS를 가지고 있다.
경량화된 구조 덕분에 컨텍스트 스위칭이 일어날 때 캐싱 적중률 상승 가능하다.
Multi-process & Multi-thread
: 둘 다 한 애플리케이션에 대한 작업을 동시에 처리 하기 위한 처리 방식이다.
Multi-process
하나의 Process가 여러 가지의 일을 동시에 처리해야할 때를 가정해보자.
이럴 때는
- 부모 Process가 fork()를 통해, 자식 Process를 여러 개 만든다.
- 자식 Process는 부모와 별개의 메모리 영역을 확보한다.
Multi-thread
Multi-process | Multi-thread | |
구조 | 각 Process끼리 독립적인 구조 | Thread끼리 긴밀하게 연결되있는 구조 |
자원 사용 | 개별 메모리 차지(자원 소모적) | 공유된 자원으로 통신 비용 절감, 효율적 메모리 사용 |
Context Switching 비용 | Context Switching 비용 큼 | Context Switching 비용 적음 |
동기화 | 동기화 작업이 필요하지 않음 | - 공유 자원 관리를 해야함 - 쓰레드끼리 긴밀하게 연결이 되어 있기 때문에 한 쓰레드에 문제가 생기면 전체 쓰레드에 영향을 끼친다 (브라우저 탭 중지 오류 상상) |
정리
Thread
한 Process내에서 나뉘어진 하나 이상의 실행 단위다.
한 애플리케이션에 대한 작업을 동시에 처리 하기 위한 “처리 방식”으로 Multi-Process, Multi-Thread 가 있다.
동시성을 위해 실행단위가 하는 일
동시에 실행되는 것처럼 보이기 위해 실행 단위(Process, Thread)는 시분할로 cpu를 점유하며 context switching을 한다.
Multi-core
하드웨어 측면에서 실행 단위를 병렬적으로 처리할 수 있도록 여러 Process가 있는 것
참고
https://www.youtube.com/watch?v=1grtWKqTn50
https://www.youtube.com/watch?v=C_P0wHFp1o4
https://www.youtube.com/watch?v=x-Lp-h_pf9Q
'OS' 카테고리의 다른 글
OSI 7 Layer (0) | 2023.07.22 |
---|---|
여러 대의 컴퓨터가 통신하려면?? feat.Router (0) | 2023.07.20 |
TCP/UDP (0) | 2023.07.19 |
TCP/IP (0) | 2023.07.16 |
OS 메모리 관리 (0) | 2023.07.04 |