2010-08-03 2 views
3

1) usermode 프로세스는 사용자 모드 가상 주소를 고유 한 물리적 페이지 프레임 모음으로 매핑하는 자체 "주소 컨텍스트"를 가지고 있습니다. 즉, 특정 가상 주소의 의미은 Windows XP 스케줄러가 스레드를 전환 할 때마다 잠깐 바뀝니다.Windows 커널 모드 드라이버는 어떻게 페이징 된 메모리에 액세스합니까?

"스레드 전환"작업 중 일부는 들어오는 스레드의 프로세스 컨텍스트를 참조하도록 페이지 테이블을 변경하는 것입니다.

_

2) 윈도우 커널 모드 드라이버 "는 임의의 스레드 컨텍스트"에서 실행한다.

드라이버가 시스템 스레드를 생성하여 컨텍스트에서 작동 할 수 있지만 시스템 스레드를 생성하지 않는 상황에 대해 이야기하고 있습니다.

드라이버는 "ExAllocatePoolWithTag"를 사용하여 페이지 된 (휘발성 저장소에있는 메모리) 할당 할 수 있습니다.

_

3) 어떻게 않는 상황없이 드라이버 액세스 페이징 메모리 ?

포인트 1에서 볼 수 있듯이 페이지 된 mem은 "컨텍스트 고유"인 페이지 테이블을 통해 액세스됩니다.

드라이버가 다른 스레드 컨텍스트에서 실행될 때 ... 페이지 테이블 항목은 스레드 관련 phy를 가리 킵니다. mem, 어떻게하면 드라이버가 페이징 메모리에 액세스 할 수 있습니까?

추신 : 커널 프로그래밍에서의 noob. 화 내지 마.

답변

7

사용 된 개념은 "사용자/커널 주소 공간 분할"입니다. 각 프로세스 주소 공간은 사용자 모드에서 프로세스에 액세스 할 수 있고 각 프로세스마다 다른 하위 부분 (일반적으로 2GB)과 커널 모드에서만 액세스 할 수있는 상위 부분 (나머지 주소 공간)으로 분할됩니다. 모든 프로세스에 대해 동일

드라이버가 페이징 된 메모리를 할당하면 드라이버는 주소 공간 분할의 커널쪽에 할당되므로 해당 시점에 페이지 테이블이로드되는 프로세스에 관계없이 커널 코드에서 볼 수 있습니다 (이 부분의 주소 공간은 모든 프로세스에 대해 동일한 방식으로 매핑됩니다).

+0

예 답변입니다 .. – bakra

0

주목할 점은 모든 스레드가 동일한 커널 메모리 매핑을 가지고 있다는 것입니다. 그래서 스레드 간의 컨텍스트 스위치는 가상 메모리의 상위 2GB에 (거의) 영향을 미치지 않습니다.