본 정리는 운영체제(Operating System: Concepts) 9th edition과 22학년도 1학기 건국대학교 운영체제 수업을 바탕으로 하고 있습니다.
앞서 실행 중인 프로그램을 뜻하는 프로세스에 대하여 배웠다.
프로세스는 단 하나의 진행 플로우를 갖고 있기 때문에 굉장히 제한적이다.
또한 시스템 호출을 통해 다른 프로세스를 생성할 때 많은 시간과 자원이 필요하기 때문에 오버헤드가 발생한다.
이러한 프로세스를 사용자 수준 문맥의 text 영역만 공유하고 data stack 영역과 커널 수준 문맥은 모두 복사하여 새로운 주소를 할당받기 때문에 중량프로세스 라고도 부른다.
프로세스보다 더 작은 단위의 실행 수단을 프로세스 내에 만들어 한 프로세스 내에서 각각 별도의 진행 플로우를 갖도록 하는 게 있었으면 좋겠다는 발상이 나오게 되었고,
스레드가 그 해결책이다.
스레드 (Thread)
스레드는 프로세스 안의 제어 흐름이다.
하나의 프로세스 내에서는 다수의 스레드를 가질 수 있다!
프로세스는 하나의 스레드로 구성된 것으로 볼 수 있으며, (단일 스레드)
여러 개의 스레드를 가지게 된다면 프로세스는 동시에 하나 이상의 작업을 수행할 수 있게 된다. (다중 스레드)
커널에서 시분할의 단위를 프로세스가 아닌 스레드로 한다면 하나의 프로세스 내에서 여러 스레드가 동시 동작할 수 있다.
스레드끼리는 사용자 수준 문맥의 text 영역과 data 영역은 공유, stack 영역은 따로 갖는다.
따라서 스레드는 경량 프로세스, light weight process라고도 부른다.
즉, 간단히 이해하면 하나의 함수가 새로 생성되어 부모 스레드와 비동기적으로 실행된다고 생각하면 된다.
당연히 함수이므로 전역변수에 변화를 주면 전역변수는 data 영역에 있고, 이는 영역을 스레드끼리 공유하므로 다른 스레드에 영향을 준다.
프로세스 간의 데이터 공유는 pipe 등을 이용하여야 하지만, 스레드는 간단히 전역 변수를 사용하여 자료를 공유하고 통신할 수 있는 것이다.
프로세스 간의 context switching은 OS의 스케줄러가 주체가 되어 하는 반면, 스레드 간의 switching은 스레드 라이브러리에 의해 이루어진다.
* 참고: https://developbear.tistory.com/98
[Chapter 3. 프로세스] 프로세스와 문맥
본 정리는 운영체제(Operating System: Concepts) 9th edition과 22학년도 1학기 건국대학교 운영체제 수업을 바탕으로 하고 있습니다. 프로세스 (Process) 실행 중인 프로그램 시스템 콜을 통해 자원을 요구하
developbear.tistory.com
스레드의 장점
1. 응답성 (Responsiveness)
대화형 응용 프로그램을 다중 스레드화하면 사용자에 대한 응답성을 증가시킬 수 있다.
2. 자원 공유 (Resource sharing)
프로세스는 공유 메모리와 메시지 전달 기법을 통해서만 자원 공유가 가능했지만,
스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다.
3. 경제성 (Economy)
스레드는 자신이 속한 프로세스들의 자원을 공유하기 때문에
스레드를 생성하고 문맥 교환하는 것이 프로세스를 생성하는 것보다 경제적이다.
4. 규모 적응성 (Scalability)
다중 처리기 구조에서는 각각의 스레드가 다른 처리기에서 병렬로 수행 가능하다.
TCB (Thread Control Block)
프로세스는 준비 상태와 실행 상태를 오가기 때문에 현재 자신의 정보를 저장하기 위해서 PCB를 갖고 있다.
참고 : https://developbear.tistory.com/100
[Chapter 3. 프로세스] 프로세스 상태와 PCB(Process Control Block)
본 정리는 운영체제(Operating System: Concepts) 9th edition과 22학년도 1학기 건국대학교 운영체제 수업을 바탕으로 하고 있습니다. 프로세스의 상태 1. 준비(ready) 준비 상태는 스케줄링에 의하여 언제든
developbear.tistory.com
스레드는 어떠할까?
스레드의 실행 마찬가지로 멀티 프로세스와 비슷하게 동시에 실행되는 것처럼 보이지만은 실상은 엄청나게 빠르게 서로 스위칭해가며 실행되고 있는 것이다.
즉, 중지되었을 때 실행되던 상태를 저장하기 위하여 PCB와 같은 자료구조를 필요로 하는데 이를 TCB라고 한다.
* PCB는 운영체제의 스케줄러에 의해 문맥 교환되는 프로세스의 정보의 단위이지만, TCB는 스레드 라이브러리에 의해 문맥 교환되는 스레드 정보의 단위이다.
TCB는 PCB내에 포함되며, 레지스터 문맥(범용 레지스터 특수 레지스터 등)의 정보를 가지고 있다.
스레드가 하나 생성될 때마다 PCB 내에서 TCB가 확장된다.
아래의 예시에서는 한 프로세스 내에서 2개의 스레드가 추가 생성되어 총 3개의 스레드가 독립적으로 실행되는 중이다.
스레드는 우선 크게 사용자 스레드와 커널 스레드로 나눌 수 있다.
사용자 스레드 (user thread)
응용 프로그램 내의 라이브러리(보통 스레드 라이브러리)에 의해서 구현 및 관리되는 스레드이다.
커널과 관계 없이 지원되기 때문에 커널은 사용자 스레드를 인지하지 못한다.
장점 : 생성과 관리가 빠르다.
단점 : 한 스레드가 봉쇄 시스템 호출을 통해 대기 상태가 되어(ex. 입출력 요청) blocking 된다면 다른 스레드도 함께 block 된다.
커널 스레드 (kernel thread)
운영체제에 의해 직접 지원되고 관리되는 스레드
스레드의 생성, 스케줄링 등의 관리가 커널에서 이루어진다. (커널이 TCB를 만들어서 관리)
장점 : 한 스레드가 대기 상태로 들어가 blocking 되어도 다른 스레드는 실행을 계속할 수 있다.
단점 : 생성과 관리가 느리다.
현대 대부분의 시스템들은 혼합형 모델로 두 가지 형태의 스레드를 모두 지원한다.
다중 스레드 모델 (Multithreading Models)
1. 다대일 모델 (Many-to-One Model)
많은 사용자 스레드 - 하나의 커널 스레드로 사상(mapping)
개발자가 원하는 만큼의 사용자 스레드를 생성할 수 있지만,
스레드의 관리가 사용자 공간에서 일어나기 때문에 하나의 스레드가 봉쇄된다면 전체 프로세스가 봉쇄된다.
또한, 한번에 하나의 스레드만이 커널에 접근할 수 있어, 다중 스레드가 다중 코어 시스템에서 병렬로 실행될 수가 없다.
→ 다대일 모델을 사용하는 시스템은 거의 없다.
2. 일대일 모델 (One-to-One Model)
하나의 사용자 스레드 - 하나의 커널 스레드로 사상
하나의 스레드가 봉쇄되어도 다른 스레드가 실행될 수 있다.
다중 처리기에서 다중 스레드가 병렬로 수행되는 것을 허용하지만,
사용자 수준 스레드를 생성할 때 그에 따른 커널 스레드를 생성해야 하기 때문에 그에 따른 오버헤드가 발생한다.
→ 시스템에 의해 지원되는 스레드의 수를 제한한다.
3. 다대다 모델 (Many-to-Many Model)
여러 사용자 스레드 - 그보다 작거나 같은 수의 커널 스레드로 멀티플렉스(Multiplex)한다.
다대다 모델은 다대일, 일대일 모델의 단점을 해결해준다.
(1) 다대다 모델 : 한 번에 하나의 스레드만이 커널에 의해 스케줄 되기 때문에 병렬 실행이 어렵다.
(2) 일대일 모델 : 생성할 수 있는 스레드의 수가 제한될 수 있다.
다대다 모델은 필요한 만큼 사용자 스레드를 생성할 수 있으며,
그의 개수에 상응하는 커널 스레드가 다중 처리기에서 병렬로 수행될 수 있다.
따라서 한 스레드가 봉쇄형 시스템 호출을 발생시켜 대기 상태로 들어갔을 경우 커널이 다른 스레드의 수행을 스케줄 할 수 있다
'CS > 운영체제' 카테고리의 다른 글
[Chapter 4. 스레드] 스레드와 관련한 문제들 (0) | 2022.08.21 |
---|---|
[Chapter 4. 스레드] 암묵적 스레딩과 사용 방법 (1) | 2022.08.20 |
[Chapter 3. 프로세스] 프로세스의 생성과 종료 (0) | 2022.08.18 |
[Chapter 3. 프로세스] 프로세스 상태와 Context Switching, PCB(Process Control Block) (0) | 2022.08.17 |
[OS] Call Stack Frame (0) | 2022.08.16 |