스레드란 무엇인가?
웹 서버를 예시로 들어 설명할게요!
- 웹 서버(Web server)
- 웹 페이지를 제공하는 컴퓨터 프로그램
- 웹 서버는 한 번에 많은 클라이언트를 서비스해야 합니다.
- 웹 서버가 입출력(I/O) 작업을 수행하면?
- 블록될 것입니다.
- 다른 클라이언트의 요청을 처리할 수 없습니다.
- 동시 서비스(concurrent service)를 위해 많은 서버 프로세스가 필요합니다.
- 메모리 공간 낭비.
- 프로세스를 생성하는 동안 delay 발생.
- 스레드(Thread)가 필요합니다.
- Code, data, and resources를 공유할 수 있습니다.
- Register values and stacks은 공유할 수 없습니다.
Thread
- CPU utilization의 기본 단위
- 각 프로세스는 여러 스레드를 포함할 수 있습니다.
모든 프로세스의 스레드가 다음을 공유합니다.
- code, data, heap
- open files
- signal handlers
- working environment (현재 디렉터리, 사용자 ID 등)
각 스레드는 고유의 것을 가집니다. (공유하지 않는 것)
- stack
- register
- thread ID
Single and Multi-threaded processes
스레드 vs 프로세스
- fork를 사용한 새 프로세스 생성은 비용이 많이 듭니다.
- time & memory
- 스레드는 많은 메모리나 시작 시간(startup time)이 필요하지 않습니다.
- 때로는 lightweight process라고 합니다.
- 응답성(Responsiveness)
- 프로세스의 일부가 블록되더라도 계속 실행할 수 있습니다.
- 예: 웹 서버는 한 스레드에서 다른 웹 클라이언트를 서비스하면서 다른 스레드에서 파일을 로드할 수 있습니다.
- 리소스 공유(Resource Sharing)
- 메모리와 리소스를 공유할 수 있습니다.
- 경제성(Economy)
- 프로세스 생성 및 context switching에 대한 오버헤드가 낮습니다.
- 다중 프로세서 아키텍처(MP Architectures)의 활용
- 다중 프로세서 아키텍처에서의 병렬성(Parallelism)이 증가합니다.
Multicore Programming(멀티코어 프로그래밍)
- 멀티코어(multicore) 또는 멀티프로세서(multiprocessor) 시스템은 프로그래머에게 압박을 줍니다. 도전 과제는 다음과 같습니다:
- Dividing activities
- Balance
- Data splitting
- Data dependency
- Testing and debugging
- 병렬성(Parallelism)은 시스템이 동시에 둘 이상의 작업을 수행할 수 있음을 의미합니다.
- 동시성(Concurrency)은 진행 중인 하나 이상의 작업을 지원합니다.
- 단일 프로세서/코어에서 스케줄러가 동시성을 제공합니다.
- 단일 코어 시스템에서 동시 실행(Concurrent execution)
- 멀티코어 시스템에서 병렬성(Parallelism)
User threads vs. Kernel thread
User thread
- 사용자 수준의 쓰레드 라이브러리(user-level threads library)에서 지원됩니다.
- POSIX pthreads
- Win32 threads
- Java threads
Kernel thread
- 운영 체제에 의해 직접 지원되고 관리됩니다.
- Windows XP/2000
- Solaris
- Linux
- Mac OS X
Linux threads
- 쓰레드를 생성하기 위해 clone() system call이 사용됩니다.
- Linux는 프로세스와 쓰레드를 구분하지 않습니다.
clone 플래그 세트는 부모와 자식 간의 공유 정도를 결정합니다.
- 예시 1: clone(COLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND, 0)
- 쓰레드에 가깝습니다.
- 예시 2: clone(CLONE_SIGHAND, 0)
- 프로세스에 가깝습니다.
flag | meaning |
CLONE_FS | 파일 시스템 정보가 공유됩니다. |
CLONE_VM | 동일한 메모리 공간이 공유됩니다. |
CLONE_SIGHAND | 시그널 핸들러가 공유됩니다. |
CLONE_FILES | 열린 파일들이 공유됩니다. |
clone(CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND, 0)
'Computer Science > 운영체제' 카테고리의 다른 글
[운영체제] 06. Synchronization Tools (0) | 2024.06.19 |
---|---|
[운영체제] 05. CPU Scheduling (0) | 2024.06.19 |
[운영체제] 03. Process (0) | 2024.06.18 |
[운영체제] 02. Operating System Structures (0) | 2024.06.18 |
[운영체제] 01. Introduction to Operating System (0) | 2024.06.18 |