본문 바로가기
개발환경

[CE] Process versus Thread

by ds31x 2023. 12. 27.

Process versus Thread

1. Process (프로세스)

Process
자신을 위한 독립된 메모리 공간 등의 리소스를 차지한 상태에서
실행 중인 프로그램의 instance
라고 볼 수 있음.

 

독립된 execution unit (실행 단위)이며, self-contained(자체포함) unit임.

  • 하나의 프로세스는 자신을 위한 독립되고 격리된
    • address space(=memory space)와
      • 고유의 data, heap, stack 영역으로 구성된 address space를 가짐.
    • 시스템 리소스 (file 등),
    • execution path 데이터 등을 가짐.
위의 내용을 다르게 표현하면
프로세스는 독립된 protected location을 가지고 있다
라고 할 수 있다. 

  • CPU의 core에서 동작하는 독립된 실행 단위: Process 
    • 독립된 실행단위가 아닌 실제 실행단위는 Thread임: Process는 1개 이상의 Thread로 구성됨.
    • Procee가 Core에서 실행되기 위해 필요한 데이터와 상태 및 레지스터 값들을 가리켜 Process Context 라고 부름.
      • Process Context: 프로세스가 (재)실행될 때 필요한 데이터
        • 모든 레지스터 값,
        • 스택 포인터,
        • 프로그램 카운터(PC) 등으로 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에 포함되는 정보는 다음과 같음:

  • 레지스터 값: CPU의 각 레지스터에 저장된 값으로, 계산 중간 값이나 프로세스의 상태를 저장.
  • 프로그램 카운터(PC): 프로세스가 다음에 실행해야 할 명령어의 주소를 가리킴.
  • 스택 포인터: 함수 호출과 리턴 시 사용하는 메모리 영역인 스택의 위치를 가리킴.

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보다 보다 빠르게 동작가능함. (가볍기 때문이라고 생각하면 됨.)

예를 들어

웹브라우저를 수행할 경우 이는 하나의 Process로 동작하지만,

해당 웹브라우저가 여러 tab으로 구성되어 여러 웹페이지를 읽어들인 상태라면,

각각의 탭은 하나의 Thread로 동작하면서 병렬적으로 실행된다.

  • 여러 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이 register로 복사)


참고: Race Condition (경쟁조건)

  • 두 개 이상의 스레드가 공유하고 있는 데이터에 읽거나 쓰는 동작을 동시에 하려고 하는 경우.
  • 스레드간의 실행순서가 예측 불가능하기 때문에 동작이 불안정함(매번 다른 결과로 이어지거나 정상동작이 이루어지지 않음)

참고: 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

 

[CE] 프로그래머를 위한 (Logical) Memory 구조 : Stack, Heap, Code

프로그램 실행 시 OS에 의해서 프로그램의 process를 위해 마련되는 Memory의 구조는 다음 네 개의 영역으로 구분가능. (엄밀하게 애기하면, MMU를 사용하지 않는 경우 또는 MMU를 사용하는 경우엔 사

dsaint31.tistory.com

https://vmilsh.tistory.com/377

 

운영체제 스레드(Thread)는 무엇인가요?

안녕하세요? 허니입니다. 운영체제에서 매우 중요한 기능 중에 뽑으라고 하면 저는 쓰레드를 선택할 것 같습니다. 정말 어렵다면 어렵고, 쉽다면 쉬운 스레드에 대해 포스팅 하겠습니다. 학생이

vmilsh.tistory.com