Back To IF2130 Sistem Operasi
Topic
Questions/Cues
- Bagaimana Alokasi Frame dilakukan? (Equal vs. Proportional)
- Global vs. Local Page Replacement?
- Apa itu Thrashing & Penyebabnya?
- Cara Mencegah Thrashing? (Working-Set & PFF)
- Apa itu Kompresi Memori?
- Alokasi Memori Kernel? (Buddy & Slab)
- Pertimbangan: Prepaging?
- Pertimbangan: Ukuran Page?
- Pertimbangan: Struktur Program?
- Pertimbangan: I/O & Locked Pages?
- Konsep Tambahan: NUMA & Major/Minor Faults?
Kebijakan Tingkat Sistem
- Alokasi Frame (Allocation of Frames): Ini adalah kebijakan tentang bagaimana OS membagi-bagikan frame fisik yang tersedia kepada semua proses yang berjalan.
- Alokasi Sama Rata (Equal Allocation): Cara paling sederhana. Jika ada m frame dan n proses, setiap proses mendapat jatah m/n frame. Tidak adil jika ada proses kecil dan besar.
- Alokasi Proporsional (Proportional Allocation): Mengalokasikan frame ke setiap proses sesuai dengan ukurannya. Proses yang lebih besar mendapat lebih banyak frame. Ini lebih adil.
- Penggantian Global vs. Lokal (Global vs. Local Replacement)
- Penggantian Global: Ketika sebuah proses butuh frame baru, ia boleh mengambil frame dari proses mana pun di sistem (biasanya yang prioritasnya lebih rendah). Strategi ini lebih fleksibel dan dapat meningkatkan throughput sistem secara keseluruhan.
- Penggantian Lokal: Setiap proses hanya boleh memilih “korban” dari jatah frame yang sudah dialokasikan untuknya. Ini mengisolasi performa setiap proses, sehingga satu proses yang “boros” tidak akan mengganggu proses lain, tetapi bisa jadi kurang efisien.
Thrashing
Definisi Thrashing Kondisi di mana sebuah proses menghabiskan lebih banyak waktu untuk paging (memuat dan mengeluarkan page dari disk) daripada melakukan pekerjaan komputasi yang sebenarnya.
Penyebab Tingkat multiprogramming terlalu tinggi sehingga tidak ada cukup frame memori fisik untuk menampung page-page aktif (working set) dari semua proses.
Gejala Utilitas CPU anjlok secara drastis. Saat OS melihat CPU nganggur, ia mungkin keliru mengira perlu menambah proses baru, yang justru memperparah thrashing.
Cara Mencegah Thrashing:
- Model Set Kerja (Working-Set Model):
- Working set adalah kumpulan page yang baru saja diakses oleh sebuah proses dalam jendela waktu tertentu (Δ).
- OS memonitor working set setiap proses. Jika total ukuran working set dari semua proses melebihi total frame yang tersedia, OS akan menangguhkan (suspend) salah satu proses untuk membebaskan frame dan meredakan tekanan.
- Frekuensi Page Fault (Page-Fault Frequency - PFF):
- Metode ini mengontrol tingkat page fault secara langsung. OS menetapkan ambang batas atas dan bawah.
- Jika page fault rate suatu proses melebihi batas atas, OS memberinya frame tambahan.
- Jika di bawah batas bawah, OS mengambil kembali frame darinya.
Praktisnya, thrashing dan swapping yang diakibatkannya berdampak negatif pada kinerja. Praktik terbaik saat ini adalah menyertakan cukup memori fisik untuk menghindari thrashing dan swapping sebisa mungkin.
Teknik dan Pertimbangan Lainnya
Kompresi Memori (Memory Compression):
- Alternatif modern untuk paging ke disk, terutama populer di perangkat seluler.
- Daripada mengusir page kotor ke disk, beberapa page “dipadatkan” dan disimpan dalam satu frame khusus di RAM.
- Jika page terkompresi ini dibutuhkan lagi, proses dekompresi dari RAM jauh lebih cepat daripada membacanya dari disk.
Alokasi Memori Kernel: Kernel OS juga butuh memori, dan alokasinya harus sangat cepat dan efisien. Dua strategi populer:
- Buddy System: Memori dibagi menjadi blok-blok berukuran pangkat dua (misal, 4KB, 8KB, 16KB, …). Saat ada permintaan, dicarikan blok “pasangan” (buddy) terkecil yang cukup. Metode ini cepat dalam menggabungkan kembali blok-blok yang telah dibebaskan.
- Slab Allocation: OS membuat cache khusus untuk setiap jenis objek kernel yang sering dibuat (misal, PCB, inode). Setiap cache berisi satu atau lebih “slab”, yaitu beberapa page fisik berdekatan yang sudah diisi dengan objek-objek siap pakai. Ini menghilangkan fragmentasi internal dan sangat cepat.
Prepaging: Upaya untuk memuat page-page ke memori sebelum mereka benar-benar diminta. Tujuannya adalah mengurangi badai page fault yang biasanya terjadi saat proses pertama kali dimulai. Namun, ini bisa boros jika page yang dimuat ternyata tidak digunakan.
Ukuran Page (Page Size): Tidak ada ukuran “terbaik” yang universal. Ini adalah trade-off yang kompleks:
- Kecil: Mengurangi fragmentasi internal.
- Besar: Mengurangi ukuran page table dan lebih efisien untuk I/O disk.
Tren saat ini adalah mendukung beberapa ukuran page sekaligus (huge pages).
Struktur Program: Cara seorang programmer menulis kode dapat sangat memengaruhi kinerja paging. Mengakses data secara lokal (misalnya, memproses array baris demi baris jika disimpan secara baris) akan menghasilkan lebih sedikit page fault daripada mengaksesnya secara acak.
I/O & Locked Pages: Jika sebuah page sedang digunakan untuk transfer I/O (misalnya, sebagai buffer), page tersebut tidak boleh diusir dari memori. OS menangani ini dengan “mengunci” (locking atau pinning) page tersebut di memori sampai operasi I/O selesai.
Konsep Tambahan:
- NUMA (Non-Uniform Memory Access): Pada sistem server modern, kecepatan akses ke RAM bisa berbeda tergantung pada jarak antara CPU dan modul RAM. OS yang “sadar-NUMA” akan berusaha mengalokasikan memori untuk sebuah proses sedekat mungkin dengan CPU yang menjalankannya.
- Major vs. Minor Faults:
- Major Fault: Page fault yang membutuhkan akses disk (lambat).
- Minor Fault: Page fault di mana page sudah ada di memori tetapi belum dipetakan ke proses (misal, shared library). Hanya perlu pembaruan page table (cepat).
Manajemen memori tingkat lanjut berfokus pada kebijakan sistem untuk mengoptimalkan kinerja, seperti menentukan alokasi frame untuk setiap proses dan memilih antara strategi penggantian global atau lokal. Masalah kinerja terbesar adalah thrashing, yang dapat dicegah dengan memonitor working set atau frekuensi page fault. Selain paging tradisional, teknik modern seperti kompresi memori menawarkan alternatif yang lebih cepat, sementara kernel menggunakan alokator khusus seperti Buddy System dan Slab Allocation. Pada akhirnya, kinerja keseluruhan juga dipengaruhi oleh berbagai pertimbangan praktis seperti ukuran page, struktur program yang baik, dan penanganan I/O yang aman.
Additional Information (Optional)
Aspek Teknis Lanjutan:
- Detail Slab Allocator: Konsep slab terdiri dari tiga komponen utama:
- Cache: Satu cache dibuat untuk setiap jenis objek kernel (misal,
kmem_cache_create()untuk membuat cachetask_struct).- Slab: Terdiri dari satu atau lebih page fisik yang berdekatan. Sebuah slab bisa dalam kondisi: full (semua objek terpakai), partial (ada yang terpakai, ada yang kosong), atau empty (semua objek bebas). Permintaan alokasi akan dipenuhi dari slab yang partial terlebih dahulu.
- Object: Objek kernel itu sendiri yang disimpan di dalam slab. Struktur ini sangat efisien untuk alokasi dan dealokasi objek berukuran sama yang sering dilakukan.
- File yang Dipetakan ke Memori (Memory-Mapped Files -
mmap): Ini adalah fitur OS modern yang sangat kuat yang menggunakan infrastruktur demand paging untuk tujuan yang berbeda. Panggilan sistemmmap()memetakan sebuah file di disk langsung ke ruang alamat virtual sebuah proses.
- Membaca dari alamat memori tersebut akan secara transparan menyebabkan page fault dan OS akan memuat page yang sesuai dari file.
- Menulis ke alamat memori tersebut akan menandai page sebagai dirty, dan pada akhirnya akan ditulis kembali ke file di disk oleh OS.
- Ini adalah mekanisme dasar untuk loader program dan juga cara yang sangat efisien untuk melakukan I/O file tanpa panggilan
read()/write()eksplisit.- Memori Anonim vs. Berbasis File (Anonymous vs. File-Backed Memory):
- Memori Anonim: Memori yang dialokasikan tanpa diasosiasikan dengan file apa pun di disk (misalnya, dari
malloc()untuk heap atau untuk stack). Jika page ini perlu diusir, ia harus ditulis ke area khusus di disk yang disebut swap space.- Memori Berbasis File: Memori yang dipetakan dari sebuah file (misal, dari
mmap()atau saat memuat kode program). Jika page ini perlu diusir, ia akan ditulis kembali ke file aslinya di disk.Sumber & Referensi Lanjutan:
- Laman
mandi Linux:man mmapmemberikan detail teknis tentang panggilan sistemmmap.- “Understanding the Linux Kernel” oleh Bovet & Cesati: Buku ini memberikan pembahasan yang sangat mendalam tentang implementasi nyata dari alokator memori (Slab, SLUB, SLOB) dan manajemen memori virtual di dalam kernel Linux.
Eksplorasi Mandiri:
Mencoba
mmap: Coba buat program sederhana dalam bahasa C atau Python yang:
- Membuat sebuah file besar di disk.
- Menggunakan
mmapuntuk memetakan file tersebut ke memori.- Mengubah isi file dengan menulis langsung ke pointer memori yang dikembalikan oleh
mmap.- Tutup pemetaan dan periksa isi file di disk untuk memverifikasi bahwa perubahan Anda telah disimpan. Ini akan memberikan pemahaman praktis tentang bagaimana demand paging bekerja untuk I/O file.