Baru-baru ini melihat pertanyaan yang memicu pemikiran ini. Tidak dapat menemukan jawaban di sini atau melalui mesin Google. Pada dasarnya, saya tertarik untuk mengetahui bagaimana arsitektur I / O kernel berlapis. Misalnya, apakah kjournald
pengiriman ke pdflush
atau sebaliknya? Asumsi saya adalah bahwa pdflush
(menjadi lebih umum untuk penyimpanan massal I / O) akan duduk di tingkat yang lebih rendah dan memicu SCSI / ATA / perintah apa pun yang diperlukan untuk benar-benar melakukan penulisan, dan kjournald
menangani struktur data sistem file tingkat yang lebih tinggi sebelum menulis. Saya bisa melihatnya sebaliknya, meskipun, dengan kjournald
langsung berinteraksi dengan struktur data sistem file dan pdflush
bangun setiap sekarang dan kemudian untuk menulis halaman pagecache kotor ke perangkat melaluikjournald
. Mungkin juga keduanya tidak berinteraksi sama sekali karena alasan lain.
Pada dasarnya: Saya perlu beberapa cara untuk memvisualisasikan (grafik atau hanya penjelasan) arsitektur dasar yang digunakan untuk mengirim I / O ke penyimpanan massal dalam kernel Linux.
Jawaban:
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:
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 temuipdflush
. 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 lainkjournald
,, yang duduk di sampingpdflush
, 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 - langkahUntuk memberikan ikhtisar sederhana tentang operasi sistem I / O, kami akan menggunakan contoh di mana fungsi
write()
dipanggil oleh aplikasi User Space.write()
panggilan sistem.bio struct
( lihat 1.4.3, “Block layer” pada halaman 23 ) dan mengirimkan permintaan tulis ke layer device block.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 denganpdflush
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 atasfree_pages_high
,kswapd
tidak akan melakukan apa-apa. Namun, jika jumlah halaman gratis turun di bawah ini, makakswapd
akan memulai proses reklamasi halaman. Setelahkswapd
menandai halaman untuk dipindahkan,bdflush
akan dengan hati-hati menyinkronkan setiap perubahan luar biasa ke media penyimpanan, melaluipdflush
daemon.Referensi & Bacaan Lebih Lanjut
sumber