일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 페이징
- Algorithm
- 가상 메모리
- 단편화
- mips
- 세마포어
- 동기화
- 백준
- 추상화
- 교착상태
- mutex
- concurrency
- 페이지 부재율
- 스레드
- 기아 상태
- ALU
- 인터럽트
- fork()
- 알고리즘
- BOJ
- 페이지 대치
- PYTHON
- 부동소수점
- 프로세스
- 운영체제
- 우선순위
- 컴퓨터구조
- 트랩
- Oracle
- 스케줄링
- Today
- Total
봉황대 in CS
[Chapter 4. 스레드] 스레드, PCB와 TCB, 다중 스레드 모델 본문
[Chapter 4. 스레드] 스레드, PCB와 TCB, 다중 스레드 모델
등 긁는 봉황대 2022. 7. 14. 12:38* 본 글은 '운영체제(Operating System: Concepts) 9th edition'의 내용과 2021학년도 1학기에 수강한 '운영체제' 과목 강의 내용을 함께 정리하여 작성하였습니다.
앞서 실행 중인 프로그램을 뜻하는 프로세스에 대하여 배웠다.
프로세스는 단 하나의 진행 플로우를 갖고 있기 때문에 굉장히 제한적이다.
또한 시스템 호출을 통해 다른 프로세스를 생성할 때 많은 시간과 자원이 필요하기 때문에 오버헤드가 발생한다.
(사용자 수준 문맥의 text 영역만 공유 & data, stack 영역과 커널 수준 문맥 등은 모두 복사하여 생성하기 때문이며,
이 때문에 프로세스는 중량 프로세스, heavy weight process라고도 부른다.)
새 프로세스가 해야 할 일이 기존 프로세스가 하는 일과 동일하다면 굳이 이 많은 오버헤드를 감수할 필요가 있을까?
따라서 프로세스보다 더 작은 단위의 실행 수단을 프로세스 내에 만들어
한 프로세스 내에서 각각 별도의 진행 플로우를 갖도록 하는 게 있었으면 좋겠다는 발상이 나오게 되었고,
스레드가 그 해결책이다.
스레드 (Thread)
스레드는 프로세스 안의 제어 흐름이다.
하나의 프로세스 내에서는 다수의 스레드를 가질 수 있다!
프로세스는 하나의 스레드로 구성된 것으로 볼 수 있으며, (단일 스레드)
여러 개의 스레드를 가지게 된다면 프로세스는 동시에 하나 이상의 작업을 수행할 수 있게 된다. (다중 스레드)
커널에서 시분할의 단위를 프로세스가 아닌 스레드로 한다면 하나의 프로세스 내에서 여러 스레드가 동시 동작할 수 있다.
스레드끼리는 사용자 수준 문맥의 text 영역과 data 영역은 공유, stack 영역은 따로 갖는다.
따라서 스레드는 경량 프로세스, light weight process라고도 부른다.
따라서 프로세스 끼리는 공유 변수를 가질 수 없었지만 (fork() 시 변수들이 각자의 프로세스로 복제되어 메모리 상의 다른 위치에 저장되기 때문)
스레드에서는 전역 변수를 통해 스레드 간에 자료를 공유할 수 있다. (전역 변수는 data 영역에 저장되기 때문)
* 참고 : 2022.07.07 - [Computer Science/Operating System] - [Chapter 3. 프로세스] 프로세스와 문맥
스레드의 장점
1. 응답성 (Responsiveness)
대화형 응용 프로그램을 다중 스레드화하면 사용자에 대한 응답성을 증가시킬 수 있다.
2. 자원 공유 (Resource sharing)
프로세스는 공유 메모리와 메시지 전달 기법을 통해서만 자원 공유가 가능했지만,
스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다.
3. 경제성 (Economy)
스레드는 자신이 속한 프로세스들의 자원을 공유하기 때문에
스레드를 생성하고 문맥 교환하는 것이 프로세스를 생성하는 것보다 경제적이다.
4. 규모 적응성 (Scalability)
다중 처리기 구조에서는 각각의 스레드가 다른 처리기에서 병렬로 수행 가능하다.
PCB와 TCB
PCB (Process Control Block)
중량 프로세스(heavy weight process)를 관리하는 자료구조
운영체제의 스케줄러에 의해 문맥 교환되는 프로세스 정보의 단위이다.
* 참고 : 2022.07.08 - [Computer Science/Operating System] - [Chapter 3. 프로세스] 프로세스 제어 블록
TCB (Thread Control Block)
경량 프로세스(light weight process) 즉, 스레드를 관리하는 자료구조
스레드 라이브러리에 의해 문맥 교환되는 스레드 정보의 단위이다.
PCB 내 TCB를 수용하는 것으로 커널은 스레드를 실현시킨다.
스레드가 하나 생성될 때마다 PCB 내에서 TCB가 확장된다.
아래의 예시에서는 한 프로세스 내에서 2개의 스레드가 추가 생성되어 총 3개의 스레드가 독립적으로 실행되는 중이다.
다중 스레드 모델 (Multithreading Models)
먼저 스레드의 두가지 형태에 대하여 알아보자.
1. 사용자 스레드 (user thread)
응용 프로그램 내의 라이브러리에 의해서 구현 및 관리되는 스레드
커널 위에서 지원되기 때문에 커널은 사용자 스레드를 인식하지 못한다.
장점 : 생성과 관리가 빠르다.
단점 : 한 스레드가 봉쇄 시스템 호출을 통해 대기 상태가 되어(ex. 입출력 요청) blocking 된다면 다른 스레드도 함께 block 된다.
2. 커널 스레드 (kernel thread)
운영체제에 의해 직접 지원되고 관리되는 스레드
스레드의 생성, 스케줄링 등의 관리가 커널에서 이루어진다. (커널이 TCB를 만들어서 관리)
장점 : 한 스레드가 대기 상태로 들어가 blocking 되어도 다른 스레드는 실행을 계속할 수 있다.
단점 : 생성과 관리가 느리다.
현대 대부분의 시스템들은 혼합형 모델로 두 가지 형태의 스레드를 모두 지원한다.
다중 스레드 모델
1. 다대일 모델 (Many-to-One Model)
많은 사용자 스레드 - 하나의 커널 스레드로 사상(mapping)
개발자가 원하는 만큼의 사용자 스레드를 생성할 수 있지만,
스레드의 관리가 사용자 공간에서 일어나기 때문에 하나의 스레드가 봉쇄된다면 전체 프로세스가 봉쇄된다.
또한, 한번에 하나의 스레드만이 커널에 접근할 수 있어, 다중 스레드가 다중 코어 시스템에서 병렬로 실행될 수가 없다.
→ 다대일 모델을 사용하는 시스템은 거의 없다.
2. 일대일 모델 (One-to-One Model)
하나의 사용자 스레드 - 하나의 커널 스레드로 사상
하나의 스레드가 봉쇄되어도 다른 스레드가 실행될 수 있다.
다중 처리기에서 다중 스레드가 병렬로 수행되는 것을 허용하지만,
사용자 수준 스레드를 생성할 때 그에 따른 커널 스레드를 생성해야 하기 때문에 그에 따른 오버헤드가 발생한다.
→ 시스템에 의해 지원되는 스레드의 수를 제한한다.
3. 다대다 모델 (Many-to-Many Model)
여러 사용자 스레드 - 그보다 작거나 같은 수의 커널 스레드로 멀티플렉스(Multiplex)한다.
다대다 모델은 다대일, 일대일 모델의 단점을 해결해준다.
(1) 다대다 모델 : 한 번에 하나의 스레드만이 커널에 의해 스케줄 되기 때문에 병렬 실행이 어렵다.
(2) 일대일 모델 : 생성할 수 있는 스레드의 수가 제한될 수 있다.
다대다 모델은 필요한 만큼 사용자 스레드를 생성할 수 있으며,
그의 개수에 상응하는 커널 스레드가 다중 처리기에서 병렬로 수행될 수 있다.
따라서 한 스레드가 봉쇄형 시스템 호출을 발생시켜 대기 상태로 들어갔을 경우 커널이 다른 스레드의 수행을 스케줄 할 수 있다!
4. 두 수준 모델 (Two-Level-Model)
다대다 모델 + 한 사용자 스레드가 하나의 커널 스레드에만 연관되는 것을 허용한다.
'Computer Science & Engineering > Operating System' 카테고리의 다른 글
[Chapter 4. 스레드] 스레드와 관련된 문제들 (0) | 2022.07.15 |
---|---|
[Chapter 4. 스레드] 암묵적 스레딩 (스레드 풀, OpenMP, GCD) (0) | 2022.07.14 |
[Chapter 3. 프로세스] 프로세스간 통신 (0) | 2022.07.12 |
[Chapter 3. 프로세스] 프로세스 생성과 종료 (0) | 2022.07.09 |
[운영체제] Call Stack Frame & ESP, EBP 레지스터 (0) | 2022.07.08 |