9 Manajemen Memori Utama Materi Background Swapping Contiguous
9. Manajemen Memori Utama
Materi • • Background Swapping Contiguous Memory Allocation Segmentation Paging Structure of the Page Table Example: The Intel 32 and 64 -bit Architectures • Example: ARM Architecture
Latar Belakang
Manajemen Memori • Memori adalah satu pusat kegiatan pada sebuah kompu karena setiap proses yang eksekusi, harus berada memori terlebih dahulu. • Sistem Operasi bertugas untuk mengatur penggunaan memo untuk banyak proses – Memori harus digunakan dengan baik, sehingga dapat memu banyak proses dalam suatu waktu • Sebelum masuk ke memori, suatu proses harus menunggu dalam antrian • Antrian ini disebut Input Queue (Long term)
Tujuan Manajemen Memory Meningkatkan utilitas CPU : • Data dan instruksi dapat diakses lebih cepat o CPU • penting… Memori kapasitasnya terbatas, jadi harus efisi
Istilah dalam Manajemen Memori : • Main memory dan registers adalah satu-satunya storage yang dapat diakses secara langsung oleh CPU • Registers mengakses dalam satu CPU clock (atau kurang) Pengaksesan Main memory lama dari register • Cache berada diantara main memory dan CPU registers • Protection: diperlukan untuk menjamin operasi-operasi memory sesuai dan tepat • Relokasi: mengkonversi alamat logika program ke alamat fisik memori • Sharing: bagian dari memori logika dapat dipakai bersama
Latar Belakang : Komponen Program • Sebuah program terdiri dari beberapa komponen – Variable – data structure • array, list, stack – Fungsi – Instruksi int total=0; int main(){ int ctr=1; int[] data; total = total + ctr; printf("Hasil"); }
Latar Belakang : Komponen Program • Sebuah program terdiri dari beberapa komponen – Variable – data structure • array, list, stack – Fungsi – Instruksi int total=0; int main(){ int ctr=1; int[] data; total = total + ctr; printf("Hasil"); }
Latar Belakang : Eksekusi Program • Q : Apa yang harus dilakukan agar sebuah program dapat dieksekusi oleh CPU? • A : Program harus dipindah dari disk ke memory sebelum dieksekusi – Program menunggu di input queue sebelum dibawa ke memory • Bagaimana detail langkahnya? int total=0; int main(){ int ctr=1; int[] data; total = total + ctr; printf("Hasil"); } OS 1000 Compiler Object Module Linkage Editor Load Module Loader Proses dialokasikan pada memory space tertentu e. x. 1000 -1100 Proses 1100 Free Memory
Latar Belakang : Eksekusi Program (2) • Ketika suatu proses mengambil/mengganti nilai suatu variabel, pada dasarnya dia mengakses alamat memori variabel tersebut OS int total=0; 1000 1010 int main(){ int ctr=1; int[] data; total = total + ctr; printf("Hasil"); } Proses 1100 Free Memory
Pertanyaan • Mengapa program harus dibawa ke memory sebelum bisa dieksekusi CPU? – Karena CPU hanya bisa mengakses langsung main memory dan register – Akses langsung ke disk terlalu lama • Register bisa diakses dalam satu cycle • Memory butuh beberapa cycle sehingga butuh cache.
Masalah • Bagaimana OS mengalokasikan memory untuk beberapa proses? • Ada berapa jenis alamat data/instruksi pada sebuah proses? • Bagaimana OS menentukan data/instruksi pada sebuah proses? • Bagaimana jika alokasi memori tidak mencukupi?
Ilustrasi Penempatan Proses di Memory • Setiap proses memiliki memory space terpisah • Why? Proteksi dari proses lain • How? Setiap proses dibatasi alamat • Representasi alamat sebuah proses di memori – base : alamat awal – limit : jangkauan alamat
Bagaimana proteksi dilakukan? • Process yang dieksekusi CPU meminta akses ke memory pada alamat tertentu • Cek alamat tersebut • Ijinkan jika alamat yang diakses adalah alamat proses tersebut – Jika alamat >= base DAN alamat < base+limit
Address Binding • Adalah pemetaan alamat suatu variabel program ke alamat memory tertentu, yg dapat terjadi pada saat: – Compile Time: pada saat program di-compile, menggunakan absolute code. Biasanya terjadi pada pemrosesan bahasa assembly (. asm) – Load Time: pada saat program dipanggil / load, menggunakan relocatable code. Variable 2 nya berada pada suatu stack yg sudah dipesan sebelumnya dengan pasti (statis) Menghasilkan object code -. obj – Execution Time: pada saat program dijalankan. • Binding akan ditunda sampai run time. Kode dapat dipindah antar segment dan page pada memory.
Pengikatan Alamat (Address Binding) • Alamat dapat direpresentasikan dengan cara berbeda pada setiap fase program – Source code addresses memakai alamat symbolic • Contoh : int sum=0; – Pada code yang sudah dicompile alamat symbolic diikat (binding) ke relocatable address • Contoh : “ 14 bytes dari awal fungsi main()” – Linker atau loader mengikat relocatable address ke absolute address • Contoh : 74014 • Setiap pengikatan (binding) memetakan dari satu jenis alamat ke jenis alamat lain
Address Binding Data dan Instruksi ke Memory • Pengikatan data dan instruksi dapat dilakukan pada beberapa fase/waktu : – Fase Kompilasi (Compile time) • Jika lokasi memori diketahui sebelumnya, absolut address dapat di-generate; • Harus kompilasi ulang kode tsb jika terjadi perubahan lokasi awal. – Fase Load (Load time) • Jika lokasi memori tidak diketahui saat fase kompilasi, maka compiler men-generate relocatable address – Fase Eksekusi (Execution time) • Pengikatan alamat ditunda sampai waktu runtime jika proses dapat dipindah selama eksekusi program dari satu segmen memori ke segmen memori lain. • Perlu dukungan hardware untuk pemetaan alamat (contoh : register base dan limit).
Logical vs Physical Address Space • Terdapat dua jenis alamat memori – Logical address : alamat yang di-generate oleh CPU. Relatif untuk satu proses/program. – Physical address : alamat fisik dilihat dari sudut pandang main memory. Absolut untuk semua proses/program. • Logical address = Physical address JIKA address binding dilakukan pada fase kompilasi dan load. – Why? Karena physical address sudah ditentukan sebelum terjadi eksekusi • Logical address space : kumpulan logical addresses yang di-generate untuk sebuah program • Physical address space : kumpulan physical addresses yang di-generate untuk sebuah program • Q : Bagaimana jika logical address != physical address?
Memory-Management Unit (MMU) • Logical address perlu dipetakan ke physical address • Untuk melakukan pemetaan pada saat run -time, butuh hardware memorymanagement unit (MMU) • Terdapat berbagai metode pemetaan alamat memori – Metode paling sederhana menggunakan relocation register – Metode lain dibahas pada bagian selanjutnya
Dynamic Relocation dengan Relocation Register • Metode sederhana pemetaan alamat memori • Physical address = logical address + relocation register • Contoh : – Sebuah program membuat pointer ke logical address 346 – Butuh physical address agar pointer tersebut dapat disimpan di memory – MMU memetakan logical address 346 ke physical address 14000+346 = 14346 • Apa kelemahannya? ?
Dynamic Loading • Dynamic Loading Sebuah routine/fungsi akan di-load ke memory hanya jika dipanggil • Awalnya, hanya main routine yang diload ke memory – Routing lain disimpan di disk • Contoh: – – Load routine main() ke memory Routing hitung() masih di disk Program memanggil fungsi hitung() Routing hitung() di load ke memory • Keuntungan : – Hemat memory, hanya load routine yang dibutuhkan saja int total=0; int hitung(int a, int b){ return a+b; } int main(){ printf("Program Hitung"); int hasil = hitung(5, 10); printf("Hasil"); }
Dynamic Linking • Kode program biasanya mengakses system library – Contoh : printf(), scanf(), System. out. println() • Bagaimana agar system library bisa dieksekusi? • Dua solusi : static dan dynamic linking • Static linking : pada saat compile, system library disisipkan ke file executable – Ukuran file exe jadi besar • Dynamic linking : system library dihubungkan (linking) saat eksekusi int total=0; int hitung(int a, int b){ return a+b; } int main(){ printf("Program Hitung"); int hasil = hitung(5, 10); printf("Hasil"); }
Swapping
Masalah • Bagaimana jika alokasi main memory tidak mencukupi? Padahal setiap program yang akan dieksekusi harus di-load ke memory.
Swapping • Sebuah porses dapat ditukar sementara keluar dari memori ke backing store, dan kemudian dibawa kembali ke memori untuk melanjutkan eksekusi. – Backing store : disk, ukuran cukup besar, kecepatan akses cepat • Roll out, roll in – swapping menggunakan algoritma priotity based scheduling – Proses dengan prioritas rendah ditukar sehingga proses dengan prioritas tinggi dapat diload dan dieksekusi. • Bagian terbesar dari waktu swap adalah waktu transfer; – Total waktu transfer berbanding lurus dengan jumlah memori yang diswap • Contoh : swap di Windows dan Linux
Skema Swapping
Melihat Penggunaan Swap
Metode Alokasi Memori
Latar Belakang • Memori adalah sumber daya terbatas • Memori harus dialokasikan untuk dua komponen : sistem operasi dan proses user • Masalah Bagaimana mengalokasikan sumber daya memori yang terbatas itu? • Metode Alokasi Memori : cara yang dipakai oleh sistem operasi untuk mengalokasikan memori bagi process-process yang berjalan – Contiguous Memory Allocation – Segmentation – Paging
Contoh Kasus Sistem Operasi Free Memory 100 M Proses Kebutuhan Memori Waktu Masuk P 1 25 M 0 P 2 20 M 1 P 3 15 M 2 P 4 40 M 3 P 5 15 M 4
Contiguous Memory Allocation (Alokasi Memori Berurutan)
Contiguous Allocation / Alokasi Berurutan • Memori dibagi menjadi satu/beberapa partisi • Satu partisi hanya dialokasikan untuk satu proses • Berdasarkan jumlah partisinya, metode ini dibagi menjadi dua : – Single partition – Multiple partition
Single Partition Contiguous Allocation (2) • Memori dibagi menjadi SATU partisi/bagian • Hanya ada satu proses yang dapat diload ke memory sekali waktu – Tidak ada konsep concurrency atau parralellism • Masalah Bagaimana caranya agar beberapa proses bisa diload secara bersamaan?
Multiple Partition Contiguous Allocation (2) • Memori dibagi menjadi beberapa partisi/bagian • Setiap partisi dialokasikan untuk satu proses – Jumlah proses yang dapat berjalan secara concurrent = jumlah partisi • Ada dua cara pembagian partisi berdasarkan cara penentuan ukuran partisi – Fixed-size partition – Variable-size partition
Contiguous Allocation dengan fixed-size • Pada fixed-size, ukuran tiap partisi bersifat statis dan tidak dapat diubah sepanjang sistem operasi berjalan • Pada memori terdapat hole/partisi bebas – hole : blok dari memori yang tidak terpakai – ukuran hole statis • Mekanisme – Jika proses datang, akan dialokasikan ke memory pada hole yang cukup untuk proses tersebut. • Sisa alokasi pada suatu hole tidak dapat dipakai proses lain – Jika proses selesai, alokasinya jadi hole
Contoh Kasus OS OS Proses Memori Hole 1 (25 M) P 1 25 M Hole 2 (30 M) P 2 20 M P 3 25 M Hole 3 (25 M) P 4 20 M Hole 4 (20 M) P 4 (20 M) sisa 10 M
Contiguous Allocation dengan variable-size • Pada variable-size, ukuran tiap partisi disesuaikan dengan kebutuhan memori tiap proses • Pada memori terdapat hole/partisi bebas – hole : blok dari memori yang tidak terpakai • Mekanisme – Jika proses datang, akan dialokasikan ke memory pada hole yang cukup untuk proses tersebut. – Jika proses selesai, alokasinya jadi hole – Dua hole yang bertetangga dapat bergabung
Contoh Kasus Sistem Operasi Hole 100 M Proses Kebutuhan Memori Waktu Masuk Waktu Exec P 1 25 M 0 5 P 2 20 M 1 3 P 3 15 M 2 2 P 4 40 M 3 7 P 5 15 M 4 6
Contoh (2) OS OS OS P 1(25 M) P 1(25 M) Hole(25 M) P 2(20 M) P 5(15 M) P 3(15 M) Hole (20 M) Hole(40 M) P 4(40 M) 4 5 Hole(75 M) Hole(55 M) 0 1 2 3
Dynamic Storage-Allocation Problem • Ada beberapa metode untuk memasukkan n proses baru ke hole yang tersedia : – First-Fit • Alokasi lubang pertama yang cukup untuk proses. – Best-Fit • Alokasi lubang terkecil yang cukup untuk proses. • Harus mencari ke seluruh daftar berdasarkan urutan ukuran. • Menghasilkan lubang sisa yang terkecil – Worst-Fit • Alokasi ke lubang terbesar
Contoh OS Hole(25 M) P 5(15 M) Hole (15 M) P 4(40 M) Hole(30 M) • P 6 masuk dengan kebutuhan memori 10 M • Di hole mana P 6 akan dialokasikan? – First-fit – Best-fit – Worst-fit : Hole 1 : Hole 2 : Hole 3
Masalah 1 : Fragmentasi Eskternal OS Hole(25 M) P 5(15 M) Hole (15 M) P 4(40 M) Hole(30 M) • Misal P 6 masuk dengan kebutuhan memori 40 M • Total hole tersedia = Hole 1 + Hole 2 + Hole 3 = 70 M • Q : Bisakah P 6 bisa dialokasikan? • A : Tidak. Why? – Ada fragmentasi eksternal : total memori tersedia cukup, tapi mereka tidak berurutan (contagious)
Masalah 2 : Fragmentasi Internal OS Hole(25 M) P 5(15 M) Hole (15 M) P 4(40 M) Hole(30 M) • Misal P 6 masuk dengan kebutuhan memori 29 M • P 6 bisa dialokasikan di Hole 3 • Tapi, terjadi fragmentasi internal – Jumlah alokasi cukup, tapi sisa sedikit sekali hole untuk bisa dipakai proses lain.
Solusi Fragmentasi Eksternal OS Hole(25 M) Hole (15 M) Hole(30 M) P 5(15 M) P 4(40 M) • Fragmentasi eksternal dapat diatasi dengan compaction – Geser dan pindah lokasi memori dari setiap proses • Hanya memungkinkan jika pengalamatan memori dilakukan pada saat eksekusi
Proteksi Memori • Alokasi memori untuk satu proses perlu diproteksi agar tidak diakses proses lain • Bagaimana caranya? – Gunakan dua register : relocation register dan limit register – Process yang dieksekusi CPU meminta akses ke memory pada alamat tertentu – Jika alamat yang diminta < limit, ijinkan – Untuk mengakses, logical address + relocation register untuk mendapatkan physical address.
Segmentation
Segmentation • Program dibagi menjadi beberapa 3 segmen/komponen – – – Fungsi main Sub-fungsi Variabel global Standard Lib. Segment heap Stack thread 2 • Tiap segment diberi nomor segmen s 1 • Tiap segment kemudian dialokasikan ke memory 4 • Tiap segment dari satu process TIDAK HARUS dialokasikan berurutan int total=0; int hasil=0; int hitung(int a, int b){ return a+b; } int main(){ hasil = hitung(total, 10); printf("Hasil %d", hasil); }
Contoh Alokasi 3 2 int total=0; int hasil=0; int hitung(int a, int b){ return a+b; } OS 100 Segment 1 130 150 Segment 2 170 1 4 int main(){ hasil = hitung(total, 10); printf("Hasil %d", hasil); } 200 Segment 3 240 Segment 4 250
Pemetaan Logical Address ke Physical Address (1) • Physical memory space tiap segment dibatasi oleh dua register : base dan limit • Logical address data/instruksi dalam suatu segment berbentuk: <nomor segment, offset> – offset : nomor index data/instruksi di suatu segment, nilai offset antara 0 - limit • Pemetaan dilakukan oleh segmentation hardware (MMU) • MMU menyimpan segmentation table yang berisi limit dan base dari setiap segment di physical memory – Nomor segment dijadikan index dari table
Bagaimana cara kerjanya? • Process yang dieksekusi CPU akan mengakses data/instruksi pada segment s dan offset d • MMU melihat nilai limit dan base dari segment s pada segment table • MMU mengecek apakah offset d berada jangkauan limit – Cek apakah d < limit? • Jika YA, maka physical address = offset d + base
Contoh 3 2 1 4 int total=0; int hasil=0; OS int hitung(int a, int b){ return a+b; } int main(){ hasil = hitung(total, 10); printf("Hasil %d", hasil); } Segment Base Limit 1 100 30 2 150 20 3 200 40 4 240 10 Segment Table 100 Segment 1 130 150 Segment 2 170 200 Segment 3 240 Segment 4 250 Physical Memory • Program mengakses variable hasil dengan logical address <3, 20> • Untuk segment 3, base=200, limit=40 • Cek apakah offset<limit – 20 < 40? Ya • Physical address variable hasil = (base segment 3)+offset – Physical address = 200+20 = 220
Paging
Paging • Physical memory dibagi menjadi beberapa frame dengan ukuran sama • Logical memory dibagi menjadi beberapa block dengan ukuran sama yang disebut pages – How? Backing store (disk) dibagi menjadi beberapa block dengan ukuran sama • Dengan cara ini, satu page bisa menempati satu frame di memori
Contoh Alokasi 0 4 8 12 16 20 24 28 32 • Misal, ukuran page = frame = 4 bytes • Kapasitas physical memory = 32 bytes
Pemetaan Logical Address ke Physical Address (1) • Logical address data/instruksi dalam suatu page berbentuk: <nomor page, offset> – offset : nomor index data/instruksi di suatu page, nilai offset antara 0 – ukuran page • Pemetaan dilakukan oleh paging hardware (MMU) • MMU menyimpan page table yang berisi base address atau frame number dari setiap page di physical memory – Nomor page dijadikan index dari table
Bagaimana cara kerjanya? • Process yang dieksekusi CPU akan mengakses data/instruksi pada page p dan offset d • MMU melihat nilai base dari page p pada segment table • physical address = offset d + base
Contoh Page 2 Page 1 Page 0 Logical Addr. page Base • Misal p d data 0 4 0 0 A 1 16 0 1 B 2 12 0 2 C Page Table 0 3 D 1 0 E 1 1 F 16 1 2 G 20 1 3 H 2 0 I 24 2 1 J 28 2 2 K 2 3 L Logical Memory 0 4 8 12 Physical Memory – Kapasitas physical memory 28 bytes – Ukuran page = frame = 4 bytes – Ukuran 1 karakter = 1 byte • “C” punya logical address <0, 2> • Di page table, base addr dari page 0 adalah 4 • Maka physical address-nya = 4 + 2 = 6
Kelebihan dan Kelemahan Paging • Karena ukuran page = frame, maka setiap frame dapat menampung satu page – Tidak ada fragmentasi eksternal • Tapi, tetap ada fragmentasi internal. Contoh : – Ukuran page = frame = 2048 bytes – Sebuah proses butuh 72766 bytes = 35 page + 1086 bytes – Di physical memory dialokasikan 36 frame dimana di salah satu frame terjadi fragmentasi internal sebesar 2048 -1086 = 962 bytes – Solusi : ukuran page harus kecil untuk meminimalisir fragmentasi internal
Dukungan Perangkat Keras Paging • Setiap OS mempunyai cara berbeda untuk implementasi page table – Satu page table untuk setiap proses. Di PCB ada pointer ke table – Satu/beberapa table untuk semua proses • Ada beberapa cara implementasi page table di perangkat keras – Register – Page table base register (PTBR) – Translation Look-Ahead Buffer (TLB)
Page Table di Register • Page table dapat disimpan di register • Cara paling sederhana implementasi page table di perangkat keras • Cocok jika jumlah baris di page table kecil – Misal 256 baris – Padahal computer saat ini punya jumlah baris di page table yang sangat banyak.
Page Table dengan PTBR • Page table disimpan di main memory • Register menyimpan Page Table Base Register (PTBR) untuk menunjukkan lokasi page table di memory • Kelemahan : – Butuh dua kali akses memory : akses page table dan akses data/instruksi – Page table bisa jadi mengalami proses swapping
Page Table dengan TLB – Translation Look-Ahead Buffer (TLB) : perangkat keras untuk cache lookup data. • Entri TLB mengandung key, value • Kapasitas TLB hanya 32 -1024 entri • TLB hanya menyimpan beberapa page table, sisanya simpan di memori – Bagaimana cara kerjanya? • CPU pertama mencari entri dengan nomor page p pada page table di TLB • Jika ada, gunakan entri tersebut untuk cari physical address • Jika tidak ada, cari entri dengan page p pada page table di memory • Gunakan entri tersebut • Tambahkan entri itu ke TLB
Proteksi pada Paging • Proteksi pada paging dapat dilakukan dengan menambahkan 1 kolom bernilai valid/invalid (1 bit) • Jika satu proses akan mengakses satu alamat bernilai invalid, maka dia tidak diijinkan mengaksesnya
Shared Page • Metode Paging menawarkan kemampuan berbagi page antar beberapa proses • Contoh – Ada 3 user menjalankan text editor yang terdiri atas 150 KB code dan 50 KB data – Tanpa shared page, butuh 3 x 200 KB = 600 KB alokasi memori – Dengan shared page, butuh 150 + (3 x 50) = 300 KB
Struktur Page Table
Latar Belakang Masalah • Komputer modern saat ini mendukung pengalamatan memory berukuran besar – Komputer 32 -bit mendukung pengalamatan sampai 232 = 4 GB • Jumlah entri pada page table menjadi sangat besar. Contoh : – Pada komputer 32 -bit dengan ukuran page 4 KB (212) maka akan ada 220 entri page table – Implementasi page table secara linear tidak cocok • Solusi : Harus ada perubahan struktur page table – Hierarchical Paging – Hashed Page Table – Inverted Page Tables
Hierarchical Paging • Page table disusun secara berjenjang – Alamat pada page table menunjuk ke alamat lain page table baru menunjuk ke isi page table
Bagaimana cara implementasinya? • Logical address dibagi menjadi beberapa bagian tergantung jumlah jenjang. Misalnya untuk 2 jenjang pada computer 32 -bit. • Translasi alamat dapat dilakukan sebagai berikut
Hashed Page Tables • Page table di-index dengan hash dari nomor page p • Satu entri pada page table berisi list page dengan hash yang sama
Inverted Page Table • Page table di-index dengan menggunakan process id (pid) • Logical address terdiri atas <process-id, page-number, offset>
Contoh pada Arsitektur Intel 32 -bit, 64 -bit dan ARM
Contoh pada Berbagai Arsitektur • Baca textboot Silberschatz section 8. 7 dan 8. 8 halaman 383 -388
Terima Kasih
- Slides: 73