[운영체제] Chapter 3. Process(2)
2022. 12. 14. 17:16ㆍCS/운영체제
728x90
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎
Thread, Single and Multithreaded Process, Benefits of Threads, Implemetation of Threads
1. Thread(스레드)
A thread (or lightweight process) is a basic unit of CPU utilization
스레드(가벼운 프로세스)는 프로세스 내부의 여러 개의 CPU 수행 단위이다.
- 동일한 일을 하는 프로세스가 여러 개 있으면
- 별도의 주소 공간이 여러 개 만들어져 메모리가 낭비됨
- 그렇다면 같은 일을 하는 프로세스를 여러 개 띄워 놓고 싶다면?
- 주소 공간은 1개만 띄어 놓고 각 프로세스마다 다른 부분의 코드를 실행할 수 있게 한다 : 스레드의 개념
- 각 프로세스마다 다른 부분의 코드를 실행하려면 현재 CPU가 코드의 어느 부분을 실행하고 있는지를 알아야 한다
→ PCB에 Pogram Counter를 여러 개 두어 하나의 주소 공간으로 여러 개의 프로세스를 실행 - 각 스레드마다 코드를 실행하다 함수 호출을 하면 리턴 등의 관련 정보가 stack에 쌓인다.
→ CPU 수행 단위가 여러 개 있게 되면 stack도 별도로 두어야 한다.
- 각 프로세스마다 다른 부분의 코드를 실행하려면 현재 CPU가 코드의 어느 부분을 실행하고 있는지를 알아야 한다
- 주소 공간은 1개만 띄어 놓고 각 프로세스마다 다른 부분의 코드를 실행할 수 있게 한다 : 스레드의 개념
- 프로세스 1개에 CPU 수행 단위만 여러 개 두고 있는 것을 스레드(thread)라고 한다.
1-1. 스레드의 구성: CPU 수행 관련으로 스레드가 독립적으로 가짐
- program counter
- register set
- stack space - 함수 호출과 관련된 부분
→ CPU 수행 관련 정보는 독립적으로 가짐
1-2. 스레드가 동료 스레드와 공유하는 부분: task
- code section
- data section
- OS resources
→ 공유할 수 있는 부분은 최대한 공유
→ thread가 여러 개일 때 task는 1개
1-3. lightweight process
- 전통적인 개념) heavyweight process는 하나의 스레드를 가지고 있는 task로 볼 수 있다.
- process를 별도로 두는 것보다 process안에 스레드를 여러 개 두는 것이 가볍기 때문에 process를 thread로 관리 ~ thread를 lightweight process라 한다.
- CPU 수행 관련 정보만 따로 뽑아서 관리를 한다 : lightweight process
1-4. 스레드의 장점
- 응답성(responsiveness)
- 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 태스크 내의 다른 스레드가 running 되어 빠른 처리를 할 수 있다.
- 예) 웹 브라우저에서 웹 페이지를 띄우면 html 문서가 날아와 문서 안에 임베디드 된 여러 이미지를 웹 브라우저가 해석 → 웹 서버에 이미지 요청 → display
- 웹 서버에 이미지를 요청(오래 걸리는 작업): 네트워크를 요청한 스레드만 blocked
- 다른 스레드가 이미 읽어온 html 문서를 먼저 display
- 자원 공유(Resource Sharing)
- 동일한 일을 하는 프로그램이 여러 개 있을 때 별도의 프로세스보다는 하나의 프로세스에 CPU 수행 단위를 여러 개 두게 되면
- code, data, resource를 공유하며 자원을 효율적으로 사용할 수 있다.
- 동일한 일을 하는 프로그램이 여러 개 있을 때 별도의 프로세스보다는 하나의 프로세스에 CPU 수행 단위를 여러 개 두게 되면
- 경제성(Economy)
- 프로세스를 생성, 문맥 교환 오버헤드 >> 스레드를 생성, 문맥 교환 오버헤드
- Solaris의 경우 30배 >> 5배
- Utilization of MP Architectures
- CPU가 여러 개 있는 상황에서 스레드를 두었을 때 각각의 스레드가 서로 다른 CPU에서 병렬적으로 일을 해서 결과를 더 빨리 얻을 수 있다.
1-5. 스레드의 구현
- Kernel Thread: 커널의 지원을 받는 스레드
- 스레드가 여러 개 있다는 사실을 OS 커널에서 알고 있어
- CPU가 다른 커널로 넘어가는 것도 커널이 CPU 스케줄링하듯 넘겨줌
- Windows 95/98/NT, Solaris, Digital UNIX, Mach
- 스레드가 여러 개 있다는 사실을 OS 커널에서 알고 있어
- User Thread: 라이브러리의 지원을 받는 스레드
- 스레드가 여러 개 있다는 사실을 OS 커널은 모르고 있다
- 유저 프로그램이 스스로 여러 개의 스레드를 관리
- POSIX Pthreads, Mach C-threads, Solaris threads
- 스레드가 여러 개 있다는 사실을 OS 커널은 모르고 있다
- Thread가 빠르기 땜누에 real-time 목적으로 사용되는 경우도 있다.
[복습]
- 스레드: 프로세스 내부의 여러 개의 CPU 수행 단위
- PCB에 PC와 레지스터를 여러개 두어 하나의 주소 공간으로 여러 개의 프로세스를 실행할 수 있다
- 스레드의 구성(CPU 수행 관련으로 스레드가 독립적으로 가짐): program counter, register set, stack sapce
- 스레드가 동료 스레드와 공유하는 부분(task): code section, data section, OS resources
- lightweight process(프로세스안에 스레드 여러 개) ↔ heavyweight process(프로세스는 하나의 스레드)
- 스레드의 장점
- 응답성: 하나의 스레드가 blocked되어도 동일한 task 내의 다른 스레드가 running 되어 빠른 처리
- 자원 공유: code, data, resource를 공유하며 자원을 효율적으로 사용
- 경제성: 스레드를 생성하고 문맥교환하는데 드는 오버헤드가 프로세스보다 적음
- Utilization of MP Architectures: 서로 다른 CPU에서 병렬적인 일 처리
- 스레드의 구현: kernel thread, user thread
이화여자대학교 반효경 교수님의 [2014년 1학기 운영체제] 강의 정리입니다.
반효경 교수님의 [운영체제와 정보기술의 원리] 교재를 참고하였습니다. 감사합니다.
https://core.ewha.ac.kr/publicview/C0101020140321141759959993?vmode=f
https://core.ewha.ac.kr/publicview/C0101020140321143516139010?vmode=f
728x90
'CS > 운영체제' 카테고리의 다른 글
[운영체제] Chapter 4. Process Management (2) (2) | 2022.12.20 |
---|---|
[운영체제] Chapter4. Process Management (1) (0) | 2022.12.15 |
[운영체제] Chapter 3. Process(1) (2) | 2022.12.11 |
[운영체제] Chapter 2. System Structure & Program Execution (2) (0) | 2022.11.24 |
[운영체제] Chapter 2. System Structure & Program Execution (1) (0) | 2022.11.23 |