본문 바로가기
CS/OS

[OS] 프로세스와 스레드

by 원만사 2021. 12. 29.
반응형

프로세스와 스레드의 차이

[프로그램 - > 프로세스]

  • 프로그램 : 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태를 말한다.
  • 프로그램을 실행하는 순간 해당 파일은 컴퓨터 메모리에 올라가게 되고, 이 상태를 동적인 상태라고 하며 이 상태의 프로그램을 프로세스라고 한다.

[프로세스 → 스레드]

스레드 : 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위

 스레드는 프로세스와 다르게 스레드 간 메모리를 공유하며 작동된다. 스레드끼리 프로세스의 자원을 공유하면서 프로세스 실행 흐름의 일부가 되는 것이다.

 즉, 스레드는 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로다.

 

 

[프로세스와 스레드의 작동 방식]

 프로세스가 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는다. 이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap의 형식으로 할당해 준다. 각각 독립된 메모리 영역을 할당해 주기 때문에 프로세스는 다른 프로세스의 변수가 자료에 접근할 수 없다.

 

 

 이와 다르게 스레드는 메모리를 서로 공유할 수 있다. 프로세스가 할당받은 메모리 영역 내에서 Stack 형식으로 할당된 메모리 영역은 따로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.

 

 만약 한 프로세스를 실행하다가 오류가 발생해서 프로세스가 강제로 종료된다면 공유하고 있는 파일을 손상시키는 경우가 아니라면 아무런 영향을 주지 않는다.

 그런데 스레드의 경우는 Code/Data/Heap 메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제로 종료된다.

 

스택을 스레드마다 독립적으로 할당하는 이유?

  • 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소 값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간
  • 스택 메모리 공간이 스레드에 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것
  • 따라서 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당

PC Register를 스레드마다 독립적으로 할당하는 이유?

  • PC 값은 스레드가 명령어의 어디까지 수행하였는지를 나타냄
  • 스레드는 CPU를 할당 받았다가 스케줄러에 의해 다시 선점당함
  • 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있음
  • 따라서 PC 레지스터를 독립적으로 할당함

 

멀티 프로세스 / 멀티 스레드

[멀티 프로세스]

  • 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것

<장점>

  • 메모리 침범 문제를 OS 차원에서 해결
  • 여러 자식 프로세스 중 하나에 문제가 발생하여도 그 프로세스만 타격, 확산되지 X

<단점>

  • 각 프로세스가 독립된 메모리 영역(Code, Data, Heap, Stack)을 가지고 있기 때문에 작업량이 많아지면 오버헤드가 발생함(Context Switching)
  • 프로세스 간의 복잡한 통신(IPC)가 필요함

 

[멀티 스레드]

  • 하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것

<장점>

  • 메모리 공간, 시스템 자원의 효율성 증가
  • Data, Heap 영역을 이용해 데이터를 주고 받으므로 스레드간 통신이 간단함
  • 교환해야 할 정보가 적으니 context switching시 비용이 적음 → 시스템 처리량 향상, 프로그램 응답 시간 단축됨

<단점>

  • 서로 다른 스레드가 Stack을 제외한 메모리 공간을 공유하기 때문에 동기화 문제가 발생할 수 있음
  • 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받음
  • 주의 깊은 설계가 필요하며 디버깅이 까다로움

 

 

 

References

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

- https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

- https://you9010.tistory.com/136

 

반응형

'CS > OS' 카테고리의 다른 글

[OS] 09. 디스크 관리  (0) 2022.01.03
[OS] 08. 가상메모리  (0) 2022.01.01
[OS] 07. 메모리 관리  (0) 2021.12.27
[OS] 06. CPU 스케줄링  (0) 2021.12.26
[OS] 스핀락, 뮤텍스, 세마포어  (0) 2021.12.22

댓글