Memahami Manajemen Memori Fisik Di Windows 7


Pada artikel sebelumnya, Memahami Address Translation Di Windows, saya menunjukkan bahwa masing-masing proses di Windows mengakses virtual address yang dipetakan ke physical address. Pemetaan ini berlaku unik untuk setiap proses yang ada karena masing-masing proses memiliki page table-nya sendiri. Dengan demikian, walaupun Notepad.exe mengakses alamat virtual X dan Paint.exe mengakses alamat virtual X yang sama, lokasi physical address yang dituju bisa saja berbeda. Untuk melihat mapping dari physical address ke virtual address secara lebih mudah, saya dapat menggunakan tool RAMMap dari SysInternals Suite seperti yang terlihat pada gambar berikut ini:

Melihat pemetaan physical address ke virtual address dengan RAMMap

Melihat pemetaan physical address ke virtual address dengan RAMMap

Pada artikel ini, saya akan mencoba mempelajari bagaimana Windows mengelola main memory secara fisik (bukan berdasarkan apa yang dilihat oleh program). Windows membagi wilayah main memory (RAM) ke dalam bagian-bagian yang disebut sebagai page. Ukuran default untuk sebuah page adalah 4K (0x1000). Windows mencatat alokasi page untuk masing-masing proses kedalam lokasi yang disebut sebagai Page Frame Number (PFN) database. Saya dapat melihat isi PFN database dengan Windows Debugger seperti yang terlihat pada gambar berikut ini:

Melihat Isi PFN

Melihat Isi PFN

Pada eksekusi di atas, setelah memperoleh alamat PFN database, saya menampilkan isinya dimana setiap PFN terdiri atas 24 byte. Windows Debugger memiliki perintah !pfn yang bisa dipakai untuk menampilkan informasi PFN secara lebih mudah dimengerti. Karena setiap page berukuran 4K (0x1000), maka PFN 1 mulai dari physical address 0x1000, PFN 2 mulai dari physical address 0x2000, dan seterusnya.

PFN mengandung informasi state dari page di memori fisik yang bisa berupa salah dari active, transition, standby, modified, modified no-write, free, zeroed, rom, dan bad. Saya dapat menampilkan alokasi memori fisik berdasarkan statusnya dengan perintah !memusage seperti pada berikut ini:

kd> !memusage 8

loading PFN database
loading (100% complete)
Compiling memory usage data (99% Complete).
             Zeroed: 262475 (1049900 kb)
               Free:      5 (    20 kb)
            Standby:  25173 (100692 kb)
           Modified:   1632 (  6528 kb)
    ModifiedNoWrite:      0 (     0 kb)
       Active/Valid:  98211 (392844 kb)
         Transition:      2 (     8 kb)
                Bad:    484 (  1936 kb)
            Unknown:      0 (     0 kb)
              TOTAL: 387498 (1549992 kb)

Selain itu, saya juga dapat menampilkan informasi yang dalam bentuk grafis dengan tool RAMMap seperti yang terlihat pada gambar berikut ini:

Isi physical memory berdasarkan status page

Isi physical memory berdasarkan status page

Satu fakta menarik tentang Windows 7 versi 32-bit adalah walaupun saya memiliki RAM 4 GB, saya tidak akan pernah bisa mengakses seluruh memori fisik tersebut secara penuh. Mengapa demikian? Hal ini karena sistem operasi 32-bit hanya memungkinkan pengalamatan hingga maksimal 2^32 = 4 GB. Masalahnya, alamat tersebut tidak sepenuhnya dipakai untuk memori fisik (RAM), tetapi juga dibutuhkan untuk hardware lainnya seperti video card dan audio card.

Untuk membuktikannya, saya akan membuka Device Manager, lalu memilih menu View, Resource By Connection. Pada bagian Memory, saya menemukan hasil seperti berikut ini (khusus untuk hardware yang sedang saya pakai):

Pemetaan physical address

Pemetaan physical address

Pada gambar di atas, terlihat bahwa alamat 0xA0000 sampai 0xBFFFF telah dipetakan untuk keperluah chipset. Total dari wilayah ini adalah sebesar 0x20000 bytes (atau 131.072 bytes). Bukan hanya itu saja, juga ada alokasi alamat dari wilayah 0xD0000 sampai 0xDFFFF sebesar 0x10000 bytes (atau 65.536 bytes) dan alokasi dari wilayah 0xBDE00000 sampai 0xFFFFFFFF sebesar 0x42200000 bytes (atau 1 GB).

Dengan demikian, total wilayah yang telah dipakai untuk keperluan selain memori fisik mencapai lebih dari 1 GB. Hal ini menyebabkan sisa wilayah yang dapat dipakai untuk pengalamatan memori fisik menjadi sekitar 3 GB. Windows menampilkan informasi ini di System Properties seperti yang terlihat pada gambar berikut ini:

Windows 32-bit tidak dapat mengakses seluruh wilayah 4 GB memori

Windows 32-bit tidak dapat mengakses seluruh wilayah 4 GB memori

Masalah ini tidak terjadi pada sistem operasi 64-bit karena secara teoritis, pengalamatan dapat dilakukan hingga mencapai 2^64 = 16 EB (Exa Byte). Ini jauh lebih dari cukup untuk kebutuhan hardware saat ini. Pada kenyataannya, karena alasan efisiensi, prosesor modern saat ini hanya dapat mengakses hingga maksimal 4 PB. Dukungan ini akan terus ditingkatkan seiring waktu berjalan. Sistem operasi Windows 7 sendiri memiliki lisensi yang membatasi penggunaan memori. Sebagai contoh, lisensi Windows 7 Ultimate 64-bit hanya membolehkan penggunaan memori RAM hingga maksimal 192 GB.

Perihal Solid Snake
I'm nothing...

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: