
Sejak rilis edisi sebelumnya dari buku ini, sistem operasi Windows telah mengalami banyak kemajuan dengan pembaruan dan perubahan konseptual yang menghasilkan arsitektur stabil baru untuk kernel Windows 10.
Buku "Perangkat Internal Windows" diciptakan untuk para profesional yang ingin memahami kehidupan dalam komponen utama Windows 10. Berdasarkan informasi ini, akan lebih mudah bagi pengembang untuk menemukan solusi desain yang tepat dengan membuat aplikasi untuk platform Windows dan memecahkan masalah rumit yang terkait dengan operasi mereka. Administrator sistem, mengetahui apa yang berada di bawah tenda di bawah sistem operasi, akan dapat memahami perilaku sistem dan dengan cepat menyelesaikan masalah peningkatan produktivitas dan mendiagnosis kegagalan. Profesional keamanan akan memerlukan informasi tentang cara menangani kerentanan dalam sistem operasi.
Dinamika Daftar Halaman
Dalam gbr. 5.37 memperlihatkan diagram keadaan transisi blok-blok halaman. Untuk kesederhanaan, itu tidak memberikan daftar halaman yang dimodifikasi tetapi tidak dapat direkam.
Blok halaman berpindah di antara daftar halaman dengan cara berikut.
1. Ketika manajer memori memerlukan halaman yang diisi dengan nol untuk memperbaiki kesalahan halaman terkait dengan persyaratan untuk mengatur ulang halaman (akses ke halaman yang didefinisikan sebagai diisi penuh dengan nol, atau ke halaman mode pengguna tertutup, dikonfirmasi yang belum diakses), pertama upaya dilakukan untuk mendapatkan halaman ini dari daftar halaman tersebut. Jika daftar kosong, halaman diambil dari daftar halaman gratis dan diisi dengan nol. Jika daftar halaman gratis kosong, daftar halaman menunggu diakses dan halaman dari daftar ini diisi dengan nol.
2. Salah satu alasan untuk permintaan halaman yang diisi dengan nol adalah pemenuhan berbagai persyaratan keamanan - misalnya, kriteria umum (Kriteria Umum). Sebagian besar ketentuan kriteria umum menunjukkan bahwa proses mode pengguna harus menerima blok halaman yang diberi nol sehingga mereka tidak dapat membaca konten memori dari proses sebelumnya. Oleh karena itu, manajer memori menyediakan proses mode pengguna dengan blok halaman yang dibatalkan, kecuali halaman tersebut telah dibaca dari penyimpanan cadangan. Dalam hal ini, manajer memori menggunakan blok halaman yang tidak disetel ulang, menginisialisasinya dengan data dari disk atau dari penyimpanan jarak jauh. Daftar halaman yang diisi dengan nol diisi kembali dari daftar halaman gratis dengan utas program sistem yang disebut utas halaman nol - ini adalah utas 0 dalam proses Sistem. Aliran penomoran halaman sedang menunggu sinyal untuk berfungsi dari objek gateway. Ketika ada delapan atau lebih halaman dalam daftar gratis, gateway berbunyi bip. Tetapi utas penomoran halaman dimulai hanya jika setidaknya satu prosesor tidak memiliki utas yang dapat dieksekusi, karena utas penomoran halaman dimulai dengan prioritas 0, dan prioritas terendah yang dapat ditetapkan untuk aliran pengguna adalah 1.
CATATAN Ketika memori karena alokasi halaman fisik oleh driver yang memanggil fungsi MmAllocatePagesForMdl atau MmAllocatePagesForMdlEx harus diisi dengan nol oleh aplikasi Windows yang memanggil fungsi AllocateUserPhysicalPages atau AllocateUserPhysicalPagesNuma, atau ketika aplikasi mengalokasikan memori, memori yang digunakan oleh manajer menggunakan memori untuk menggunakan memori yang besar. menampilkan area yang lebih besar dari aliran halaman zeroing, mengatur ulang hanya satu halaman sekaligus. Selain itu, pada sistem multiprosesor, manajer memori membuat utas sistem tambahan untuk membidik dalam mode paralel (dan pada platform NUMA ini dilakukan dengan gaya yang dioptimalkan untuk teknologi NUMA).
3. Ketika manajer memori tidak memerlukan halaman yang diisi dengan angka nol, ia pertama-tama mengakses daftar halaman gratis. Jika daftar ini kosong, ia pergi ke daftar halaman yang di-zeroed. Jika daftar halaman yang kosong kosong, ia menuju ke daftar halaman yang tertunda. Sebelum manajer memori dapat menggunakan blok halaman dari daftar halaman tunggu, ia harus terlebih dahulu kembali dan menghapus tautan dari catatan PTE yang tidak valid (atau dari catatan PTE prototipe), yang masih menunjuk ke blok halaman. Karena entri basis data nomor PFN berisi pointer ke halaman sebelumnya dari tabel halaman pengguna (atau ke halaman kumpulan catatan PTE prototipe untuk halaman bersama), manajer memori dapat dengan cepat menemukan catatan PTE dan membuat perubahan yang sesuai.
4. Ketika suatu proses harus meninggalkan halaman dari set kerjanya (baik karena mengacu pada halaman baru dan set kerjanya penuh, atau karena manajer memori memotong set kerjanya), halaman pergi ke daftar tunggu jika tetap tidak tersentuh (tidak berubah), atau ke daftar halaman yang diubah, jika halaman diubah saat berada dalam memori fisik.
5. Ketika proses selesai, semua halaman tertutup pergi ke daftar halaman gratis. Selain itu, jika ketika menutup tautan terakhir ke bagian yang didukung oleh file halaman, bagian tersebut tidak memiliki tampilan yang ditampilkan, halaman-halaman bagian ini juga termasuk dalam daftar halaman gratis.
EKSPERIMEN: MELIHAT DAFTAR HALAMAN GRATIS DAN NOMOR
Pelepasan halaman tertutup pada akhir suatu proses dapat diamati di jendela System Information dari Process Explorer. Pertama, Anda perlu membuat proses dengan banyak halaman tertutup di set kerjanya. Kami sudah melakukan ini di salah satu percobaan sebelumnya menggunakan utilitas TestLimit:
C:\Tools\Sysinternals>Testlimit.exe -d 1 -c 1500 Testlimit v5.24 - test Windows limits Copyright (C) 2012-2015 Mark Russinovich Sysinternals - www.sysinternals.com Process ID: 13928 Leaking private bytes with touch 1 MB at a time... Leaked 1500 MB of private memory (1500 MB total leaked). Lasterror: 0 The operation completed successfully.
Sakelar –d membuat TestLimit tidak hanya memilih memori sebagai tertutup dan dikonfirmasi, tetapi juga "menyentuhnya", yaitu mengakses memori ini. Ini menghasilkan alokasi memori fisik dan penugasannya ke proses untuk membebaskan area memori virtual tertutup dan dikonfirmasi. Jika sistem memiliki jumlah RAM yang cukup tersedia, sebanyak 1.500 MB akan dialokasikan untuk proses dalam RAM. Sekarang proses ini akan menunggu sampai Anda memaksanya untuk menyelesaikan atau mengganggu pekerjaan (mungkin dengan kombinasi tombol Ctrl + C di jendela perintahnya). Ikuti langkah-langkah ini.
1. Buka Process Explorer.
2. Pilih perintah ViewSystem Information dan pilih tab Memory.
3. Amati ukuran daftar halaman gratis (Nol) dan Gratis (Nol).
4. Hentikan atau batalkan proses TestLimit.
Anda mungkin dapat melihat bahwa daftar halaman gratis telah meningkat dalam ukuran sesaat. Kami mengatakan "mungkin" karena aliran halaman yang memberi penekanan akan "bangun" segera setelah hanya ada delapan entri dalam daftar halaman yang memusatkan perhatian, dan itu akan bekerja dengan sangat cepat. Process Explorer menyegarkan jendela ini hanya sekali per detik, dan sepertinya sisa halaman sudah punya waktu untuk mengatur ulang ke daftar halaman reset, sementara kami dapat "menangkap" keadaan ini. Jika Anda berhasil melihat peningkatan sementara dalam daftar halaman gratis, maka setelah ini Anda akan melihat bahwa ukurannya akan turun ke nol, dan peningkatan yang sesuai akan terjadi dalam daftar halaman yang diunggulkan. Jika momen ini terlewatkan, Anda baru saja melihat peningkatan dalam daftar halaman yang di-nolkan.
PERCOBAAN: MELIHAT DAFTAR DARI HALAMAN YANG BERUBAH DAN DIHARAPKAN
Memindahkan halaman dari kumpulan proses proses ke daftar halaman yang dimodifikasi dan kemudian ke daftar halaman menunggu dapat diamati menggunakan program VMMap dan RAMMap dari paket Sysinternals atau dalam debugger kernel. Ikuti langkah-langkah ini.
1. Jalankan program RAMMap dan amati kondisi tenang sistem. Dalam hal ini, ini adalah sistem x86 dengan 3 GB RAM. Kolom-kolom pada jendela mencerminkan keadaan halaman yang berbeda (lihat Gambar 5.37). Beberapa kolom yang tidak relevan untuk percobaan ini dipersempit untuk kenyamanan.
2. Sistem memiliki sekitar 420 MB RAM gratis (terdiri dari halaman gratis dan nol). Sekitar 580 MB muncul dalam daftar halaman tunggu (oleh karena itu, beberapa di antaranya “tersedia”, tetapi kemungkinan besar berisi data yang sebelumnya hilang karena proses atau digunakan dalam pengambilan sampel super). Sekitar 830 MB aktif, dipetakan langsung ke alamat virtual melalui entri tabel halaman yang valid.
3. Setiap baris selanjutnya dipecah menurut status halaman dengan menggunakan atau asal (halaman proses tertutup, file yang ditampilkan, dll.). Sebagai contoh, pada saat 830 MB aktif, sekitar 400 MB disebabkan oleh alokasi halaman tertutup dari proses.
4. Sekarang, seperti pada percobaan sebelumnya, gunakan utilitas TestLimit untuk membuat proses dengan sejumlah besar halaman di set kerja. Di sini sekali lagi, kami menggunakan sakelar –d untuk memaksa TestLimit untuk menulis ke setiap halaman, tetapi kali ini tanpa batasan, untuk membuat sebanyak mungkin halaman modifikasi yang tertutup:
C:\Tools\Sysinternals>Testlimit.exe -d Testlimit v5.24 - test Windows limits Copyright (C) 2012-2015 Mark Russinovich Sysinternals - www.sysinternals.com Process ID: 7548 Leaking private bytes with touch (MB)... Leaked 1975 MB of private memory (1975 MB total leaked). Lasterror: 8
5. Sekarang TestLimit telah menciptakan area alokasi 1975 masing-masing 1 MB. Untuk memperbarui layar dalam RAMMap, Anda perlu menggunakan perintah FileRefresh untuk memperbarui layar, karena RAMMap tidak melakukan ini sendiri (karena tingginya biaya operasi ini).
6. Seperti yang Anda lihat, lebih dari 2,8 GB aktif, 2,4 GB di antaranya berada di baris halaman proses tertutup (Process Private line). Ini adalah hasil mengalokasikan memori dan mengaksesnya dari proses TestLimit. Perhatikan juga bahwa daftar halaman Standby, Zeroed, dan Free sekarang jauh lebih kecil. Sebagian besar memori yang dialokasikan untuk TestLimit diambil dari halaman yang tercantum dalam daftar ini.
7. Selanjutnya, menggunakan RAMMap Anda perlu mengevaluasi alokasi halaman fisik proses. Buka tab Halaman Fisik dan atur filter di bagian bawah kolom Proses, atur ke Testlimit.exe. Jendela berikutnya menunjukkan semua halaman fisik yang merupakan bagian dari rangkaian proses yang berfungsi.
8. Kita perlu mengidentifikasi halaman fisik yang terlibat dalam alokasi ruang alamat fisik, yang dilakukan dengan menggunakan –d switch ketika program TestLimit diluncurkan. RAMMap tidak memberikan indikasi area virtual mana yang dialokasikan karena panggilan dari fungsi RAMMap VirtualAlloc. Tapi kita bisa mendapatkan petunjuk berharga tentang hal ini menggunakan program VMMap. Dengan memanggil VMMap untuk
dari proses yang sama, kami memperoleh hasil berikut (lihat gambar di halaman 535 di atas).
9. Di bagian bawah informasi yang ditampilkan adalah ratusan area yang dialokasikan untuk data proses tertutup, yang masing-masing memiliki ukuran 1 MB dengan memori terkonfirmasi 1 MB. Ini sesuai dengan ukuran memori yang dialokasikan oleh TestLimit. Tangkapan layar sebelumnya menyoroti yang pertama dari opsi distribusi ini. Perhatikan bahwa alamat virtual awalnya adalah 0x310000.
10. Sekarang kembali ke informasi tentang memori fisik yang ditampilkan di layar oleh program RAMMap. Atur ulang kolom sehingga kolom Alamat Virtual terlihat jelas. Klik untuk mengurutkan garis berdasarkan nilai ini, dan Anda dapat menemukan alamat virtual yang diinginkan (lihat gambar di halaman 535 di bawah).
11. Di sini ditunjukkan bahwa halaman virtual yang dimulai dengan alamat 0x310000 saat ini dipetakan ke alamat fisik 0x212D1000. Dengan -d switch, TestLimit menulis namanya ke byte pertama dari setiap area yang dipilih. Ini dapat didemonstrasikan menggunakan perintah! Dc dari debugger kernel lokal (singkatan dari "karakter tampilan," yaitu, menghasilkan karakter ke alamat fisik):
lkd> !dc 0x212d1000 #212d1000 74736554 696d694c 00000074 00000000 TestLimit....... #212d1010 00000000 00000000 00000000 00000000 ................ ...
12. Jika Anda menunda, upaya mungkin gagal - halaman mungkin sudah dihapus dari set kerja. Pada fase terakhir percobaan, kami akan menunjukkan bahwa data tetap tidak berubah (setidaknya untuk sementara waktu) setelah rangkaian kerja proses dikurangi dan halaman pertama bergerak ke daftar yang diubah dan kemudian ke halaman yang menunggu.
13. Setelah memilih proses TestLimit dalam program VMMap, buka menu View dan pilih perintah Empty Working Set untuk meminimalkan set proses yang bekerja. Sekarang di jendela VMMap informasi berikut harus ditampilkan:
14. Perhatikan bahwa garis Set Kerja hampir kosong. Bagian tengah untuk proses menunjukkan bahwa ukuran total set kerja hanya 4 KB, dengan hampir semua ruangnya ditempati oleh tabel halaman. Sekarang kembali ke RAMMap. Pada tab Gunakan Hitungan, Anda dapat melihat bahwa jumlah halaman aktif telah berkurang secara signifikan, dan sejumlah besar halaman ada dalam daftar yang diubah dan sejumlah besar halaman ada dalam daftar tunggu.
15. Data pada tab Proses RAMMap mengkonfirmasi bahwa sebagian besar halaman ini muncul dalam daftar ini karena proses TestLimit.
»Informasi lebih lanjut tentang buku ini dapat ditemukan di
situs web penerbit»
Isi»
Kutipan20% diskon kupon untuk
Windows -
Windows