CS/운영체제

프로세스 vs 스레드

sun._.ny 2022. 7. 16. 17:08

프로세스(Process)란?

 

  • 프로그램의 인스턴스
  • 운영체제로부터 자원을 할당받는 작업의 단위
  • 메모리에 적재되어 실행되고 있는 프로그램

 

 

 

 

 

프로세스 메모리 구조

 

 

  • Code(text) 영역 : 실행할 프로그램 코드
  • Data 영역 : 전역 변수, 정적 변수, 배열 등이 담기는 영역
  • Heap 영역 : 런타임시 동적으로 메모리 할당받는 영역 (new(), malloc() 등)
  • Stack 영역 : 지역 변수, 매개변수, 리턴 값 등의 임시적인 데이터들 담기는 영역

 

 

 

 

 

 

 

 

프로세스 특징

 

 

  • 프로세스마다 최소 1개의 스레드를 가지고 있음
  • 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수에 접근 불가능

 

 

 

 

 

 

 

 

 

스레드(Thread)란?

 

  • 프로세스 내에서 실행되는 여러 흐름의 단위
  • 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 프로세스의 특정한 수행 경로
    • ex: 햄버거를 만드는 프로세스에서는 패티를 굽는 스레드가 진행되는 동안, 빵에 야채를 얹고 소스를 뿌리는 등의 스레드도 동시에 진행될 수 있음

 

 

 

 

 

 

 

스레드의 특징

 

  • 스레드는 프로세스 내에서 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유 (프로세스는 Code, Data, Stack, Heap으로 구성)
  • 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드(sibling thread)도 그 변경 결과를 즉시 볼 수 있음

 

 

 

※ 스레드마다 독립적인 Stack을 갖는 이유

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

 

→ 각 스레드별로 수행하는 업무가 다를 것이기 때문에, 최소한의 독립 조건으로 스레드마다 독립된 Stack을 할당해 주는 것 (구분을 위해)

 

 

 

 

 

정리하자면...

프로세스는 컴퓨터의 자원을 분할해서 쓰지만, 스레드는 프로세스마다 주어진 전체 자원을 함께 사용한다.

≒ 프로세스는 각자의 고유 공간을 할당받아 사용하지만, 스레드는 프로세스 내에서 다른 스레드와 공간과 자원을 함께 사용한다.

 

 

 

 

 

 

 

 

 

 

참고사이트

https://hyolls100.tistory.com/5?category=1027491