Search
moon
sun
🧵

process thread

태그
OS
CS

서론

process란

🤔
프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다. 이는 프로그램이 실행되면서 발생하는 모든 정보를 포함하며, 프로세스는 메모리에 저장되어 CPU에 의해 한 번에 하나씩 처리된다. 각 프로세스에는 프로세스 ID, 현재 상태, 프로그램 카운터 등의 정보를 담고 있는 프로세스 제어 블록이 있다.

thread란

🤔
스레드는 프로세스 내에서 실행되는 흐름의 단위다. 각 스레드는 프로세스의 자원을 공유하며 동작하고, 프로세스 내에서 멀티 스레딩을 통해 여러 작업을 동시에 처리할 수 있다. 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택 등의 정보를 담고 있는 스레드 제어 블록을 갖는다.

본론

process의 상태와 PCB

🤔
Process와 Thread는 리눅스에서는 task라고 하고, Thread를 Process의 가장 작은 하나의 작업 단위로 취급한다. 공통적으로 볼 수 있는 것은 일을 하는 주체라는 점이다. 다른 점을 상위 체계가 누구인가의 차이라고 말하면 좀 쉽게 이해할 수 있는 것 같다. 먼저 Process는 다음과 같은 작업을 통하여 cpu자원을 사용한다.
🤔
생각 확장 운영체제가 PCB를 할당하여 Process들을 관리한다. 그럼 PCB를 가진 Process들은 각자만의 고유한 영역이 생긴다. 만약 .exe를 두 개의 Process로 돌리면 어떨까? PCB가 두 개 생긴다. 즉, 낭비가 발생한다. 똑같은 Job을 수행함에도 동일한 PCB를 사용하는게 아니라 독립적인 공간을 사용하기 때문이다. 자 그럼 당연하게도 낭비를 줄이기 위해서 공유하려고 생각할 것이다. 이것이 Thread의 시작이지 않을까 싶다.
Process 상태 전이

process와 thread 각각 n개로 돌려보면?

🤔
각각 돌려보면 다음과 같은 차이를 볼 수 있다. 만약 독립적으로 동작하는 process로 만들면 ready Queue에 n개의 process가 들어간 것을 알 수 있다. 하지만 Thread로 돌린다면 공통적인 영역인 코드, 데이터, 힙을 공유하여 사용하여, 하나의 process만 만들어진 것을 볼 수 있다.
process 구현
Thread 구현

각각의 특징

📌
process를 통한 구현 특징 - 상호 영향을 주지 않는다. - 독립적인 공간 - 데이터 공유는 IPC기술을 이용해야 한다. - 낭비가 될 수 있다.
📌
Thread를 통한 구현 특징 - PCB 내의 영역을 자유롭게 공유할 수 있다. - Thread는 Process에 종속적이다. - Process보다 적은 문맥교환 비용 - 빠른 응답성을 제공할 수 있다. 이유는 문맥교환시에 발생하는 오버헤드와 자원공유가 가능하기 때문이다.

결론

📌
Process는 고유의 PCB를 부여 받아 OS의 관리 체계 하에 속한다. 하지만 Thread는 Process내의 공통된 영역을 공유할 수 있고, 이를 통하여 낭비를 줄일 수 있다. 즉, Process내에 속하게 된다. 이 때문에 발생할 수 있는 문제는 Process가 죽는다면 모든 Thread가 죽을 수 있다. 그렇기에 상호 영향을 주면 안되는 프로그램을 만들어야 한다면 Thread보다는 IPC를 이용하여 Process간 통신을 통하여 공유하는 것이 더 좋은 선택지가 될 수 있다.