티스토리 뷰
스레드(Thread)의 개념
- 프로세스는 자원을 할당 받아서 그 1. 자원을 2. 제어하여 작업을 한다. 그 중 제어하는 부분을 스레드 라고 한다.
- 프로세스는 여러 자원을 할당 받아 제어하므로 하나의 프로세스에 여러 스레드가 있다.
- 한 프로세스 안에 자원을 공유하는 스레드가 여러개가 존재할 수 있다.
리소스(자원)
- 코드 : 프로그램 코드, 프로그램 카운터(어디를 실행 중인지 가리키고 있는 정보)의 정보를 가지고 자원에 접근
- 전역 데이터 : 작업을 하기위해 사용할 데이터
- 힙(Heap) : 프로세스가 사용하는 메모리공간(전역적으로 사용하는 데이터)
제어
- 제어정보 : PC(어디를 실행하는지), 상태정보, SP(stack pointer)
- 지역데이터 : 제어를 위해 사용
- 스택(stack) : 지역데이터가 저장되는 공간
- 같은 프로세스의 스레드들은 동일한 주소 공간을 공유
- 각 스레드마다 할당된 작업영역(스택영역)을 사용하여 지역데이터를 생성하고 작업
스레드(Thread)
- Light Weight Process (LWP)
-> 프로세스는 자원 + 제어, 스레드는 공유자원 + 제어 이기 때문에 가벼운 프로세스 라고 한다. - 프로세서(e.g, CPU) 활용의 기본 단위
-> 스레드가 여러개이면 동시에 여러 CPU를 사용할 수 있다. - 구성요소
- Thread ID
- Register set (PC 등)
- Stack (i.e. local data)
- 제어 요소 외 코드, 데이터 및 자원들은 프로세스의 다른 스레드 들과 공유
- 전통적 프로세스 = 단일 스레드 프로세스
스레드 장점
사용자 응답성 (Responsiveness)
- 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능
자원 공유 (Resource sharing)
- 두 프로세스가 같은 자원을 사용한다고 가정하면 하나의 프로세스가 자원을 사용하고 있는 동안 나머지 프로세스는 대기하고 있어야한다(번갈아서 사용) -> Context Switching이 발생하므로 비효율적
- 스레드는 자원을 공유해서 효율성 증가 (커널의 개입을 피할 수 있음)
- 예) 동일 address space에서 스레드 여러 개
경제성 (Economy)
- 프로세스의 생성, context switch에 비해 효율적
멀티 프로세서(multi-processor) 활용
- 병렬처리를 통해 성능 향상
스레드 사용의 예
스레드(Thread)의 구현
사용자 수준 스레드 (User threads)
- 사용자 영역의 스레드 라이브러리로 구현 됨
- 스레드의 생성, 스케줄링 등
- POSIX threads, Win32 threads, Java thread API 등
- 커널은 스레드의 존재를 모름
- 커널의 관리(개입)를 받지 않음
- 생성 및 관리의 부하가 적음, 유연한 관리 가능
- 이식성(portability)이 높음
- 커널은 프로세스 단위로 자원 할당 (커널 수준의 스레드가 하나)
- 하나의 스레드가 block 상태가 되면, 모든 스레드가 대기 (single-threaded kernel의 경우)
- 커널의 관리(개입)를 받지 않음
커널 수준 스레드 (Kernel threads)
- OS(Kernel)이 직접 관리
- 커널 영역에서 스레드의 생성, 관리 수행
- Context switching 등 부하(Overhead)가 큼
- 커널이 각 스레드를 개별적으로 관리
- 프로세스 내 스레드들이 병행 수행 가능
- 하나의 스레드가 block 상태가 되어도, 다른 스레드는 계속
작업 수행 가능
Language-level Threads
- Java threads
- Java Virtual Machine (JVM)에 의해 생성 관리 됨
- Middleware-level threads
Multi-Threading Model
- 다대일(n:1) 모델 : 사용자 수준 스레드
- 일대일(1:1) 모델 : 커널 수준 스레드
- 다대다(n:m) 모델 : n > m , 혼합형 스레드
혼합형 (n:m) 스레드
- n개 사용자 수준 스레드 – m개의 커널 스레드 (n > m)
- 사용자는 원하는 수만 큼 스레드 사용
- 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block 상태가 되어도, 다른 스레드 수행 가능
- 병행 처리 가능
- 효율적이면서도 유연함
강의
www.youtube.com/watch?v=YlnvCIZQDkw&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=7
'운영체제' 카테고리의 다른 글
프로세스 동기화 & 상호배제 #1 - Critical Section, Mutual exclusion primitives (0) | 2021.01.06 |
---|---|
프로세스 스케줄링 #2 - Basic Scheduling algorithms(FCFS, RR, SPN, SRTN, HRRN, MLQ, MFQ) (0) | 2021.01.03 |
프로세스 스케줄링 #1 - 목적, 기준, 단계, 정책 (0) | 2021.01.01 |
프로세스 관리 #2 - Interrupt, Context Switching (0) | 2020.12.30 |
프로세스 관리 #1 - Process, PCB, Process State (0) | 2020.12.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Replacement Strategies
- aop
- Spring
- gradle
- HDFS
- linux
- 빅데이터
- SQL
- SPARK
- vmware
- Free space management
- Variable allocation
- I/O Services of OS
- mapreduce
- Allocation methods
- springboot
- jdbc
- 빅데이터 플랫폼
- Disk Scheduling
- oracle
- Java
- hadoop
- Flume
- maven
- I/O Mechanisms
- JSON
- 하둡
- RAID Architecture
- Disk System
- File Protection
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함