Linux核心學習(一) 容易混淆的概念

2021-06-18 13:11:43 字數 2176 閱讀 9072

1、作業系統與核心的區別:核心是作業系統的核心,作業系統是指在整個系統中負責完成最基本功能和系

統管理的那些部分,這些部分包括內黑、裝置驅動程式、啟動引導程式、命令列shell或者其他種類的使用者介面、基本檔案管理工具和系統工具。而系統這個詞包含了作業系統和所有執行於它之上的應用程式。

2、熟記這張圖,表示了linux核心的乙個架構,其中虛線框的的分界所表示的位址是page_offset(0xc0000000)。這裡面設計到記憶體分配的問題。

3、核心開發與應用程式開發的區別:

(1)核心程式設計時不能訪問c庫。因為標準c庫特別大,即使裡面的各個函式執行效率高,但是核心往往永

不到全部的標準函式,所以核心只是選取了自己需要的標準函式,寫到單獨的標頭檔案中呼叫。

(2)核心程式設計必須使用gun c。比如內聯函式(inline)、likely與unlikely等等。

(3)核心程式設計缺乏像使用者空間那樣的記憶體保護機制。如果使用者程序進行一次非法記憶體的訪問,那麼核心就

會發現錯誤,並發出sigsegv訊號(試圖訪問未分配給自己的記憶體, 或試圖往沒有寫許可權的記憶體位址寫數

據.)。但是如果核心進行了同樣的錯誤操作將會導致oops(linux核心在發生kernel panic時會列印出

oops資訊,把目前的暫存器狀態、堆疊內容、以及完整的call trace都dump出來)。另外記住一點,核心

中的記憶體沒有分頁機制,所以用一點少一點。

(4)核心程式設計對與浮點數運算比較困難。一句話,不要在核心中做浮點型運算了。

(5)核心只有乙個很小的定長堆疊。核心棧大小一般是兩頁,也就時8kb.

(6)核心支援非同步中斷、搶占和smp,因此必須注意同步與併發。這裡就會講到搶占性這個概念,以後會

詳細分析。

(7)核心的可移植性。linux具有很強的可移植性,從linux的分頁機制就可以看出,linux採用了四級分

頁模式,為的就是適應不同的環境,32位系統、64位系統以及pae(實體地址擴充套件)等等。

4、linux到底是不是搶占性的作業系統?(容易混淆的乙個概念)

ucos是搶占式核心。

所謂非搶占核心就是,當中斷完成後,系統就排程原來被中斷的任務執行,即使此時有優先順序更高的任務,

也要等原被中斷的任務完成後,才能參與排程。搶占式與之相反。當中斷完成後,呼叫了排程程式以選取最

高優先順序的任務,並執行之。

「linux是搶占式作業系統。」這裡是指linux的程序排程是搶占式的--多使用者作業系統中的程序排程必須

是搶占式的。

「linux是非搶占式核心。」,這裡的「非搶占式核心」指的是當某個程序由使用者態進入到核心態後(比如說,通

過系統呼叫),不能被排程程式掛起,轉而去執行別的程序,亦即不能被其它程序搶占,除非處於核心

態的該程序自願放棄cpu時間。

這只是以前的說法,自從linux2.6版本後,就是乙個完全的搶占式的核心,其實linux支不支援搶占式內

核得在編譯核心時決定的,檢視方法進入核心資料夾後執行:make menuconfig –>kernel features

-->preemption model (voluntary kernel preemption (desktop)) --->preemptible kernel (low-latency

desktop) (大家可以試試)。

也就是說linux完全是搶占式作業系統,不管從什麼角度講。

5、僵死程序(zombie process)

這也是乙個很重要的概念。首先必須了解乙個概念:程序與執行緒。

執行緒是程序的最小單位,乙個程序可以包含多個執行緒。目前的作業系統支援這個功能。

父程序建立了乙個新的程序,稱為子程序。子程序總有一天會完成自己的任務,會呼叫exit()終結掉子程序。

但是這時候子程序並沒有完完全全的死掉 ,只是不工作了而已,它的pid號、記憶體、占用的資源等等都沒有

被**,什麼時候**呢?必須等到父程序進行wait4()系統呼叫檢查到子程序的死亡,然後才通知**。

由於父程序由於種種原因一直沒有呼叫這個系統呼叫或者父子之間溝通出了問題,導致子程序沒有**資源,

「半死不活」的,於是這時候就成為了僵死程序。

解決的辦法是將這些僵死程序掛到init程序名下,由init程序統一管理,該殺的殺。

(先到這裡,後續補充)

Linux核心學習

交叉工具鏈 核心相關知識 linux系統的構成 使用者空間 核心空間 思考 為什麼劃分為兩個層次?目的其實是為保護作業系統,防止應用程式的異常導致作業系統崩潰。核心空間與使用者空間是程式執行的兩種不同狀態,通過系統呼叫和硬體中斷能夠完成從使用者空間到核心空間的轉移。那麼linux的核心由哪些構成呢?...

linux 核心學習

linux核心獲取 官網 linux作業系統的核心是模組化,可以使用lsmod命令檢視核心模組,下面展示已載入系統的模組 root 172.16.0.55 vendor composer test lsmod module size used by nfnetlink queue 8111 0 nf...

Linux核心學習筆記一

核心與作業系統 核心是作業系統的核心部分,包含了系統執行的核心過程,決定系統的效能,作業系統啟動核心被裝入到ram中 作業系統與底層硬體裝置互動和為執行應用程式提供執行環境。linux核心與微核心比較 微核心 核心只需要乙個很小的函式集,通常包括幾個同步原語,乙個簡單的排程程式和程序間通訊機制。執行...