Linux mengadopsi model three-level paging sehingga paging memungkinkan pada arsitektur 64 bit. Tiga tipe paging tables :
- Page Global Directory
- Page Middle Directory
- Page Table
Page Global Directory mengandung alamat dari beberapa Page Middle Directory, yang mengandung beberapa alamat dari beberapa Page Tables. Setiap entri page table menunjuk ke sebuah page frame. Linear address kemudian terbagi menjadi 4 bagian.
Linear Address Fields
Makro berikut ini menyederhanakan page table handling :
- PAGE_SHIFT, menentukan panjang offset field dalam bit.
- PMD_SHIFT, menentukan logaritma dari ukuran area Page Middle Directory entry yang dapat dipetakan.
- PGDIR_SHIFT, menentukan logaritma dari ukuran area Page Global Directory entry yang dapat dipetakan.
- PTRS_PER_PTE, PTRS_PER_PMD, dan PTRS_PER_PGD; menghitung jumlah entri di Page table, Page Middle Directory, dan Page Global Directory, bernilai 1024, 1 dan 1024.
Page Table Handling
pte_t, pmd_t, dan pgd_t merupakan tipe data 32 bit yang menggambarkan entri Page Table Table, Page Middle Directory, dan Page Global Directory. pgprot_t merupakan tipe data 32-bit yang lain yang merepresentasikan protection flags dihubungkan dengan entri tunggal.
Empat tipe makro konversi tipe (_ _pte(), _ _pmd(), dan _ _pgprot()) meng-casting unsigned integer 32-bit ke tipe yang sesuai.
Kernel juga menyediakan beberapa makro dan fungsi untuk membaca atau memodifikasi entri page table :
- pte_none(), pmd_none(),
- pgd_none(), pte_presents(),
- pmd_present(), pgd_present(),
- pte_clear(), pmd_clear()
- pgd_clear.
Makro pmd_bad() dan pgd_bad()digunakan oleh fungsi untuk mengecek entri Page Global Directory dan Page Middle Directory sebagai parameter. Tidak ada makro pte_bad()karena legal bagi sebuah entri Page Table untuk mengacu pada sebuah page yang tidak berada di memori utama, tidak bisa ditulis, atau tidak bisa diakses sama sekali.
Beberapa fungsi yang berhubungan dengan flag yang terkandung dalam entri Page Table :
pte_read(),pte_write(),pte_exect(),pte_dirty(),pte_young(),pte_wrprotect(),pte_rdprotect(),pte_exprotec(),pte_mkwrite(),pte_mkread(),pte_mkexec(), pte_mkdirty, pte_mkclean(),pte_mkyoung(), pte_mkold(), pte_modify(p,v), set_pte.
Kemudian makro yang mengkombinasikan sebuah alamat page dan sebuah grup protection flags menjadi sebuah page entry 32 bit : mk_pte(), mk_pte_phys(), pte_page(),pmd_page(), pgd_offset(p, a), pmd_offset(p, a).
Fungsi dan makro yang lain :
pte_quicklist, pgd_quicklist,check_pgt_cache(), pgd_alloc(), pmd_alloc(p, a), pte_alloc(p, a), pte_free(), pte_free_kernel(), pgd_free(), free_one_pmd(), free_one_pgd(), SET_PAGE_DIR, new_page_tables(), clear_page_tables(), free_page_tables().
Reserved Page Frames
Kode kernel dan struktur data disimpan dalam sebuah kelompok dari reserved page frames. Arsitektur PC memempunyai beberapa kelakuan yang tidak biasa :
- Page frame 0 digunakan oleh BIOS untuk menyimpan konfigurasi hardware sistem yang terderteksi selama Power On-Self Test (POST).
- Physical addressess dari 0x000a0000 hingga 0x000fffff dipesan untk rutin BIOS dan untuk pemetaan internal memori dari ISA graphic cards.
- Page frames tambahan pada megabyte pertama mungkin dipesan oleh model komputer model tertentu. Contohnya, Ibm ThinkPad memetakan 0xa0 page frame ke 0x9f.
Proses Page Tables
Ruang linear address dibagi menjadi dua bagian :
- Linear address dari 0x00000000 ke PAGE_OFFSET -1 bisa dialamatkan saat proses berada pada user atau kernel mode.
- Linear address dari 0x00000000 ke PAGE_OFFSET -1 bisa dialamatkan hanya saat proses berada pada kernel mode.
Kernel Page Tables
Kernel menginisialisai page table dirinya dalam dua fase. Sesaat sesudah kernel di-load ke memori, CPU masih bekerja dalam real mode; sehingga paging masih belum berfungsi. Pada fase pertama, kernel membuat sebuah ruang alamat terbatas 4 MB, yang cukup untuk menginstal dirinya pada RAM. Pada fase kedua, kernel memanfaatkan semua Ram yang ada dan men-set paging tables dengan tepat.
0 comments:
Post a Comment
Tim Gudang Materi mengharapkan komentar anda sebagai kritik dan saran untuk kami .. Hubungi kami jika anda mengalami kesulitan !