理解Linux內(nèi)核是個(gè)什么東西
我們不妨想一下進(jìn)程在什么時(shí)候才能感知到內(nèi)核的存在。在malloc分配內(nèi)存的時(shí)候,最終會(huì)調(diào)用內(nèi)核的sys_mmap系統(tǒng)調(diào)用來申請(qǐng)?zhí)摂M內(nèi)存空間;在fork創(chuàng)建子進(jìn)程的時(shí)候,最終會(huì)調(diào)用內(nèi)核的sys_fork來復(fù)制父進(jìn)程;在open打開文件的時(shí)候,最終會(huì)調(diào)用內(nèi)核的sys_open來進(jìn)行文件系統(tǒng)底層操作。諸如此類的過程剛好,我總結(jié)了一些嵌入式資料放在視頻結(jié)尾都可以感知到內(nèi)核的存在,那這些過程有什么共同點(diǎn)呢?是的,他們都提到了一個(gè)詞——“系統(tǒng)調(diào)用”。這就是進(jìn)程與內(nèi)核交互的本質(zhì)。內(nèi)核就是一個(gè)二進(jìn)制文件,就是一塊代碼加數(shù)據(jù),平時(shí)駐留在內(nèi)存里啥也不干,它也沒法干,因?yàn)樗植皇沁M(jìn)程。等到有進(jìn)程向做一些高特權(quán)的操作時(shí),就調(diào)用一下系統(tǒng)調(diào)用,系統(tǒng)調(diào)用有個(gè)入口程序,從這里開始執(zhí)行的就是內(nèi)核代碼了,這樣的過程我們成為陷入內(nèi)核。當(dāng)要執(zhí)行的高特權(quán)操作完成后,系統(tǒng)調(diào)用會(huì)立即返回,然后進(jìn)程繼續(xù)執(zhí)行。我們可以看到,內(nèi)核在進(jìn)程需要時(shí)出現(xiàn),又在操作完成后迅速離開,而內(nèi)核出現(xiàn)所途徑的傳送門就叫做系統(tǒng)調(diào)用。
我這里剛好有嵌入式、單片機(jī)、plc的資料需要可以私我或在評(píng)論區(qū)扣個(gè)6