Thread
프로세스내에서 실행되는 흐름의 단위, CPU를 수행하는 단위
왜 Thread 가 필요할까?
만약 동일한 일을 하는 프로세스가 여러 개가 있다하면 프로그램은 비효율적이다.
여러 개의 프로세스 공간과 PCB가 있을 것이고 프로세스가 변경될 때마다 엄청난 cost가 발생하기에 비효율적이다.
따라서 하나의 주소 공간안에 프로세스마다 서로 다른 PC값을 가르키게 하여 효율적이게 만든 것이 Thread
스레드의 특징
하나의 프로세스는 code, data, stack이 존재한다. 운영체제의 data영역에는 PCB가 존재한다.
그렇다면 하나의 공간에 여러 Thread 즉 여러 행동을 하려면 어떤 공간이 나눠져있어야 할까?
- Stack 공간: 각 Thread마다 실행하는 함수가 다르므로
- PCB의 PC & Register : 프로그램 마다 현재 실행한 명령어가 다르다.
공유하는 부분 (= Task) :
- Code section
- Data section
- OS resources
스레드 장점
하나의 서버 스레드가 Blocked 상태인 동안 동일한 Task 내의 다른 스레드가 실행되어 중단없이 빠른 처리 가능하며, 디증 스레드를 통한 성능 향상과 병렬성을 높일 수 있다.
Responsiveness
interrupt나 system call로 blocked 상태가 된다면 해당 프로세스는 원래 아무일도 못한다 하지만 여러 쓰레드가 있고 그 중 하나의 Thread가 blocked가 된다면 나머지 Thread는 정상 동작이 되므로 웹페이지 같은 경우 중단 없이 화면 송출 가능
Resource Sharing
code, data 프로세스의 리소스들을 공유하므로 자원을 아낄 수 있다.
Economy
프로세스를 하나 만드는 것은 overhead가 크며 Context switch의 경우에도 overhead가 크지만 Thread의 경우는 아니다.
Utilization of MP Architectures
각각의 thread들은 CPU에서 병렬적으로 실행가능
Threa의 구현
Thread에는 Kernel Threads와 User Threads가 존재한다.
Kernel Thread: 커널이 Thread가 여러개 있다는 것을 알고 있다
- kernel이 직접 프로세스 스케쥴링 하듯이 넘겨준다.
User Thread: 프로세스 안에 여러 Thread가 있다는 것을 모른다.
- 라이브러리의 지원을 받아 사용한다.
- 프로세스 내부에 직접 조율한다.
Real-Time Thread: Real-Time을 지원받는 Thread
'운영체제' 카테고리의 다른 글
CPU Scheduling (0) | 2023.03.02 |
---|---|
운영체제 - 프로세스 생성 (0) | 2023.03.02 |
운영체제 - 프로세스 (0) | 2022.08.06 |
운영체제 - I/O 구조 (0) | 2022.08.03 |
운영체제 - 저장소 (0) | 2022.08.03 |