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와 커널 스레드는 1대1
Upcall : 이를 수행하게 되면 LWP의 upcall handler가 호출되게 되어 유저쓰레드 레벨로 커널쓰레드로부터 전달받은 내용을 유저쓰레드에게 전달
'운영체제 ( OS )' 카테고리의 다른 글
[운영체제 ] 6주차 정리본 (0) | 2021.04.26 |
---|---|
[운영체제 ] 5주차 정리본 (0) | 2021.04.26 |
[운영체제 ] 3장 정리본 (0) | 2021.04.26 |
[운영체제] [ 1주차 내용 정리 전 필기본] (0) | 2021.03.25 |
[운영체제] [ Thread ] (0) | 2021.03.25 |