CS/OS

[OS] 프로세스와 스레드(Process, Thread)

Jutudy 2021. 5. 23. 10:05

프로세스와 스레드(Process, Thread)

개인적으로 공부하면서 정리하는 글입니다. 내용에 오류가 있는 경우 댓글 달아주시면 수정하도록 하겠습니다.


프로세스(Process)

프로세스는 간단히 말하면 실행중인 프로그램입니다. 보조기억장치에 적재되어 있는 프로그램이 주기억장치에 적재되면서 프로세스 주소 공간을 할당 받고, 커널 영역에 프로세스 제어 블록(PCB)를 부여받은 프로그램을 프로세스라고 합니다. 프로세스는 CPU를 할당받는 작업의 단위입니다.

스레드(Thread)

스레드는 프로세스의 작은 흐름의 단위입니다. 하나의 큰 작업 단위를 프로세스라고 한다면, 큰 작업 내에 세부적인 작은 일들이 존재할 수 있습니다. 이런 작은 흐름들을 스레드라고 하는 것입니다.

한 프로세스에 속한 각각의 스레드들은 프로세스가 가지는 자원을 공유하면서 자신의 실행 환경을 따로 갖게 됩니다. 멀티 스레딩 환경에서 각각의 스레드들은 프로세스 제어 블록과 비슷한 스레드 제어 블록, 그리고 스택 영역을 갖고 있습니다. 프로세스의 모든 정보를 갖고 있는 PCB와 사용자 주소 공간은 공유함으로써 자신이 속한 프로세스의 상태와 자원들은 자연스럽게 공유하게 됩니다.

멀티 스레딩의 장점

멀티 스레딩은 하나의 프로세스 내에 여러 스레드가 존재하는 것입니다. 멀티 스레딩은 성능 측면에서 큰 장점이 있는데요. 스레드를 생성하고, 삭제하며, 스레드 간 스위칭에 소요되는 시간과 비용이 프로세스 단위로 이루어질 때 보다 빠르고 저렴합니다.

또한, 프로세스 간 통신(IPC)는 커널의 개입이 필요하지만, 한 프로세스 내 스레드 간 통신은 메모리와 파일을 공유하기 때문에 커널의 개입이 필요하지 않다는 것도 장점입니다.

사용자 레벨 스레드, 커널 레벨 스레드

사용자 레벨 스레드(User Level Thread)

스레드 라이브러리에 의해 관리되며, 스레드와 관련된 모든 행위는 사용자 공간에서 이루어지므로 커널은 스레드의 존재를 알지 못합니다. 커널은 특정 프로세스에 속한 스레드들 각자가 일으키는 행위를 프로세스의 행위로 인식하는 것 입니다.

특정 스레드의 실행에서 대기는 소속된 프로세스의 대기를 초래하게 되며, 실행 중이던 스레드의 상태는 스레드 라이브러리에 저장되었다가 프로세스가 CPU를 다시 할당받게 되면 계속 실행해 나갈 수 있습니다.

스레드 라이브러리는 주기억장치의 사용자 공간에 위치해 있고, 커널이 스레드를 알 수 없음을 알 수 있습니다. 사용자 레벨 스레드는 스레드 스위칭에 커널의 개입이 필요 없으며, 유저모드<->커널모드 모드 스위칭이 필요 없습니다. 또한, 스레드 간 스위칭은 운영체제의 스케줄링과 관계 없이 독자적인 스케줄링이 가능합니다.

사용자 레벨 스레드의 단점으로는 특정 스레드의 대기가 자신이 소속된 프로세스 전체의 대기를 초래한다는 것, CPU가 프로세스 단위로 할당되기 때문에 멀티 프로세싱 환경에서도 스레드 단위의 다중처리는 되지 못한다는 점입니다.

커널 레벨 스레드(Kernel Level Thread)

모든 스레드의 관리를 커널이 하는 경우를 말합니다. 스케줄링은 커널에 의해 스레드 단위로 이루이지고, 멀티 프로세싱 환경에서 한 프로세스 내의 여러 스레드는 각각 CPU를 할당받아 병렬로 실행이 가능합니다.

커널 레벨 스레드에서는 같은 프로세스 내 스레드 간 스위칭에도 커널의 개입이 필요하므로 두 번의 모드 스위칭이 요구되어 사용자 레벨 스레드에 비해 시간과 비용이 더 들게됩니다.

'CS > OS' 카테고리의 다른 글

[OS] 병행프로세스와 동기화  (0) 2021.06.27
[OS] CPU 스케줄링  (0) 2021.06.06
[OS] 프로세스 상태(Process State)  (0) 2021.05.23
[OS] 프로세스(Process)  (1) 2021.05.22
[OS] 인터럽트  (0) 2021.05.15