Part 2 - Chapter 4
Chapter 4. 쓰레드
OS는 프로세스와 쓰레드의 특성을 독립적으로 취금
- 자원 소유권의 단위 : 프로세스
- 디스패칭의 단위 : 쓰레드, 경량 프로세스
** 프로세스는 별 말이 없으면 커널 단위 // 쓰레드는 커널단위와 사용자 단위를 잘 구분해야하나 별 말이 없으면 사용자 단위
쓰레드 ≒ 함수
멀티 쓰레딩
- 운영체제가 하나의 프로세스 내에서 수행되는 여려 개의 쓰레드를 지원하는 기능
- 멀티 쓰레딩에서는 쓰레드는 디스패칭의 단위
장점
1) 새로운 프로세스 생성보다 새로운 쓰레드 생성시간이 짧다
2) 프로세스 종료보다 쓰레드 종료시간이 더 짧다.
3) 프로세스 간 교환보다 쓰레드 간 교환이 더 효율적
4) 같은 프로세스 내의 쓰레드 들은 메모리 및 파일을 공유하므로, 커널을 호출하지 않고도 서로 통신이 가능
쓰레드 동기화
- 프로세스 내의 모든 쓰레드들은 그 프로세스의 상태와 자원을 공유
즉, 하나의 쓰레드에 의한 자원 변경은 같은 프로세스 내 존재하는 모든 쓰레드 환경에 영향
- 쓰레드 들이 서로 간섭하지 않도록 또는 자료구조를 손상시키지 않도록 쓰레드 들의 행위를 동기화하는 것이 필요
쓰레드의 단점
1. 동기화
2. 스케줄링의 문제
3. 보호(공유)의 문제
쓰레드의 유형 <사용자 수준 쓰레드(ULT) VS 커널 수준 쓰레드(KLT)>
1. 사용자 수준 쓰레드
- 응용이 쓰레드 라이브러리(응용수준함수)를 통해 모든 쓰레드를 관리 수행함
- 커널은 쓰레드의 존재를 모름
- 여기서 커널은 프로세스 스케줄링, 프로세스 문맥 유지만 함
장점
1. 쓰레드 교환에 커널 모드의 권한이 요구되지 않아 속도가 빠름
2. 스케줄링 정책을 응용에 맞게 구성 가능함
3. 커널 변경이 필요 없어 어떤 OS에도 적용 간으
단점
1. 한 쓰레드의 시스템 호출은 같은 프로세스 내에 있는 모든 쓰레드를 블록시킴
2. 멀티프로세서(또는 멀티코어)의 장점을 활용할 수 없음 (WHY? 코어 할당은 커널이 하기 때문에)
2. 커널 수준 쓰레드
- 커널이 모든 쓰레드 관리를 수행
- 응용은 API를 통해 쓰레드 생성 및 종료를 요청
- 커널이 프로세스와 쓰레드 문맥 정보를 유지
- 스케줄링은 쓰레드 기반으로 이루어짐
장점
1. 같은 프로세스 내의 여러 쓰레드를 여러 프로세서(또는 코어)에 동시 스케줄링 할 수 있음
2. 한 프로세스 내의 특정 쓰레드가 블록되면 다른 쓰레드를 스케줄 할 수 있음
3. 커널 루틴 자체가 다중 쓰레드로 구성
단점
1. 쓰레드 교호나시 커널로의 모드 전환이 필요 => 오버헤드 발생
멀티 코어상에서의 SW 성능
- 멀티코어 구조의 성능 향상은 응용이 병렬 자원을 효율적으로 이용할 수 있는 능력에 있음
- 암달의 법칙 : 시스템 일부가 개선될 떄 전체 시스템에서 어느 정도의 개선이 기대 될 수 있는지를 나타냄
P : SW 개선 비율 S : HW 속도 향상 정도
ex) 코어 수가 6개인 pc에서 작업/코어 1개가 작업을 처리 하는데 100시간 소모/ 95% 개선
속도 항샹 = 1 / (1 - 0.95) + 0.95/6 = 4.8
병렬화 효율성
쓰레드 < 명령어 < micro operatioin