프로세스(Process) vs 스레드(Thread)

프로세스와 스레드의 차이

프로세스(Process)

프로세스는 실행 중인 프로그램으로 디스크로부터 메모리에 적재되어 CPU의 할당을 받을 수 있는 것을 말한다. 여기서 프로그램과 프로세스의 차이는 뭘까? 프로그램은 보조 기억장치에 존재하며 실행되기를 기다리는 명령어와 정적인 데이터의 묶음이다. 이 명령어와 정적 데이터가 메모리에 적재되면 프로세스가 된다. 프로세스 구조는 지역 변수같은 임시 자료를 가지는 스택과 전역 변수들을 가지는 데이터 영역, 그리고 동적으로 할당되는 메모리인 힙영역을 포함한다.

프로세스 제어 블록(Process Control Bolock, PCB)

어떻게 프로세스간 교체가 일어나면서 작업이 수행되는 걸까? 프로세스는 CPU를 할당받아 작업을 처리하다가 프로세스 전환이 발생하면 진행하던 작업을 저장하고 CPU를 반환해야 하는데, 이때 작업의 진행 상황을 PCB에 저장하고 나중에 다시 작업을 수행할 때 PCB에 저장되어있던 내용을 불러와 이어서 작업을 수행한다. PCB는 이런 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조이다.

PCB 구성 요소

  • PID : 운영체제가 각 프로세스를 식별하기 위해 부여된 프로세스 식별번호(PID, Process Identification)
  • 프로세스 상태: 프로세스는 빠르게 교체되면서 실행되기 때문에 다양한 상태들이 있다.
    • new, ready, running, waiting, terminated 등
  • 프로그램 카운터: CPU가 다음으로 실행할 명령어
  • 스케쥴링 우선순위: 운영체제는 여러개의 프로세스를 동시에 실행하는 환경을 제공한다. 이 중 높은 우선순위를 가진 프로세스가 먼저 실행되는데 이를 스케줄링 우선순위라고 한다.
  • 권한: 프로세스가 접근할 수 있는 자원을 결정하는 정보
  • 프로세스의 부모와 자식 프로세스
  • 프로세스의 데이터와 명령어가 있는 메모리 위치를 가리키는 포인터: 프로세스는 실행중인 프로그램이므로 프로그램에 대한 정보를 가지고 있어야한다.
  • 프로세스에 할당된 자원들을 가르키는 포인터
  • 실행 문맥: 프로세스가 저번 실행상태에서 마지막으로 실행한 레지스터 내용

스레드(Thread)

스레드는 프로세스의 실행 단위로 경량화된 프로세스라고 할 수 있다. 한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소 공간이나 자원을 공유할 수 있다. 스레드는 같은 프로세스에 속한 다른 스레드와 코드 영역, 데이터 영역, 힙 영역 등 운영체제 자원들을 공유한다. 이렇게 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 효율을 높이는 방법을 멀티 스레딩이라고한다. 이 경우 각각의 스레드는 독립적인 작업을 수행해야 하기 때문에 각자의 스택과 PC 레지스터 값을 가지게 된다.

스택영역 같은 경우 지역변수같은 독립적인 값들이 저장되어 있기 때문에 독립된 스택을 할당하고, PC Register 같은 경우 스레드는 CPU를 할당받았다가 다시 스케쥴러에 의해 선점당할 수 있기 때문에 어디까지 수행했었는지 기억할 필요가 있다. 그래서 PC 레지스터는 독립적으로 할당한다.


*틀린 부분이 있으면 언제든지 말씀해 주시면 공부해서 수정하겠습니다.


© 2022. All rights reserved.

Powered by 애송이