想要理解Linux內(nèi)核是什么
我們可以思考一下進(jìn)程何時(shí)才能感知到內(nèi)核的存在。例如,在進(jìn)行內(nèi)存分配時(shí),最終需要調(diào)用內(nèi)核的sys_mmap系統(tǒng)調(diào)用來(lái)申請(qǐng)?zhí)摂M內(nèi)存空間;在創(chuàng)建子進(jìn)程時(shí),最終需要調(diào)用內(nèi)核的sys_fork來(lái)復(fù)制父進(jìn)程;在打開(kāi)文件時(shí),最終需要調(diào)用內(nèi)核的sys_open來(lái)進(jìn)行文件系統(tǒng)底層操作。這些過(guò)程中,我們可以發(fā)現(xiàn)一個(gè)共同點(diǎn):它們都需要調(diào)用系統(tǒng)調(diào)用,而這就是進(jìn)程與內(nèi)核交互的本質(zhì)。
內(nèi)核本身是一個(gè)二進(jìn)制文件,它是一段代碼加上相關(guān)的數(shù)據(jù),在正常情況下,它會(huì)一直駐留在內(nèi)存中不做任何事情。但是,當(dāng)進(jìn)程需要執(zhí)行某些高特權(quán)操作時(shí),就需要調(diào)用系統(tǒng)調(diào)用,這個(gè)過(guò)程我們稱之為陷入內(nèi)核。系統(tǒng)調(diào)用有一個(gè)入口程序,一旦進(jìn)入系統(tǒng)調(diào)用,就開(kāi)始執(zhí)行內(nèi)核代碼。等到要執(zhí)行的高特權(quán)操作完成后,系統(tǒng)調(diào)用會(huì)立即返回,然后進(jìn)程就可以繼續(xù)執(zhí)行??梢钥吹?,內(nèi)核只在進(jìn)程需要時(shí)出現(xiàn),然后迅速離開(kāi),而進(jìn)入內(nèi)核的通道就是系統(tǒng)調(diào)用。