编译linux内核预备,Linux内核预备知识(1)
[本博客連載并且會持續(xù)修正,轉(zhuǎn)載請注明出處:http://blog.chinaunix.net/uid-26583089-id-5729088.html]
我和很多朋友一樣,是為了擺脫對計算機的好奇學(xué)習(xí)內(nèi)核的,“沒有生命的計算機是如何理解程序的”!
“理解”一詞,往往是我們揭不開計算機神秘面紗的主要原因。戳一下氣球,它會爆炸,就說明氣球能理解“戳”這個動作嗎,那它為什么不跑?這只是一種很基本的物理現(xiàn)象罷了,就如同生物界的“條件反射”,并沒有思考的過程。計算機也同樣,它對于人類指令的反應(yīng),只是一組硬件發(fā)生了連續(xù)的物理動作,而這種動作是人類事先安排的,即使是“鬧鈴”,那也是人類安排的一個定時器。
程序是什么?是一組開關(guān)狀態(tài)。光是把電腦屏幕理解為很多個燈的話,就不難理解為什么是一組開關(guān),而不是一個。
那這組開關(guān)狀態(tài)又是怎么“鉆進(jìn)”電腦的?BIOS里面的程序是“燒”進(jìn)去的,可以理解為人工按進(jìn)去的,其它的程序又是通過這段程序“拖”進(jìn)去的。
高級程序由編譯器翻譯成二進(jìn)制,世界上第一個編譯器自己由什么翻譯?不用翻譯,直接用開關(guān)編寫。
高級語言依賴文字,那么文字是怎么“寫進(jìn)”電腦的?文字其實是一個開關(guān)矩陣,特殊電路根據(jù)矩陣中0或1的位置在屏幕轟擊,便是文字的形狀,也就是說往電腦“寫字”,其實還是按開關(guān)。另外,文字的集合,就是字庫,每個文字對應(yīng)一個編號,使用文字是使用相應(yīng)的編號,而不是對應(yīng)文字開關(guān)的開關(guān)矩陣本身。
。。。
內(nèi)核是什么?
任何程序都是加載進(jìn)內(nèi)存才可以執(zhí)行,如果站在可以看見內(nèi)存全貌的地方,就發(fā)現(xiàn)內(nèi)存里有一份內(nèi)核代碼,和各種不同的用戶程序代碼(暫且把代碼中使用的數(shù)據(jù),也算做代碼),而有些進(jìn)程只執(zhí)行內(nèi)核代碼中的指令,有些進(jìn)程既執(zhí)行內(nèi)核代碼中的指令,又執(zhí)行用戶程序中的指令。
如何區(qū)分內(nèi)存中的一份代碼是內(nèi)核代碼,還是用戶代碼?這就是“存儲管理”一節(jié)所要講述的,目的是讓學(xué)習(xí)者理解“內(nèi)核空間/用戶空間”。
計算機的使命無非是執(zhí)行內(nèi)存中這些指令,雖然很多朋友目前對內(nèi)核可能還一無所知,但至少了解內(nèi)核的權(quán)限比普通程序的權(quán)限大吧,所以用戶代碼就不可能隨意調(diào)用內(nèi)核函數(shù)了,否則就是“垂簾聽政”,用戶進(jìn)程想干嘛就干嘛了。然后,內(nèi)核程序的主要意義,就是為用戶程序封裝與硬件打交道的細(xì)節(jié),用戶進(jìn)程需要與某些硬件交互時,必須經(jīng)由內(nèi)核。怎么解釋這一對矛盾的問題呢?那就是“中斷、異常和系統(tǒng)調(diào)用”這一節(jié)的目的。
每個進(jìn)程雖然有if、switch等,可以控制CPU“跳著”執(zhí)行一些指令,但再怎么也跳不到別的進(jìn)程,那是如何做到讓多個進(jìn)程輪流著執(zhí)行的呢?“進(jìn)程與進(jìn)程調(diào)度”一節(jié)正是解答這個問題。
進(jìn)程間通信又是如何做到的?期待“Unix進(jìn)程間通信”這一節(jié)吧。
上圖只畫了內(nèi)存中的內(nèi)容,除了內(nèi)存,還有很多外置,比較重要的就是文件系統(tǒng),所以專門有一節(jié)“文件系統(tǒng)”,用于解開文件系統(tǒng)的實現(xiàn)內(nèi)幕。
學(xué)習(xí)完《Linux內(nèi)核源代碼情景分析》上冊,理解以上的幾個問題后,自然就理解內(nèi)核是什么了。而且如上圖所畫,我們不能只片面的問自己內(nèi)核是什么,否則我們可能永遠(yuǎn)得不到答案,我們要知道整個系統(tǒng)大致是如何運作的,并體會內(nèi)核充當(dāng)?shù)氖鞘裁礃拥慕巧1热?#xff0c;沒見過汽車去想發(fā)動機是什么,我們可能會想得頭破血流,可能覺得它是從火星來的不明物體,也可能覺得它就是一堆廢鐵。。
總之,就是不要急于通過哪一篇文章就能一下子理解內(nèi)核是什么,那是不可能的,我們需要對以上問題有一個比較全面的理解之后,才能體會內(nèi)核是什么,并且腳踏實地的的花時間去搞懂這些問題,是一定能理解內(nèi)核的,就放心的學(xué)習(xí)吧。
總結(jié)
以上是生活随笔為你收集整理的编译linux内核预备,Linux内核预备知识(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 那个linux系统带有安装工具,linu
- 下一篇: linux如何修改网卡序号,CentOS