OS

[OS] 정리3

Binceline 2018. 9. 24. 02:04


MultiThread Model

- 프로세스의 생성 및 컨텍스트 스위칭 부하가 크므로 Thread 사용


Thread

- CPU 스케줄링의 기본 단위이자 프로세스 내의 제어의 흐름이라고 할 수 있다.

- PC / Registers / Stack 으로 이루어져 있다.

- 각 Thread는 레지스터 상태와 Stack을 가진다.

- 프로세스 내부에서 여러 스레드가 생성될 수 있고, Code / 주소공간 / 운영체제 자원을 공유한다.

- Thread 실행 환경을 Task라고 하며, 프로세스는 기본적으로 하나의 스레드를 가진다.

- Thread의 생성 및 Switching은 프로세스에 비해 매우 부하가 적다

멀티 프로세서 혹은 멀티코어 환경

- 스레드는 다른 프로세서 혹은 멀티코어 환경에서 병렬로 실행될 수 있다.


싱글 프로세서 환경

- 한 번에 하나만 수행하고, 병렬로 실행되는 것처럼 보이도록 함

- 그렇다고 성능이 무조건 느린 것은 아니다. I/O Bound 스레드가 Block 상태가 되면, 커널이 현재 프로세스 내의 다른 스레드로 전환을 하기 때문에, 계산 속도가 향상된다.


User Level vs Kernel Level Thread

- User Level Thread

- Thread 관리가 유저레벨에서 수행됨 -> 커널은 스레드가 몇개인지도 모름

- 커널 모드 전환을 하지 않기 때문에 빠름.

- 멀티프로세서 혹은 멀티코어 환경 사용 불가

- Kernel Level Thread

- Thread가 커널레벨에서 관리됨 -> Context Switching 수행


Signal

UNIX 시스템에서 특정 이벤트가 발생했음을 프로세스에 알리는 데 사용

- Synchronous signals

- signal을 유발하는 작업을 수행한 동일한 프로세스로 전달됨(불법 메모리 엑세스, 0으로 나누기 등)

- Asynchronous signals

- 외부 이벤트에 의해 발생(프로세스 종료(Ctrl + C같은), 등)


Thread 취소 : 스레드 실행이 정상 완료되기 전에 종료해 버리는 방법

- 비동기 취소 : 해당 스레드를 즉시 종료

- 지연 취소 : 취소해야 하는지, 그 상태를 주기적으로 체크하는 방식


Thread Pool

- 여러개의 대기 스레드를 만들어 둔다

- 장점

- 스레드를 매번 새로 만드는 것보다 이미 만들어 둔 스레드를 사용하는 것이 빠르다

- 스레드풀의 미리 만들 스레드 수를 지정할 수 있다.

- Thread Local Storage(TLS)

- 각각의 스레드는 고유한 스택을 가진다. 그래서 스택과 매개변수같은 경우 스레드 별로 고유한 메모리를 가진다. 하지만, 전역변수와 정적 변수같은 경우 프로세스 내의 모든 스레드가 공유하게 된다.

- 일반 전역 변수의 경우, 모든 스레드가 공유하므로 접근 시 race condition이 발생할 수 있다.

- TLS는 정적/전역 변수를 스레드 각각 독립적으로 메모리 공간을 만들어 주고 싶을 때 사용한다.

- 물론, 자료구조를 스레드 수만큼 생성하고 각각의 구역을 나누어 관리하는 식으로 구현해도 되겠지만, TLS를 쓰면 각각의 스레드에 귀속되므로 더 깔끔한 구조가 된다.


반응형

'OS' 카테고리의 다른 글

Context Switching에서의 Thread와 Process의 관계 + PCB, TCB  (2) 2020.05.30
컴퓨터 자원의 구조와 동작, RAM과 Disk에 대해  (0) 2020.05.26
[OS] 정리7 : 가상 메모리  (0) 2018.09.27
[OS] 정리6 : 메모리 관리  (0) 2018.09.26
[OS] System call, Interrupt, Trap, 등  (1) 2018.09.24
[OS] 정리5  (0) 2018.09.24
[OS] 정리4  (0) 2018.09.24
[OS] 정리2  (0) 2018.09.23
[OS] 정리1  (0) 2018.09.21
pintos information  (0) 2014.02.13