728x90
반응형
사용자 스레드 (User Thread)
- 커널과 상관없이 완전한 사용자 수준(User-level)의 패키지
- 사용자 수준의 스레드 라이브러리(Library)를 통해 구현됨
- 스레드 라이브러리는 커널 지원없이 스레드 생성, 동기화, 스케줄링, 관리 기능 제공
장점
- 성능 (속도가 빠름)
- 복잡한 비동기 기법을 ‘라이브러리’가 제공]
커널 스레드 (Kernel Thread)
- 운영체제(Kernel)가 지원하는 스레드 기능으로 구현됨
- 스레드 생성, 동기화, 스케줄링, 관리가 커널에 의해 커널 공간에서 행해짐
- 일반적으로 ‘사용자 스레드’에 비해 ‘생성’,’관리’가 너무 느림
다중 스레드 모델 3가지
다-대-일 (Many-to-One)
많은 ‘사용자 스레드’를 하나의 ‘커널 스레드’로 매핑
- 스레드 관리는 사용자 공간의 스레드 라이브러리에서 효율적으로 이루어짐
- 스레드가 ‘봉쇄형 시스템 호출’을 실행할 경우, 전체 프로세스가 봉쇄됨 → 진정한 의미의 동시성X
- 한번에 하나의 스레드만 커널에 접근할 수 있음
일-대-일 (One-to-One)
‘사용자 스레드’를 각각 하나의 ‘커널 스레드’로 매핑
- 하나의 스레드가 봉쇄적 시스템 호출을 실행해도, 다른 스레드가 다른 작업을 계속 함
- 다-대-일 모델보다 더 많은 병렬성
단점
- 사용자 수준 스레드를 생성할 때마다 커널 스레드도 같이 생성해야 함
- ‘커널 스레드’의 생성 오버헤드가 응용 프로그램의 성능을 저하시킬 수 있음 (한정된 자원)
다-대-다 (Many-to-Many)
여러 개의 ‘사용자 스레드’를 그보다 작은 수 or 같은 수의 ‘커널 스레드’로 다중화시킴
$$
User:thread \geq Kernel:Thread
$$
- 스레드가 봉쇄형 시스템 호출을 발생시켰을 때, 커널이 다른 스레드 수행을 스케줄 할 수 있음
Two-level Model
많은 ‘사용자 스레드’를 적거나 같은 수의 ‘커널 스레드’로 다중화시키는 것을 유지하지만,
하나의 스레드가 하나의 커널 스레드에 종속되는 것을 허용
- ‘사용자 수준 스레드’처럼 작동하면서 ‘하드웨어 병렬성’과 ‘블록킹 호출’에 대처할 수 있음
- ‘문맥 교환’(Context-Switch)을 많이 하지 않음
728x90
반응형
'Computer Science > Operating System' 카테고리의 다른 글
[OS] 멀티코어 프로그래밍 (Multicore Programming), 병렬 실행(Parallelism) (0) | 2024.05.01 |
---|---|
[OS] 스레드(Thread)란? (1) | 2024.05.01 |
[OS] 클라이언트-서버 환경에서의 통신: 소켓(Sockets), 원격 프로시저 호출(RPC), 원격 메소드 호출(RMI) (0) | 2024.04.30 |
[OS] 파이프(Pipe)란? 일반 파이프(Ordinary Pipes), 지명 파이프(Named Pipes) (0) | 2024.04.29 |
[OS] 메세지 전달(Message Passing)이란? (0) | 2024.04.29 |