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).

Summary

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.