Saya pikir Anda benar dalam segala hal.
Perbedaannya mudah dilihat jika Anda mengikuti langkah-langkah yang diperlukan saat melakukan booting:
initrd
- A
ramdev
perangkat blok dibuat. Ini adalah perangkat blok berbasis ram, yaitu hard disk simulasi yang menggunakan memori, bukan disk fisik. initrd
file dibaca dan dibuka ritsletingnya ke dalam perangkat, seolah-olah Anda melakukanzcat initrd | dd of=/dev/ram0
atau sesuatu yang serupa.initrd
berisi gambar sistem file, jadi sekarang Anda dapat memasang sistem file seperti biasa:mount /dev/ram0 /root
. Biasanya, sistem file memerlukan driver, jadi jika Anda menggunakan ext2, driver ext2 harus dikompilasi di dalam kernel.- Selesai!
initramfs
- A
tmpfs
terpasang:mount -t tmpfs nodev /root
. Tmpfs tidak membutuhkan driver, selalu di-kernel. Tidak diperlukan perangkat, tidak ada driver tambahan. initramfs
tidak dikompres langsung ke sistem file baru ini:zcat initramfs | cpio -i
, atau serupa.- Selesai!
Dan ya, itu masih disebut initrd
di banyak tempat meskipun itu adalah initramfs
, khususnya di bootloader, karena bagi mereka itu hanya gumpalan. Perbedaan dibuat oleh OS saat melakukan booting.
Cache dentry (dan inode)
Subsistem sistem file di Linux memiliki tiga lapisan. VFS (sistem file virtual), yang mengimplementasikan antarmuka panggilan sistem dan menangani penyeberangan titik pemasangan dan izin default serta pemeriksaan batas. Di bawahnya adalah driver untuk sistem file individu dan yang pada gilirannya menghubungkan ke driver untuk perangkat blok (disk, kartu memori, dll.; antarmuka jaringan adalah pengecualian).
Antarmuka antara VFS dan sistem file adalah beberapa kelas (ini C biasa, jadi struktur yang berisi penunjuk ke fungsi dan semacamnya, tetapi antarmuka berorientasi objek secara konseptual). Tiga kelas utama adalah inode
, yang mendeskripsikan objek apa pun (file atau direktori) dalam sistem file, dentry
, yang menjelaskan entri dalam direktori dan file
, yang menjelaskan file yang dibuka oleh suatu proses. Saat dipasang, driver sistem file membuat inode
dan dentry
untuk itu root dan yang lainnya dibuat sesuai permintaan ketika proses ingin mengakses file dan akhirnya kedaluwarsa. Itu adalah cache gigi dan inode.
Ya, itu berarti bahwa untuk setiap file yang terbuka dan direktori apa pun hingga ke root harus ada inode
dan dentry
struktur yang dialokasikan dalam memori kernel yang mewakilinya.
Cache halaman
Di Linux, setiap halaman memori yang berisi data userland diwakili oleh page
terpadu struktur. Ini mungkin menandai halaman sebagai anonim (mungkin ditukar ke ruang swap jika tersedia) atau mengaitkannya dengan inode
pada beberapa sistem file (mungkin ditulis kembali dan dibaca ulang dari sistem file) dan itu dapat menjadi bagian dari sejumlah peta memori, yaitu terlihat di ruang alamat dari beberapa proses. Jumlah semua halaman yang saat ini dimuat di memori adalah cache halaman.
Halaman digunakan untuk mengimplementasikan antarmuka mmap dan sementara panggilan sistem baca dan tulis reguler dapat diimplementasikan oleh sistem file dengan cara lain, sebagian besar antarmuka menggunakan fungsi generik yang juga menggunakan halaman. Ada fungsi generik, yaitu ketika file dibaca diminta, alokasikan halaman dan panggil sistem file untuk mengisinya, satu per satu. Untuk sistem file berbasis perangkat blok, ini hanya menghitung alamat yang sesuai dan mendelegasikan pengisian ini ke driver perangkat blok.
ramdev (ramdisk)
Ramdev adalah perangkat blok biasa. Ini memungkinkan pelapisan sistem file apa pun di atasnya, tetapi dibatasi oleh antarmuka perangkat blok. Dan itu baru saja metode untuk mengisi halaman yang dialokasikan oleh pemanggil dan menulisnya kembali. Itulah yang diperlukan untuk perangkat blok nyata seperti disk, kartu memori, penyimpanan massal USB dan semacamnya, tetapi untuk ramdisk itu berarti, data ada di memori dua kali, sekali di memori ramdev dan sekali di memori yang dialokasikan oleh penelepon.
Ini adalah cara lama mengimplementasikan initrd
. Dari saat initrd adalah kejadian langka dan eksotis.
tmpfs
Tmpf berbeda. Ini adalah sistem file dummy. Metode yang disediakannya untuk VFS adalah minimum mutlak untuk membuatnya berfungsi (karena itu merupakan dokumentasi yang sangat baik tentang apa yang harus dilakukan oleh metode inode, dentry, dan file). File hanya ada jika ada inode dan dentry yang sesuai di cache inode, dibuat saat file dibuat dan tidak pernah kedaluwarsa kecuali file dihapus. Halaman dikaitkan ke file saat data ditulis dan sebaliknya berperilaku sebagai halaman anonim (data dapat disimpan untuk ditukar, page
struktur tetap digunakan selama file ada).
Ini berarti tidak ada salinan data tambahan di memori dan semuanya jauh lebih sederhana dan karena itu juga sedikit lebih cepat. Itu hanya menggunakan struktur data, yang berfungsi sebagai cache untuk sistem file lainnya, karena ini adalah penyimpanan utama.
Ini adalah cara baru untuk mengimplementasikan initrd
(initramfs
, tetapi gambarnya tetap disebut hanya initrd
).
Ini juga merupakan cara mengimplementasikan "memori bersama posix" (yang berarti tmpfs dipasang pada /dev/shm
dan aplikasi bebas membuat file di sana dan mmapnya; sederhana dan efisien) dan baru-baru ini bahkan /tmp
dan /run
(atau /var/run
) sering memasang tmpfs terutama pada notebook agar disk tidak berputar atau menghindari keausan jika menggunakan SSD.