운동하는 공대생
[OS(운영체제)] Threads 본문
1. Motivation
OS 는 process 구조를 통해서 보안과 독립성을 가진다. 하지만 이런 방식은 multi-core에서 비효율을 야기하고 또한 여러개의 process를 새로 생성하는것은 굉장히 많은 비용이 든다는 문제가 있다. 그래서 이런 문제를 해결하고자 Thread가 등장하게 되었다.
2. Thread
Thread는 기본적으로 프로그램을 실행을 하기 위해서 존재하면 각각의 Thread ID와 프로세스의 실행에 필요한 register 그리고 stack이 존재한다. 또한 프로그램을 데이터를 관리하는 메모리 주소는 같은 공간을 활용한다. 또한 thread 끼리는 보안성을 가지지 않으며 데이터, 코드, 힙을 같이 공유한다. 결과적으로 process를 생성하고 switch하는 비용보다 thread를 생성하고 switch하는게 더 빠르고 효율적이다.
Multi-threading의 장점
- Cheap
- Improves program structure : 크기가 큰 테스크를 여러 thread로 쪼개는게 가능하다.
- Throughput : I/O 작업을 겹쳐서 연산을 진행하기 때문에 처리율이 높다.
- Responsiveness : 동시에 여러 이벤트를 처리가 가능하다.
- Resource sharing
- Utilization of multi-core architectures
Thread Interface
Pthreads(POSIX Threads) : POSIX standard로서 thread 생성하는 표준 API이다.
3. Thread Implement
3.1 Kernel-level Threads
OS 가 Thread를 관리하는 방식이다. 모든 Thread가 커널에서 구현되며 관리를 하기 위한 system call이 필요하다. 이전에 설명했듯이 process의 생성보다 thread의 생성이 더 비용이 적게든다.
단점
Thread의 연산이 모두 system call로 이루어 지기 때문에 여전비 비용이 비싸디. 그리고 thread 마다 커널에 상태를 알고 있어야 하고 OS가 항상 thread에 대한 관리를 해야한다.
3.2 User-level Thread
User space에서 thread를 관리하며 OS는 thread를 볼수없다. 10~100배 정도 kernel-level 보다 속도가 빠르다.
단점
User level에서 thread를 관리하기 때문에 OS가 잘못된 결정을 하는 문제가 발생하며 multi-core CPU에서는 사용이 불가능하다.
4. Threading Model
- One-to-One(1:1) => kernel-level thread
- Many-to-One(N:1) => user-level thread
- Many-to-Many(M:N)
'OS' 카테고리의 다른 글
[OS(운영체제)] Virtual Memory Swapping (0) | 2024.08.29 |
---|---|
[OS(운영체제)] Concurrency: Locks (2) | 2024.08.28 |
[OS(운영체제)] TLB (Translation Lookaside Buffer) (0) | 2024.08.27 |
[OS(운영체제)] Advanced Page Tables (0) | 2024.08.26 |
[OS(운영체제)] Paging (0) | 2024.08.26 |