우당탕탕

[OS] 프로세스(Process)와 스레드(Thread)의 차이 본문

여러내용들

[OS] 프로세스(Process)와 스레드(Thread)의 차이

모찌모찝 2022. 8. 21. 18:29
프로세스가 무엇인지? 스레드란 무엇인지? 그럼 그 둘의 차이는 설명할 수 있는가?? 

신입 ~ 3년차정도에 많이 물어보는 OS 기초 질문인 거 같다.
뭔가 들어봤는데 까먹거나 수업때 배웠는데 기억이 안나는 경우가 많은 것 같다.
( OS과목 A+ 받은거같은데 기억이 하나도 안 난다.. )

프로세스란 무엇인가?

프로세스란 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다

프로세스는 OS가 프로그램을 실행하기 위한 가장 작은 스레드, 메모리들의 집합이며 OS의 스케줄링 방식에 따라 CPU를 프로세스에게 적절하게 할당한다.

프로세스는 운영체제에게 독립된 메모리 영역을 할당받는다.
메모리의 구조로는 code(text), data, heap, stack 영역으로 총 4개로 구성되어있다.

메모리구조

메모리 구조

- code(text) : 컴파일 된 기계어가 저장되는 영역이며, 컴파일 시간에 크기가 결정된다.
- data : static 변수와 같은 사전에 선언된 데이터가 저장되는 영역이며, 컴파일 시간에 크기가 결정된다.
- heap : 데이터를 저장하고 관리하는 영역이며, 런타임 도중 크기가 결정된다.
- stack : 지역변수, 매개변수와 같은 데이터가 저장되며, 런타임 도중 크기가 결정되며, 함수 호출 시 생성되며 종료 시 제거된다.

스레드란 무엇일까?

스레드란 한 프로세스 내에서 동작되는 여러 흐름 단위이다

모든 프로세스는 한개 이상의 스레드가 존재하여 작업을 수행한다.

 

이제 프로세스와 스레드는 각각 무엇인지는 알 것이다. 그럼 프로세스와 스레드의 차이점은 무엇일까?

이는 프로세스 간 통신방법, 스레드 간 통신방법을 생각하면 편하다.
프로세스의 경우 생성이 되면서 메모리 공간 등을 복사하여 별도 자원을 할당하지만, 스레드의 경우 스택영역을 제외한 메모리 공간을 공유한다. 이를 설명하면 아래와 같다.

프로세스는 프로세스간 통신을 하기 위해 IPC라는 통로를 통해 데이터를 주고받는다. 하지만 스레드의 경우 스택 영역을 제외한 메모리 영역을 공유하기 때문에 이러한 과정이 필요 없다. 

프로세스 간 통신에서 IPC라는 통로가 필요하다는 것은 알았다. 그럼 IPC에는 어떤종류가 있을까?

IPC의 종류

- 익명의 PIPE : FIFO 구조, 익명의 파이프를 통해 동일한 PPID( 부모 프로세스의 PID ) 를 가진 프로세스들 간 단방향 통신을 지원해준다.
- Named PIPE : FIFO 구조, 이름을 가진 파이프를 통해 프로세스 간 단방향 통신을 지원해준다. 
- Message Queue : FIFO 구조, 메모리를 사용한 PIPE이며 구조체 기반으로 통신을 한다.
- Shared Memory : 시스템상의 공유 메모리를 통해 통신하는 방법이다.
- Socket : 네트워크 소켓통신을 사용한 데이터 공유방법이다. Client - Server 구조로 데이터 통신을 진행한다.



Reference

- https://ko.wikipedia.org/wiki/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4

 

Comments