본문 바로가기

운영체제 OS

3. 운영체제 - 스레드 관리

스레드는 프로세스 내부에서 제어하는 영역으로 프로세스 내부에는 최소 하나의 스레드가 존재한다. 메모리의 관점에서 보면 같은 프로세스의 스레드는 동일한 주소 공간을 공유하며 그 안에서 일정 부분을 스레드가 차지하고 있다. 원래는 프로세스처럼 자원과 제어 영역을 모두 가지고 있어야 하지만 스레드의 경우 자원은 공유하고 제어 부분만 가지고 있어서 Light Weight Process (프로세스보다 가볍게 취급)에 해당한다. 

 

 

스레드는 대표적으로 두 가지 장점을 가지고 있다.

 

1. 자원을 공유해서 효율성을 증가시킬 수 있다. 

A와 B 두 가지의 작업이 있다고 가정해보자. 두 개의 작업을 각각의 프로세스에 저장하고 하나의 resource를 공유하게 되면 A에서 B로 switch하는 과정에서 context switch가 발생하게 된다. context switch의 경우 자주 발생하게 되면 비효율적이라는 사실을 우리는 알고 있다. 하지만 두 개의 프로세스를 이용하지 않고 스레드를 이용한다면 하나의 process 안에서 두개의 스레드를 사용하는 것이므로 context switch는 발생하지 않기 때문에 비교적 효율적이다. 즉 다시 말해 커널의 개입을 피할 수 있다. 

 

2. 사용자 응답성이 높아진다.

스레드가 하나라면 화면이 출력되고 있는 상황에서 사용자의 입력이 발생하면 그 순간 화면 출력이 잠시 멈추게 된다. 또한 스피커 혹은 마이크의 입력이 발생할 때도 마찬가지가 된다. 멈추는 이유는 간단하게 run -> block 으로 갔다가 ->ready 상태가 되기 때문이다. 자세한 내용은 지난 게시물을 참고 바란다. 2022.08.05 - [운영체제 OS] - 2. 운영체제 - 프로세스 관리 하지만 스레드를 사용하게 된다면 일부 스레드가 처리 지연 되더라도 다른 스레드는 작업을 계속 처리할 수 있기 때문에 사용자 응답성이 높아진다. 

 

 

스레드를 이용하는 방법으로는 크게 사용자 수준 스레드와 커널 수준 스레드가 있다. 

 

1. 사용자 수준 스레드

커널 영역의 스레드는 하나, 사용자 영역의 스레드는 여러 개인 경우를 말한다. 이때 커널은 스레드의 존재를 모른다. 라이브러리 수준에서 스레드를 관리하기 때문에 더 효율적이지만 스레드 하나가 block 처리가 되면 나머지도 모두 block 되는 단점이 있다. I/O가 필요해서 하나의 스레드가 block 상태가 되면 커널 수준으로 넘어오기 때문이다. (커널은 이때 하나의 스레드만 받기 때문에 하나가 block되면 모두가 block)

 

2. 커널 수준 스레드

사용자 영역에서 만든 스레드만큼 커널에도 만드는 경우에 해당한다. (일대 일 매핑) 이는 커널이 직접 스레드를 관리해 context switch 등 부하가 크다는 단점이 잇다. 하지만 커널이 각 스레드를 개별적으로 관리하기 때문에 병행 수행이 가능하다는 장점이 있다. 즉 하나가 block이 되어도 나머지 스레드는 작업을 지속할 수 있게 된다. 

 

더 나아가 혼합형 모델인 다대다 모델도 존재한다. n개의 사용자 수준 스레드와 m 개의 커널 스레드로 이루어져있으며 이때 n>=m이 성립한다. 이 모델에서는 하나가 block 처리 되어도 병행 처리가 가능하는 등 장점이 합쳐진 모델이라고 보면 된다. 

 

 

*개인 공부 기록용이기 때문에 잘못된 내용이 있을 수 있음.

'운영체제 OS' 카테고리의 다른 글

5. 운영체제 - 컴파일러  (0) 2023.08.10
4. 운영체제 - 프로세스 스케줄링  (0) 2022.08.22
2. 운영체제 - 프로세스 관리  (0) 2022.08.05
1. 운영체제 소개 및 전반  (0) 2022.07.28