[OS] 운영체제(4장) 쓰레드 - 1
1. 쓰레드(Thread)
CPU 이용의 기본 실행 단위
단일 쓰레드(Single threaded) Processes
전통적인 프로세스 - 한 개의 실행 단위로 구성
다중 쓰레드(Multithreaded) Process
여러 개의 실행 쓰레드를 갖는 프로세스 → 한 프로세스가 동시에 하나 이상의 작업 수행 가능 전통적인 프로세스의 확장
Thread 사용 자원
- 같은 프로세스에 속한 다른 thread들과 code, data, OS자원들을 공유함
- stack, CPU register 저장공간은 thread 전용공간 사용
쓰레드 제어 블록(TCB)
쓰레드에 대한 정보를 보관
- thread ID, thread 실행상태
- program counter, register set → thread context
- thread specific 메모리 공간 (static 메모리)
동기
단일 응용 프로그램이 여러 개의 작업을 동시에 실행할 필요가 있음
- word processor : 화면 출력 + 키보드 입력 + 스펠링 검사 …
- web browser : 화면 출력 + 네트워크에서 데이터 수신 …
- web server : 여러 개(수천 개도 가능)의 client의 요청 처리
- OS kernel : 장치 관리, 인터럽트 처리 등의 여러 작업 …
해결책
- 다중 프로세스 → 프로세스 생성 오버헤드
- 다중 쓰레드 프로세스 → 쓰레드 생성에 필요한 자원이 적어서, 효율적
장점
응답성
프로그램의 일부가 block되거나, 긴 작업을 수행하여도, 대화형 작업의 계속 진행을 허용 → 사용자에 대한 응답성 증가
자원 공유
- 기본적으로 프로세스의 메모리와 자원을 공유함
- 같은 주소 공간에서 여러 개의 다른 작업을 수행하는 thread 허용
- 커널 서비스 호출없이 thread 간에 통신 가능
경제성
- thread 생성, 종료, context switch에 소요되는 오버헤드가 process에 비해서 적음 - 자원, 시간 절약
- (예) Solaris : 생성 → 30배 빠름, context switching → 5배 빠름
규모 확장성, 적응성
다중 프로세서 구조에서 thread들을 병령 처리 가능
2. 멀티코어 프로그래밍
병렬과 병행
- 병렬시스템은 동시에 2개 이상의 작업 수행
- 병행시스템은 2개 이상의 task를 지원하여 모든 작업이 진행되게 함
Amdahl’s Law
N개의 프로세서를 사용하여 얻을 수 있는 가능한 성능 이득
병렬 실행의 유형
- data parallel - 데이터의 부분 집합에 대해서 동일 연산 수행
- task parallel - 각 프로세서마다 고유 연산 수행
- 대부분 두 병렬 실행 방법이 혼용된다.
3. 다중 쓰레드 모델
User threads : 커널 지원 없이 사용자 수준에서 제공
- thread library에 의해서 지원됨
Kernel threads : OS 커널에서 직접 지원되고 관리됨
모든 현대 운영체제는 kernel threads를 지원함
사용자 프로그램의 쓰레드와 커널 쓰레드 간에 여러 연관 관계가 존재
Many-to-One 모델
- 다수의 user-level thread가 한 개의 kernel thread (process)에 연관
- thread 스케줄링과 동기화가 사용자 공간의 thread library에서 수행
장점
context 스위칭과 동기화 overhead가 작아서 효율적
단점
- 한 thread가 blocking system call을 호출하여 커널 내에서 block되면 전체 process가 block됨 ← 커널이 user-level thread의 존재를 알지 못함
- Multiprocessor 시스템에서 thread들의 병렬 실행 불가
예:
- Solaris Green Threads
- GNU Portable Thread
One-to-One 모델
각 user-level thread가 각각 하나의 kernel thread에 연관
장점
한 thread가 blocking system call을 호출하여 block되더라도 같은 process의 다른 thread로 스케줄링되어 실행 가능
단점 : 쓰레드 생성 및 context 스위칭 오버헤드
- 커널 시스템 호출을 사용하여 커널 쓰레드 생성해야 함
- 커널에서 thread context switching이 이루어짐
- 많은 수의 thread는 성능에 부담, 최대 thread 수에 제한이 있을 수 있음
Many-to-Many 모델
다수의 user-level thread가 다수의 kernel thread에 연관
- kernel thread의 수는 user-level thread의 수와 작거나 같음
- kernel thread들을 user-level thread들이 multiplex하여 사용
- kernel thread 개수는 응용 프로그램이나 machine에 따라서 결정됨
- core 수를 고려하여 kernel thread 수를 결정
장점
one-to-one 모델과 같은 병행/병렬성
- 필요한 만큼의 kernel thread와 연관되는 경우
- blocking system call을 호출하여 block되었을 때에 같은 process의 다른 thread를 스케줄 가능
user-level thread 개수에 제한이 없음 ←user-level thread 개수보다 적은 수의 kernel thread를 사용가능
Two-level 모델
- many-to-many 모델의 변형 모델
- 일부 user-level thread에 대해서 one-to-one 연관 허용
댓글남기기