기어가더라도 제대로
[운영체제 김덕수 교수님] 스레드 관리 본문
Thread => 실타래
- 먼저, 프로세스는 리소스 할당 + 제어를 통해 작업(Job)을 수행하는 것을 이해해야 한다.
- 프로세스 중에서 제어 부분만 분리해 놓은 것을 스레드라고 한다.
- 프로세스 하나에서 여러개의 스레드가 있을 수 있다. 1 : N
스레드는 프로세스 내에서 리소스를 공유해서 사용한다.
- 제어 정보
- stackPointer
- Program Counter
- 상태
- 지역 데이터
- for 문 안에서 순회
- 위의 요소들이 스택에 저장이 된다.
정의
- Light Weight Process(LWP)
- 프로세서(CPU) 활용의 기본 단위
- 구성 요소
- Thread ID
- Register Set(PC, SP)
- Stack(local data)
- 제어 요소 외 코드, 데이터 및 자원들은 프로세스 내 다른 스레드들과 공유
- 전통적 프로세스 == 단일 스레드 프로세스
스레드의 장점
- 사용자 응답성
- 자원 공유
- 자원을 공유해서 효율성 증가(커널의 개입을 피할 수 있음)
- 동일 adress space 에서 스레드 여러개
- 자원을 공유해서 효율성 증가(커널의 개입을 피할 수 있음)
- 경제성
- 멀티 프로세서 활용
<그림 - 자원공유>
프로세스의 경우엔 한 프로세스가 메모리 영역을 사용한다고 하면 그 부분을 다른 프로세스가 접근 할 수 없다. 반면, 스레드의 경우엔 메모리 영역에 대한 자원은 공유하고 제어 부분만 별개로 사용하므로써 공통된 자원에 접근할 수 있다.
또한, P1에서 P2로 자원에 대한 접근 권한이 넘어갈 때 Context Switching 이라는 것이 발생한다. 그러나 Thread 에서의 경우 자원에 공통된 접근이 가능하기 때문에, Context Switching이 발생하지 않는다.
사용자 응답성을 높이기 위해 스레드를 사용한다.
스레드를 하나만 가지고, FPS 게임을 한다면, 마우스를 돌리는 순간 화면이 멈춘다. 마찬가지로, 총소리가 들리는 동안 화면이 멈추고, 마우스도 멈춘다. 이렇게 되면 게임을 하는 의미가 없다.
자원을 공유해서 제어하는 부분만 나눠 동시에 진행하는 것이 가능해진다
스레드의 구현
사용자 수준 스레드 (User Thread)
내부 라이브러리를 이용해 여러 스레드를 사용
- 사용자 영역의 스레드 라이브러리로 구현됨
- 스레드의 생성, 스케줄링 등
- 커널은 스레드의 존재를 모름
- 커널의 관리(개입)을 받지 않음
- 생성 및 관리의 부하가 적음, 유연한 관리 가능
- 커널은 프로세스 단위로 자원 할당
- 하나의 스레드가 Block 상태가 되면, 모든 스레드가 대기
- Single-thread 의 경우
- 커널의 관리(개입)을 받지 않음
커널 수준 스레드(Kernel Thread)
- OS(Kernel)가 직접관리
- 커널 영역에서 스레드의 생성,관리 수행
- Context Switching 등 부하(Overhead)가 큼
- 커널이 각 스레드를 개별적으로 관리
- 프로세스 내 스레드들이 병행 수행 가능
- 하나의 스레드가 block 상태가 되어도, 다른 스레드는 계속 작업 수행 가능
- 프로세스 내 스레드들이 병행 수행 가능
혼합형 (n:m) 스레드
- n 개의 사용자 수준 스레드 - m 개의 커널 스레드(n >= m)
- 사용자는 원하는 수만큼 스레드 사용
- 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block 상태가 되어도, 다른 스레드 수행 가능
- 병행 처리 가능
- 효율적이면서도 유연함
요약
- 스레드 = 자원 공유 , 제어 별도
- 스레드는 프로세서 실행의 단위이기 때문에, 여러개의 스레드(하나의 프로세스)가 여러 코어를 병렬적으로 사용할 수 있다.
- 스레드 하나당 코어 하나가 가능하고, 커널 수준 스레드나 혼합 스레드가 되어야 멀티 프로세싱이 가능
'CS > 운영체제' 카테고리의 다른 글
[운영체제 -김덕수 교수님] 프로세스 스케쥴링 (2/4) - FCFS, RR (0) | 2022.07.31 |
---|---|
[운영체제- 김덕수 교수님] 프로세스 스케줄링 (1/4) (0) | 2022.07.31 |
[운영체제 - 김덕수 교수님] 프로세스 관리 (0) | 2022.07.24 |
[운영체제 - 김덕수 교수님] OS (0) | 2022.07.24 |
[운영체제 - 김덕수 교수님] 운영체제 개요 (0) | 2022.07.23 |
Comments