본문 바로가기
Computer Science/Operating System

[Pluto의 컴퓨터이야기] Process 와 Thread의 차이는 뭘까?

by Dev. Pluto 2022. 2. 20.
반응형

안녕하세요! 플루토입니다. 오늘은 컴퓨터와 사용자를 이어주는 운영체제에 대해서 프로세스와 스레드의 차이를 알아보는 시간을 가지도록 하겠습니다.


글을 읽고 난 뒤의 여러분은
1. 운영체제에 대해서 간단히 설명할 수 있습니다.
2. 프로세스와 스레드에 대해서 설명할 수 있습니다.
3. 프로세스와 쓰레드의 차이에 대해서 설명할 수 있습니다. 

 

1. 운영체제란?

운영체제는 컴퓨터 하드웨어(CPU, Main Memory, Storage Device 등) 및 소프트웨어(컴퓨터에서 실행되는 여러가지 프로그램)를 상호작용하게 할 뿐만 아니라, 이러한 S/W단의 응용 프로그램들을 사용자들이 잘 사용할 수 있도록 조율해주는 중간다리 역할을 합니다. 

 

또한, H/W의 관점으로는 중앙처리장치, 메인 메모리 등의 컴퓨팅 리소스들을 효율적으로 사용할 수 있도록 스케줄링하는 등의 관리자 역할도 수행하며 컴퓨터를 사용하는 사용자들과 직접적으로 상호작용하는 I/O device의 관리까지 수행하는 다재다능한 컴퓨터 시스템의 한 요소입니다. 

 

자세한 운영체제의 구조 및 세부내용은 다음 글로 다루도록 하겠습니다.

우리가 사용하는 여러가지 운영체제, 컴퓨터 뿐만 아니라 Mobile기기에도 운영체제가 존재한다.

 

2.  프로세스와 쓰레드

 2-1 프로세스

여러분이 프로그래밍한, 혹은 인터넷에서 다운로드 받은 각종 실행 파일들을 더블클릭하게 되면 저장장치에 있던 프로그램의 실행 명령어와 명령에 필요한 각종 데이터들이 운영체제(이하  OS)에 의해서 할당된 가상 주소 공간(Virtual Address Space)에 Load 되어 실행 되게 됩니다. 여기서! 메모리에 올라와 컴퓨터 하드웨어의 자원을 배정받으며 실행 중에 있는 상태인 프로그램을  "프로세스" 라 부르게 됩니다. 

 

프로세스의 대표적인 특징
1. 실행 중인 프로그램의 복사/복제의 형태
2. OS 관점에서 스케줄링을 위한 가장 기본적인 단위
3. 프로세스 고유의 ID(PID)를 가지고 있는다. 
4. 운영체제에서의 새로운 프로세스를 만드는 방법은 특정 프로세스를 만드는 방법밖에 없다.
  (따라서 부모/자식 프로세스 관계가 자연스럽게 형성이 된다) 

 

 2-2 프로세스의 구조

프로그램이 메모리에 올라와 할당되는 VAS의 구조

프로그램이 실행이 되면 운영체제는 해당 프로그램에게 가상 주소 공간을 할당해주고 해당 메모리 공간 안에서 실행에 필요한 데이터들이 생성 ~ 소멸되며 프로그램이 동작하게 됩니다. 이렇게 한정된 공간을 할당하는 이유는 현대  CPU가 여러 개의 코어를 가지는 멀티코어 프로세서의 구조를 지니기 때문에, 한 번에 여러 개의 프로그램이 실행될 수 있습니다. 따라서 운영체제는 한정된 메인 메모리 자원을 최대한 효율적으로 사용할 필요가 있기 때문에 제한된 크기의 주소를 할당하게 됩니다

 

 

 2-2 스레드

하나의 프로세서 내에서 병렬적으로(혹은 동시적으로) 이루어지는 작업을 수행하려고 하는 경우가 상당히 빈번하게 존재합니다. 그럴 때마다 운영체제가 새로운 프로세스를 만들어 작업을 처리하게 되면, 작은 단위의 작업에도 큰 가상 주소 공간을 할당하게 되고 이는 곧 컴퓨팅 자원의 낭비로 이루어지게 됩니다. 따라서 프로세스의 같은 코드와 힙 메모리(동적 할당 메모리 영역)를 사용하며 스레드 당 독립적인 실행 순서를 가질 수 있도록 명령어 레지스터 정보(Program Counter)와 Stack Area만 별도로 만들어준다면 하나의 프로세스 내에서 여러 개의 실행 분기를 가질 수 있기 때문에 이를 이용하여 탄생하게 된 것이 바로 스레드입니다.

시각에 따라서 경량화된 프로세스라고 보기도 합니다.

 

스레드의 대표적인 특징
1. 하나의 프로세스 내부에서 생성된다. 
2. 각각의 스레드 마다 스택 영역을 다르게 하여 사용한다.
3. 쓰레드 별 PC register state 등을 담고 있는 TCB (Thread Control Block)을 따로 생성하여 유지한다. (프로세스도 PCB가 있다.)
4. 공유되는 데이터(ex. 전역 static변수)를 변경시키면 다른 스레드 에게도 변경된 값으로 보인다.

 

하나의 프로세스 에서의 멀티스레딩 vs 싱글스레딩 아키텍처

다중 스레드를 사용하면서 CPU는 조금 더 빠르고 가볍게 콘텍스트 스위칭을 실행할 수 있고 이는 곧 더 많은 작업을 처리할 수 있게 됩니다.

 

 멀티스레드의 장점
1. 프로세스 생성에 비에 훨씬 더 작은 시간과 자원을 필요로 한다.
2. 스레드 간 컨텍스트 스위칭 시에 공유데이터 영역 + 힙 영역등을 바꿀 필요가 없다(같은 프로세스의 데이터를 공유하기 때문)
3. 쓰레드 간 통신이 필요할 때 힙 + 공유 데이터를 사용하면 매우 간단하게 Inter Thread Communication을 수행할 수 있다.

 

이러한 점 들이 다중 스레드 시스템의 장점이라고 볼 수 있습니다. 

하지만!!

 

모든 것에는 항상 장점만이 존재할 수 없습니다. 

 

멀티스레드의 단점
1. 공유 데이터에 대해 스레드들이 자원을 선점하려는 race condition 문제가 존재합니다. 
2. 공유 데이터에 대해서 쓰레드들이 콘텍스트 스위칭을 통해 A스레드가 변경한 값을 B 쓰레드가 참조하여 잘못된 동작이나 결과가 나오는 경우가 존재합니다(Sharing Problem)
3. (2) 번의 문제로 인해 운영체제는 멀티쓰레딩 환경에서 추가적인 동기화 작업을 해 주어야 합니다. 
4. 스케줄링으로 인해 Lock(실행 우선권)을 획득한 프로세스가 서로가 서로를 기다리며 결국에는 아무 스레드도 작업을 하지 못하게 되는 DeadLock문제 등이 발생할 수 있습니다. 

 

일반적으로 스레드의 문제점은 공유되는 데이터에 대한 무결성 문제가 주로 차지한다고 할 수 있습니다. 

개발자라면, 특히나 서버단의 개발을 한다면 자신의 애플리케이션의 돌아갈 환경에 따라 멀티쓰레딩 환경에서 이런 문제를 어떻게 해결할 것인지 깊이 고려해야 할 것입니다. 

 

3. 프로세스와 스레드의 차이

  • 스레드는 code, data영역을 공유할 수 있다. (보통 프로세스끼리는 공유하지 못한다.)
  • 프로세스보다 만들고 없애는데 들어가는 컴퓨팅 자원이 훨씬 적게 들어간다. 

 

4. 정리!

누군가가 "운영체제가 뭐야?" 혹은 "프로세스랑 스레드랑 뭐가 다른 거야?"라는 질문을 받는다면 여러분은 질문에 대한 답변을 할 수 있습니다.

 

운영체제는?

컴퓨터 하드웨어와 소프트웨어, 그리고 사용자를 상호작용할 수 있게 도와주는 중간다리 역할. 하드웨어 관점으로는 컴퓨터 자원을 관리하고 시스템을 사용자로부터 보호하여 보다 효율적이고 안전한 컴퓨터 사용을 가능하게 해 주는 요소

 

프로세스와 스레드는?

프로세스는 컴퓨팅 리스소를 할당받아 실행 중인 프로그램의 단위. 
스레드는 하나의 프로세스 내부에서 여러 개의 실행 분기 혹은 병렬 처리를 위해 운영되는 프로세스보다 조금 더 작은 단위

 

오늘은 운영체제에 대해서 "프로세스와 스레드"라는 주제로 알아보는 시간을 가졌습니다. 

운영체제에 대해서는 매우 많은 내용이 있고 오늘 다룬 내용도 깊게 들어가면 상당히 내용이 많아지고 어려워지지만 간단하게 개념을 알아보았습니다. 

 

추후에 운영체제의 더 다양하고 깊은 내용을 가지고 돌아오겠습니다!

 

두서없는 글 읽어주셔서 감사합니다.

반응형