170 likes | 370 Views
Kelompok 11. M. Riftadi 13505029 Ricky Gilbert F 13505077 Herdyanto S. 13505095 M. Gilang Kautzar HW 13505101. Manajemen Memori.
E N D
Kelompok 11 M. Riftadi 13505029 Ricky Gilbert F 13505077 Herdyanto S. 13505095 M. Gilang Kautzar HW 13505101
Manajemen Memori • Beberapa bagian dari RAM digunakan oleh kernel untuk menyimpan kode kernel dan struktur data statis kernel. Sisa dari bagian yang digunakan oleh kernel tersebut disebut dynamic memory. Dynamic memory ini tidak hanya digunakan oleh proses, tetapi juga oleh kernel senidri. Kualitas performansi dari keseluruhan sistem tergantung pada seberapa efisien manajemen dynamic memory. Manajemen memori yang akan dibahas berikut menggambarkan bagaimana kernel mengalokasikan memori untuk keperluannya.
Macam teknik manajemen memori : 1. Physically contigous memory areas a. Page Frame Management b. Memory Area Management • Physically noncontigous memory areas Noncontigous Memory Area Management
Apakah Page Frame itu? “Suatu unit penyimpanan memori yang dapat digunakan untuk berbagai keperluan.” Contoh : PF dapat digunakan untuk menyimpan kernel dan data user, buffering data disk dan sebagainya.
Manajemen Page Frame Kernel harus : • menjaga setiap status dari page frame • Dapat membedakan page frame yang sedang digunakan oleh suatu proses, page frame yang mengandung kode kernel atau struktur data kernel. Atau dengan kata lain dapat menentukan suatu page frame itu bebas atau tidak.
Manajemen Page Frame Linux menggunakan ukuran page frame 4KB sebagai standar untuk memory alocation unit, alasannya : • Kernel bisa langsung mengetahui memory allocation unit di mana page fault terjadi. • Ukuran 4KB merupakan kelipatan terkecil dari hampir seluruh ukuran blok disk. Page frame descriptor diinisialisasi oleh fungsi free_area_init(), yang mempunyai 2 parameter : start_mem dan end_mem. Kemudian fungsi mem_init() mengosongkan flag PG_reserved , dan flag PG_DMA dari semua page frame yang mempunyai alamat fisik sama dengan atau lebih besar dari 0x1000000.
Requesting & Releasing Page Frame • Page frame bisa direquest dengan fungsi dan makro berikut : • _ _get_free_pages(gfp_mask, order), untuk merequest 2order page frame kontigu. • _ _get_dma_pages(gfp_mask, order), makro untuk mendapatkan page frame yang cocok untuk DMA; berkembang menjadi : _ _get_free_pages(gfp_mask | GFP_DMA, order). • _ _get_free_page(gfp_mask), makro untuk mendapatkan page frame tunggal, berkembang ke : _ _get_free_pages(gfp_mask, 0). • get_free_page(gfp_mask), fungsi yang memanggil _ _get_free_page(gfp_mask) dan kemudian mengisi page frame yang didapatkan dengan 0
Requesting & Releasing Page Frame • Page frame bisa dibebaskan (direlease) melalui fungsi dan makro berikut : • free_pages(addr, order), fungsi yang mengecek page descriptor dari page frame yang mempunyai alamat fisik addr. • _ _free_page(p), membebaskan page frame yang descriptornya ditunjuk oleh parameter p. • free_page(addr), makro untuk membebaskan page frame dengan alamat fisik addr, berkembang ke free_pages(addr, 0).
Requesting & Releasing Page Frame • Parameter gfp_mask menspesifikasikan bagaimana mencari page frame yang bebas. Terdiri atas flag – flag : • _ _GFP_WAIT , diset apabila kernel diijinkan untuk membuang isi page frame untuk membebaskan memori sebelum memenuhi request. • _ _GFP_IO, diset apabila kernel diijinkan untuk menulis page ke disk dengan tujuan membebaskan page frame yang bersangkutan. • _ _GFP_DMA, diset apabila page frame yang diminta harus sesuai untuk DMA. • _ _GFP_HIGH, _ _GFP_MED, _ _GFP_LOW, menspesifikasikan prioritas request. _ _GFP_LOW biasanya diasosiasikan dengan request dynamic memory oleh proses User Mode, dan prioritas yang lain diasosiasikan dengan request dari kernel.
Algoritma Buddy (cont.) Algoritma Buddy digunakan untuk mengatasi eksternal fragmentation yang terjadi di Linux
Algoritma Buddy Semua page frame dibagi menjadi 10 list grup blok, yaitu 1, 2, 4, 8, 16, 32, 64, 128, 256, dan 512 page frame yang kontigu Ukuran dari sebuah blok page frame merupakan kelipatan dari ukuran blok grupnya, contoh: ukuran grup 64 berukuran kelipatan 64 x 4KB (asumsi 1 page frame = 4kb)
Contoh Algoritma Terdapat sebuah blok 128 yang ingin dialokasikan. Langkah-langkah algoritma buddy adalah sebagai berikut: Pertama, cek blok yang kosong pada daftar blok 128 Jika tidak ada blok yang kosong, cek pada daftar blok 256 (daftar blok yang lebih besar dari 128) Jika ketemu, kernel mengalokasikan 128 page frame dari 256 page frame yang tersedia dan yang 128 page frame yang sisa dimasukkan dalam daftar blok 128 Jika tidak ada juga blok yang bebas, alokasikan blok 128 seperti langkah sebelumnya Jika tidak diketemukan blok yang bebas, laporkan error
Linux menggunakan sistem buddy berbeda untuk tiap zona. Pada 80x86, ada 3: • ISA DMA, < 16 MB • “Normal” 16 – 896 MB • High-Memory > 896 MB
Setiap sistem buddy memakai struktur data: • Larik (array) mem_map. Larik yang mengandung page frame descriptor. • Larik berisi 11 elemen dari tipe “free_area”, untuk tiap grup ukuran. Ada di field free_area pada zone descriptor. Elemen ke k ukuran 2k
Pengalokasian Sebuah Blok Fungsi _ _rmqueue( ) digunakan untuk mencari blok kosong pada suatu zone. Argumennya ada 2 yaitu: alamat dari deskriptor zone, dan tingkatan (0 untuk one-page block, 1 untuk two-page block, dan seterusnya). Apabila berhasil, _ _rmqueue( ) mengembalikan alamat dari page descriptor dari page frame yang telah teralokasi. Jika gagal, kembaliannya NULL.
Dealokasi Sebuah Blok Fungsi _ _free_pages_bulk( ) mengimplementasi algoritma buddy untuk membebaskan page frame. Masukannya berupa 3 buah parameter, yaitu: • Page : alamat dari deskriptor dari page frame dalam blok yang ingin dibebaskan. • Zone : alamat dari deskriptor zona • Order : ukuran logaritmik dari blok tersebut