프로세스와 쓰레드의 차이
프로세스 (Process) 🔥
프로그램이 실행되어 메모리에 올라가면 이를 프로세스라 합니다.
각 프로세스는 [ 코드 ・ 데이터 ・ 스택 ・ 힙 ] 영역으로 구성되며, 서로 독립적인 관계입니다. 또한 프로그램이 메모리에 올라가 프로세스가 되기 위해서는 먼저 프로세스 제어 블록(PCB)이라는 것이 생성되어야 합니다. 이 블록은 프로세스가 실행되기 위해 필요한 정보들을 담고 있는 자료구조이며, 프로세스 구분자, 메모리 관리 정보, 각종 레지스터 정보 등이 담겨 있습니다.
프로세스가 동작을 마무리하면, 메모리에서 내려감과 동시에 프로세스 제어 블록도 폐기됩니다.
5-State Process Model
운영체제는 프로세스를 효율적으로 실행하기 위해 5가지 상태 프로세스 모델을 사용합니다.
1. 생성 상태 (Create State)
생성 상태는 프로그램이 메모리에 올라와 프로세스 제어 블록을 할당받고 프로세스가 된 상태입니다. 생성된 프로세스는 곧바로 준비 상태로 이동되어, CPU 스케줄러의 선택을 기다립니다.
2. 준비 상태 (Ready State)
준비 상태는 실행 대기 중인 프로세스들이 기다리고 있는 일종의 큐(Queue)로, 이 상태에 있는 프로세스는 CPU 스케줄러에 의해 선택되면 실행 상태로 이동하게 됩니다. 스케줄러에 의해 선택되는 작업을 디스패치(Dispatch)라 부릅니다.
3. 실행 상태 (Running State)
실행 상태는 프로세스가 CPU를 할당받아 실행되는 상태이며, 준비 상태에서 실행 상태로 넘어가는 프로세스의 수는 CPU 개수에 비례합니다. 그리고 각 프로세스는 스케줄러에 의해 임의의 작업 시간을 할당받게 되며, 이 시간 안에 모든 작업을 수행하게 되면 종료 상태로 이동합니다. 만약 할당받은 시간 내에 작업을 처리하지 못한다면 시간 만료(timeout) 상태가 되어, 다시 준비 상태로 돌아가 스케줄러의 선택을 기다립니다.
4. 대기 상태 (Blocked State)
실행 중인 프로세스가 입출력 요청을 하게 되면, 해당 작업을 처리하는 동안에는 다른 작업을 할 수 없기 때문에 이 프로세스는 대기 상태로 이동합니다. 입출력 작업이 모두 완료되면 그때는 실행 상태로 돌아가는 것이 아닌, 다시 준비 상태로 돌아가 스케줄러의 선택을 기다려야 합니다.
5. 종료 상태 (Terminated State)
모든 작업을 마무리한 프로세스는 종료 상태로 이동하게 되며, 메모리에 올라와 있던 코드와 데이터가 모두 삭제됩니다. 이와 동시에 해당 프로세스에 대한 관리 정보를 담고 있던 프로세스 제어 블록(PCB)도 함께 폐기됩니다.
컨텍스트 스위칭 (Context Switching)
컨텍스트 스위칭은 CPU를 할당받았던 프로세스가 작업을 마치고, 다른 프로세스에게 할당을 넘겨줄 때 발생하는 작업입니다. 이 작업이 발생하면 CPU 내의 프로세스 정보가, 새롭게 실행할 프로세스에 대한 정보로 갱신됩니다. 컨텍스트 스위칭이 발생하는 동안에는 프로세스에 대한 정보를 저장하고, 가져와야 하므로 그 동안에는 CPU가 작업을 수행하지 못합니다. 이러한 이유에서 잦은 컨텍스트 스위칭은 성능저하를 발생시킬 수 있습니다.
컨텍스트 스위칭은 일반적으로 프로세스가 스케줄러에 의해 할당받은 시간을 다 사용한 timeout 상태가 되었을 때 발생하며, 인터럽트가 발생했을 때에도 일어납니다.
CPU 내의 프로세스 정보는 프로세스 제어 블록(PCB)에 의해서 갱신됩니다 👏
스레드 (Thread) 🔥
스레드(Thread)는 프로세스의 작업 단위이며, 프로세스 작업을 유연하게 만들기 위해 등장했습니다.
하나의 프로세스 안에는 여러 개의 스레드가 존재할 수 있으며, 스택을 제외한 나머지 영역을 공유하게 됩니다. 오늘날에는 대부분의 PC가 멀티 스레드를 지원하고 있기 때문에, 복잡한 작업이 있더라도 효율적인 처리가 가능해졌습니다. 채팅 프로그램을 이용할 때 채팅을 하면서도 파일을 주고받을 수 있는 것을 생각해 보면 멀티 스레드가 어떤 것인지 이해할 수 있습니다.
그렇다면 멀티 스레드가 멀티 프로세스보다 좋은 것일까요? 🤔
멀티 프로세스는 여러 CPU가 협력하여 하나 이상의 프로세스를 동시에 처리하는 것을 말합니다.
- 장점: 프로세스는 서로 독립된 구조이기 때문에, 안정성이 높습니다.
- 단점: 독립된 메모리 영역이기 때문에, 작업량이 많아지면 컨텍스트 스위칭으로 인한 성능저하가 발생할 수 있습니다.
멀티 스레드는 하나의 프로세스 내에 여러 스레드로 자원을 공유하며 작업을 수행하는 것을 말합니다.
- 장점: 자원을 공유하기 때문에 효율적이고, 스레드마다 작업을 달리하기에 응답성이 좋습니다. 그리고 스레드 사이 작업량이 작기 때문에, 컨텍스트 스위칭 속도도 빠릅니다.
- 단점: 자원을 공유하기에 동기화 문제가 발생할 수 있고, 하나의 스레드에 문제가 발생하면 다른 스레드도 영향을 받습니다.
정리해 보면 두 방식은 동시에 여러 작업을 수행한다는 점에서 동일하지만, 각각 장단점이 있기 때문에 적용하고자 하는 시스템에 더욱 적합한 방식을 고려하는 것이 좋습니다. 하지만 멀티 스레드를 적용하면 자원의 효율성이 증대하고, 처리 비용 감소 및 응답 시간이 대폭 단축되기 때문에, 멀티 프로세스 대신 멀티 스레드를 많이 이용하는 편입니다.
굳이 여러 프로그램을 켜는 것보다, 하나의 프로그램 안에서 여러 작업을 처리하는 것!
참고 자료 📖
'💻 컴퓨터공학 > 운영체제' 카테고리의 다른 글
CPU를 효율적으로 사용하기 위한 스케줄링 (0) | 2021.10.09 |
---|---|
기본적인 컴퓨터 구조 (0) | 2021.10.01 |
운영체제(OS) 개요 (0) | 2021.09.28 |
댓글
이 글 공유하기
다른 글
-
CPU를 효율적으로 사용하기 위한 스케줄링
CPU를 효율적으로 사용하기 위한 스케줄링
2021.10.09 -
기본적인 컴퓨터 구조
기본적인 컴퓨터 구조
2021.10.01 -
운영체제(OS) 개요
운영체제(OS) 개요
2021.09.28