저는 Windows 드라이버 개발에 초보자입니다. 나는 단지 드라이버의 전역 변수가 페이징 된 풀 메모리 또는 비 페이징 풀 메모리를 사용한다는 것을 알고 싶습니다.페이지 된 풀 메모리 또는 비 페이징 풀 메모리 ?? (Windows 드라이버 개발)
감사합니다 감사합니다
Navaneeth
저는 Windows 드라이버 개발에 초보자입니다. 나는 단지 드라이버의 전역 변수가 페이징 된 풀 메모리 또는 비 페이징 풀 메모리를 사용한다는 것을 알고 싶습니다.페이지 된 풀 메모리 또는 비 페이징 풀 메모리 ?? (Windows 드라이버 개발)
감사합니다 감사합니다
Navaneeth
는 따라 다릅니다. 페이지되지 않은 풀은 RAM에 남아 있어야하는 메모리를 위해 예약되어야합니다. 따라서 디스크 작업에서 메모리 페이지의 영향을받는 중요한 작업을 수행하는 경우 비 페이징을 사용하십시오.
자세한 내용은 here을 참조하십시오.
this (비록 C와는 달리 C++에 대해 설명하고 있지만) 기본적으로 전역 변수는 #pragma 중 하나에 위치 할 수 있습니다. 또한 012234의 p22에 우리는 이것을하는 방법을 보았습니다. 마지막으로 this discuss 여기서는 데이터 세그먼트가 기본적으로 페이지가 지정 가능하지 않아야한다는 것을 알 수 있습니다.
커널 모드 드라이버의 전역 변수는 NonPagedPool에서 할당됩니다.
IoCreateDevice를 호출 할 때 장치 확장을 사용할 수도 있습니다.이 장치 확장은 항상 NonPaged 메모리에서 할당됩니다.
나는이, 마틴 도움이되기를 바랍니다
사실이 아닙니다. Windows의 커널 드라이버는 여러 섹션이있는 PE 파일이며 일반 사용자 모드 프로그램과 달리 KM 드라이버는 일반적으로 페이징 된 페이징과 페이징되지 않는 페이징 중 하나 (* KM 드라이버가 초기화되었습니다). 코드에서 alloc (또는 실제로 함수)이 alloc pragma의 사용을 통해 페이지되거나 페이징되지 않는지 여부를 선택할 수 있습니다. – SecurityMatt
No.my 질문은 내가 장치 드라이버에서 전역 변수를 선언하는 경우와 같은 뭔가를해야만, 어떤 메모리, 즉 페이징 풀 메모리 또는 비 페이징 풀 메모리? (로컬 사용될 것입니다 변수는 비 페이징 풀 메모리를 사용합니다). – Navaneeth
그것은 의존하지 않을 것입니다. 페이징 된 풀이나 페이징되지 않은 풀 중 하나입니다. – Navaneeth
#pragma data_seg ("PAGE") int foo; #pragma data_seg ("NONPAGE") int bar; - foo는 페이징 가능하고 bar는 페이징되지 않습니다. pragma를 지정하지 않으면 기본값이 페이징되지 않습니다. – SecurityMatt