LISTORY

[윈도우즈 시스템 프로그래밍] 커널 오브젝트와 핸들의 종속관계(1) 본문

IT/윈도우 프로그래밍

[윈도우즈 시스템 프로그래밍] 커널 오브젝트와 핸들의 종속관계(1)

LiStoryTeller 2018. 6. 10. 17:53


뇌를 자극하는 윈도우즈 시스템 프로그래밍 YouTube 강의 정리이다.


이번 강의는 커널 오브젝트와 핸들의 종속관계에 대해서 이다.


⊙ YouTube 강의 ⊙ ☞ 커널 오브젝트와 핸들의 종속관계(1)



커널 오브젝트와 핸들의 종속관계


⊙ 커널 오브젝트와 핸들의 관계


프로세스 A가 프로세스 B를 생성하고 프로세스 B는 파일을 생성한다고 가정해보자


운영체제에선 어떤 일이 벌어질까?




프로세스 A가 생성되면 프로세스 A의 커널 오브젝트와 프로세스 A의 핸들 테이블이 생성된다.


UC란 프로세스에 접근 가능한 사용자의 수이다.




프로세스 A가 생성이 되면 프로세스 A에 의해 자기 자신의 커널 오브젝트에 접근 가능하다.


그러므로 여기서 UC는 1이다.



이제 프로세스 B를 생성한다. 프로세스가 생성되면서 커널 오브젝트도 생성된다.


그렇다면 여기서 UC는 몇이 될까? 여기서 UC는 2이다.


일단 프로세스B에 의해 접근가능하고, 프로세스 A가 프로세스 B를 생성하면서


프로세스 B 핸들값이 프로세스 A에게 반환된다.


즉, 프로세스 A는 프로세스 B에 접근할 수 있는 핸들 값을 갖게 되므로 B의 커널 오브젝트에 접근 가능하다.


여기서 핸들 값을 3으로 하면 자기 자신과 중복되므로 다른 값으로 주어야 한다.



핸들값이라는 것은 현재 프로세스 B는 자기 자신에게 접근할 때 3으로 접근하고


A가 접근할 땐 7로 접근한다.


핸들 값이라는 것은 프로세스 내부에서만 의미를 가진다는 것이다.


프로세스 A가 대상을 찾기위해 필요한 값이지 커널 오브젝트에 매핑된 값이 아니다.


즉, 핸들 값은 프로세스에 종속적이다.


이 말은 핸들 테이블 또한 프로세스에 종속적이라는 뜻이 된다.



UC에 대해 다시 한번 살펴보겠다.


지금, 프로세스 A의 커널오브젝트의 UC는 1, B는 2라고 하였다.


하지만 정말 프로세스 A의 UC가 1일까? 사실 UC는 2가 된다.


프로세스 A를 실행시킬때? 바탕화면이나 탐색기에서 더블클릭 또는 명령 프롬프트 상에서 실행할 수 있다.


즉, 프로세스 A를 실행 시킨 프로세스가 부모 프로세스이다.


부모 프로세스가 존재하며 이에 의해 실행되었기 때문에 UC는 2이다.


하지만 모든 리소스들의 UC가 2가 되지는 않는다.


프로세스 B가 파일을 생성




이 파일 오브젝트에 대한 UC는 1이된다.


파일같은 리소스는 생성한 프로세스만 접근 가능하므로 UC는 1이 된다.



근데 UC는 왜 두는 것일까


다음과 같은 경우가 있다고 가정해보자.




여기서 프로세스 B가 소멸되었다. 프로세스 B가 소멸되었으므로 그에 종속적인 핸들 테이블도 함께 사라진다.


그렇다면 여기서 프로세스 B의 커널 오브젝트도 사라질까?




현재 프로세스 A가 프로세스 B의 커널 오브젝트를 참조하고 있으므로 이는 사라지지 않는다.


이를 위해 필요한 것이 UC이다.


프로세스 A가 B의 커널 오브젝트를 참조하지 않게 될 경우, UC는 0이되고 커널 오브젝트는 사라진다.





Comments