Udostępnij przez


Kiedy kod i dane powinny podlegać stronicowaniu?

Możesz ustawić cały lub część sterownika do stronicowania. Kod sterownika stronicowania może zmniejszyć rozmiar obrazu ładowania sterownika, dzięki czemu zwalnia się miejsce w systemie do innych zastosowań. Jest to najbardziej praktyczne dla sterowników sporadycznie używanych urządzeń, takich jak modemy i napędy CD-ROM, lub części sterowników, które są rzadko wywoływane.

Kod sterownika, który wykonuje dowolną z poniższych czynności, musi być rezydentem pamięci. Oznacza to, że ten kod musi znajdować się w sekcji nienastronicowanej lub w sekcji stronicowanej, która jest zablokowana w pamięci, gdy kod jest wykonywany.

  • Działa na poziomie IRQL = DISPATCH_LEVEL lub wyższym.

  • Uzyskuje blokady spinowe.

  • Wywołuje dowolne procedury obsługi obiektu jądra, takie jak KeReleaseMutex lub KeReleaseSemaphore, w których parametr Wait jest ustawiony na wartość TRUE. Jeśli jądro jest wywoływane z funkcją Wait ustawioną na wartość TRUE, wywołanie zwraca wartość IRQL w DISPATCH_LEVEL.

Kod sterownika musi być uruchomiony na poziomie IRQL DISPATCH_LEVEL <, gdy kod wykonuje jakiekolwiek operacje, które mogą spowodować błąd strony. Kod może spowodować błąd strony, jeśli wykona dowolną z następujących czynności:

  • Uzyskuje dostęp do puli stronicowanej, która nie jest zablokowana w pamięci.

  • Wywołuje procedurę stronicową.

  • Uzyskuje dostęp do odblokowanych buforów użytkownika w kontekście wątku użytkownika.

Zazwyczaj należy utworzyć sekcję stronicową, jeśli łączna ilość całego kodu z możliwością stronicowania (lub danych) wynosi co najmniej 4 kilobajty (KB). Jeśli to możliwe, należy wyodrębnić czysto stronicowalny kod (lub dane) do osobnej sekcji, oddzielając go od kodu (lub danych), który czasami może być stronicowalny, ale czasami musi być zablokowany. Na przykład połączenie wyłącznie kodu stronicowalnego i kodu blokowanego na żądanie powoduje zablokowanie większej ilości przestrzeni systemowej dla połączonej sekcji niż jest to konieczne. Jeśli jednak sterownik ma mniej niż 4 KB możliwego do stronicowania kodu (lub danych), możesz połączyć ten kod (lub dane) z zablokowanym kodem na żądanie (lub danymi) w jednej sekcji, oszczędzając miejsce w systemie.