Notice
Recent Posts
Recent Comments
관리 메뉴

즐겁게, 코드

운영체제 - 04. 스레드 관리 본문

🖥 컴퓨터공학/운영체제

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

Chamming2 2021. 4. 17. 01:07

이 글은 한국기술대학교 컴퓨터공학부의 OS 공개강의 시청한 후 정리한 내용입니다.

목차

  • 스레드의 개념
  • 스레드의 구현
    • 사용자 수준 스레드 (다대일 모델)
    • 커널 수준 스레드 (다대다 모델)
    • 혼합 스레드

1. 스레드의 개념

프로세스는 커널 위에서 실행되고 있는 작업인데요, 프로세스가 자원을 어떻게 배분할지 제어하는 친구가 바로 스레드입니다.

비유를 들어보자면 한 연구를 수행한다고 할 때, 프로세스는 연구실이 되고 스레드가 연구원이라고 생각하면 될 듯 합니다.

(연구비가 연구실마다 배정되어 연구원들이 이를 나눠 사용하듯, 프로세스의 스레드들은 공동의 자원을 소모합니다.)

 

스레드는 보다 작은 프로세스라는 의미로 Light Weight Process(LWP) 라고 부르기도 하며, 프로세스 활용의 기본 단위가 됩니다.

1. 1. 싱글 스레드와 멀티 스레드

싱글 스레드와 멀티 스레드는 한 프로세스에 존재하는 스레드의 개수에 따라 구분됩니다.

당연하지만 멀티스레드에서 동시에 처리할 수 있는 작업량이 더 많으며, 현재는 대부분의 운영체제가 멀티스레드를 지원합니다.

1. 2. 스레드의 장점

스레드의 장점은 크게 다음과 같습니다.

  • 사용자 응답성 - 일부 스레드의 처리가 지연되어도 다른 스레드에서는 작업을 계속 수행할 수 있음.
  • 자원 공유 - 자원을 공유해 효율성이 증가함. (커널의 개입을 피할 수 있음)
  • 경제성 - 프로세스를 생성하는 것보다 스레드를 생성하는 것이 보다 효율적임. (Light Weight Process 니까)
  • 멀티 프로세스 활용 - 병렬처리를 통해 성능 향상을 꾀할 수 있음.

[사용자 응답성]

만약 스레드 없이 한 프로세스만으로 이루어진 배그를 한다고 가정하면, 마우스를 휘두를 때마다 I/O 인터럽트가 발생하고 컨텍스트 스위칭이 발생해 화면이 멈출 것입니다. 또, 헤드셋으로 "255방향 3명~" 하고 외치면 마우스와 화면이 모두 멈추고 이미 죽어있겠죠.

[자원 공유의 예시]

좌 : 프로세스 둘이 자원을 공유하는 경우 / 우 : 스레드 둘이 자원을 공유하는 경우

좌측처럼 프로세스 둘이 한 자원(메모리, CPU)을 공유할 때는 인터럽트가 생겨 컨텍스트 스위칭이 발생하게 되고, 결국 컨텍스트 스위칭이 발생해 오버헤드가 생기게 됩니다. 반면 우측처럼 한 프로세스에서 여러 스레드로 작업을 수행하면 한 프로세스만이 자원을 독점할 수 있고, 이걸 스레드가 나눠 받아 처리하게 되므로 컨텍스트 스위칭이 발생하지 않게 됩니다.

2. 스레드의 구현

스레드는 크게 커널 영역 사용자 영역으로 구분되는데요, 이 중 멀티스레드를 어느 영역에서 구현했느냐에 따라 사용자 수준 스레드커널 수준 스레드로 구분할 수 있습니다. 

 

사용자 수준 스레드는 한 커널 수준 스레드에 여러 사용자 수준 스레드가 구현되어 일대다 매핑 방식이라고 부르기도 하며, 커널 수준 스레드는 여러 커널 수준 스레드에 여러 사용자 수준 스레드가 구현되어 다대다 매핑 방식이라고도 부릅니다.

2. 1. 사용자 수준 스레드 (일대다 매핑 방식)

사용자 수준 스레드는 커널 영역에는 하나의 스레드만을 두고, 사용자 영역에서 소프트웨어를 통해 멀티스레드를 구현한 것이 핵심입니다.

이렇게 하면 스레드가 커널의 관리를 받지 않아 오버헤드가 현저히 줄어 성능이 향상되고, 어플리케이션 레벨의 소프트웨어로 구현되었기 때문에 이식성이 뛰어난 것이 장점입니다. (Ex. JVM, Win32 스레드)

 

그러나 커널 레벨에서 하나의 스레드만을 갖기 때문에 프로세스 단위로 자원이 할당되게 되고, 결국 하나의 스레드가 block 상태가 되면 프로세스의 모든 스레드가 대기에 들어간다는 것이 단점입니다.

2. 2. 커널 수준 스레드 (다대다 매핑 방식)

커널 수준 스레드는 커널 영역에서 여러 커널 수준 스레드를 두고, 이에 대응하는 사용자 수준 스레드를 관리하는 것이 핵심입니다.

커널 수준 스레드는 여러 스레드를 개별적으로 관리하므로 작업을 병렬적으로 처리할 수 있다는 장점이 있지만, 커널 영역에서 직접 통제를 받기 때문에 성능에 부하가 걸리기도 합니다.

2. 3. 혼합형 스레드 (n : m 매핑 방식)

물론 인간은 장점과 단점이 공존하는 요소를 섞어서 더 나은걸 창조하곤 합니다!

바로 혼합형 스레드로, 혼합형 스레드는 사용자 수준 스레드와 커널 수준 스레드의 장점만 가져온 스레드 구현 방식입니다.

현대 멀티스레드 구현방식은 대부분 혼합형 스레드를 채택하고 있다고 하네요 😁

반응형
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆