• [ 운영체제 ] 쓰레드와 병행 (Threads & Concurrency)

    2021. 3. 19.

    by. KimBangg

     

    1) 쓰레드란?

     

    - 프로그램 실행의 단위이며, 하나의 프로세스에는 N개의 쓰레드가 존재 할 수 있다.

    - ID, Program Counter, Resiter Set, Stack 으로 이루어져있다

    - 같은 프로세스 안에 있는 쓰레드는 서로 정보를 공유한다.

    -장점 : 응답속도 및 확률 // 자원 공유 // 경제성[ overhead 발생률 적어짐] // 처리능력 [Scalability]

     

    * User Thread vs Kernal Thread

    1) 개발자에게 가시적이며, 커널에겐 알려지지 않음

    => 커널의 개입이 존재하지 않기 때문에, 커널 쓰레드보다 생성과 관리 빠르다.

    2) 운영체제에 의해 관리되고, 서포트 받는다.

     

    *Concurrency [병행] VS Parallelism [병렬]

    1) one by one : Single thread

    2) Multithread

     

    병렬성의 종류

    1 Data Parallelism

    데이터의 부분을 여러 쓰레드에게 분배하는것을 목적으로한다.

    ex ) 0~N 까지의 합을 구하는 경우 [ Dual Thread] / Thread 1 : 0 ~ N/2 -1 : Thread 2 : N / 2 ~ N -1

     

    2 Task Parallelism

    여러 작업을 분배함으로써 각자 고유의 일을 수행한다.

     

    대표사진 삭제

    예시 : 한글과 컴퓨터라는 하나의 프로세스는 그래픽을 보여주기 위한 쓰레드와 유저의 키보드에 반응하는 쓰레드와 같이 다양한 쓰레드로 구성이 되어있다 !

     

    즉, 1개의 프로세스가 단일 쓰레드를 가진다는 것은 작업이 동시에 이루어질 수 없다는 의미를 가진다

     

     

    2) 멀티쓰레딩 모델의 유형[ Multithreading Models : About relation betwwen user & kernal thread]

     

    1) Many to One Model [ Users : Kernal ]

    - 쓰레드를 관리하는 라이브러리는 유저 쓰레드에 있어 효율적이다.

    - 하나의 쓰레드가 커널에 접근하면, 다른 모든 쓰레드는 접근이 불가하다 [ not parallel ]

     

    사진 삭제

    사진 설명을 입력하세요.

     

    2) One to One Model

    - 다른 쓰레드가 block 하더라도, 다른 쓰레드들을 수행한다.

    - One to One 으로 구성을 하였기 때문에 병행[Parallel] 처리가 아닌 병렬처리[Concurrent]로 이루어진다.

    - 하지만 커널과 유저 쓰레드의 개수를 매칭시키다보니 성능의 저하를 일으킬 수 있다.

     

    사진 삭제

    사진 설명을 입력하세요.

    3) Many to Many

    - 더 많은 수의 유저 쓰레드를 멀티플렉싱 함으로써, 유저 쓰레드와 같거나 적은 수의 커널 쓰레드를 유지 가능

    - 이론적으로는 어떠한 단점을 가지지 않았지만 구조가 복잡하여, 실제로 구현하기 어렵다.

     

    사진 삭제

    사진 설명을 입력하세요.

     

    => 결과적으로 현재의 운영체제는 대부분 One to One Model을 선호한다.

     

    3) Threading Issues

     

    3-1) Signal Handling [ Signal : 프로세스에게 어떤 특정한 사건이 발생했음을 알리는 역할]

     

    * Synchronous vs Asynchronous

    1) 시그널을 발생시킨 작업을 수행하고있는 프로세스에게 알리는 것

    2) " " 무관한 프로세스에게 알리는 것 -> ramdomly go to unblocked thread

     

     

    3-2 Threading Pools

    시작 전에 일정 수의 쓰레드를 만들어두고, 작업이 들어오게되면 풀 안에 있는 worker들이 수행한다.

     

    장점 : 새로운 쓰레드를 만드는 것보다 구현 속도가 빠르다, 쓰레드 수를 통제 할 수 있다.

     

     

     

    댓글