본문 바로가기
컴퓨터 공학/운영체제

[운영체제] 프로세스와 스레드의 차이

by tempus 2021. 9. 12.
반응형

프로세스와 스레드는 프로그래밍을 배우면 자주 접하는 단어일 것입니다. 프로그램의 동작 방식을 이해하기 위해서는 기본적으로 알고 있어야 하기 때문에 기술 면접에서도 단골 질문으로 등장합니다. 이번에는 이에 대해 알아보려고 합니다.

 

프로세스 vs 프로그램

둘의 차이를 알기에 앞서 하나의 중요한 개념을 짚고 가야 합니다. 바로 프로세스와 프로그램의 차이이다. 둘의 차이는 다음과 같습니다.


  • 프로그램 : 저장장치에 저장되어 있는 정적인 상태 (어떤 데이터를 사용하여 어떤 작업을 할지 절차를 적어놓은 것)
  • 프로세스 : 실행을 위해 프로그램이 메모리에 올라온 동적인 상태

즉, 메모리에 올라와 있는 프로그램이 실행되면 프로세스가 됩니다. 비유를 하자면 플래너에 계획을 작성하는 것이 프로그램이고 이를 실제로 행하는 것은 프로세스라고 할 수 있습니다.


프로세스는 각각 독립된 메모리 영역(Code, Data, Bss, Stack, Heap)을 할당받습니다.

 

process_img

컴파일 시 크기가 결정


  • Code : 함수, 제어문, 상수
  • Data : 초기화된 전역변수
  • Bss : 초기화 안된 전역변수

실행 중 메모리 할당 후 반납


  • Heap : 동적할당
  • Stack : 지역변수

우리는 작업 관리자에서 아래와 같이 동작하고 있는 수많은 프로세스를 확인할 수 있습니다. 일반적으로 이러한 프로세스들은 시분할 시스템을 통해 동작을 하고 있습니다.

 

task_manager_img

프로세스 vs 스레드

과거의 프로그램은 복잡하지 않았기에 하나의 프로그램에 하나의 프로세스만 있어도 되었습니다. 하지만 프로그램이 복잡해지면서 더 이상 하나의 프로세스 만으로는 프로그램을 실행하기에는 벅찼습니다. 그렇다고 하나의 프로그램에 여러 개의 프로세스를 만들자니 운영체제 자체에서 프로세스를 관리할 때 할당된 메모리 내의 정보만 접근하게 제약을 두어서 프로세스끼리는 메모리 접근이 불가했습니다.


그래서 프로세스보다 더 작은 실행 단위가 필요했는데 그래서 탄생한 게 스레드입니다.

 

thread_img

스레드는 프로세스 내에서 각각 Stack 만 따로 할당받고 나머지 영역은 공유합니다. 코드에 비유하자면 프로그램에서 함수들이 각각 스레드라고 할 수 있습니다.


자원을 공유하고 있기 때문에 한 스레드가 프로세스 자원을 변경하면 그 즉시 이웃 스레드도 변경 결과를 확인할 수 있습니다.


사전적인 정의는 다음과 같습니다.


  • 프로세스 : 메모리에 올라와 실행되고 있는 프로그램, 최소 1개의 스레드(메인 스레드)를 가지고 있습니다.
  • 스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위

정리

프로그램은 저장장치에 저장되어 있는 코드 덩어리입니다. 이 프로그램이 메모리에 올라와 동작하는 상태가 되면 프로세스라고 부릅니다.


프로세스는 메모리에서 각각 독립된 영역(Code, Data, Bss, Stack, Heap)을 가지게 됩니다. 그러므로 일반적으로 프로세스는 다른 프로세스의 정보에 접근할 수 없습니다.


프로그램이 복잡해지면서 하나의 프로세스로 만으로 동작하기 벅차게 되었습니다. 하지만 제약 때문에 여러 프로세스를 사용할 수 없었습니다. 그래서 등장한 것이 더 작은 실행 흐름의 단위인 스레드입니다.


프로세스 내의 스레드끼리 메모리 영역을 공유하고 있기 때문에 한 스레드가 프로세스 자원을 변경하면 이웃 스레드도 변경 결과를 확인할 수 있습니다.

 

반응형

댓글


loading