프로세스에 이어 스레드에 대해 정리하도록 하겠다.
1. 스레드(Thread)의 개념
스레드는 프로세서(CPU) 활용의 기본 단위이다. 프로세스의 제어 요소 외의 코드, 데이터 및 자원들은 프로세스의 다른 스레드들과 공유한다. 아래의 그림으로 예를 들어보자.
아래 중앙의 동그라미는 워드 문서를 편집하는 프로세스이다. 한 프로세스 안에 여러 개의 스레드가 존재하는데, 어떤 스레드는 입력과 관련된 제어, 다른 스레드는 문서에 이미지나 텍스트는 보여주는 스레드, 또 다른 하나는 데이터를 저장하는 스레드이다. 만약 스레드가 하나였다면 어떻게 되었을까? 편집기에 "안녕하세요"를 입력하려고 한다. 키보드로 "ㅇ"을 치면 입력에 응답하는 스레드가 일을 할 것이고, 그 때 동안 워드 문서창은 일을 못 한다(스레드가 키보드 입력 일을 하고 있으니깐). ㅇ 입력이 완료되고 나서 문서에 ㅇ이 출력될 것이고, 화면에 문자가 나오기 전까지 또 키보드는 일을 할 수 없게 된다. 생각만 해도 겁나 답답하다. 즉 하나의 프로세스에 여러 스레드가 일을 하면서 단일 스레드일 때보다 더 효율적으로 일을 할 수 있게 된다.
| 스레드의 장점
- 사용자 응답성(Responsiveness)
일부 스레드의 처리가 지연되어도 다른 스레드는 작업을 계속 처리할 수 있음 - 자원 공유(Resource sharing)
자원을 공유해서 효율성 증가(커널의 개입 피할 수 있음 -> 성능 향상) - 경제성(Economy)
프로세스의 생성, context switch에 비해 효율적 - 멀티 프로세서(Mulit-processor) 활용
병렬 처리를 통해 성능 향상
2. 사용자 수준 스레드(User Threads)
User thread는 사용자 영역의 스레드 라이브러리로 구현된다. 이 때 커널은 스레드의 존재를 모른다. 즉 커널의 관리를 받지 않게 되므로 생성 및 관리의 부하가 적고 유연한 관리가 가능하다.
하지만 커널은 프로세스 단위로 자원을 할당하기 때문에, 만약 프로세스에서 하나의 스레드가 block된다면 모든 스레드가 대기 상태가 된다.
3. 커널 수준 스레드(Kernel Threads)
Kernel threads는 운영체제가 직접 관리를 하며 커널 영역에서 스레드의 생성, 관리를 수행한다.
커널이 각 스레드를 개별적으로 관리하기 때문에 프로세스 내 스레드들이 병행적으로 일을 할 수 있다. 즉 하나의 스레드가 block되어도 다른 스레드들은 계속 작업할 수 있다.
그러나 커널에서 스레드를 수행하기 때문에 스레드가 변경될 때마다 context switching이 일어나 overhead가 커진다(성능 떨어짐).
유저 스레드, 커널 스레드 모두 장단점이 뚜렷하다. 이를 해결하기 위해 혼합형(n:m) 스레드가 있다.
4. 혼합형(n:m) 스레드
n개의 사용자 수준 스레드 - m개의 커널 스레드 (n > m)
사용자는 원하는 수만큼 스레드를 사용할 수 있고, 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block상태가 되어도 다른 스레드는 수행 가능하다(병행처리 가능). 즉 효율적이면서 유연하다.
'개발자 도전기 > [OS] 운영체제 개념 익히기' 카테고리의 다른 글
운영체제(Operating System) | 메모리(Memory) (0) | 2021.10.26 |
---|---|
운영체제(Operating System) | 프로세스 관리 (0) | 2021.09.28 |
운영체제(Operating System) | 운영체제 개요 (0) | 2021.09.28 |
댓글