쓰레드(Thread)

OS/Theory 2016. 4. 9. 12:30

<쓰레드>

서로 독립적인 일들을 불필요하게 순차적으로 수행하는 일을 개선하기 위해 프로세스보다 작고 독립적으로 스케줄링이 가능한 것이 쓰레드이다.



 

다중 스레딩이란 하나의 프로세스를 다수의 스레드로 만들어 실행하는 것인데, 작업의 수행에 필요한 자원들을 공유하기 때문에 자원의 생성과 관리가 중복되는 것을 줄일 수 있다.

스레딩의 개념을 쉽게말해 어떤 프로세스가 실행되는데 그 안에 열심히 일하는 일꾼이라고 생각하자.




 

스레드는 스레드 제어블록을 가지고 있으며, 스레드 제어블록은 실행 중 레지스터 값, 우선순위, 스레드와 관련된 상태 정보를 갖고있다. 사용자 스택과 커널 스택을 가지고있는데, 사용자 주소 공간과 PCB를 공유함으로써 다른 스레드들이 데이터를 변경하면 다른 스레드들에게도 공유된 자원이기 때문에 같이 변경된다. 이로인해 프로세스 단위로 이루어 질때보다 빠르고 저렴하다.

프로세스간 통신은 커널의 개입이 필요하지만(메모리 할당, 수거 등...), 한 프로세스 내의 스레드 간의 통신은 메모리와 파일을 공유하기 때문에 커널의 개입이 필요 없다.




<스레드의 종류>

스레드도 실행, 준비, 대기와 같은 상태를 가지지만 보류는 프로세스 단위의 개념이다. (메모리에 swapping해야하기 때문에 커널이 개입됨)

 

1. 사용자 레벨 스레드

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

특정 스레드의 실행에서 대기는 자신이 소속된 프로세스의 대기를 초래하며(커널은 프로세스만 보임. 프로세스가 대기로 간 것과 같다고 간주) 스레드 라이브러리에 의해 계속 실행으로 간주되고 있다가 나중에 CPU가 다시 이 프로세스에게 할당되었을 때 계속 실행해 나갈 수 있도록 해준다,

사용자 레벨 스레드는 스레드 스위칭에 커널의 개입이 필요 없으며, 유저에서 커널 모드로, 커널에서 유저 모드로의 두 번의 스위칭이 필요 없음을 말한다.

사용자 레벨 스레드의 단점은 특정 스레드의 대기가 자신이 소속된 프로세스 내의 모든 스레드들의 대기를 초래하며, CPU가 프로세스 단위로 할당되기 때문에 다중처리의 환경이 주어졌다해도 다중처리가 되지 못한다는 점이다.


2. 커널 레벨 스레드

모든 스레드의 관리를 커널이 하는 경우이다. 다중처리의 환경일 경우 한 프로세스 내의 다수 스레드는 각 처리기를 할당받아 병렬 실행이 가능하며, 한 스레드의 대기 시 같은 프로세스에 속한 다른 스레드로 스위칭이 가능하다. 단점은 같은 프로세스에 속한 스레드 간의 스위칭에도 커널의 개입이 필요해서 스위칭이 요구된다.



Copyright2014 By 휴먼사이언스

posted by 경원구