이 포스팅은 한국기술교육대학교 김덕수 교수님의 운영체제 강의를 참고하여 작성되었습니다.
프로세스는 자원을 할당받고, 제어를 한다.
제어 부분을 스레드라고 한다.
스레드(Thread)
Light Weight Process (LWP)
스레드는 자원은 공유하고 제어를 각각 가지고 있다.
프로세서(e.g., CPU) 활용의 기본 단위
구성요소
- Thread ID
- Register set (PC, SP 등)
- Stack (i.e. local data)
제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유
전통적 프로세스 = 단일 스레드 프로세스
스레드의 장점
사용자 응답성 (Responsiceness)
- 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능
자원 공유 (Resource sharing)
- 자원을 공유해서 효율성 증가 (커널의 개입을 피할 수 있음)
예 ) 동일 address space에서 스레드 여러 개
경제성 (Economy)
- 프로세스의 생성, context switch에 비해 효율적
멀티 프로세서(multi-provessor) 활용
- 병렬처리를 통해 성능 향상
(멀티 코어 프로세서)
스레드(Thread) 구현
사용자 수준 스레드 (User thread)
사용자 영역의 스레드 라이브러리로 구현됨
- 스레드의 생성, 스케줄링 등
- POSIX thread, Win32 threads, Java thread API 등
커널은 스레드의 존재를 모름
- 커널의 관리(개입)를 받지 않음
생성 및 관리의 부하가 적음, 유연한 관리 가능
이식성(portability)이 높음
- 커널은 프로세스 단위로 자원 할당
하나의 스레드가 block 상태가 되면, 모든 스레드가 대기
(single-thread kernel의 경우)
커널 수준 스레드 (Kernel thread)
OS(Kernel)가 직접 관리
커널 영역에서 스레드의 생성, 관리 수행
- Context switching 등 부하(Overhead)가 큼
커널이 각 스레드를 개별적으로 관리
- 프로세스 내 스레드들이 병행 수행 가능
하나의 스레드가 block 상태가 되어도, 다른 스레드는 계속 작업 수행 가능
혼합형 (n:m) 스레드
n개 사용자 수준 스레드 - m개의 커널 스레드 ( n> m )
- 사용자가 원하는 수만큼 스레드 사용
- 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block 상태가 되어도, 다른 스레드 수행 가능.
병행 처리 가능
효율적이면서도 유연함
Summary
스레드는 자원은 공유하지만, 각각의 자신만의 제어 요소들을 가지고 있다.
이게 왜 좋냐? 자원을 공유하기 때문에 작업을 효율적으로 할 수 있다.
여러 개의 CPU 코어 자원을 동시에 사용할 수 있다(병렬 처리가 가능하다).
긴 글 읽어주셔서 감사드립니다.
22.12.14
'TIL (Today I Learned) > 컴퓨터 시스템(CS)' 카테고리의 다른 글
[CS] Process Scheduler #2 (0) | 2022.12.16 |
---|---|
[CS] Process Scheduler #1 (1) | 2022.12.16 |
[CS] Process vs Thread (0) | 2022.12.15 |
[CS] 표준 입출력, File offset & File pointerIO #5 (0) | 2022.12.14 |
[CS] 표준 입출력, Standard IO #4 (0) | 2022.12.14 |
댓글