본문 바로가기

운영체제

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

 

 

이번글에서는 운영체제관련 단골 질문인 프로세스와 스레드에 관해 알아보겠다. 

그 이전에 하나 알아둬야할것은 CPU가 이러한 코드(명령어)를 실행하는 연산장치이며, 우리가 흔히 메모리라고 부르는 (정식명칭은 메인메모리)는 프로세스가 CPU에서 실행되기 위해 대기하는 공간을 의미한다는 것이다.

 

프로세스(Process)

그런의미에서 우리가 쓰는 카톡, 이메일, 크롬 브라우저 등 모두 컴퓨터가 처리하는 '프로세스'이며 CPU에 의해 실행되는 작업들이다.

프로세스라 함은 윈도우의 경우 '작업관리자', 맥의 경우 '활성 상태 보기'라는 앱을 클릭했을때 볼 수 있는 우리의 컴퓨터가 현재 수행중인 무수한 '작업'들 더 구체적으로는 실행 중인 모든 프로그램과 백그라운드 서비스들을 의미한다 (CPU 스케줄링의 대상이 되는 작업).

더 전문적으로는 실행된 프로그램의 인스턴스를 의미하며 생성될때 생성될때 PCB(프로세스 제어 블록)라는 것이 생성된다. 

프로세스의 메모리 구조와 생명 주기는 다른 글에서 다뤄볼 것이다.

스레드(Thread)

스레드프로세스내 작은 실행의 단위로 프로세스 내에는 하나 이상의 스레드가 존재하기 마련이다.

스레드는 생성될때 TCB(쓰레드 제어 블록)라는 것이 생성된다.

프로세스가 프로그램이 실행되고 있는 상태 전체를 가리킨다면, 스레드는 해당 프로세스내에서 이루어지는 개별적인 실행 흐름을 의미한다.

예를 들어, 우리가 노트북에서 카카오톡을 이용한다고 가정했을때, 카카오톡 어플리케이션이 실행되고 있는 자체를 프로세스라고 하고, 카카오톡에서 메시지를 주고받는 각각의 대화는 독립적인 스레드라고 이해할 수 있다. 

 

프로세스 vs 쓰레드

프로세스를 공부할때 가장 중요하다고 생각되는 부분은 각각의 프로세스는 독립된 메모리 공간(코드, 데이터, 스택, 힙 등)을 가지며, 이 메모리 공간안에 각각의 코드들과 데이터를 가진다. 

반면, 쓰레드는 프로세스내에 실행 흐름을 의미하기에 당연하게도 프로세스의 자원을 공유하면서 실행되며, 같은 프로세스 내의 쓰레드들은 코드, 데이터, 힙 영역을 공유하지만, 스택은 각자 독립적으로 가진다. 

요약하자면 코드, 데이터, 스택, 힙을 각각 생성하는 프로세스와 달리 스레드는 코드, 데이터, 힙은 스레드끼리 서로 공유된다는 것이다. 

 

+ 초기의 프로세스는 단일 프로세스 시스템이었다고 한다. 

이는 한번에 하나의 프로그램만 실행가능하다는 것을 의미한다.

그렇기 때문에 예전에는 또 다른 프로그램을 실행하고 싶다면 기존의 실행중인 프로세스를 종류하고, 새로운 프로세스를 실행해야만 했다.

하지만 우리가 현재 사용하는 컴퓨터는 이런식으로 작동하지 않는다. 

한번에 여러개의 프로그램을 돌리는 것은 물론이고, 작업 관리자나 활성 상태 보기를 클릭하면 내가 언제 켰는지 알 수도 없는 무수히 많은 프로세스가 마치 병렬적으로, 동시에 실행되고 있는 것처럼 보인다. 

우리가 현재 사용하는 컴퓨터의 시스템이 어떻게 발전했는지에 대해 알기 위해서는 멀티 프로세스와 멀티 스레드에 대해 알 필요가 있다.

이는 다른 글에서 다뤄보겠다.