Bagikan melalui


Kapan Kode dan Data Harus Dapat Di-pageable?

Anda dapat membuat semua atau sebagian dari driver Anda dapat di-pageable. Kode driver halaman dapat mengurangi ukuran gambar beban driver, sehingga membebaskan ruang sistem untuk penggunaan lain. Ini paling praktis untuk driver perangkat yang digunakan secara sporadis, seperti modem dan CD-ROM, atau untuk bagian driver yang jarang dipanggil.

Kode driver yang melakukan salah satu hal berikut ini harus berupa memory-resident. Artinya, kode ini harus berada di bagian yang tidak di-halaman, atau di bagian halaman yang dikunci dalam memori saat kode berjalan.

  • Berjalan pada atau di atas IRQL = DISPATCH_LEVEL.

  • Memperoleh kunci putaran.

  • Memanggil salah satu rutinitas dukungan objek kernel, seperti KeReleaseMutex atau KeReleaseSemaphore, di mana parameter Tunggu diatur ke TRUE. Jika kernel dipanggil dengan Tunggu diatur ke TRUE, panggilan akan kembali dengan IRQL pada DISPATCH_LEVEL.

Kode driver harus berjalan di IRQL < DISPATCH_LEVEL ketika kode melakukan apa pun yang dapat menyebabkan kesalahan halaman. Kode dapat menyebabkan kesalahan halaman jika melakukan salah satu hal berikut:

  • Mengakses kumpulan halaman yang tidak dikunci dalam memori.

  • Memanggil rutinitas yang dapat dipaginasi.

  • Mengakses buffer pengguna yang tidak terkunci dalam konteks utas pengguna.

Biasanya, Anda harus membuat halaman bagian jika jumlah total semua kode yang dapat dipaginasi (atau data) setidaknya 4 kilobyte (KB). Jika memungkinkan, Anda harus mengisolasi kode yang murni dapat dipaginasi (atau data) ke dalam bagian terpisah dari kode (atau data) yang terkadang dapat dipaginasi tetapi terkadang harus dikunci. Misalnya, menggabungkan kode murni yang dapat dipaginasi dan kode yang dikunci sesuai permintaan menyebabkan lebih banyak ruang sistem dikunci untuk bagian gabungan daripada yang diperlukan. Namun, jika driver memiliki kurang dari 4 KB kode (atau data yang mungkin dapat dipaginasi), Anda dapat menggabungkan kode (atau data) tersebut dengan kode (atau data) yang dikunci sesuai permintaan ke dalam satu bagian, sehingga menghemat ruang sistem.