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