ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스레드
    운영체제 2022. 3. 21. 21:26

    스레드(thread)의 개념

    프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위이다. CPU 스케줄러는 프로세스가 해야 할 일을 CPU에 전달하고 CPU는 작업을 수행한다. CPU가 전달받는 일 하나하나가 스레드인 것이다.


    관련 용어 정리

    멀티스레드(multi-thread)

    하나의 프로세스 안에 여러 스레드를 만들어 실행하는 기법이다.


    멀티태스킹(multi-tasking)

    하나의 CPU에서 여러 스레드가 운영체제의 스케줄링에 의해 짧은 시간 단위로 번갈아가며 실행되게 하는 기법이다.


    멀티프로세싱(multi-processing)

    CPU를 여러 개, 혹은 하나의 CPU에 여러 개의 코어를 사용하여 여러 스레드를 동시에 처리하는 작업 환경을 말한다.


    멀티스레드

    구조

    한 프로세스 내의 스레드들은 코드 영역, 데이터 영역, 힙 영역을 공유하고, 각 스레드마다 레지스터와 스택을 가지는 구조이다. 싱글 스레드의 경우, fork()로 같은 프로세스를 여러 개 만들기 때문에 데이터가 중복되지만, 멀티스레드의 경우 스레드들 사이에서 코드, 데이터, 파일 등을 공유함으로써 자원의 낭비를 줄이고 효율성이 향상된다.


    장점

    응답성 향상

    싱글 스레드 프로세스의 경우 입출력을 받아야 할 경우 다른 작업을 수행할 수 없다. 그러나 멀티 스레드 프로세스의 경우 한 스레드에서 입출력 작업을 수행해도 다른 스레드가 작업을 계속하기 때문에 사용자의 작업 요구에 빨리 응답할 수 있다.


    자원 공유

    프로세스가 가진 자원을 모든 스레드가 공유하기 때문에 작업을 원활하게 할 수 있다.


    효율성 향상

    프로세스가 가진 자원을 모든 스레드가 공유하기 때문에 불필요한 자원 중복을 막아서 시스템 효율이 향상된다.


    다중 CPU 지원

    하나의 프로세스의 작업을 여러 CPU에서 동시에 처리할 수 있으므로 프로세스의 처리 시간이 단축된다.


    단점

    모든 스레드가 자원을 공유하기 때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향을 준다. 멀티스레드를 사용하는 인터넷 익스플로러의 경우 하나의 탭에서 문제가 생기면 해당 탭만 종료되는 것이 아니라 인터넷 익스플로러 전체가 종료된다. 반면 멀티태스킹을 사용하는 크롬의 경우 하나의 탭이 하나의 프로세스여서 탭 하나에 문제가 생겨도 다른 탭에 영향을 끼치지 않는다.


    멀티스레드 모델


    용어 정리

    a. 사용자 스레드(user thread): 라이브러리에 구현된 스레드이다.
    b. 커널 스레드(kernel thread): 커널이 직접 생성하고 관리하는 스레드이다.

    다대일 모델(Many-to-one model)

    하나의 커널 스레드가 여러 사용자 스레드를 처리하는 모델이다. 커널이 지원하는 스케줄링이나 동기화 등의 기능을 모두 사용자 라이브러리에서 처리하기 때문에, 커널 입장에서는 스레드가 하나의 싱글 스레드 프로세스로 보인다.

    라이브러리가 직접 스케줄링을 하고, 작업에 필요한 정보를 처리하기 때문에 문맥 교환이 필요 없고, 따라서 속도가 빠르다. 그러나 커널 스레드가 입출력 작업을 위해 대기 상태에 들어가면 모든 사용자 스레드가 같이 대기한다는 단점이 있다. 또한 한 프로세스의 타임 슬라이스를 여러 스레드가 나눠 사용하기 때문에 멀티프로세싱을 사용할 수 없다.


    일대일 모델(One-to-one model)

    커널이 멀티스레드를 지원하는 방식으로, 하나의 사용자 스레드가 하나의 커널 스레드에 연결된다. 커널 레벨에서 모든 작업을 지원하기 때문에 멀티 CPU를 사용할 수 있고, 하나의 스레드가 대기 상태라도 다른 스레드에서 작업을 계속할 수 있다. 또한 커널의 기능을 사용하므로 보안에 강하고 안정적이다. 그러나 문맥 교환으로 인한 오버해드가 발생하여 느려진다.


    다대다 모델(Many-to-many model, Multi-level model)

    앞의 두가지 모델을 혼합한 방식이다. 커널 스레드의 개수가 사용자 스레드보다 적다. 일대일 모델처럼 하나의 커널 스레드가 대기 상태라도 다른 커널 스레드에서 작업을 할 수 있어 유연한 작업 처리가 가능하다. 그러나 문맥 교환 시 오버헤드로 인하여 다대일 모델보다는 느리다.


    Reference

    쉽게 배우는 운영체제
    https://dailyheumsi.tistory.com/130

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

    다중 큐(multiple queue)  (0) 2022.03.24
    스케줄링 개요  (0) 2022.03.22
    프로세스의 연산  (0) 2022.03.20
    프로세스 개요  (0) 2022.03.18
    컴퓨터 성능 향상 기술  (0) 2022.03.18

    댓글

Designed by Tistory.