Anda semua tahu bahawa banyak artikel Yuanlijun adalah mengenai fungsi kernel Linux Berdasarkan prinsip akaun awam, kami hanya bercakap tentang prinsip dan menukar kod kompleks kepada teks dan gambar yang mudah difahami. Akhirnya disampaikan kepada anda. Boleh dikatakan bahawa Encik Yuanli tidak pernah menyusun secara sistematik seni bina kernel Linux untuk anda daripada rangka kerja yang besar. Kemudian tujuan artikel ini adalah untuk berdiri di puncak gunung dan melihat ke atas.
Rangka kerja hierarki sistem Linux
Daripada gambar kita boleh bahagikan kepada dua peringkat:
Ruang isirong ruang pengguna
Di peringkat bawah ialah ruang pengguna, di mana aplikasi dijalankan. Lapisan atas ruang pengguna ialah perpustakaan gblic yang biasa digunakan untuk pengurusan memori Linux. Fungsinya adalah untuk merangkum soket panggilan sistem. Ia adalah pilihan yang tidak bijak untuk terus menggunakan sejumlah besar soket panggilan sistem tanpa menggunakan perpustakaan gblic. Proses yang berjalan dalam ruang pengguna masing-masing mempunyai ruang alamat maya sendiri, manakala kernel mempunyai ruang alamat yang berasingan.
Lapisan atas ialah ruang kernel. Ruang kernel Linux dibahagikan kepada tiga lapisan:
Lapisan panggilan sistem; ia tergolong dalam lapisan paling rendah dan menyediakan satu bentuk komunikasi antara ruang pengguna dan ruang kernel. Kernel Linux: Ia harus dikatakan dengan lebih tepat bahawa ia adalah kod kernel yang bebas daripada seni bina Kod universal ini boleh digunakan untuk mana-mana seni bina. Kod bergantung kepada seni bina: Bahagian ini biasanya dipanggil BSP Kod jenis ini diperkenalkan terutamanya untuk serasi dengan platform atau pemproses yang berbeza.
Inti Linux melaksanakan banyak sifat seni bina yang penting. Pada tahap yang lebih tinggi atau lebih rendah, kernel ditakrifkan ke dalam subsistem. Linux juga boleh dilihat secara keseluruhan, kerana ia menyepadukan semua perkhidmatan asas tersebut ke dalam kernel. Ini berbeza daripada seni bina mikrokernel yang pertama akan menyediakan beberapa perkhidmatan asas, seperti komunikasi, I/O, pengurusan memori dan proses, dan perkhidmatan yang lebih khusus dimasukkan ke dalam lapisan mikrokernel. Setiap kernel mempunyai kelebihannya sendiri, tetapi ini tidak akan dibincangkan di sini.
Lama kelamaan, kernel Linux telah menjadi lebih cekap dari segi memori video dan penggunaan CPU, dan sangat stabil. Dan perkara yang paling menarik tentang Linux ialah ia masih mempunyai mudah alih yang baik walaupun saiz dan kerumitan ini. Linux disusun untuk dijalankan pada sejumlah besar pemproses dan platform dengan kekangan dan keperluan seni bina yang berbeza. Contoh balas ialah Linux boleh dijalankan pada pemproses yang mempunyai unit pengurusan memori grafik (MMU), atau ia boleh dijalankan pada pemproses yang tidak menyediakan MMU. Port uClinux kernel Linux menyediakan sokongan untuk bukan MMU.
Senibina Kernel Linux
Komponen utama kernel Linux ialah:
Pengurusan proses soket panggilan sistem, pengurusan memori video, sistem fail maya, tindanan rangkaian, pemacu peranti dan kod berkaitan seni bina perkakasan.
(1) Soket panggilan sistem
Lapisan panggilan sistem menyediakan mekanisme individu untuk melaksanakan panggilan fungsi dari ruang pengguna ke kernel. Ia bergantung kepada seni bina. Perkhidmatan multiplexing dan demultiplexing disediakan pada lapisan ini.
(2) Pengurusan proses
Inti pengurusan proses ialah penjadualan proses. Dalam kernel Linux, unit penjadualan proses ialah proses, dan benang adalah bersamaan dengan konsep proses untuk penjadualan. Kernel menyediakan soket pengaturcaraan aplikasi melalui panggilan sistem. Seperti: mencipta proses baharu (fork, exec), menamatkan proses (bunuh, keluar), dan menyediakan proses kawalanlangkah pemindahan kernel linux, soket untuk menyegerakkan proses dan komunikasi antara proses.
Pengurusan proses juga termasuk pengendalian keperluan untuk berkongsi CPU antara proses yang aktif. Kernel menggunakan penjadual CFS yang benar-benar adil, yang dijelaskan secara terperinci dalam artikel saya sebelum ini "Linux Completely Fair Scheduler CFS".
(3) Pengurusan memori video
Satu lagi sumber penting yang diuruskan oleh kernel ialah memori video. Satu lagi artikel oleh Yuanlijun, "Memahami Pengurusan Memori Video Linux, Artikel Ini Sahaja" menerangkan pengurusan memori video Linux secara terperinci. Untuk meningkatkan kecekapan, konsep ingatan video maya diperkenalkan Memori video diuruskan mengikut bentuk halaman memori video yang dipanggil (biasanya saiz halaman memori video ialah 4KB dan 8KB, kebanyakannya adalah 4KB). Selain kaedah Linux menguruskan memori video yang tersedia, terdapat mekanisme perkakasan yang digunakan untuk matematik dan pemetaan maya. Walau bagaimanapun, pengurusan memori video perlu mengurus lebih daripada penimbal 4KB sahaja. Linux menyediakan perwakilan konkrit penimbal 4KB, seperti pengagih papak. Mod pengurusan memori ini menggunakan penimbal 4KB sebagai asas, kemudian memperuntukkan struktur daripadanya, dan menjejaki penggunaan halaman memori, seperti halaman memori yang penuh, halaman yang tidak digunakan sepenuhnya dan halaman yang kosong. Ini membolehkan mod melaraskan penggunaan memori video secara dinamik berdasarkan keperluan sistem. Untuk menyokong penggunaan memori video oleh berbilang pengguna, kadangkala memori video yang tersedia digunakan. Atas sebab ini, halaman boleh dialihkan keluar daripada memori video dan diletakkan ke dalam pemacu c. Proses ini dipanggil bertukar kerana halaman ditukar dari memori video ke cakera keras. Kod sumber untuk pengurusan memori video boleh didapati dalam ./linux/mm.
(4)Sistem Fail Maya
Sistem Fail Maya (VFS) ialah aspek yang sangat berguna bagi kernel Linux kerana ia menyediakan perwakilan antara muka universal untuk sistem fail. VFS menyediakan perisai antara panggilan sistem dan sistem fail yang disokong oleh kernel. Seperti yang ditunjukkan dalam gambar di sebelah kanan:
Dalam VFS, ia adalah perwakilan API biasa bagi fungsi seperti buka, tutup, baca dan tulis. Di bawah VFS ialah perwakilan sistem fail, yang mentakrifkan kaedah pelaksanaan fungsi peringkat rendah. Ia adalah pemalam untuk sistem fail tertentu (lebih daripada 50 daripadanya). Kod sumber untuk sistem fail boleh didapati dalam ./linux/fs. Di bawah lapisan sistem fail ialah cache penimbal, yang menyediakan set fungsi biasa untuk lapisan sistem fail (bebas daripada sistem fail tertentu). Lapisan caching ini mengoptimumkan akses kepada peralatan kimia dengan mengekalkan data untuk satu tempoh masa (atau pra-mengambil data kemudian untuk menyediakannya apabila diperlukan). Di bawah cache penimbal ialah pemacu peranti yang melaksanakan soket untuk peranti kimia tertentu.
(5) Timbunan kontrak rangkaian
Timbunan kontrak rangkaian direka bentuk untuk mengikuti seni bina berlapis kontrak simulasi itu sendiri. Ingat langkah pemindahan kernel linux, InternetProtocol (IP) ialah kontrak lapisan rangkaian teras di bawah kontrak penghantaran (biasanya dikenali sebagai kontrak kawalan penghantaran atau TCP). Di dalam TCP ialah lapisan soket, yang dipanggil melalui lapisan panggilan sistem. Lapisan soket ialah API standard subsistem rangkaian, yang menyediakan soket pengguna untuk pelbagai kontrak rangkaian. Daripada akses bingkai mentah kepada Unit Data Kontrak IP (PDU) kepada TCP dan Protokol Datagram Pengguna (UDP), lapisan soket menyediakan cara piawai untuk mengurus sambungan dan menyampaikan data antara pelbagai titik akhir. Kod sumber rangkaian dalam kernel boleh didapati dalam ./linux/net.
(6) Pemacu Peranti
Sejumlah besar kod dalam kernel Linux terdapat dalam pemacu peranti, yang boleh menjalankan peranti perkakasan tertentu. Pokok sumber Linux menyediakan subdirektori pemacu, yang selanjutnya ditakrifkan sebagai pelbagai peranti yang disokong, seperti Bluetooth, I2C, siri, dsb. Kod untuk pemacu peranti boleh didapati dalam ./linux/drivers.
(7) Kod bergantung kepada seni bina
Walaupun Linux sebahagian besarnya bebas daripada seni bina yang dijalankan, dan terdapat beberapa elemen yang mesti dipertimbangkan untuk seni bina itu beroperasi dengan betul dan mencapai kecekapan yang lebih tinggi. Subdirektori ./linux/arch mentakrifkan bahagian kod sumber kernel yang bergantung kepada seni bina, yang mengandungi pelbagai subdirektori khusus seni bina (bersama-sama membentuk BSP). Untuk sistem desktop biasa, direktori x86 digunakan. Setiap subdirektori seni bina mengandungi banyak subdirektori lain, dan setiap subdirektori memfokuskan pada aspek tertentu kernel, seperti but, kernel, pengurusan memori, dll. Kod yang bergantung kepada seni bina ini boleh didapati dalam ./linux/arch.
Linux juga merupakan kernel dinamik, menyokong penambahan atau pemadaman dinamik komponen perisian. Dikenali sebagai modul kernel yang boleh dimuatkan secara dinamik, ia boleh dimasukkan atas permintaan pada masa but (modul pada masa ini diperlukan untuk peranti tertentu) atau oleh pengguna pada bila-bila masa.
Rujukan
Genri-kun merujuk artikel ini
Atas ialah kandungan terperinci Melihat ke dalam hierarki kernel Linux: pemandangan dari puncak gunung. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!