* 해당 글은 윤성우의 뇌를 자극하는 윈도우즈 시스템 프로그래밍 도서를 읽고 정리한 글입니다
https://product.kyobobook.co.kr/detail/S000001223395
* 쓰레드가 실행할 수 있는 환경을 제공하는 것이 프로세스이고, 그 환경 안에서 스레드가 동작한다
* 멀티 프로세스 운영체제 기반 프로그램의 문제점과 대안
[문제] 빈번한 컨텍스트 스위칭(Context Switching)은 성능 저하를 유발
[해결책] 컨텍스트 스위칭에 소요되는 시간을 줄이기 위해 저장하고 복원하는 컨텍스트 정보의 개수를 줄이자
[탄생] 이 니즈를 통해 쓰레드가 만들어짐
* 쓰레드
하나의 프로그램 내에서 둘 이상의 실행 흐름을 두는 것
쓰레드들 사이에는 공유하는 요소들이 있고 때문에 컨텍스트 스위칭에 걸리는 시간이 프로세스보다 짧다
(1) 메모리 관점
- 스택을 독립적으로 할당
함수 호출시 필요한 메모리 영역
따라서, 실행 흐름의 추가를 위한 최소 조건이 독립된 스택을 제공한다
- 코드, 데이터, 힙 영역 공유
(2) Windows 관점
- 프로세스는 단순히 스레드를 담는 상자다
ㄴ 실제 프로그램의 흐름을 형성하는 것은 쓰레드다
- 프로세스는 상태를 지니지 않는다
ㄴ 상태를 지니는 것은 쓰레드다
- 실행의 중심에 있는 것은 프로세스가 아닌 쓰레드다
- Windows에서는 쓰레드가 존재하지 않는 프로세스란 있을 수 없다
ㄴ 프로세스 생성과 동시에 main 함수를 호출해 줄 쓰레드를 생성한다
* 커널 레벨(Kernel Level) 쓰레드
하나의 프로세스에서 할당된 총 메모리 공간 중에서 유저 영역을 제외한 나머지 영역을 커널영역이라고 한다
ㄴ 운영체제라는 하나의 소프트웨어를 실행시키기 위해서 필요한 메모리 공간을 커널 영역이라고 한다
[장점] 커널에서 직접 제공해주기 때문에 안정성과 다양한 기능성 제공
[단점] 유저모드와 커널모드로의 전환이 빈번하게 일어남에 따른 성능 저하
* 유저 레벨(User Level) 쓰레드
사용자에 의해서 할당되는 메모리 공간을 의미한다
ㄴ 코드영역, 데이터 영역, 스택 및 힙 영역을 가리켜 유저 영역이라고 한다
[장점] 유저 모드에서 커널 모드로 전환이 필요 없기 때문에 성능이 좋다
[단점] 커널에 의해 블로킹되면 프로세스 전부가 블로킹이 된다
'IT공부 > IT서적' 카테고리의 다른 글
[윤성우 열혈 C프로그래밍] 어셈블리 코드 - Chapter22, Chapter23 (0) | 2025.02.09 |
---|---|
[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 10장. 컴퓨터 구조 - 3 (0) | 2025.01.30 |
[윤성우 열혈 C프로그래밍] 디버깅 빌드, 어셈블리 코드 - Chapter21 (0) | 2025.01.30 |
[윤성우 열혈 C프로그래밍] 디버깅 빌드, 어셈블리 코드 - Chapter16, Chapter17, Chapter18, Chapter19 (0) | 2025.01.29 |
[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 9장. 스케줄링 알고리즘과 우선순위 (0) | 2025.01.28 |