찬란
스레드 (Thread) 관리 본문
해당 블로그의 내용은 학교에서 배운 내용을 개인적으로 정리한 내용이므로, 잘못된 부분이 있을 수도 있습니다.
프로세스 (Process)와 스레드 (Thread)
자원은 프로세스에 할당되고,
프로세스는 자원을 제어함.
프로세스와 스레드의 차이
프로세스(Process)
- 실행중에 있는 프로그램
- 운영체제가 수행하는 가장 작업의 단위
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스 (독립적인 개체)
- *인스턴스(instance): 추상적인 개념을 바탕으로 소프트웨어에 구현된 구체적인 실체
- 스케줄링의 대상이 되는 작업(task)과 같은 의미
- 프로세스 내부에는 최소 하나의 스레드(Thread)를 가지고 있음. 실제로 스레드 단위로 스케줄링을 함
- 하드 디스크에 있는 프로그램을 실행하면, 실행을 위해서 메모리 할당이 이루어지고, 실행을 위해서 메모리 할당이 이루어지고, 할당된 메모리 공간으로 이진(binary)코드가 올라가게 된다. 이 순간부터 프로세스라 불린다.
- 프로세스의 문맥 (Context)
- CPU의 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 register
- 프로세스의 메모리 영역
- Code 영역
- 실행할 프로그램의 코드나 명령어들이 기계어 형태로 저장된 영역.
- CPU는 Code 영역에 저장된 명령어들을 하나씩 처리한다.
- Data 영역
- 코드에서 선언한 전역 변수와 정적 변수가 저장되는 영역이다.
- 프로그램이 실행되면서 할당되고 종료되면서 소멸한다
- Stack 영역
- 함수 안에서 선언된 지역변수, 매개변수, 반환값 등이 저장된다.
- 함수 호출 시 기록되고, 종료되면 제거한다.
- Heap 영역
- 관리가 가능한 데이터 이외의 다른 형태의 데이터를 관리하기 위한 자유 공간
- Code 영역
스레드 (Thread)
프로세스 하나만을 사용해서 프로그램을 실행하기엔 메모리의 낭비가 발생한다.
스레드는 프로세스와 다르게, 스레드 간 메모리를 공유하며 작동한다.
즉, 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위.
= 하나의 프로세스 내에서 동시에 진행되는 작업 갈래
스레드는 운영체제의 스케줄러에 의해 독립적으로 관리될 수 있는 프로그래밍된 명령어의 가장 작은 시퀀스
- 스레드가 독립적으로 가지고 있는 부분
- program counter = 실행 흐름
- register set
- stack space
- 스레드가 다른 스레드와 공유하는 부분 (=task)
- code 영역
- data 영역
- OS 자원들
스레드는 메모리를 서로 공유할 수 있다.
프로세스가 할당받은 메모리 영역 내에서 Stack 영역은 각 스레드가 따로 할당받고,
나머지 Code/Data/Heap 영역은 할당된 메모리 영역을 공유한다.
따라서, 각각의 스레드는 별도의 스택을 가지고 있지만 힙 메모리는 서로 읽고 쓸 수 있게 된다.
스레드의 장점
- 사용자 응답성 (Responsiveness)
- 일부 스레드의 처리가 지연되어도 다른 스레드는 작업을 계속 처리 가능
- 자원 공유 (Resource sharing)
- 자원을 공유해서 효율성 증가
- 커널의 개입을 피할 수 있음
- 경제성 (Economy)
- 프로세스의 생성, context switch에 비해 효율적
- 멀티 프로세서 활용 (Multi-processor)
- 병렬처리를 통해 성능 향상
스레드 구현
사용자 수준 스레드 (User Thread)
- 사용자 영역의 스레드 라이브러리로 구현됨
- 스레드의 생성, 스케줄링 등
- 커널은 스레드의 존재를 모름
- 커널의 관리(개입)를 받지 않음
- 생성/관리의 부하가 적음, 유연한 관리 가능
- 이식성(portability) 높음
- 커널은 프로세스 단위로 자원 할당
- 하나의 스레드가 block 상태가 되면, 모든 스레드가 대기
- (single-threaded kernel의 경우)
- 커널의 관리(개입)를 받지 않음
커널 수준 스레드 (Kernel Threads)
- OS(Kernel)가 직접 관리
- 커널 영역에서 스레드의 생성, 관리 수행
- Context switching 등 Overhead가 큼
- 커널이 각 스레드를 개별적으로 관리
- 프로세스 내 스레드들이 병핼 수행 가능
- 하나의 스레드가 block상태가 되어도 다른 스레드는 작업 수행 가능
- 프로세스 내 스레드들이 병핼 수행 가능
Multi - Threading Model
다대일 (n:1) 모델
- 사용자 수준 스레드
일대일 (1:1) 모델
- 커널 수준 스레드
다대다 (n:m) 모델
- 혼합형 스레드
혼합형 (n:m) 스레드
- n개 사용자 수준 스레드 - m개의 커널 스레드 (n > m)
- 사용자는 원하는 수만큼 스레드 사용
- 커널 스레드는 자신에게 할당된 하나의 사용자 스레드가 block 상태가 되어도 다른 스레드 수행 가능
= 병행 처리 가능
- 효율적이면서도 유연함
'운영체제' 카테고리의 다른 글
프로세스 동기화 & 상호배제 (Synchronization & Mutual exclusion) (0) | 2023.04.15 |
---|---|
프로세스 스케줄링 (Process Scheduling) (1) | 2023.04.15 |
프로세스 관리(Process Managemenet) (0) | 2023.04.14 |
운영체제에 대하여 (0) | 2023.04.14 |
컴퓨터 시스템 (0) | 2023.04.14 |
Comments