본 글은 반효경 교수님의 운영체제 강의를 들으며 정리하는 글 입니다.
1. Thread 란?
Process 내에서 실행 되는 여러 흐름의 단위 혹은 프로세스가 할당 받은 자원을 이용하는 실행 흐름의 단위를 뜻한다.
하나의 Process내에서 동일한 코드를 실행하고 싶은경우 Thread를 여러개 생성하여 작업을 시킨다.
Thread를 경량 프로세스(light weight process)라고 부르기도 한다.
각각의 Thread 들은 다음 3가지를 제외하고는 Process의 것을 공유하여 사용한다.
- program counter
- register set
- stack space
각 Thread별로 자신의 stack, register, PC를 가지게 된다.
1 - 1) Thread가 다른 Thread와 공유하는 부분
스레드 들은 다음 3가지는 공유하여 사용한다.
- code section
- data section
- OS resources
Thread끼리 같은 주소지를 갖으며, Address space의 data, code 영역은 공유하되 stack은 별도로 할당 받는다.
Thread가 동료thread와 공유하는 부분인 code section, data section, OS resources를 task라고 한다.
그래서 전통적인 개념의 heavyweight process는 하나의 쓰레드를 가지고 있는 task로 볼 수 있다.
PCB에서는 program counter와 register set을 제외한 프로세스 관련 정보 및 자원을 모두 공유한다.
1 - 2) 장점
1 - 2 - 1) 응답성 (Responsiveness)
다중 쓰레드로 구성된 Task 구조에서 하나의 서버 쓰레드가 blocked(watiting) 상태인 동안에도 동일한 Task 내의 다른 쓰레드가 실행되어 빠른 처리가 가능하다.
예를 들어 웹 브라우저가 멀티쓰레드 환경에서,
하나의 쓰레드는 이미지를 비롯한 추가 데이터를 받기 위해 서버에 요청을 걸어서 blocked 상태가 되었다면,
다른 쓰레드가 이미 받아 놓은 HTML 텍스트라도 화면에 출력해줄 수 있다.
만약, 멀티쓰레드가 아닌 단일 쓰레드 였다면, 이미지 요청으로 인해 blocked 상태가 되어 사요자는 아무런 화면도 보지 못하고 있게 된다.
이러한 비동기식 입출력을 통해 응답성을 높일 수 있다.
1 - 2 - 2) 자원 공유 (Resource Sharing)
하나의 프로세스 안에 CPU의 수행 단위인 쓰레드를 여러개 생성하면 code, data, resource 자원을 공유하여 효율적으로 자원 활용이 가능해집니다!
1 - 2 - 3) 경제성 (Economy)
- 동일한 일을 수행하는 다중 쓰레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다.
- 새로운 프로세스 하나를 만드는 것 보다 기존의 프로세스에 쓰레드를 추가하는 것이 오버헤드가 훨씬 적다.
- 프로세스의 Context Switching과 달리 캐시 메모리를 flush할 필요가 없고 Code, Data, Resource 영역을 공유하므로 Stack 영역만 처리하면 되기 때문이다.
1 - 2 - 4) 멀티 프로세서 아키텍처에서의 이용성 (Utilization of MP Architectures)
Processor(CPU)가 여러개인 경우, 각각의 쓰레드가 서로 다른 CPU를 가지고 병렬적으로 작업을 진행해서 훨씬 효율적으로 작업을 수행할 수 있다.
1 - 3) 단점
- 자원의 공유로 인한 동기화 문제가 발생할 수 있다.
- 디버깅이 까다롭다.
1 - 4) 구현 방식
1 - 4 - 1) Kernel Threads
여러 개의 쓰레드가 있다는 사실을 운영체제가 알고 있어서 쓰레드 간의 CPU 교환을 커널이 CPU 스케줄링하듯이 관리한다.
- Windows 95, 98, NT
- Solaris
- Digital UNIX, Mack
1 - 4 - 2) User Threads
여러 개의 쓰레드가 있다는 사실을 운영체제가 모르는 상태에서 사용자 프로그램이 라이브러리의 지원을 받아 스스로 여러 개의 쓰레드를 관리한다.
커널이 쓰레드의 존재를 모르기 때문에 구현에 제약이 있을 수 있다.
- POSIX Pthreads
- Mach C-threads
- Solaris threads
JVM의 Thread는 과거 JVM 1.3이전에는 User Thread 모델을 사용하다가, 지금은 Kernel Thread 모드 방식으로 동작합니다.
https://blogshine.tistory.com/338
이외에 Real-Time Threads가 있습니다!
'CS > OS (2022-1)' 카테고리의 다른 글
[OS] CPU Scheduling - 1 (0) | 2022.11.23 |
---|---|
[OS] Process Management (0) | 2022.11.22 |
[OS] Process - 1 (0) | 2022.11.21 |
[OS] System Structure & Program Execution 2 (0) | 2022.11.20 |
[OS] System Structure & Program Execution 1 (0) | 2022.11.19 |
댓글