목적
- CPU 이용의 기본 단위가 된 스레드를 이해한다.
실천 목표
- 스레드 풀, 포크 조인 및 그랜드 센트럴 디스패치를 포함하여 암시적 스레딩에 대한 다양한 접근 방식을 설명한다.
- Windows 및 Linux 운영체제가 스레드를 어떻게 나타내는지 설명한다.
- Pthread, Java 및 Windows 스레딩 API를 사용하여 다중 스레드 응용 프로그램을 설계한다.
O/S의 모드가 두 가지, 스레드도 종류가 두 가지
- 사용자 스레드
- O/S의 사용자 모드에서 동작하는 스레드
- 커널의 지원없이 운영됨
- 커널 스레드
- O/S의 커널 모드에서 동작하는 스레드
- O/S에 의해 직접적으로 운영됨
다중 스레드 모델
- 사용자 스레드와 커널 스레드의 연관 관계에 따라 세 가지 모델이 존재
- 다대일 모델
- 일대일 모델
- 다대다 모델 +@ 두 수준 모델
스레드 라이브러리
- POSIX Pthreads
- POSIX (IEEE 1003.1c)가 스레드 생성과 동기화를 위해 제정한 표준 API
- Spec로 정의를 해놓았고 실제 구현을 한 것은 아니지만 대부분의 UNIX, LINUX에서 이 Spec에 맞게 구현됨
- Windows thread
- Windows 스레드 라이브러리
- 많은 점에서 POSIX Pthreads 기법과 유사
- Java thread
- 스레드는 Java 프로그램 실행의 근본적인 모델
- Java 프로그램은 JVM 내의 단일/다중 스레드로 수행됨
- JVM이 Linux, Windows 등 O/S에서 제공하는 스레드를 이용하는 방식
암묵적 스레딩 (Implicit Threading)
- 스레딩의 생성과 관리 책임을 응용 프로그램 개발자로부터 컴파일러와 런타임 라이브러리에게 넘겨주는 것
- 암묵적 스레딩을 이용하는 방법으로는 다음의 네 가지가 존재
- Thread Pools
- 프로세스를 시작할 때 일정한 수의 스레드들을 미리 풀에 만들어둠
- Fork & Join
- Fork와 Join은 명시적 스레딩에서 사용되지만 암시적 스레딩에서도 이 개념을 사용 가능
- 암시적 스레딩에서 사용하는 경우, Fork 시에 스레드가 직접 구축되는 게 아닌 병렬 작업이 식별됨
- OpenMP
- 컴파일러 지시어와 API의 집합
- 병렬적으로 실행할 코드의 블록을 지시하면 컴파일러->OpenMP 런타임 라이브러리가 알아서 그 영역을 병렬적으로 실행
- Grand Central Dispatch
- macOS 및 iOS 운영체제를 위해 Apple에서 개발한 기술
- OpenMP와 비슷한 기법으로 동작
- Thread Pools
참고
- 운영체제 공룡책 강의 | 주니온 | 인프런 https://www.inflearn.com/course/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EA%B3%B5%EB%A3%A1%EC%B1%85-%EC%A0%84%EA%B3%B5%EA%B0%95%EC%9D%98/dashboard
운영체제 제 10판 Abraham Silberschatz, Peter Baer Galvin, Greg Gagne 저/박민규 역 퍼스트북 2020년 02월 28일 - 운영체제 제 10판 솔루션 https://codex.cs.yale.edu/avi/os-book/OS10/practice-exercises/index-solu.html