프로세스
개념
프로세스는 메모리에 올라와 실행되고 있는 프로그램의 독립 객체를 말합니다.
우리가 프로그램을 실행시키면 프로세스 객체가 생성됩니다. 이는 프로그램 실행에 필요한 내용이 메모리 (RAM) 에 적재된다는 것을 의미합니다.
프로세스는 OS 로부터 시스템 자원을 할당받아 실행되는데, 이 때 할당받는 시스템 자원은 CPU 시간, 운영되기 위해 필요한 주소 공간, 메모리 영역 등이 있습니다.
특징
- 프로세스는 각각 독립된 메모리영역 (Code, Data, Stack, Heap) 을 할당받음
- 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있음
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없음
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간 통신이 필요함 (IPC, Inter-Process-Communication)
멀티 프로세스
개념
멀티 프로세스는 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것입니다.
하지만 CPU 는 한번에 한가지 명령어밖에 처리하지 못합니다. 그렇기 때문에 멀티 프로세스는 동시에 여러 프로세스가 실행되는 것이 아니라, 재빠르게 프로세스를 번갈아가며 실행하고 관리하는 것을 말합니다.
CPU 가 프로세스를 번갈아가며 실행하고 관리하는 것을 Context Switching 이라고 합니다.
Context Switching
Context Switching 은 CPU 에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정입니다.
동작 중인 프로세스가 대기하면서 해당 프로세스의 상태 (Context) 를 PCB (Process Control Block) 에 보관하고, 대기하고 있던 다음 순서의 프로세스가 동작하며 이전에 PCB 에 보관했던 프로세스의 상태를 복구하는 작업입니다.
PCB (Process Control Block)
PCB 는 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조입니다.
PCB 는 Context Switching 시 사용되는데, CPU 가 여러 프로세스를 빠르게 번갈아가며 작업하기 위해서는 프로세스에 대한 정보 및 상태를 저장 / 복원 할 필요가 있기 때문입니다.
PCB 에 포함되는 항목은 일반적으로 다음과 같습니다.
- 프로세스 식별자, 상태, 카운터, 계정 정보
- CPU 레지스터, 스케쥴링 정보
- 메모리 관리 정보
- 입출력 상태 정보
멀티 프로세스의 장점
- 여러개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지는 않음
멀티 프로세스의 단점
- Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등 오버헤드가 발생하게 됨
- 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어 Context Switching 이 발생하면 캐시에 있는 모든 데이터를 리셋하고 다시 캐시 정보를 불러와야 함
스레드
개념
스레드는 프로세스 내에서 실행되는 흐름의 단위를 말합니다.
일반적으로 하나의 프로세스는 반드시 하나 이상의 스레드를 가지고 있습니다. (메인 스레드)
특징
- 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내 주소 공간이나 자원들을 같은 프로세스 내 스레드끼리 공유하면서 실행됨
- 스레드는 프로세스 내에서 각각 Stack 영역만 따로 할당받고, Code, Data, Heap 영역은 공유
- 각 스레드는 각각의 실행 시퀀스 / 코드를 가질 수 있으므로 함수가 호출되고 반환될 때 각각의 Program Counter 를 push / pop 해야함
- 그렇기 때문에 스레드 사이의 보호를 위해 Stack 을 구분
- 각각 스레드는 별도의 레지스터를 가지고 있음
- 한 스레드가 프로세스 자원을 변경하면 다른 이웃 스레드도 그 변경 결과를 즉시 볼 수 있음
멀티 스레드
개념
멀티 스레드는 하나의 응용 프로그램을 여러개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것입니다.
일반적으로 멀티 스레드를 사용하는 이유는 사용자와 상호작용하는 응용 프로그램에서 단일 스레드로 네트워크나 DB 와 같은 Long-running task 를 수행하는 경우, 해당 작업을 처리하는 동안 사용자와 상호작용이 불능인 상태가 될 수 있기 때문입니다.
멀티 스레드의 장점
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있음
- 스레드 사이 작업량이 작아 Context Switching 이 빠름
- 프로세스 내 메모리를 공유하기 때문에 스레드 간 데이터 주고받는 것이 간단하여 시스템 자원 소모 감소
단점
- 주의 깊은 설계 필요, 디버깅이 까다로움
- 다른 프로세스에서 스레드 제어 불가 (즉, 프로세스 외부에서 스레드 제어 불가)
- 멀티 스레드의 경우 자원 공유 문제 발생 (동기화 문제, 교착 상태)
- 하나의 스레드에 문제가 발생하면 전체 스레드에 영향
멀티 프로세스 대신 멀티 스레드를 사용하는 이유
- 자원의 효율성 증대
- 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리할 수 있음
- 프로세스 간 Context Switching 시 단순히 CPU 레지스터 교체 뿐 아니라 RAM 과 CPU 사이 캐시 메모리에 대한 데이터까지 초기화되므로 오버헤드가 크기 때문
- 스레드는 프로세스 내 메모리를 공유하기 때문에 독립적인 프로세스와 달리 스레드 간 데이터를 주고받는 것이 간단해지고 시스템 자원 소모가 줄어들게 됨
- 처리 비용 감소 및 응답 시간 단축
- 프로세스 간 통신 (IPC) 보다 스레드 간 통신이 비용이 적어 부담이 감소됨
- 프로세스 간 전환 속도보다 스레드 간 전환 속도가 빠름
이미지 출처 & 참고 자료
https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
https://charlezz.medium.com/process%EC%99%80-thread-%EC%9D%B4%EC%95%BC%EA%B8%B0-5b96d0d43e37
https://junuuu.tistory.com/175
'Studies > Computer Science' 카테고리의 다른 글
[네트워크] 쿠키와 세션 (0) | 2022.07.13 |
---|---|
[네트워크] JSON & XML (0) | 2022.07.05 |
[네트워크] TCP & UDP (0) | 2022.06.06 |
[네트워크] RESTful, REST API (0) | 2022.06.03 |
[네트워크] OSI 7계층 (0) | 2022.05.29 |