Windows에서의 프로세스와 쓰레드
- 프로세스A와 프로세스B가 있으며, 프로세스A는 3개의 쓰레드, 프로세스B는 2개의 쓰레드가 있다면,
- 프로세스A의 쓰레드1,2가 동시 실행 중이면 쓰레드3은 Block상태 즉, I/O연산 중에 있거나 우선순위가 낮기 때문
- 쓰레드와 프로세스를 구분하기는 어렵지만 '프로세스 내에 존재하는 실행의 흐름'으로 간주
- 쓰레드는 메인 코드가 있으며 독립된 스택 영역을 사용
- 실행 흐름의 주체는 프로세스가 아니라 쓰레드(메인 함수 호출 또한 메인 쓰레드에 의해 실행 됨)
- 쓰레드가 실행할 수 있는 환경을 제공해주는 것이 프로세스이며, 그 환경 안에서 쓰레드가 동작
쓰레드 구현 모델에 따른 구분
Kernel Level Thread와 User Level Thread
O.S는 멀티 프로세스를 지원 여부로 나뉘며, 또한 쓰레드를 지원 여부로 나뉨
ex) OS1: 쓰레드 지원X, OS2: 쓰레드 지원O
- 쓰레드를 지원한다는 것은 커널 레벨에서 커널이 쓰레드 기능을 제공함을 의미
- OS1은 쓰레드 기능을 지원하지 않기 때문에 쓰레드를 라이브러리 형태로 제공하여 사용
- OS2는 커널이 제공하는 API 형태의 쓰레드를 사용
커널 레벨 쓰레드 | 유저 레벨 쓰레드 | |
쓰레드 | 커널이 제공하는 API 형태의 쓰레드를 사용 | 라이브러리 형태로 제공하여 사용 (유저가 만들어 사용하는 쓰레드) |
모든 라이브러리는 유저 영역에 포함 | ||
쓰레드 관리 | 커널이 직접 쓰레드의 정보를 가지고 관리 | 커널은 쓰레드의 정보를 알지 못하며 단지 프로세스만을 관리 |
스케줄러가 직접 관리하기에 모든 실행 중인 쓰레드들은 우선순위나 모든 조건이 동일하다면 1/n의 실행 시간을 할당받게 됨(쓰레드A,B,C 모두 1/3씩 할당) | 프로세스에게 할당받은 시간 내에서 쓰레드들이 나눠 사용할 수 있기에 모든 쓰레드가 동일한 실행 시간을 할당받지 못하게 됨(쓰레드A,B는 1/4이 할당, 쓰레드C는 1/2이 할당) | |
처리 속도 | 상대적으로 처리 속도가 느림 | 처리 속도가 빠르다 |
장점 | 커널이 직접 제공해 주기 때문에 안정성과 다양한 기능성 제공 | 유저 모드에서 커널 모드로의 전환이 필요 없음 |
단점 | 유저 모드에서 커널 모드로의 전환이 빈번 | 프로세스 단위 블로킹이 되면 프로세스 내 모든 쓰레드가 함께 블로킹 |
커멀 모드와 유저 모드
- 커널 영역에 커널 코드가 맵핑
- 유저 영역에 사용자의 실행 프로그램의 코드가 맵핑
- 두 영역은 엄격하게 구분되지 않기에 커널 모드와 유저 모드를 따로 두어 커널 모드에서는 모든 영역에 접근이 가능하나 유저 모드에서는 커널 영역에 접근이 불가하게 함
ex) 커널 모드 동작: 스케줄러 동작할 때, 프로세스 생성할 때 등
커널 레벨 쓰레드가 상대적으로 처리 속도가 느린 이유
- 커널은 쓰레드를 관리해야 하며, 쓰레드 간의 CS(Context Switching)이 일어날 때마다 커널모드로 변경해야 함(기능↑ 속도↓)
- 유저 레벨 쓰레드에서 커널은 관리대상이 큰 단위인 프로세스를 관리할 때에만 커널모드로 변경하기에 상대적으로 빠름(기능↓ 속도↑)
'시스템 프로그래밍' 카테고리의 다른 글
12-2. 쓰레드의 성격과 특성 (0) | 2022.06.07 |
---|---|
12-1. Windows에서의 쓰레드 생성과 소멸 (0) | 2022.06.02 |
11-1. 프로세스와 쓰레드 (0) | 2022.05.31 |
10-3. 호출 규약과 실행의 이동 (0) | 2022.05.25 |
10-2. 함수 호출 인자의 전달과 PUSH & POP 명령어 디자인 (0) | 2022.05.25 |