Pendapat saya adalah ya, memang, karena semua paparan yang berguna ke dunia luar (mode prosesor non-istimewa) pertama-tama akan memerlukan proses yang berjalan di dunia luar. Itu akan membutuhkan sistem file, bahkan sistem file sementara, dalam RAM,.
Insinyur lain tidak setuju dengan saya, tetapi sepertinya saya tidak dapat membuktikan hal ini di luar semua kasus (yang tidak saya ketahui).
Apakah jawaban untuk pertanyaan ini tergantung pada definisi 'berlari'?
filesystems
linux-kernel
Peter L.
sumber
sumber
useful exposure to the outside world
init
(proses ruang pengguna pertama), dan itu akan gagal.Jawaban:
Itu pertanyaan yang agak aneh karena Anda tidak menjalankan kernel seperti Anda menjalankan program. Kernel adalah platform untuk menjalankan program. Tentu saja ada kode setup dan shutdown tetapi tidak mungkin untuk menjalankan kernel sendiri. Harus selalu ada proses "init" utama. Dan kernel akan panik jika tidak ada. Jika init mencoba keluar, kernel juga akan panik.
Saat ini proses init adalah sesuatu seperti systemd. Jika tidak ditentukan, kernel akan mencoba menjalankan program dari daftar lokasi yang dimulai dengan
/sbin/init
. Lihat init Param di sini http://man7.org/linux/man-pages/man7/bootparam.7.html dalam keadaan darurat Anda dapat mem-boot Linux denganinit=/bin/bash
. Tetapi perhatikan bagaimana Anda selalu menentukan file pada sistem file untuk dijalankan.Jadi kernel akan panik jika dijalankan tidak memiliki sistem file karena tanpa itu tidak ada cara untuk memuat init.
Beberapa kebingungan mungkin timbul karena situasi ayam dan telur di mana kernel harus memuat driver untuk mengakses sistem file itu. Untuk mengatasinya, ramdisk awal dimuat dari gambar di disk yang berisi driver vital dan skrip pengaturan. Ini dijalankan sebelum sistem file dimuat. Tapi jangan salah ramdisk awal itu sendiri adalah sistem file. Dengan ramdisk awal
/init
disebut (yang disimpan di ramdisk awal). Dalam banyak distribusi pada akhirnya inilah yang disebut/sbin/init
. Sekali lagi tanpa sistem file, ini tidak mungkin.sumber
init.$DEV.rc
skrip.Jawabannya akan tergantung pada apakah Anda benar-benar berarti tanpa sistem file atau jika pertanyaan ini dimaksudkan untuk ditafsirkan sedikit berbeda dari bagaimana sebenarnya dinyatakan. Jawaban untuk sedikit variasi dalam bagaimana pertanyaan ditafsirkan adalah:
Alasan Anda harus menulis ulang bagian dari kode kernel untuk membuat sistem yang berfungsi tanpa sistem file adalah:
execve
pemanggilan sistem yang memerlukan eksekusi dari sistem file.Setelah program mulai digunakan
execve
, dimungkinkan untuk menghapus peta yang dapat dieksekusi dari mana ia dimulai, meskipun untuk melakukannya tanpa segera men-crash-nya terlebih dahulu harus membuat pemetaan memori yang dapat dieksekusi yang tidak didukung oleh file, dan harus menginisialisasi dengan beberapa kode yang berguna sebelum melompat ke sana dan unmapping yang dapat dieksekusi.Dengan demikian program mode pengguna yang berjalan dapat ada dalam keadaan di mana ia tidak memiliki pemetaan memori yang didukung oleh file dan dapat menutup semua deskriptor file yang didukung oleh file. Itu tidak bisa berhenti memiliki direktori root dan direktori kerja saat ini, tetapi bisa menahan diri dari itu.
Jadi meskipun dalam kondisi ini Anda dapat menerapkan kode kernel untuk merobek sistem file dari bawah program dan membuatnya tetap berjalan, itu tidak terdengar seperti itu berguna. Dan memasuki kondisi akhir tanpa melalui kondisi perantara menggunakan sistem file akan menjadi lebih banyak pekerjaan tanpa manfaat yang bermanfaat.
Pengaturan yang berguna untuk beberapa kasus penggunaan khusus
Menghindari penggunaan perangkat blok dapat bermanfaat. Selama boot kernel menciptakan sistem file memori, dan itu juga dapat mengisi sistem file itu dengan konten dari
cpio
arsip sebelum dieksekusiinit
. Dengan begitu Anda dapat menjalankan sistem sepenuhnya dari sistem file berbasis memori tanpa perangkat blokir untuk mendukungnya.Ini dapat berguna untuk sistem di mana Anda tidak ingin mempertahankan keadaan apa pun dan menyukai sistem untuk memulai dari yang bersih setelah me-reboot.
Tentu saja kernel dan arsip cpio harus mendapatkan entah bagaimana ada di memori sebelum kernel diberikan kontrol. Bagaimana mereka sampai di sana adalah pekerjaan untuk boot loader. Boot loader bisa memuatnya dari perangkat blok meskipun sistem terakhir yang berjalan tidak menggunakan perangkat blok. Tetapi boot loader juga dimungkinkan untuk mendapatkan arsip kernel dan cpio tanpa menggunakan perangkat blok misalnya dengan mem-boot melalui jaringan.
sumber
Di Linux, hampir setiap perangkat adalah file , jadi Anda harus memiliki sistem file untuk menjalankannya.
sumber
eth0
,wlan0
dll.) Tidak, misalnya.Kernel adalah sebuah program, sama seperti kernel lainnya. Secara default kernel Linux mencoba mengakses sistem file, namun perilaku ini dapat dihilangkan dengan modifikasi sepele oleh kernel (sebenarnya hanya penambahan fungsi "arch_call_rest_init ()"). Untuk melakukan "pekerjaan yang bermanfaat" maka kami berharap bahwa pengembang dapat menyertakan utas kernel (kthreads), perhapos dalam driver khusus, untuk melakukan beberapa inisialisasi yang diinginkan dan beban kerja jenis aplikasi. Kernel Linux sudah mengandung banyak kthread, tetapi terutama untuk melakukan pekerjaan tambahan untuk kernel atau driver. API yang tersedia dalam konteks kernel sangat berbeda dari yang tersedia di ruang pengguna Linux. Sebagian besar fungsionalitas panggilan sistem akan menjadi tidak berguna dalam skenario tanpa sistem file.
Ya, Linux mengharapkan akses ke sistem file secara default. Tidak, kernel yang dimodifikasi dapat dibuat untuk melakukan pekerjaan yang bermanfaat tanpa sistem file apa pun. Penggunaan praktis dari sistem file Linux tanpa IMO cukup terbatas, tetapi tidak nol. FWIW, di masa lalu banyak kernel real-time dibangun ke ruang-nama & biner yang sama dengan aplikasi RT.
sumber