os

[OS] 프로세스와 스레드에 대한 공부

하고있자 2024. 2. 21. 21:14

프로세스 

 : 컴퓨터에서 연속적으로 실행되고 있는 상태를 말한다.

  • 프로세스는 code, data, stack, heap의 구조로 독립된 메모리 영역으로 할당받는다.
    • Code 영역은 프로그래머가 작성한 코드를 CPU에서 해석 가능한 기계어 형태로 저장되어 있는 영역이다.
    • Data 영역은 전역(Global) 변수나 정적(Static) 변수가 저장되어 있는 영역이다.
    • Stack 영역은 지역 변수, 매개변수, 반환 값 같은 호출한 함수가 종료되면 되돌아올 임시적인 자료를 저장한다.
    • Heap 영역은 동적 메모리 영역이다.

프로세스가 할당받는 메모리 영역은 위 그림과 같은 구조를 가진다.

  • 프로세스에서 최소한 한 개의 스레드를 가진다.
  • 각 프로세스는 별도의 주소 공간에서 실행된다. 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
  • 프로세스는 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 한다. 

 

스레드

:  프로세스 내에서 실행되는 실행 단위

위 그림과 같이 스레드는 프로세스 내에서 stack만 할당받는다.

  • 각각의 스레드는 별도의 레지스터와 스택을 가지고 있다.
  • 같은 프로세스 안에 있는 여러 스레드는 같은 주소 공간이나 자원들을 공유한다.
  • 프로세스 내에 하나의 프로세스를 가지면 실행단위는 단일 스레드가 되는 것이고 프로세스 내에 여러 개의 스레드가 실행단위를 나누어 가지면 멀티스레드가 된다.

 

멀티 프로세스

: 두 개 이상의 프로세스가 협력적으로 하나 이상의 작업을 처리하는 것을 의미한다. 

  • 프로세스의 문제가 생겨도 다른 프로세스에 영향을 주지 않는다.
  • 프로세스 간 독립된 메모리 영역으로 공유하는 메모리가 없다.
  • Context Switching 과정에서 캐시 메모리 초기화 등 무서운 작업이 진행되고 시간이 소모되는 오버헤드가 발생하게 된다.

 

멀티 스레드

: 한 프로세스 내에서 여러 스레드가 실행단위를 나누어 실행되는 것을 의미한다.

  • 한 프로세스 내에서 여러 스레드가 사용되면 공유자원이 있어서 시스템 자원 소모가 줄어든다.
  • 자원을 공유하기에 동기화 문제가 발생할 수 있다.
  • 하나의 스레드에 문제가 발생하면 전체 프로세스가 영향을 받는다.

 

Context Switching

  • CPU에서 여러 프로세스를 돌아가면서 처리하는 이 과정을 Context Switching이라 한다.

위 그림처럼 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있다.

  • 여기서 PCB(Process Controller Block)는  프로세스의 정보를 담는 구조체이다.

 

**주의**

혼자 공부하는 거라 틀린 부분이 있을 수 있습니다. 틀린 부분이 있다면 댓글로 달아주세요. 글을 봐주셔서 감사합니다.

 

 

출처 :

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

https://www.youtube.com/watch?v=1grtWKqTn50

https://wooody92.github.io/os/%EB%A9%80%ED%8B%B0-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EB%A9%80%ED%8B%B0-%EC%8A%A4%EB%A0%88%EB%93%9C/

https://jwprogramming.tistory.com/16