Artikel ini adalah bagian dari seri ikhtisar kernel UNIX kami yang sedang berjalan.
Pada artikel seri kernel sebelumnya, kita telah membahas tentang memori virtual Linux dan paging permintaan.
Meskipun memori virtual dan paging permintaan adalah blok bangunan dari sistem manajemen memori Linux, ada berbagai konsep lain yang membuat manajemen memori Linux sangat kuat.
Dalam artikel ini kita akan mencoba menyentuh beberapa konsep ini (Swapping, Caching, dan Shared virtual memory).
Aku. Bertukar Linux
Misalkan ada situasi di mana suatu proses perlu memiliki salah satu halaman virtualnya ke dalam memori fisik tetapi memori fisik tidak memiliki ruang untuk halaman lain yang akan dibawa masuk.
Apa yang akan terjadi dalam kasus ini?
Nah, OS harus mengelola situasi ini dengan membiarkan halaman ini berada di memori fisik. Namun agar hal ini terjadi, halaman yang sudah berada di memori fisik perlu dibuang.
Sekarang, jika halaman yang akan dibuang berasal dari file gambar atau data yang dapat dieksekusi dan halaman tersebut belum ditulis, maka halaman tersebut dapat dengan mudah dibuang karena kapan pun diperlukan, halaman yang sama dapat dengan mudah dibawa kembali ke memori fisik dari file yang dapat dieksekusi yang sama. file gambar atau data.
Tapi misalkan halaman yang akan dibuang oleh OS adalah halaman yang telah ditulisi, maka halaman seperti ini dikenal sebagai halaman kotor.
Halaman kotor harus dipertahankan agar dapat digunakan pada tahap selanjutnya. Ketika halaman kotor dibuang dari memori fisik kemudian disimpan dalam file khusus yang dikenal sebagai file swap. Ini dikenal sebagai bertukar .
Waktu yang dibutuhkan untuk mengakses halaman swap cukup besar jika dibandingkan dengan kecepatan prosesor.
Jadi kita melihat bahwa OS harus memiliki algoritma swapping yang baik untuk memutuskan membuang vs menukar. Algoritme swap yang tidak efisien dapat menyebabkan fenomena di mana-dalam OS menjadi sangat sibuk dalam bertukar file dan kemudian membaca kembali ke memori fisik yang sebenarnya menghabiskan sangat sedikit waktu untuk pekerjaan nyata yang memproses permintaan. Fenomena ini dikenal sebagai memukul .
Juga, Satu set halaman yang prosesnya terus menerus digunakan dikenal sebagai working set . Algoritme swap yang baik jarang akan membiarkan OS mengalami thrashing dan juga akan memastikan bahwa rangkaian kerja dari semua proses selalu ada di memori fisik.
Linux memutuskan halaman mana yang akan disimpan dalam memori dan halaman mana yang akan dihapus menggunakan skema 'Paling tidak digunakan ‘.
Dalam skema ini, setiap halaman dalam memori fisik memiliki usia yang terkait dengannya. Usia berubah dengan fakta bahwa halaman sedang diakses atau tidak. Jika halaman tersebut sering diakses maka halaman tersebut seharusnya berusia cukup muda sedangkan jika halaman tidak diakses maka halaman tersebut menjadi lebih tua. Halaman usia yang lebih tua ditawarkan untuk ditukar/dibuang dari memori fisik.
II. Tembolok
Untuk mendapatkan hasil maksimal dari sistem, prosesor cepat dan sistem operasi sedang dikembangkan. Meskipun ini bagus, tetapi satu aspek yang membuat prosesor, sistem operasi, dan interaksinya lebih cepat adalah konsep cache.
Beberapa cache penting di Linux dijelaskan di bawah ini.
1. Cache Tukar Linux
Seperti yang sudah dibahas di atas, hanya halaman kotor yang ditukar karena kita perlu mempertahankan halaman yang telah dimodifikasi. Juga, misalkan jika halaman telah dimodifikasi dan ditukar, sekarang jika halaman yang sama dibawa kembali ke memori fisik dan sekarang ada kebutuhan untuk menukarnya lagi tetapi halaman tersebut belum dimodifikasi lebih jauh maka tidak perlu menukar ini halaman. Buang saja karena versi halaman ini sudah ada di file swap. Ini menghemat banyak waktu yang jika tidak akan terbuang sia-sia.
Sekarang untuk mengimplementasikan konsep di atas, Linux menggunakan cache swap.
- Sebuah tembolok tukar tidak lain adalah daftar entri tabel halaman dengan satu entri per halaman fisik.
- Setiap entri sesuai dengan halaman yang ditukar bersama dengan informasi tentang file swap tempat halaman tersebut disimpan beserta lokasi tepatnya di file swap.
- Jika ada entri tabel halaman dalam cache swap yang bukan nol, maka ini mewakili halaman yang disimpan dalam file swap dan halaman tersebut belum dimodifikasi lebih lanjut.
- Jika sebuah halaman memiliki entrinya di cache swap dan dimodifikasi lebih lanjut, entrinya dari cache swap akan dihapus.
- Dengan cara ini, cache hanya berisi informasi tentang halaman yang tidak diubah sejak terakhir kali ditukar.
Jadi kami melihat bahwa cache swap sangat membantu dalam meningkatkan efisiensi mekanisme swapping.
2. Tembolok Perangkat Keras
Seperti yang telah kita bahas di artikel sebelumnya bahwa prosesor membaca entri tabel halaman untuk mengubah alamat virtual ke alamat fisik. Biasanya prosesor menyimpan informasi entri tabel halaman dalam cache perangkat keras .
Cache perangkat keras ini terdiri dari Translational look-side buffers atau TLB s.
Setiap kali prosesor perlu menerjemahkan alamat virtual, maka prosesor mencoba mengambil informasi entri tabel halaman dari TLB. Jika ia menemukan entri tersebut, ia akan melanjutkan lebih jauh tetapi jika prosesor tidak dapat menemukan entri tersebut, ia akan memberi tahu OS bahwa telah terjadi kesalahan TLB dan meminta OS untuk memperbaikinya.
Untuk mengirimkan informasi miss TLB ini ke OS, beberapa jenis mekanisme pengecualian digunakan yang bergantung pada prosesor. Sekarang, OS menemukan entri yang benar dan memperbarui entri TLB dengannya. Ketika pengecualian dihapus (setelah OS memperbaiki masalah) maka prosesor kembali mencoba mencari entri TLB dan kali ini menemukan entri yang valid.
3. Cache Penyangga Linux
Cache buffer berisi buffer data yang digunakan oleh driver perangkat blok.
Driver perangkat blok adalah yang beroperasi pada blok data yaitu dapat diakses dengan membaca atau menulis potongan atau blok data tetap. Cache buffer diindeks. Pengidentifikasi perangkat digunakan untuk tujuan pengindeksan.
Tembolok penyangga membuat membaca/menulis sangat efisien dan cepat. Misalnya pertimbangkan perangkat blok misalnya hard disk. Membaca/menulis hard disk membutuhkan file I/O yang cukup mahal jika kita melakukannya di hard disk setiap kali membaca atau menulis dilakukan. Cache buffer ini yang berada di antaranya, menghemat waktu saat membaca dan menulis selesai di sini dan sisanya ditangani oleh cache.
Untuk melihat aktivitas swap, memori, halaman, blok IO, traps, disk, dan cpu, Anda dapat menggunakan alat seperti vmstat atau sar.
III. Memori virtual bersama
Saat kode ditulis, pengembang sangat berhati-hati agar tidak ada bagian kode yang perlu diulang. Misalnya, fungsi digunakan dalam program sehingga bagian kode yang sama dapat dipanggil kapan saja dari dalam kode.
Sekelompok fungsi yang dapat digunakan secara umum disatukan ke dalam perpustakaan. Di sanalah muncul konsep memori bersama yang pernah dimuat ke dalam memori dan dapat digunakan oleh banyak proses.
Memori virtual memudahkan proses untuk berbagi memori ini karena alamat fisik dipetakan melalui tabel halaman dan ini sangat mungkin bahwa nomor bingkai halaman fisik yang sama dapat dipetakan dalam tabel halaman dari beberapa proses. Konsep ini dikenal sebagai memori virtual bersama .