운영체제 ( OS )

[운영체제] Thread 정리본

mini_me 2021. 4. 26. 14:04

4

쓰레드

l  Thread : 프로세서보다 더 작은  단위의 CPU활용단위이다.

l

-       같은 프로세서안에 존재하는 쓰레드들은 프로그램 코드, 데이터 등

운영체제가 제공해주는 소스들을 공유하는 특징을 가지고 있다.

-       멀티 쓰레드 : 장점 ) 모듈러하게 소프트웨어 만들 수 있다.

   

 특징 )

    각각의 프로세서들이 독립적으로 실행되어야 하기 때문에 레지스터, 스텍들이 각각 따로 존재한다.

    레지스터, 스택들 제외 하고 나머지 (코드, 데이터, 파일)들을 공유하기 때문에 메모리 사이즈가 작아지고, 데이터 공유가 더 쉽다.

    여러가지 Task들을 운영가능 / 빠르게 문제 해결가능

    소스 공유측면에서도 뛰어나다.

멀티 프로세서의 경우 별도의 메모리 공간을 가지고 Message Passing의 매커니즘을 이용해 데이터를 주고받지만

멀티 쓰레드는 같은 프로세서 내의 쓰레드들은 자원 공유하기 때문이다.

    멀티 프로세서보다 경제적인 측면에서 유리하다.

또한 프로세서를 생성하는 것보다 간편, 경제적,

 쓰레드 생성이 더 빠르게 이뤄진다.

    멀티 프로세서의 경우, 각 프로세서별로 메모리를 할당해야 하지만 멀티 쓰레드는 프로세서내에 쓰레드가 만들어지기 때문에

별도로 메모리 할당할 필요없다.

 

l  Multicore Programming

여러 개의 프로세서가 프로그래밍 할 수 있도록 지원한다.

-       Parallelism

병렬화는 시스템이 동시에 둘 이상의 작업을 수행할 수 있음을 의미한다.

 

    Data parallelism : 데이터를 나눠서 각각의 데이터를 동시에 처리,

데이터들이 서로 다른 코어에서 실행된다.

    Task parallelism : 테스크가 하는 역할이 다 똑같아 .

 데이터를 가져와 동일한 테스크가 동시에 도는 것

-       single-core system: 물리적으로 실행할 수 있는 코아 하나뿐,

임의의 한 시간에서 실행할 수 있는 쓰레드는 하나뿐,

-       multi-core system : 각 코아별로 쓰레드들 실행 가능

 어느 한시점에서 실행되는 쓰레드 여러 개 존재 가능

 

l  Multithreading Models

-       유저 쓰레드 : 유저 스페이스에서 동작하는 쓰레드

-       커널 쓰레드 : 커널 스페이스에서 동작하는 쓰레드

쓰레드간의 맵핑이 필요해진다.

-       Many-to-One Model (맵핑 모델)

여러 개의 유저 쓰레드가 하나의 커널 쓰레드로

ü  문제점 : 예를 들어 한 쓰레드가 시스템 콜 통해 블락킹하는 시스템 콜 요청 -> 커널 쓰레드는 이를 위한 작업해, 그러면 다른 쓰레드는 요청 할 수 없게되고, 블락킹할 수밖에 없게됨

(Blocking : 데이터를 보내면 받아야 되는 놈이 받을 때까지 기다리는 것

             데이터가 받는 놈한테 전달될때까지 계속 기다리고 있다)

è  원투원 쓰레드쓰면된다

-       One-to-One Model

유저쓰레드 수 만큼 커널 쓰레드 수 생성 ,

블락킹되는 스레드 존재 불가

Examples

 Windows

 Linux

 Solaris 9 and later

è  두가지 방법을 혼합시킨거

-       Many-to-Many Model

유저 쓰레드 – n, 커널 쓰레드 – m

운영체제가 충분한 수의 커널 스레드를 생성할 수 있도록 허용

Windows with the ThreadFiber package

-       Two-level

사용자 스레드가 커널 스레드에 바인딩될 수 있다는 점을 제외하면 많은 모델과 유사합니다.

 

l  Signal Handling

기본적으로 유닉스에서는 프로세서에게 운영체제가 어떠한 알람을 던져줄 때 시그널을 사용

프로그램실행시 컨트롤 c를 호출하게 되면 운영체제가 kill이라는 시그널을 프로세서에게 전달해준다. 컨트롤 c라는 이벤트에서 kill이라는 시그널이 발생하게 되면 그킬이라는 시그널이 프로세서에게 전달된다.

프로세서는 deflaut, user – defined signal handler을 가지고 있다,

Default signal handler : 프로세서를 죽이는 것, 시그널을 무시한다.

user – defined signal handler : 사용자가 특정 시그널에 대해서 어떻게 처리하겠다하고 정의해두는 것

 

l  Thread Cancellation

한 쓰레드가 다른 쓰레드를 kill하는 것

l  Thread Local storage

전역 변수를 선언하게 되면 모든 쓰레드들이 이를 공유하게 된다.

단점은 각 쓰레드별로 전역변수를 가질 수 없는 단점이 멀티쓰레드의 단점

그래서 각 쓰레드들 별로 각 쓰레들이 가질수 있는 독자적인 static data를 만들어주자

l  유저 쓰레드와 커널 쓰레드간의 커뮤니케이션 어떻게 할것인가

유저쓰레드 레벨에서는 유저쓰레드를 스케줄링 할 때 LWp 대상으로 한다.

LWP와 커널 스레드는 11

Upcall : 이를 수행하게 되면 LWPupcall handler가 호출되게 되어 유저쓰레드 레벨로 커널쓰레드로부터 전달받은 내용을 유저쓰레드에게 전달

반응형