일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Go
- Django
- 정리
- 데브코스
- sql
- airflow
- 가상환경
- airflow.cfg
- http
- AWS
- HADOOP
- TIL
- PYTHON
- S3
- 자료구조
- 종류
- 데이터베이스
- 데이터 파이프라인
- 데이터 웨어하우스
- 컴퓨터 네트워크
- TCP
- 운영체제
- linux
- 파이썬
- Docker
- dockerfile
- 컴퓨터네트워크
- 데이터엔지니어링
- redshift
- 데이터 엔지니어링
- Today
- Total
홍카나의 공부방
[운영체제] Ch.4 쓰레드의 개념, 유저 쓰레드, 커널 쓰레드 본문
본 글은 김덕수 교수님의 2019년도 봄학기 운영체제(CPA310)
강의 내용을 바탕으로 요약 정리한 내용입니다.
https://sites.google.com/view/hpclab/courses/operating-system
Thread
프로세스는 시스템 콜 요청으로 OS로부터 자원(resources)을 할당받을 수 있고,OS로부터 자원을 할당 받으면 자원을 제어하기도 한다.이때, 전통적인 프로세스 개념에서는 각각의 프로그램들이 독립적으로 실행되기 때문에 자원을 공유하지 못한다.
이는 자원 낭비를 유발한다.예를 들어, 하나의 프로그램에서 여러 개의 작업이 동시에 실행되어야 할 때가 있는데이때 각각의 작업을 별도의 프로세스로 실행하면, 자원을 낭비하게 되는 꼴이다.(OS가 각각의 프로세스마다 메모리 공간 등을 할당한다고 생각해 보면 그때 발생하는 overhead가 커지는 것.)
여기서 쓰레드의 개념이 등장한다.쓰레드는 하나의 프로세스 안에서 자원은 공유하고, 각각의 제어요소를 갖는 작업 흐름을 의미한다.
하나의 프로세스에서는 여러 개의 쓰레드를 만들 수 있다.이때 같은 프로세스의 쓰레드들은 동일한 주소 공간을 공유하고, 자원도 공유한다.쓰레드의 구성요소로는 Thread ID, Register set, Stack 등이 존재한다.
쓰레드 사용의 장점으로는 자원을 공유하여 효율성이 증가한다는 점이다.우리가 저번 시간에 배웠듯이 프로세스들 사이에는프로세스를 번갈아서 할당받을 때마다(즉, 프로세스가 Running 상태로 전이될 때마다)Context Saving과 Restoring = Context Switching이 일어난다.
만약 쓰레드를 사용한다면, 쓰레드들은 같은 프로세스 내에서 실행되기 때문에쓰레드 간의 스택, 레지스터 값 등 일부 컨텍스트 정보만 변경하면 되므로 컨텍스트 스위칭이 적게 일어난다즉, 커널의 개입을 피할 수 있어서 Overhead의 부담이 작아진다.
그리고 일부 쓰레드의 처리가 지연되어도다른 쓰레드는 작업을 계속 처리할 수 있는 사용자 응답성 측면의 장점도 존재한다.
이러한 장점들 때문에 대부분의 프로그램은 Multi-Thread로 돌아간다.
사용자 수준 쓰레드(User Threads)
사용자 수준의 쓰레드는 사용자 영역의 쓰레드 라이브러리로 구현된다.쓰레드 라이브러리는 쓰레드의 생성, 스케쥴링 등을 담당한다.(Java thread API 등이 존재한다.)
쓰레드 라이브러리가 사용자 영역(user space)에 존재한다는 것은
커널 영역에 존재하지 않는다는 것이고 이는 커널이 Thread의 존재를 모른다는 뜻이 된다.
커널의 관리를 받지 않는다는 것은 overhead가 비교적 작아진다는 장점으로 이어진다.
커널은 프로세스 단위로 자원을 할당한다. ( 쓰레드의 존재를 모르니까 )
때문에 프로세스 하나가 block 상태가 되면, 그에 속한 모든 Thread들이 대기 상태로 똑같이 들어간다.
커널 수준 쓰레드(Kernel Threads)
커널 쓰레드는 OS가 직접 관리한다.
커널 영역에서 쓰레드가 생성되며 관리된다.
이는 User Thread에 비해 더욱더 많은 context switching과
system call을 불러일으켜 overhead가 크다는 뜻이 된다.
(여기서 Context Switching이 프로세스와 프로세스 사이에서 일어나는 것뿐만 아니라,
쓰레드와 쓰레드 사이에서도 일어난다는 것을 기억하자!)
쓰레드 간의 Context Switching은 PCB가 아닌 TCB가 왔다 갔다 한다.
TCB는 프로세스가 속한 메모리 주소 공간에 저장되기 때문에
TCB에 접근할 때 발생하는 overhead가 다른 PCB에 접근할 때 발생하는 overhead보다 작아지는 것이다.
Multi-Threading Model에서는
n개의 user thread와 m개의 kernel thread를 맵핑할 수 있는데
이때 커널 쓰레드는 자신에게 할당된 유저 쓰레드 하나가 block state가 되어도
다른 쓰레드의 작업을 수행할 수 있어 병행처리가 가능하다.
OS들이 실제로 사용하는 모델이기도 하다.
'Operating System' 카테고리의 다른 글
[운영체제] Ch.5-2 스케쥴링 알고리즘 (0) | 2023.03.24 |
---|---|
[운영체제] Ch.5-1 프로세스 스케쥴링의 목적, 기준, 단계, 정책 (0) | 2023.03.22 |
[운영체제] Ch.3 프로세스의 정의, 상태, state diagram, 인터럽트 (0) | 2023.03.18 |
[운영체제] Ch.2 운영체제의 역할, 구분, 구조, 기능 (0) | 2023.03.17 |
[운영체제] Ch.1 운영체제 정의, 레지스터, 메모리 종류, 캐시 (0) | 2023.03.16 |