프로세스와 스레드
프로세서가 하는일 자원을 할당받아서 원하는 목적을 달성함
프로세서는 자원과 제어라는 두가지 요소로 나누어 생각해 볼 수 있는데
제어 부분만 분리해 놓는것을 이를 스레드 라고 한다.
하나의 프로세스안에 스레드는 여러개 있을 수 있다
= 하나의 프로세스 안에 제어는 여러개 있을 수 있다.
지역데이터: 그 안에서만 사용할 수 있는 데이터이다. 지역 데이터는 제어를 하기위해 사용 지역 데이터는 스택에 저장됨
프로세스는 할당 받은 자원을 공유한다. 한 프로세스 안에 여러개의 스레드가 존재 할 수 있다.
어떤 프로세스에게 메모리가 할당된 공간에 프로세스들은 스레드들은 동일한 주소 공간을 공유한다.
각 스레드마다 자신에게 할당된 스택 영역(작업 영역)을 가지게 되고 지역데이터를 만들고 그 안에서 작업을 한다.
스레드 안에서 작업한 내용을 코드 영역의 PC를 통해 기록한다.
스레드
- Light Weight Prcoess(LWP)
- 프로세서 활용의 기본단위
- 구성요소 : Thread ID, Register set(PC, SP 등), Stack
- 제어 요소 외 코드, 데이 터, 및 자원들은 프로세스 내 다른 스레들과 공유
- 전통적 프로세스 = 단일 스레드 프로세스
Single-thread VS Multi-threads
제어요소 하나
제어요소 여러개
스레드의 장점
- 사용자 응답성(Responsiveness) : 일부 스레드의 처리가 지연되어도, 다른 스레드는 작업을 계속 처리 가능
- 자원 공유(Resource sharing) : 자원을 공유해서 효율성 증가 (커널의 개입을 피할 수 있음)
프로세스1,2가 A라는 자원을 공유한다고 가정하자 그러면 프로세스1이 사용중일때 프로세스2는 A자원을 사용하지 못한다. 프로세스가 번갈아가면서 A자원을 사용한다하면 이는 Context switch이다.
- 경제성(Economy) : 프로세스의 생성, 문맥 교환에 비해 효율적
- 멀티 프로세서(Multi-Processor) 활용 : 병렬 처리를 통해 성능 향상
스레드 사용의 예
컴퓨터 게임을 하기 위해 모니터(화면출력), 마우스(사용자입력), 스피커/마이크가 실행되고 있다고 가정하자
단일 스레드만 있을 때 예를들자면 화면출력중 적이 나타나 마우스를 돌리면 화면이 꺼지고 마우스 돌리는 동작이 끝나고 화면이 커진다고 가정하자 게임을 제대로 할 수 없을 것이다. 상대의 총소리를 스피커로 들릴 때 화면이 꺼지고 마우스가 먹지 않는다면 원활하게 게임을 할 수 없다. 그렇다면 이를 해결하기 위해 단일 스레드가 아닌 다중 스레드로 각 작업을 할당하고 자원을 공유하는 방식으로 사용하면 어느 작업이 실행될 때 다른 작업이 멈추지 않게 되고 동시에 작업을 처리하기 때문에 게임을 원활히 할 수 있을 것이다.
스레드의 구현
사용자 수준 스레드 (User Threads) (n:1매핑)
사용자가 프로세스를 생성하면 커널은 프로세스를 제어하기 위한 스레드를 만든다.
내부적으로 라이브러리를 통해서 여러개의 스레드를 사용하는 것처럼 나타냄.
- 사용자 영역의 스레드 라이브러리로 구현 됨
- 커널은 스레드의 존재를 모름
- 따라서 커널의 관리를 받지 않아 생성 및 관리의 부하가 적고, 유연한 관리가 가능하며, 이식성이 높음
- 그러나 커널은 프로세스 단위로 자원이 할당하므로, 커널쪽엔 단일 스레드가 생성되기 때문에 하나의 스레드가 block 상태가 되면 모른 스레드가 대기 상태가 된다.
커널 수준 스레드 (Kernel Threads) (1:1매핑)
- OS(Kernel)가 직접 관리
- 커널 영역에서 스레드의 생성, 관리 수행(Context Switching 등 오버헤드가 큼)
- 커널이 각 스레드를 개별적으로 관리(하나의 스레드가 block 상태가 되어도, 다른 스레드는 계속 작업 수행 가능)
혼합형 스레드 (n:m 매핑)
- n개의 사용자 수준 스레드 - m개의 커널 스레드 (n>m)
- 사용자는 원하는 수만큼 스레드를 사용
- 커널 스레드는 자신에게 할당된 하나의 사용자가 스레드가 block 상태가 되어도, 다른 스레드 수행 가능
- 효율적이면서 유연함
본 포스트는 KOREATECH의 HPC LAB. Duksu Kim 교수님 OS강의를 기반으로 정리한 내용입니다.
상업적 의도가 아닌 공부한 것을 정리해 놓은 목적으로 게시한 포스트입니다.
아래의 출처에서 자세한 내용을 수강하실 수 있습니다.
https://www.youtube.com/playlist?list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN
'CS > OS' 카테고리의 다른 글
[OS] 5-2. 프로세스 스케줄링 알고리즘 - FCFS, RR (0) | 2022.03.16 |
---|---|
[OS] 5-1. 프로세스 스케줄링 (Process Scheduling) (0) | 2022.03.13 |
[OS] 3-2. 프로세스 관리(Interrupt, Context Switching) (0) | 2022.03.09 |
[OS] 3-1. 프로세스 관리 (프로세스 정의, 종류, 상태) (0) | 2022.03.08 |
[OS] 2. OS개요, 운영체제 역할, 구조 (0) | 2022.03.07 |