Process versus Thread (OS관점)
1. Process (프로세스)
Process는
자신을 위한 독립된 메모리 공간 등의 리소스를 차지한 상태에서
실행 중인 프로그램의 instance
라고 볼 수 있음.
독립된 execution unit (실행 단위)이며, self-contained(자체포함) unit임.
- 하나의 프로세스는 자신을 위한 독립되고 격리된
- address space(=memory space)와
- User Space에 고유의 data, heap, stack 영역으로 구성된 address space를 가짐.: https://dsaint31.tistory.com/421
- Kernel Space에 고유의 PCB (Process Control Block)을 가짐: OS가 Process Table로 관리함.
- 시스템 리소스 (file 등),
- execution path 데이터 등을 가짐.
- address space(=memory space)와
위의 내용을 다르게 표현하면
프로세스는 독립된 protected location을 가지고 있다
라고 할 수 있다.
- CPU의 core에서 동작하는 독립 된 실행 단위: Process
- 참고로 독립된 실행단위가 아닌 실제 실행단위는 Thread임: Process는 1개 이상의 Thread로 구성됨.
- Procee가 Core에서 실행되기 위해 필요한
데이터와 상태 및 레지스터 값들을 가리켜 Process Context (줄여서 Context, 문맥)라고 부름.- Process Context: 프로세스가 (재)실행될 때 필요한 데이터
- 모든 레지스터 값,
- 스택 포인터,
- 프로그램 카운터(PC) 등으로 Process Context가 구성됨.
- Process Context: 프로세스가 (재)실행될 때 필요한 데이터
- 수행하는 program의 "명령어"와 "데이터"는 RAM에 저장되고,
- core에서 현재 수행하는데 필요한 명령어와 데이터를 RAM에서 core의 register로 가져와 수행.
- 각 프로세스들은 서로에 대해 독립적이며 격리 되어 있기 때문에
각 프로세스간의 통신을 위해서 Inter-Process Communication (IPC) 등이 요구됨.- 한 프로세스의 에러 등이 다른 프로세스에 영향을 주지 않음.
일반적으로 컴퓨터에서 특정 Application을 실행시킬 경우,
- 해당 Application은
- 하나의 Process로서
- 자체의 고유한 설정과 리소스를 가진 독립적인 실행단위로 수행 된다.
각 Process는
서로 독립적이고 격리되어 있어서
다른 프로세스의 실행에 문제가 발생해도 영향을 받지 않음.
참고 : Self-contained Unit
여기서 self-contained unit이란
- 해당 unit(단위)이 자체적으로 필요한 모든 것을 포함하고 있어서
- 외부의 지원 없이 독립적으로 기능할 수 있음을 의미한다.
Process를 self-contained unit이라고 하는 이유는
- Process가 독립적인 execution unit으로 동작하기 위해서
- 필요한 resources (isolated memory or address space, 데이터, execution path 등등)를 포함하고 있기 때문이다.
참고: Process Context
프로세스가 (재)실행되기 위해 필요한 모든 정보를 포함하는 데이터를 말하며,
이 정보는 프로세스가 일시 중단되거나 재개될 때 상태를 정확히 복원하는 데 사용됨.
Process Context에 포함되는 정보는 다음과 같음:
- 프로세스 ID: PID
- 레지스터들의 값: CPU의 각 레지스터에 저장된 값으로, 계산 중간 값이나 프로세스의 상태를 저장.
- 프로그램 카운터(PC): 프로세스가 다음에 실행해야 할 명령어의 주소를 가리킴.
- 스택 포인터: 함수 호출과 리턴 시 사용하는 메모리 영역인 스택의 위치를 가리킴.
- 프로세스 상태: https://ds31x.tistory.com/261
- CPU Scheduling을 위한 정보
- 프로세스의 메모리 상 적재위치 등의 메모리 정보
- I/O 관련 장치 정보 등등...
OS가 여러 Processes를 동시에 관리하는 PCB Table의 PCB(Process Control Block)에 백업됨:
- Kernel영역에 PCB 존재함.
- PCG는 Linux에서 strcut(구조체)인 task_struct 로 정의됨.
2. Thread (스레드)
Smallest execution unit으로 Process내에 속함.
달리 말하면, Process 내의 execution unit이 바로 Thread 임.
- 하나의 Process는 하나 이상의 Thread를 가짐
- 한 Process 내에 존재하는 Threads(같은 process에 속하는)는
address space와 System resource들을 공유하기 때문에
같은 Process에만 속한 경우 Thread 간의 통신은 공유된 자원을 통해 쉽게 이루어짐.- 리소스를 공유하기 때문에 "Light-weighted Process"라고도 불림.
- Thread는 자체 execution path와 control stack을 가지지만 나머지 리소스를 공유함.
- 생성 및 종료, Context changing 등에서 Process보다 보다 빠르게 동작가능함. (가볍기 때문이라고 생각하면 됨.)
정리하면
- 여러 Thread는 병렬로 실행가능 (CPU의 core 갯수 만큼)하며
- 동일 프로세스 내에서 자원을 공유하기 때문에 낮은 격리성을 가진다.
- 이 낮은 격리성은 리소스나 context changing 에서 light-weight라는 장점으로 이어지지만,
- race condition이나 data corruption과 같은 동기화 관련 문제에 보다 취약하다.
참고: Context Changing (Context Switch)
- multi-tasking 등을 위해,
현재 실행 중인 프로세스나 스레드의 상태 정보를 저장하고
다른 프로세스나 스레드의 상태 정보로 교체하는 과정을 가르킴. - Context switch는
execution unit의 상태를 저장하고 다른 execution unit을 수행케 하고
이후 아까의 execution unit의 상태를 다시 불러와서 계속해서 실행이 가능하도록 해줌.- 실행되던 프로세스 관련 cpu의 register의 정보가 해당 프로세스의 PCB로 저장(백업)되고
- 수행될 프로세스의 PCB이 cpu의 register로 복사됨.
참고: Race Condition (경쟁조건)
- 두 개 이상의 Thread(or Process)가 공유하고 있는 데이터에 읽거나 쓰는 동작을 동시에 하려고 하는 경우.
- Thread (or Process) 간의 실행순서가 예측 불가능하기 때문에 동작이 불안정함
- 매번 다른 결과로 이어지거나 정상동작이 이루어지지 않음
참고: Data Corruption (데이터 손상)
- 데이터가 잘못되는 현상을 가르킴.
- 다양한 원인에 의해 발생되지만 앞서 살펴본 race condtion은 Mutli-threading programming에서 data corruption의 주요 원인임.
- 한 스레드의 변경사항을 다른 스레드가 덮어쓰는 등의 경우에 발생함.
일반적으로
race condition과 data corruption등은
Synchronization (lock 이나 세마포어 이용)을 통해
방지할 수 있음.
3. Conclusion
- Process : OS 에서의 별도의 독립된 execution unit을 구성.
- Thread : Process 내에서 별도의 가장 작은 execution unit을 구성.
Multi-Processing | Multi-Threading |
하나의 Application을 여러 개의 Process로 구성하고, 각 Process가 하나의 작업을 처리하도록 프로그래밍. |
하나의 Application을 여러 개의 Thread로 구성하고, 각 Thread가 하나의 작업을 처리하도록 프로그래밍. |
각 Process는 고유한 address space와 같은 실행에 필요한 resources를 가지며 높은 격리성을 가짐. |
한 프로세스 내의 threads는 자신이 속한 process의 resource를 공유하며 자체적인 제어흐름을 위한 execution path와 stack을 가짐. |
높은 격리성으로 인해 Process간 통신에 많은 리소스와 시간이 소요됨 IPC를 이용하여 통신 |
같은 메모리 (address space)를 공유하기 때문에 Thread간의 통신이 process간 통신에 비해 훨씬 쉽고 빠르게 수행가능함. |
References
https://dsaint31.tistory.com/421
https://vmilsh.tistory.com/377
'개발환경' 카테고리의 다른 글
[vscode] Markdown+Math : vscode의 markdown에서 LaTeX수식 보기. (0) | 2024.01.01 |
---|---|
[vscode] Markdown All in One : vscode를 markdown editor로. (0) | 2024.01.01 |
[vscode] How to completely uninstall vscode on Mac (0) | 2023.12.15 |
[vscode] How to install vscode (1) | 2023.12.15 |
[vscode] external terminal 사용하기 (0) | 2023.12.15 |