ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [운영체제] 스레드
    개발/OS 2022. 4. 12. 23:31

    스레드

    프로세스의 실행 단위라 할 수 있다.

    스레드는 생성시 스택영역만 독립적으로 할당받고, 나머지는 프로세스의 것을 공유한다.

    스택은 함수의 인자, 지역변수, 리턴 값 등을 저장하는 메모리 공간이므로

    스택을 독립적으로 할당하여 스레드별로 독립적인 함수 호출 및 실행이 가능하다.  

     

    또한 각 스레드는 스케쥴러에 의해서 실행과 대기가 반복되는데,

    다시 시작될 때 실행할 지점을 찾기 위해서 PC가 독립적으로 할당된다.

     

    멀티 스레드

    장점

    • 하나의 프로세스 안에서 여러 작업을 동시에 처리할 수 있기 때문에, 시간과 자원적으로 이득
    • 스레드끼리 메모리공간(코드, 데이터, 힙 등)을 공유하기 때문에, 데이터의 교환이 쉽다.
    • context switch시 캐시 메모리를 초기화 해줄 필요가 없기 때문에, 프로세스의 것보다 빠르다.

    단점

    • 한 스레드가 메모리의 공유되는 영역을 망가뜨리면 다른 스레드도 영향을 받는다.
    • 따라서 여러 스레드에서 같은 주소를 참조하지 않도록 동기화가 필요한데, 이로 인해서 병목현상이 발생, 성능이 저하될 수 있다.

     

    멀티 스레드 서버의 구조

    1. 클라이언트가 요청을 보낸다.
    2. 요청에 따라 서버는 새로운 스레드를 생성하고, 클라이언트의 요청을 수행한다.
    3. 이전 요청과 상관없이 서버는 새로운 클라이언트의 요청을 기다린다.

     

    멀티코어 프로그래밍

    • Parallelism: 여러개의 CPU로 여러개의 태스크를 병렬적으로 처리하는 것
    • Concurrency: 여러 작업이 동시에 실행되는 것.

    싱글코어에서도 적절한 스케쥴링을 통해 동시에 여러 작업을 수행할 수 있으므로 concurrent하다.

    그러나 병렬적으로 실행하지는 못하므로 parallel한 방법은 아니다.

     

    데이터 공간을 나누어 여러개의 코어가 똑같은 작업을 각자 수행하는 것을 Data parallelism방식이라 하고

    같은 데이터로 여러 코어가 다른 작업을 수행하는 방식을 Task parallelism방식이라 한다.

     

    유저레벨 스레드

    • 사용자 영역에서만 스레드 연산하기 때문에, 커널에서 인식하지 못함
    • 스레드 기능을 제공하는 레이브러리를 사용해서 조작
    • 커널에서 인식하지 못하기 때문에 하나의 스레드에서 시스템콜을 수행하면 다른 스레드가 멈춘다.
    • OS수준의 스케쥴링이 없기 때문에 여러 스레드가 랜덤한 순서로 실행된다. 스케쥴링을 위해서는 해당 스레드의 라이브러리를 이용한다.

     

    커널레벨 스레드

    • 하나의 프로세스는 적어도 하나의 커널레벨 스레드를 가진다.
    • 커널영역에서 스레드 연산을 진행하기에 커널에 종속적이다.
    • 동작중인 스레드가 시스템 콜을 수행해도 다른 스레드가 정상 동작한다.
    • 저장한 내용을 다시 불러오는 과정이 필요하기에 스케쥴링과 동기화를 위한 시간이 걸린다.
    • 사용자모드와 커널모드의 전환이 빈번하게 일어나기에 성능저하가 있다.

     

    멀티 스레드의 모델

    Many-to-One

    • 다수의 유저 스레드와 하나의 커널 스레드
    • 하나의 스레드가 블록되면 모든 스레드가 블록된다.
    • 커널에는 하나의 연산만 하기 때문에, 멀티코어 시스템에서 parallel하지 않음

    One-to-One

    • 사용자-커널 스레드가 하나씩 매핑된다.
    • 유저레벨 스레드 생성시 커널레벨 스레드도 생성된다.
    • Many-to-One보다 더 concurrency하다.
    • 오버헤드때문에, 프로세스당 스레드의 수가 제한될 수 있다.
    • Windows, Linux에서 사용

    Many-to-Many

    • 다수의 유저레벨 스레드가 다수의 커널레벨 스레드와 매핑된다.
    • OS가 충분한 수의 커널 스레드를 생성할 수 있다.

    '개발 > OS' 카테고리의 다른 글

    [운영체제] 프로세스  (0) 2022.04.11
    [운영체제] OS의 구조(2)  (0) 2022.02.21
    [운영체제] OS의 구조  (0) 2022.02.18
    [운영체제] 운영체제란?  (0) 2022.02.17

    댓글

Designed by Tistory.