OS

Process & Thread: 기초를 다져보자

noh.noah 2022. 9. 21. 20:40

이론적인 정의 정도만 머릿 속에서 맴돌던 개념.

언제까지 뒤로 미룰 수 없는 부분이기에 이 기회를 통해서 정리해보고자 한다!


설명에 앞서, 키워드 정의!

  1. 실행단위: cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
  2. (부연설명없는) 프로세스: 하나의 스레드만 가지고 있는 단일 스레드 프로세스
  3. 동시성: 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는

Program

명령어, 코드 및 정적인 데이터의 묶음을 의미한다.

 

Process: 프로그램의 구현체

실행중인 Program을 의미하며, OS로 부터 시스템 자원을 할당받는 단위를 의미한다.

ex: Windows의 작업관리자

 

 

미리알면 좋은 Process 지식: 1) 메모리

 

 

미리알면 좋은 Process 지식: 2) PCB(Process Control Block)

1) 포인터 (Pointer): 부모프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보 등.

2) 프로세스 상태(Process State): 생성(create), 준비(ready), 실행 (running), 대기(waiting), 완료(terminated) 상태가 있습니다.

3) 프로세스 식별자(Process ID): 프로세스 고유번호

4) 프로그램 계수기(Program Counter): 프로그램 계수기는 이 프로세스가 다음에 실행할 명령어의 주소를 가리킵니다.

5) CPU 레지스터 및 일반 레지스터

6) CPU 스케줄링 정보: 우선 순위, 최종 실행시각, CPU 점유시간 등

7) 메모리 관리 정보: 해당 프로세스의 주소 공간 등

8) 프로세스 계정 정보: 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등

9) 입출력 상태 정보: 프로세스에 할당된 입출력장치 목록, 열린 파일 목록 등

 

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


1. 프로세스 내에서 실행되는 흐름의 단위

2. CPU 이용의 기본 단위

3. Text, data, heap 영역을 공유

4. 각 thread 별도의 stack 영역을 가짐

5. 경량화된 프로세스: 스레드

6. 캐싱적중률이 올라감 (공용자원은 그대로 두고 내꺼만 들고 왔다갔다)


Context switching: 빠른 프로세스 교체작업 (동시성을 표현)

하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전 프로세스 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업.

"스케줄러가 기존 실행 프로세스를 우선순위 때문에 미루고 새 프로세스로 교체해야 할 때 프로세스 상태 값을 교체하는 작업"

 

참고: 위키피디아

 

 

Thread vs Process: 둘 중 누가 더 빠를까?!

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

Thread 단위로도 Context Switching이 가능하다.

 

Thread는 Context Switching 될 때,스택(Stack)을 제외한 코드(Code), 데이터(Data), 힙(Heap) 영역은 프로세스의 것이기 때문에 자신의 PCB에는 Stack 및 간단한 정보만 저장해서 Process Context Switching보다 빠르다.

반면, Process는 공유하는 데이터가 없으므로 임시 저장소인 캐시 메모리가 지금껏 쌓아놓은 데이터들이 사라지고 새로 데이터를 쌓아야 한다.

 

따라서 Context Switching의 오버헤드를 개선하기 위해 Thread Context Switching을 사용하기도 한다.


[헷갈리는 용어 정리: Process vs Thread vs Core]

1. Mutil-Process: ex) google chrome

1. 각 프로세스는 독립적 (하나의 작업을 여러 개의 프로세스가 처리)

2. IPC(Interprocess communication) -> 소켓, 파이프 작업이 필요

를 사용한 통신

3. 자원 소모적, 개별 메모리 차지

4. 컨텍스트 스위칭 비용이 큼

5. 동기화 작업이 필요하지 않음

6. 자식 프로세스가 문제가 생겨도, 다른 프로세스에 영향이 없음

 

2. Mutil-Thread: ex) web server 

1. 스레드끼리 긴밀하게 연결되어 있음

2. 공유된 자원으로 통신 비용을 절감 (옆 사람한테 물건을 빌림)

3. 공유된 자원으로 메모리가 효율적임

4. 컨텍스트 스위칭 비용이 적음

5. 공유자원 관리해야함 (자원을 공유하는 만큼, 충돌을 중의: Thread-Safe 하게!

 

3. Mutil-Core: 하드웨어 측면에 가까운 개념

동시성(여러 실행단위를 빠르게 스위칭 / 시분할), 병렬처리

Concurrency 동시성

  • 하나의 코어에서 하나 이상의 프로세스(혹은 스레드) 번갈아가면서 진행되지만 동시에 진행되는 것처럼 보이는것

Parallelism 병렬처리

  • 이상 코어에서 동시에 하나 이상의 프로세스(혹은 스레드) 한꺼번에 진행되는

번외

리눅스(커널)에서 프로세스와 스레드를 동일하게 본다. (PID /TGID / TID)


요약

1. 프로세스는 프로그램이 실행된 것이다.

2. 스레드는 한 프로세스 내에서 나뉘어진 하나 이상의 실행 단위이다.

3. 한 어플리케이션에 대한 작업을 동시에 하기 위해서는 2가지 처리 방식(멀티 프로세스, 멀티스레드)이 있다.

4. 동시에 실행이 되는 것처럼 보이기 위해서 실행 단위는 시분할로 cpu를 점유하여 context switching을 한다.

5. 멀티 프로세스는 독립적인 메모리를 가지고 있지만 멀티 스레드는 자원을 공유한다. 그것에 따른 각각의 장단점이 있다.

6. 멀티코어는 하드웨어 측면에서 실행단위를 병렬적으로 처리할 있도록 여러 프로세서가 있는 것이다.

 


References

 

콘텍스트 스위칭(Context Switching)

멀티스레드의 동시성(Concurrency) 동작 방식에 대해 간략히 다룬 적이 있었다. beststar-1.tistory.com/24 스레드(Thread) - 멀티스레드의 동시성(Concurrency)과 병렬성(Parallelism) 멀티스레드의 동시성(Concu..

beststar-1.tistory.com

 

PCB(Process Control Block)란?

OS의 기본. Process Control Block(PCB)입니다. - 프로세스 제어 블록(Process Control Block, 줄여서 PCB)은 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는, 운영체제 커널의 자료구조입니다. PCB는 운..

jwprogramming.tistory.com