Sebelum kita membahas secara spesifik pdflush
, kjournald, and
kswapd`, pertama mari kita sedikit latar belakang tentang apa yang sebenarnya kita bicarakan dalam hal Kernel Linux.
Arsitektur GNU / Linux
Arsitektur GNU / Linux dapat dianggap sebagai 2 ruang:
Antara Ruang Pengguna dan Ruang Kernel duduk Perpustakaan GNU C ( glibc
). Ini menyediakan antarmuka panggilan sistem yang menghubungkan kernel ke aplikasi ruang pengguna.
Ruang Kernel dapat dibagi lagi menjadi 3 level:
- Antarmuka Panggilan Sistem
- Kode Kernel Independen Arsitektur
- Kode Tergantung Arsitektur
System Call Interface sesuai namanya, menyediakan antarmuka antara glibc
dan kernel. The Arsitektur Independen Kode Kernel terdiri dari unit logis seperti VFS (Virtual File System) dan VMM (Virtual Memory Management). The Dependent Kode Arsitektur adalah komponen yang prosesor dan kode platform-spesifik untuk arsitektur hardware tertentu.
Diagram Arsitektur GNU / Linux
Untuk sisa artikel ini, kami akan memusatkan perhatian kami pada unit logis VFS dan VMM di dalam Ruang Kernel.
Subsistem dari GNU / Linux Kernel
Subsistem VFS
Dengan konsep tingkat tinggi tentang bagaimana kernel GNU / Linux terstruktur, kita dapat mempelajari sedikit lebih dalam tentang subsistem VFS. Komponen ini bertanggung jawab untuk menyediakan akses ke berbagai perangkat penyimpanan blok yang akhirnya memetakan ke sistem file (ext3 / ext4 / dll.) Pada perangkat fisik (HDD / dll.).
Diagram VFS
Diagram ini menunjukkan bagaimana a write()
dari proses pengguna melintasi VFS dan akhirnya turun ke driver perangkat di mana ia ditulis ke media penyimpanan fisik. Ini adalah tempat pertama yang kami temui pdflush
. Ini adalah daemon yang bertanggung jawab untuk menyiram data kotor dan blok buffer metadata ke media penyimpanan di latar belakang. Diagram tidak menunjukkan ini tetapi ada daemon lain kjournald
,, yang duduk di samping pdflush
, melakukan tugas yang sama menulis blok jurnal kotor ke disk. CATATAN: Blok jurnal adalah cara sistem file seperti ext4 & JFS melacak perubahan pada disk dalam file, sebelum perubahan itu terjadi.
Rincian di atas dibahas lebih lanjut dalam makalah ini .
Ikhtisar write()
langkah - langkah
Untuk memberikan ikhtisar sederhana tentang operasi sistem I / O, kami akan menggunakan contoh di mana fungsi write()
dipanggil oleh aplikasi User Space.
- Suatu proses meminta untuk menulis file melalui
write()
panggilan sistem.
- Kernel memperbarui cache halaman yang dipetakan ke file.
- Utas kernel pdflush menangani pembilasan cache halaman ke disk.
- Lapisan sistem file menempatkan masing-masing buffer blok ke
bio struct
( lihat 1.4.3, “Block layer” pada halaman 23 ) dan mengirimkan permintaan tulis ke layer device block.
- Lapisan perangkat blok mendapat permintaan dari lapisan atas dan melakukan operasi elevator I / O dan menempatkan permintaan ke dalam antrian permintaan I / O.
- Driver perangkat seperti SCSI atau driver khusus perangkat lainnya akan menangani operasi penulisan.
- Firmware perangkat disk melakukan operasi perangkat keras seperti mencari head, rotasi, dan transfer data ke sektor pada platter.
Subsistem VMM
Melanjutkan penyelaman kami yang lebih dalam, kami sekarang dapat melihat ke subsistem VMM. Komponen ini bertanggung jawab untuk menjaga konsistensi antara memori utama (RAM), swap, dan media penyimpanan fisik. Mekanisme utama untuk menjaga konsistensi adalah bdflush
. Karena halaman memori dianggap kotor, mereka harus disinkronkan dengan data yang ada di media penyimpanan. bdflush
akan berkoordinasi dengan pdflush
daemon untuk menyinkronkan data ini dengan media penyimpanan.
Diagram VMM
Menukar
Ketika memori sistem menjadi langka atau pengatur waktu swap kernel berakhir, kswapd
daemon akan berusaha untuk membebaskan halaman. Selama jumlah halaman gratis tetap di atas free_pages_high
, kswapd
tidak akan melakukan apa-apa. Namun, jika jumlah halaman gratis turun di bawah ini, maka kswapd
akan memulai proses reklamasi halaman. Setelah kswapd
menandai halaman untuk dipindahkan, bdflush
akan dengan hati-hati menyinkronkan setiap perubahan luar biasa ke media penyimpanan, melalui pdflush
daemon.
Referensi & Bacaan Lebih Lanjut