- 프로세스(Process)란 메모리에 올라와 실행중인 프로그램이며, 운영체제로부터 시스템 자원을 할당받는 작업의 단위이다.
- 프로그램이 실행되면 프로세스로 변경된다. 프로세스 실행 과정은 다음과 같다.
- 생성 상태 : 프로그램을 메모리에 가져와 실행 준비가 완료된 상태, PCB가 생성된다.
- 준비 상태 : 프로세스가 메모리에 적재된 상태로, 실행을 기다리는 모든 프로세스가 자기 차례를 기다리는 상태
- 실행 상태 : 선택된 프로세스가 CPU를 사용하는 상태
- 대기 상태 : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때 까지 기다리는 상태-
- 완료 상태 : 프로세스가 종료된 상태, PCB가 삭제된다.
- PCB(Process Control Block)은 프로세스의 정보를 포함하는 OS 커널의 자료구조이다. OS는 프로세스를 실행하고있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터값(context)를 PCB에 저장하고 새로운 프로세스의 상태와 context로 교체하는 작업을 Context Switching 이라고 한다.
- 프로세스는 메모리에 영역을 할당받아 다음과 같이 구성된다.
- 각 프로세스는 위와 같은 독립된 메모리 영역을 할당받으며, 프로세스 당 최소 1개 이상의 스레드를 가지고 있다.
또한 각 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없으며, 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC)을 사용해야 한다.
- 쓰레드(Thread)란 프로세스 내에서 실행되는 흐름의 단위로서, 프로세스 내에서 실제로 작업을 수행하는 주체를 말한다.
스레드는 아래와 같은 구조를 갖는다.
- 쓰레드는 Code, Data, Heap 영역을 공유하며, Stack에 대해서는 각 쓰레드가 따로 할당받는다. 따라서 같은 프로세스안의 쓰레드들은 주소공간이나 자원들을 공유한다.
- 그렇다면 멀티 프로세싱과 멀티 쓰레딩은 어떠한 특징이 있을까?
- 멀티 프로세싱은 하나의 프로세스에 문제가 생기더라도 해당 프로세스의 자식만 죽을 뿐 다른 프로세스에 영향을 끼치지 않는다는 장점이 있다. 하지만 Context Switching을 위한 비용이 크다는 단점이 있다.
- 멀티 스레딩은 Context Switching을 위한 비용이 적고, Code, Data, Heap 영역을 공유하기에 통신 부하가 적고, 프로세스를 생성하여 자원을 할당하는 콜이 줄어들므로 자원을 효율적으로 관리할 수있다는 장점이 있다. 하지만 디버깅이 어렵고 동기화에 신경을 써야하며, 한 스레드에 문제가 생기면 다른 곳에도 영향을 끼친다는 단점이 있다.
cf) 파이썬은 멀티 쓰레딩을 지원하지않는다. 엄밀히 말하면 멀티스레딩을 할 수는 있지만 오히려 속도가 떨어진다.
그 이유는 GIL(Global Interpreter Lock)때문이다. GIL을 도입하면 인터프리터의 구현이 쉬워지고 Garbage Collecter를 만들기 좋다는 점 등의 장점이 있기 때문이다. 대신 멀티 프로세싱은 가능하다.
ref)
'CS' 카테고리의 다른 글
Data Governance [CS] (0) | 2022.12.19 |
---|---|
Index & B-Tree [CS] (0) | 2022.12.14 |
Deadlock [CS] (0) | 2022.12.14 |
ORM [CS] (0) | 2022.12.14 |
MSA [CS] (0) | 2022.12.14 |