일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- javascirpt
- CORS
- classlist
- jquery
- display
- eslint
- 인덱스
- archiver
- Vue
- eslint prettier
- vue2
- loop:true
- v-bind
- querySelector
- slidePerGroup
- slideChange
- realIndex
- prettier
- index
- watchOverflow
- js
- slidePerView
- error
- activeIndex
- css
- centerSlides
- JavaScript
- swiper
- swiperOption
- vscode
- Today
- Total
코딩하는 둥둥
[ 쉽게 배우는 운영체제 ] 3-4. 스레드 본문
스레드의 개념
스레드의 정의
프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위이다.
* 작업의 크기
- 상대적인 크기 순 : job > task > operation
- 프로세스와 스레드의 관계에 대입 : 처리(job) > 프로세스(task) > 스레드(operation)
여러 개의 스레드가 모여 프로세스를 이루고 여러 개의 프로세스가 모여 처리가 되며, 여러 개의 프로세스를 모아서 한 번에 처리하는 방법을 일괄 작업 batch job이라고 한다. 프로세스와 스레드의 차이
프로세스와 스레드의 차이
프로세스끼리는 약하게 연결되어있는 반면 스레드끼리는 강하게 연결되어있다.
스레드 관련 용어
- 멀티스레드 : 프로세스 내 작업을 여러 개의 스레드로 분할 함으로써 작업의 부담을 줄이는 프로세스 운영 기법이다.
- 멀티태스킹 : 운영체제가 CPU에 작업을 줄 때 시간을 잘게 나누어 배분하는 기법이다. 이렇게 여러 스레드에 시간을 잘게 나누어주는 시스템을 시분할 시스템이라고 한다. 시분할 시스템에서 운영체제가 CPU에 전달하는 작업은 프로세스가 아니라 스레드이다.
- 멀티프로세싱 : 여러개의 CPU 혹은 하나의 CPU 내 여러 개의 코어에 스레드를 배정하여 동시에 작동하는 것이다. 네트워크로 연결된 여러 컴퓨터에 스레드를 나누어 협업하는 분산 시스템도 멀티프로세싱이라고 부른다.
- CPU 멀티스레드 : 한번에 하나씩 처리해야 하는 스레드를 파이프라인 기법을 이용하여 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법이다.
멀티스레드는 운영체제가 소프트웨어적으로 프로세스를 작은 단위의 스레드로 분할하여 운영하고, CPU 멀티스레드는 하드웨어적인 방법으로 하나의 CPU에서 여러 스레드를 동시에 처리하는 병렬 처리 기법이다.
멀티스레드의 구조와 예
멀티스레드의 구조
비슷한 일을 하는 두개의 프로세스를 만들 경우 코드 일부, 프로세스 제어 블록, 공유 변수가 메모리의 여러 곳에 중복되어 메모리가 낭비되는데, 스레드는 이러한 멀티태스킹의 낭비 요소를 제거하기 위해 사용한다.
비슷한 일을 하는 2개의 프로세스를 만드는 대신 코드, 데이터 등을 공유하면서 여러 개의 일을 하나의 프로세스 내에서 하는 것이다.
fork() 시스템 호출로 여러 개의 프로세스를 만들면 필요 없는 정적 영역이 여러 개가 된다. 이 문제를 해결하기 위해 하나의 프로세스 내에 여러 개의 스레드를 생성하는 멀티스레드는 코드, 파일 등의 자원을 공유함으로써 자원의 낭비를 막고 효율성을 향상한다. 이런 의미에서 스레드는 가벼운 프로세스 Light Weight Process; LWP라고 부르며, 반대로 스레드가 1개인 일반 프로세스는 무거운 프로세스 Heavy Weight Process; HWP라고 부른다.
* 프로세스의 영역
정적인 영역 : 프로세스가 실행되는 동안 바뀌지 않는 영역이다.
동적인 영역 : 스레드가 작업을 하면서 값이 바뀌거나 새로 만들어지거나 사라지는 영역이다. 대표적인 예로 레지스터 값, 스택, 힙 등이 있다.
멀티스레드의 장단점
멀티스레드의 장점
- 응답성 향상 : 한 스레드가 입출력으로 인해 작업이 진행되지 않더라도 다른 스레드가 작업을 계속하여 사용자의 작업 요구에 빨리 응답할 수 있다.
- 자원 공유 : 한 프로세스 내에서 독립적인 스레드를 생성하면 프로세스가 가진 자원을 모든 스레드가 공유하게 되어 작업을 원활하게 진행할 수 있다.
- 효율성 향상 : 여러개의 프로세스를 생성하는 것과 달리 멀티스레드는 불필요한 자원의 중복을 막음으로써 시스템의 효율이 향상된다.
- 다중 CPU 지원 : 2개 이상의 CPU를 가진 컴퓨터에서 멀티스레드를 사용하면 다중 CPU가 멀티스레드를 동시에 처리하여 CPU 사용량이 증가하고 프로세스의 처리 시간이 단축된다.
멀티스레드의 단점
멀티스레드의 경우 모든 스레드가 자원을 공유하기때문에 한 스레드에 문제가 생기면 전체 프로세스에 영향을 미친다.
반면, 프로세스를 여러개 만드는 방식의 경우 각 프로세스가 독립적이기 때문에 한 프로세스의 문제가 다른 프로세스로 전달되지 않는다.
멀티스레드 모델
- 커널 스레드 kernel thread : 커널이 직접 생성하고 관리하는 스레드이다.
- 사용자 스레드 user thread : 라이브러리에 의해 구현된 일반적인 스레드이다.
사용자 스레드 user-level thread
운영체제가 멀티스레드를 지원하지 않을때 사용하는 방법으로 초기의 스레드 시스템에서 이용되었다.
사용자 레벨에서 스레드를 구현하기때문에 관련 라이브러리를 사용하여 구현하며, 라이브러리는 커널이 지원하는 스케줄링이나 동기화 같은 기능을 대신 구현해준다. 그러므로 커널 입장에서 이 스레드는 하나의 프로세스처럼 보인다.
사용자 스레드는 커널 입장에서는 일반 프로세스이지만 커널이 하는 일을 라이브러리가 대신 처리하여 여러개의 스레드를 작동한다. 따라서 사용자 프로세스 내에 여러 개의 스레드가 존재하지만 커널의 스레드 하나와 연결되기 때문에 1 to N 모델이라고 부른다.
라이브러리가 직접 스케줄링을하고 작업에 필요한 정보를 처리하기 때문에 문맥 교환이 필요 없어 속도가 빠르다.
사용자 스레드의 단점
- 여러개의 스레드가 하나의 커널 스레드와 연결되기 때문에 커널 스레드가 입출력 작업을 위해 대기상태에 들어가면 모든 사용자 스레드가 같이 대기하게 된다.
- 한 프로세스의 타임 슬라이스를 여러 스레드가 공유하기때문에 여러 개의 CPU를 동시에 사용할 수 없다.
- 커널 레벨에서 공유 변수를 보호하는 장치가 있으나 이러한 서비스를 라이브러리에서 구현해야 하기 때문에 보안에 취약하다.
커널 스레드 kernel thread
커널이 멀티 스레드를 지원하는 방식으로, 하나의 사용자 스레드가 하나의 커널 스레드와 연결되기때문에 1 to 1 모델이라고 부른다.
커널 스레드는 독립적으로 스케줄링이 되므로 특정 스레드가 대기 상태에 들어가도 다른 스레드는 작업을 계속할 수 있다.
커널이 제공하는 보호 기능과 같은 모든 기능을 사용할 수 도 있다.
커널 스레드의 단점
문맥교환을 할 때 오버헤드 때문에 느리게 작동한다.
멀티 레벨 스레드 multi-level thread
하이브리드 스레드 hybird thread라고도 부른다.
멀티레벨멀티 레벨 스레드는 사용자 스레드와 커널 스레드를 혼합한 방식이므로 M to N 모델이라고 부른다. 사용자 스레드에서는 커널 스레드의 개수가 사용자 스레드보다 적기 때문에 멀티 레벨 스레드에서는 커널 스레드의 개수가 사용자 스레드보다 같거나 적다.
멀티 레벨 스레드의 장점
하나의 커널 스레드가 대기상태에 들어가면 다른 커널 스레드가 대신 작업을 하여 사용자 스레드보다 유연하게 작업을 처리 할 수 있다.
멀티 레벨 스레드의 단점
커널 스레드를 같이 사용하기 때문에 문맥 교환 시 오버헤드가 있어 사용자 스레드만큼 빠르지 않다.
'Computer Science > 쉽게 배우는 운영체제' 카테고리의 다른 글
[ 쉽게 배우는 운영체제 ] 4-1. 스케줄링의 개요 (0) | 2022.07.21 |
---|---|
[ 쉽게 배우는 운영체제 ] 3-5. 동적 할당 영역과 시스템 호출 (0) | 2022.07.21 |
[ 쉽게 배우는 운영체제 ] 3-3. 프로세스의 연산 (0) | 2022.07.20 |
[ 쉽게 배우는 운영체제 ] 3-2. 프로세스 제어 블록과 문맥 교환 (0) | 2022.07.19 |
[ 쉽게 배우는 운영체제 ] 3-1. 프로세스의 개요 (0) | 2022.07.19 |