본문 바로가기

CS

Process와 Thread의 차이

반응형

Process란?

프로세스는 한 마디로 정의하자면 컴퓨터에서 실행되고 있는 컴퓨터 프로그램을 말한다.

여기서 프로그램이란 하드 디스크 등에 저장되어 있는 실행코드를 뜻하며 프로세스를 조금 더 풀어서 설명하자면 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업(Task) 단위를 지칭한다. 

즉, 컴퓨터에게 프로세스란 다음과 같이 정의할 수 있다.

- 운영체제로부터 시스템 자원을 할당받는 작업의 단위

- 컴퓨터에서 연속적으로 실행되고 있는 프로그램

- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스

 

윈도우 OS에서 실행되고 있는 프로세스들

 

Process 구성 요소

위에서 프로세스는 운영체제로부터 시스템 자원을 할당받는다고 했는데 어떤 시스템 자원을 할당 받을까?

프로세스에서 할당 받은 자원

Process는 다음과 같이 네가지의 자원들을 할당 받는다.

- Code : 코드 자체를 구성하는 메모리 영역이다.

- Data : 전역변수, 정적변수, 배열, 구조체 등 초기화된 데이터가 저장된다.

- Stack : 지역변수, 매개변수, 리턴 값(임시 메모리 영역)

- Heap : new()와 같이 동적 할당 시 사용된다.

 

이해를 돕기 위해 윈도우 .exe 파일로 예를 들어보겠다.

exe 파일은 윈도우에서 실행 파일을 의미한다. 실행 파일은 우리들이 고급 언어로 짠 소스들이 컴퓨터가 이해하기 쉽게 바이너리 코드나 바이트 코드처럼 기계어로 컴파일 되어 있는 것을 뜻한다. 따라서 exe 파일을 실행하게 되면 컴파일된 코드들이 Code 영역에 실리게 되고 전역 변수, 정적변수와 같이 초기화된 데이터는 Data 영역에 실리게 된다. 컴퓨터 입장에서는 고정되어 있는 영역으로 분류한다는 의미로 Code와 Data를 데이터 정적 세그먼트라고 한다.

반대로 함수 호출이나 지역 변수 할당, 메모리 해제와 같은 동적인 활동들을 통해 Stack과 Heap 영역을 저장, 사용, 해제하게 되는데 이러한 영역을 데이터 동적 세그먼트라고 한다.

Thread란?

쓰레드는 어떠한 프로그램 내에서 실행되는 흐름의 단위다. 프로세스의 작업단위(Task)와 비슷한 점이 있지만 다음과 같은 차이점이 있다.

- 프로세스는 OS에서 독립적으로 실행되고 각각 별개의 메모리를 차지하고 있다. 따라서 *멀티프로세스 환경인 경우 일반적인 방법으로는 프로세스간에 자원들을 공유할 수 없다. (IPC 통신으로는 가능하다고함)

- 쓰레드는 프로세스 내부에서 실행되어 할당된 프로세스의 자원들을 사용하기 때문에 *멀티쓰레드 환경에서 쓰레드끼리 자원들을 공유할 수 있다. 

- 쓰레드는 프로세스의 Stack 자원을 공유하지 않기 때문에 쓰레드마다 따로 할당을 받는다.

 

 

 

 

 

 

* 멀티프로세스 : 컴퓨터 시스템 한 대에 둘 이상의 중앙 처리 장치(CPU)를 이용하여 병렬로 처리하는 것을 가리킨다. 또, 이 용어는 하나 이상의 프로세서를 지원하는 시스템의 능력, 또는 이들 사이의 태스크를 할당하는 능력을 가리키기도 한다.

* 멀티쓰레드 : 일반적으로 한 프로그램당 하나의 쓰레드를 가지고 있지만 프로그램 환경에 따라 둘 이상의 쓰레드를 동시에 실행할 수 있는데 이러한 개념을 멀티스레드라고 한다.

 

반응형

'CS' 카테고리의 다른 글

플라이웨이트(Flyweight) 패턴  (0) 2021.04.12
소프트웨어 생명 주기  (0) 2021.04.02
Bit, Byte 2진수 16진수 관계 정리  (0) 2020.12.22
HTML <dl> 태그  (0) 2020.11.30
.inc 파일이란 무엇인가?  (0) 2020.11.30