[OS] Process / Thread

Doodung·2022년 1월 9일
0

OS - 운영체제

목록 보기
1/15
post-thumbnail

Process와 Thread

모두 프로그램의 실행과 관련된 단어들이다. (실행 단위 : cpu core에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념)

차이점은 Process는 실행의 단위, Thread는 Process 내에서 실행되는 흐름의 단위로 Process는 독립적으로 실행되지만 Thread는 Process 내의 Thread들 끼리는 Heap, Data등(Stack은 개별 할당)을 공유한다.

프로세스 : 운영체제로부터 자원을 할당 받은 작업의 단위

  • 하나의 프로그램이 실행되면 프로세스가 실행된다
  • 프로세스와 프로세스는 서로 완전히 독립되어 있다.
  • 프로세스는 문맥(context)라고 하는 코드, 데이터, 열린 파일 식별자, 동적 할당 영역, 스택 등을 모두 포함한다.
  • 따라서 프로세스간 문맥 교환(context-switching) 할 때 많은 비용이 든다.

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

  • 스레드는 레지스터와 자신의 스택만 독립적으로 가진다
  • 대부분의 문맥은 프로세스 안에서 스레드끼리 공유한다. -> 문맥 교환 비용이 낮아 프로그래밍에서 많이 사용된다.
  • 여러개의 스레드 구성 시 코드가 복잡해진다.

프로그램이 프로세스가 되면서 어떤 일이 일어날까?

  1. 프로세스가 필요로 하는 재료들이 메모리에 올라가야 한다.
    메모리는 실행 영역을 포함하는 코드 영역,
    스태틱이나 글로별 변수를 담는 데이터 영역,
    동적 메모리를 위한 힙 영역,
    지역 변수, 매개변수 반환값 등등이 일시적인 데이터를 담는 스택 영역이 메모리 공간을 확보한다.

  2. 해당 프로세스에 대한 정보를 담고 있는 PCB 블럭이 프로세스 생성 시 함께 만들어진다.
    PCB : 포인터, 프로세스 스테이트, 고유 번호 담는 PID, 프로그램 카운터(다음 명령어) 등등…


  • 원래 한 프로세스가 실행되기 위해 CPU를 점유하고 있으면 다른 프로세스는 실행 상태에 있을 수가 없다.

  • 다수의 프로세스를 동시에 실행하기 위해 여러개 프로세스를 시분할 즉 짧은 텀으로 전환해서 실행하게 한다. 이게 문맥교환(context-switching)이다.

  • 너무 귀찮고 힘든 과정이기 때문에 경량화된 프로세스 버전인 스레드이다.

  • 왜 스레드가 경량화된 스레드인가 -> 하나의 프로세스 안에 다수의 스레드가 있을 때 공유되는 자원이 있기 때문이다. 스레드는 코드, 데이터, 힙 영역을 공통된 자원으로 사용한다.

  • 각 스레드는 스택 부분만을 따로 가지고 있는 것이다. 공유되는 자원이 있기 때문에 컨텍스트 스위칭이 일어날 때 캐싱 적중률이 올라가게 된다.


출처 - https://youtu.be/1grtWKqTn50

profile
반가워요!

0개의 댓글