LISTORY

[윈도우즈 시스템 프로그래밍] Windows에서의 프로세스와 스레드 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] Windows에서의 프로세스와 스레드

LiStoryTeller 2018. 7. 15. 00:27


뇌를 자극하는 윈도우즈 시스템 프로그래밍 책 관련 유투브 강의 정리이다.


이번 시간에 정리할 내용은 Windows에서의 프로세스와 스레드이다.


YouTube 주소 Windows에서의 프로세스와 스레드



Windows에서의 프로세스와 스레드


지난 시간에는 OS 관점에서 스레드를 이야기했다.


이번 시간에는 Windows 관점에서 이야기해보겠다.


이제까지 공부 스케줄러가 스케줄링하는 대상은 프로세스라고 배웠다.


하지만 실제로 windows에서 그 대상은 스레드이다.


상태정보또한 윈도우즈에서는 스레드가 가지고 있다. 


대부분의 OS 책에서는 상태정보를 프로세스가 가지고 있다고 설명하는데 이는 교과서적인? 이론 부분에서 설명한 것이고


윈도우즈에서는 스레드가 가지고 있다.


상태정보에 대해 살짝 복습해보자.


상태정보는 running blocked ready 세가지가 있다.


blocked상태는 대부분 IO 발생 시 발생한다.


스레드1 스레드2이  동시에 진행되는 와중에 스레드3이 동작 안된다면?


스레드3가 Blocked 상태이거나 또는 우선순위 낮기 때문에다. 


저번 시간에 배웠던 상태정보에 대한 모든 내용이 스레드에 적용된다고 보면 된다.



프로세스와 스레드를 배우다보면 이 둘의 경계가 불분명하다고 느낄 수 있다.


저번시간에 말했듯이 보편적으로 프로세스라 말할 수있는 부분은 할당되는 메모리 공간으로 이야기한다.


반면 스레드는 stack 이 독립된 메모리 공간이자 스레드의 실행 코드를 가지고 있다.


그렇다면 코드와 stack 만을 스레드라 이야기하는 것이 가능할까?


그럴수도 있겠지만 코드는 프로세스와 공유하므로 스레드는 이게 스레드라 말하기 좀 그렇다.


스레드를 설명하자면 스레드는 실행의 흐름이다라고 이야기하는 것이 부드럽다.


스레드는 실행의 흐름


스레드를 구성하는 것은 스레드의 메인 코드와 독립된 stack이다.


윈도우즈 관점에서 스레드는 프로세스 내에 존재하는 실행 흐름이라 할 수 있다.


실행 흐름 주체는 프로세스가 아니다. mian 함수 또한 main 스레드에 실행된다.


그렇다면 프로세스는 스레드를 담고있는 껍질에 지나지 않을까? 이건 좀 과격한 표현이다.


프로세스가 가지고 있는 데이터 , heap, 코드 영역은 스레드라 말할 수 없다. 


스레드가 실행할 수 있는 환경을 제공하는 것이 프로세스이다.


프로세스는 스레드가 실행할 수 있는 환경을 제공한다.



Comments