본문 바로가기
이론 공부 내용 정리

운영체제1-프로세스vs스레드, 멀티스레드

by mazayong 2021. 5. 27.

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

1) 프로세스
- 정의 : 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태.
(프로그램 - 작업을 위해 실행할 수 있는 파일 / 프로그램)
- PCB를 가진 프로그램.
- 실기억장치에 저장된 프로그램.
- 프로세서가 할당되는 실체, 디스패치가 가능한 단위.
- 프로시저가 활동중인 것.(여러 개의 작은 프로그램으로 분할된 해당 프로그램 의미)
- 비동기적 행위를 일으키는 주체
- 지정된 결과를 얻기 위한 일련의 계통적 동작
- 목적 / 결과에 따라 발생되는 사건들의 과정
- 운영체제가 관리하는 실행 단위

 

특징

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

- 최소 프로세스당 최소 1개의 스레드(메인 스레드)를 소유.

- 각 프로세스는 별도의 주소 공간에서 실행되고, 한 프로세스는 다른 프로세스의 변수 / 자료구조에 접근할 수 없다.

- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스간의 통신(IPC)을 사용해야 한다.(소켓/파이프/파일..etc)

 


프로세스 상태 
<프로세스 상태의 종류>
New : 프로세스가 생성되는 중
Running : CPU에서 명령이 실행되는 중
Waiting : 프로세스가 어떤 event(입출력 완료, signal 수신) 발생을 기다리는 중
Ready : 프로세스가 CPU에 할당되어 실행되기를 기다리는 중
Terminated : 프로세스 실행 종료


<프로세스 상태 변화를 위한 조건>
컴퓨터 하드웨어 CPU는 여러 개의 프로세스를 동시에 실행할 수 없다.
언제나 오직 1개의 프로세스를 수행한다.(운영체제의 멀티태스킹과 스케줄링 기법으로 여러 개의 프로세스가 동시에 실행되는 것처럼 보일 뿐이다.)

++(프로세스 상태 변화 추가 설명 필요)

 

 

 

 

2) 스레드

- 정의 : 프로세스 내에서 실행되는 여러 흐름의 단위 = 프로세스의 특정한 수행 경로 = 프로세스가 할당받은 자원을 이용하는 실행의 단위

 

특징

- 스레드는 한 프로세스 내에서 각각 stack만 따로 할당받고 다른 부분은 공유한다.

- 같은 프로세스 안 여러 스레드는 같은 힙 공간을 공유하나, 다른 프로세스 메모리에는 직접 접근할 수 없다.

- 한 스레드가 프로세스 자원을 변경하면, 다른 이웃 스레드도 변경 결과를 즉시 볼 수 있다.



3) 프로세스와 스레드의 차이
(면접 질문으로 나올 시 작동 방식 이해가 포인트이므로 이 부분에 대해 자세히 설명할 것.)

프로세스는 실행될 때 운영체제로부터 각 독립된 메모리 영역을 할당받음. 기본적으로 하나의 프로세스 생성 시 하나의 스레드(메인 스레드)가 생성됨. 스레드가 추가 생성되지 않는 한 모든 프로그램 코드는 메인 스레드에서 실행된다. 프로세스는 별도의 주소 공간에서 실행되며 한 프로세스는 별도 주소 공간에서 실행되며 한 프로세스는 다른 프로세스의 변수 / 자료구조에 접근할 수 없다. 한 프로세스가 다른 프로세스의 자원에 접근하려면 IPC가 필요하다.

스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내에서 각 Stack만 따로 할당 받고 코드, 데이터, 힙 영역은 공유한다. 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행된다. 따라서 한 스레드가 프로세스 자원을 변경한다면 이웃 스레드도 변경 결과를 즉시 볼 수 있다.

 

https://velog.io/@raejoonee/프로세스와-스레드의-차이

 

 

 

 


2. 멀티스레드

1) 정의
- 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것.

- 대표 응용 프로그램 = 멀티 스레드.


2) 장점과 단점

<장점>

- 시스템 자원 소모 감소(자원의 효율성 증대) = 프로세스를 생성해 자원을 할당하는 시스템 콜이 줄어들어 자원 효율적 관리 가능.

- 시스템 처리량 증가(처리 비용 감소) = 스레드 간 데이터 주고 받는 작업 간단 + 시스템 자원 소모 줄어듦, 작업량이 작아 Context  Switching 빠름

- 간단한 통신 방법으로 인한 프로그램 응답 시간 단축 = 프로세스 내 stack을 제외한 모든 메모리를 공유해 통신 부담이 적음.

 

<단점>

- 설계를 잘해야 하고, 디버깅이 까다로움.

- 단일 프로세스 시스템의 경우 효과를 기대핟기 어려움.

- 프로세스 밖에서 스레드 각각을 제어할 수 없음.

- 멀티 스레드는 자원 공유의 문제 발생.(동기화 문제)

- 하나의 스레드에 문제가 발생 시 전체 프로세스가 영향을 받음.


3) 멀티스레드 vs 멀티프로세스

 

<멀티 프로세스 대신 멀티 스레드를 사용하는 이유> = 프로그램을 여러 개 키는 것보다 한 프로그램 안에서 여러 작업을 해결하는 것이 더 효율적임.

-> why?

자원의 효율성 증대

= 멀티 프로세스 대신 멀티 스레드로 실행할 경우, 프로세스를 생성해 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 가능. (프로세스 간 Context Switching시 단순히 CPU 레지스터 교체 뿐만 아니라 RAM과 CPU 사이 캐시 메모리에 대한 데이터까지 초기화되므로 오버헤드가 커서)

=스레드는 프로세스 내 메모리를 공유해서 독립적인 프로세스와 달리 스레드 간 데이터를 주고받는 것이 간단하고 시스템 자원 소모가 줄어든다.

처리 비용 감소 및 응답 시간 단축

= IPC보다 스레드 간 통신의 비용이 적어 작업들 간 통신의 부담이 줄어든다.(Stack 제외 모든 메모리를 공유해서)

=프로세스 간 전환 속도 < 스레드 간 전환 속도.(Context Switching시 스레드는 Stack영역만 처리하기 때문.)

 

++스레드 간 자원 공유는 전역변수(데이터 세그먼트)를 이용하므로 함께 상용할 때 충돌 발생 가능.

 


https://sweetday-alice.tistory.com/167

https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html