一、linux的內核管理:對內核的基本認識
我們所談到的操作系統主要指內核
以上功能據沒有涉及實現文本編輯、實現字處理,也沒有服務等等。
故,操作系統是一種通用軟件,是平臺類軟件,自己并不做任何工作,只是給其他程序提供了運行環境。除操作系統之外,還有應用程序,為實現某一目的,專門設計的程序。
那么,既然內核有這么多功能,模塊化設計?各功能獨立成子系統?
顯然將功能整合在一起,內核將變得非常復雜。
二、內核的設計流派
說說內核設計的兩大流派:
從根本上講,將一個事情拆成各個小問題,然后每個小問題只復雜一個任務是linux的設計哲學之一。
按道理,linux是微內核,但恰恰不是。
三、linux內核設計
原因:早期設計的時沒有使用微內核的思想,linux是一步步擴展而來后來,有呼聲,要將linux改為微內核,但linus拒絕,能工作能穩定的工作,就OK,更重要的是,雖然微內核是一種優良的設計思想,但時下,他跑起來一點不比單內核高效更高級,但微內核有更優良的線程,linux則表現一般。
但linux在一步步的發展中吸取了微內核的設計經驗,雖然是單內核,但是兼具微內核的特性。
linux通過使用模塊化內核設計來兼具微內核特性,但這樣的模塊化設化設計并不是像微內核一樣是各個子系統,而是由核心加外圍的功能性模塊組成內核。而微內核子系統都是各自獨立運行的,不需要依賴其他部分就能工作。而linux各模塊必許依賴核心,只是能在使用時進行裝載,不用時被動態卸載。linux下的模塊外在表現為類型程序的庫文件,只是程序庫文件為.so,而內核模塊為.ko(kernel object),被內核調用。
假設,如果驅動是內核提供的,想象下,編譯好一個內核,裝在主機上,萬一后來發現他無法驅動我們后來新添加的新硬件設備。各種硬件都是由內核驅動的,內核沒有提供這個程序。假設我們有了驅動程序,怎樣才能讓他驅動起來,是不是從新編譯內核,這是對用戶和廠商的不幸。
模塊化設計得以避免這種情況,故各贏家廠商的以模塊化的形式開發自己的驅動,只需針對某一特定設備開發自己驅動程序的即可,而后我們編譯這些模塊即可。由于linux支持動態裝卸載模塊,因此當我需要和不需要某一功能時,可自行拆卸,并不影響核心的運行,這就是好處和優勢表現之一。
四、內核的基本概念
跟各種應用程序一樣,內核也是一種應用程序,只不過,這種應用程序是直接操作硬件的。
內核直接面對的是硬件,調用的是硬件接口,是通過個硬件廠商和CPU廠商提供的指令集進行開發。
開發應用程序面對的是內核,系統調用,或庫調用進行的,故簡單得多。
為編寫內核級的應用程序,又為了避免過于底層,固有很多庫文件,可以讓內核編譯時使用。
內核是直接面向硬件的,故可用資源權限很大,但內核是工作在有限地址空間內的,在linux而言,32位系統上,線性地址空間中,內核只認為自己有1G的,雖然可以掌握4G,但是自己的運行只能使用1G,剩下的3G給其他應用程序。win是各2G。故我們開發內核時可用的內存空間很有限,尤其是開發驅動,要明白自己的可用空間很有限,故需高效。
五、從動態的角度看linux主機的運行狀況
應用程序運行在內核上,只是邏輯上的情況。但實際是直接工作在硬件上的,任意應用程序數據都在內存中,數據處理都是CPU,只是他們不能隨意使用而已,要接受內核的管理。
但CPU只有一顆,應用程序工作的時候,內核就暫停了,應用程序也在內存空間中,一旦應用程序想要訪問其他硬件資源時,即要執行I/O指令時,不能執行。
因為應用程序看不見硬件,應用程序是基于系統調用的程序,當應用程序需要訪問硬件資源時時,就向CPU發起特權請求,一旦CPU收到特權請求,CPU就會喚醒內核,從而執行內核中的某段代碼(非完整的內核程序),然后將結果返回給應用程序,而后內核代碼退出,內核程序暫停。在這期間CPU就從用戶模式轉換成了內核模式,內核模式 就好似能夠執行特權的模式。
所有的應用程序時在硬件上直接執行的,只是在必要時接受內核的管理和監控。
故內核也是監控器,監控程序,是資源和進程的監控程序。
六、CPU的時間與內核的空間
因為內存中每一個進程都以為直接是獨占CPU的,故內核即是將CPU虛擬化,提供給進程,CPU在內核級別就已經虛擬化了,通過將CPU切成時間片,隨著時間流逝而完成在個進程之間分派計算能力的,CPU是以時間提供其計算能力的。
而內存是站在空間角度進行數據容納的。
這就是所謂的時空轉換。
在單位時間內要能夠提供的計算能力越大,必須速度越快,否則只能延長時間。這也就是我們需要更快的CPU,以節約時間。
對于內存而言考慮的是空間問題。
六、CPU的運算特性
I/O是最慢的設備,我們CPU有大量時間都拿來等待I/O完成,為避免空余的沒有任何意義的等待,需要等待時,就讓CPU運行別的進程或線程
我們應該最大能力榨取CPU的計算能力,因為CPU的計算能力是隨著時間時鐘頻率的振蕩器在震蕩,你用或者不用他都在跑
如果你讓CPU空閑著,他依然耗電,而且隨時間流逝,計算能力白白消逝了,因此能夠讓CPU工作在80-90%的利用率下,這就意味著他的生產能力得到了充分的發揮。CPU是用不壞的,沒有什么磨損很消耗,是電器設備,除了功率大是發熱量大,散熱足夠就好了,對于電器設備而言不用反而會壞
七、從硬件看系統啟動
內核沒有生產力,生產力是由個被調用的應用程序產生,故我們應該盡量讓系統運行在應用程序模式中,故內核占據的時間越少越好。而內核主要在進程切換、中斷處理等相關功能上,占據時間,模式切換到目的也是為了生產完成,但進程切換與生產就沒有任何意義了,中斷處理可以認為與生產本身相關,因為應用要執行I/O
內核的主要目的是完成硬件管理,而linux中
有一個思想,各進程都是由其父進程衍生的,由父進程fork()而來的,那么由誰來fork()以及管理這些進程,于是有了大管家程序init,統籌管理用戶空間的所有進程。用戶空間的管理工作都不會由內核執行,故我們啟動完內核之后,要想啟動用戶空間首先需要啟動init,故init的PID號永遠為1。init也是由其父進程fork()而來,是內核空間中的用來專門引導用戶空間進程的機制。init是一個應用程序,在/sbin/init下,是一個可執行文件。
審核編輯:黃飛
?
評論
查看更多