자원을 할당받으면 프로세스가 그 자원을 제어하는 것이 운영체제의 기본이다. 여기서 스레드란 프로세스가 제어하는 부분을 이야기하는 것으로 하나의 프로세스는 여러 개의 스레드를 가질 수 있다.
스레드란 ❓
하나의 프로세스 안에서 다른 스레드들과 자원은 공유하면서 여러 개의 제어를 가능하게 하는 것이 스레드이다. 스레드는 Thread ID, 제어정보, 지역 데이터, 지역 데이터를 저장하는 스택이 하나의 스레드 구성요소가 되며 자원을 공유하기 때문에 Light Weight Process(LWP)라고 불린다. 스레드가 여러 개면 CPU를 병렬적으로 사용할 수 있어 프로세서 활용의 기본단위이다.
한 프로세스 내에서의 메모리 공간
같은 프로세스의 스레드들은 동일한 주소 공간을 공유하고 있어서 힙, 데이터, 코드의 자원을 공유하며 각각의 Stack pointer와 Program Counter을 갖는다. 이를 통해 CPU의 병렬 처리가 가능하고 여러 제어가 동시에 가능하다.
✌ 스레드의 장점
- 사용자 응답성 향샹 : 다중 스레드일 경우 일부 스레드가 지연되어도 다른 스레드는 작업을 계속 처리할 수 있다.
- 자원 공유 : 동일한 프로세스 메모리 안에 여러 개의 스레드가 있으면 커널의 개입을 피할 수 있다.
- 경제성 : context siwtch 비용이나 프로세스 생성 비용이 없다.
- 멀티 프로세서 활용 : 멀티 스레드를 사용하면 멀티 프로세서가 가능하고 이는 성능을 향상한다.
✌ 스레드의 구현
1️⃣ 사용자 수준 스레드
스레드 라이브러리가 스레드의 생성과 스케줄링을 담당하며 대표적인 라이브러리로는 POSIX threds, Win32 threads, Java threads 등이 있다.
한 개의 프로세 스니깐 하나의 커널 수준 스레드가 생기며 스레드 라이브러리가 스레드를 생성하고 관리하기에 스레드 라이브러리 안에 스레드 제어 블록(TCB)이 있다. 따라서 스레드 라이브러리에 의해서 사용자 수준 스레드는 여러 개이고 커널 수준 스레드는 하나인 n:1 매핑이다. 커널은 스레드의 존재를 모르기에 커널의 오버헤드를 낮출 수 있으며 유연한 관리가 가능하다. 하지만 커널은 프로세스 단위로 자원을 할당하기에 만약 다른 스레드가 block이 되고 나머지 스레드들은 계속 동작할 수 있을지라도 커널은 그 사실을 모르기에 모든 스레드가 전부 대기하게 된다.
2️⃣ 커널 수준 스레드
OS(커널)이 직접 관리하며 커널 영역에서 스레드를 생성하고 관리하기에 Context switching 등 오버헤드가 크다.
사용자 영역의 스레드의 개수만큼 커널 수준 스레드가 생기기에 1:1 매핑이고 커널 수준에서 관리하기에 TCB도 커널에 생긴다. 커널이 각 스레드를 개별적으로 관리하기에 스레드들은 다른 스레드가 block이 되는 것과 관계없이 다른 스레드는 수행이 가능하며 병행 수행이 가능하다.
사용자 수준 스레드와 커널 수준 스레드를 혼합하여 사용할 수는 없을까 ❓
혼합형 스레드(n:m)
n개의 사용자 수준 스레드와 m개의 커널 수준 스레드를 같이 사용하는 것으로 사용자는 원하는 수만큼의 스레드를 생성 가능하다. 각각의 장점을 합쳤기에 효율적이면서도 유연하다.
참고자료
www.youtube.com/watch?v=YlnvCIZQDkw&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=7
'OS' 카테고리의 다른 글
스레드의 공유자원 관리(동기화) (0) | 2021.05.09 |
---|---|
프로세스 스케줄링이 뭘까❓ (0) | 2021.01.04 |
인터럽트를 알아보자 (0) | 2020.12.31 |
운영체제가 프로세스를 어떻게 관리할까❓ (0) | 2020.12.31 |
운영체제의 구조와 기능을 간단히 살펴보자 (0) | 2020.12.31 |