必須知道的Linux核心常識詳解

2022-02-14 22:17:47 字數 2678 閱讀 5005

(1)linux、windows、android、ucos就是作業系統;

(2)作業系統本質上是乙個程式,由很多個原始檔構成,需要編譯連線成作業系統程式(vmlinz、zimage);

(3)作業系統的主要作用就是管理計算機硬體,給應用程式提供乙個執行環境。

(1)記憶體管理

如果沒有作業系統,記憶體需要程式自己來管理。譬如在uboot中要使用哪塊記憶體,由程式自己決定的,沒有註冊也沒有限制。此時如果程式不小心把同一塊記憶體重複使用,就會出現程式邏輯錯誤。

有了作業系統之後,作業系統負責管控所有的記憶體。應用程式需要使用記憶體時,都要向作業系統去申請和註冊,由作業系統的記憶體管理模組來分配記憶體。這樣好處是可以保證記憶體使用不會衝突。

(2)程序排程

作業系統下支援多個應用程式同時執行,這是巨集觀上的並行。實際上在單核心cpu上微觀上是不能並行的,巨集觀上的並行就是作業系統提供的分時復用機制。作業系統的程序排程模組負責在各個程序之間進行切換。

(3)硬體裝置管理

沒有作業系統時,控制任何硬體都要自己寫**,有了作業系統後作業系統本身會去控制各個硬體,應用程式就不用考慮硬體的具體細節了。

作業系統的硬體裝置管理模組就是驅動模組。

(4)檔案系統

檔案系統是管理儲存裝置的一種方式。儲存裝置由很多扇區組成,每個扇區有512/1024/2048/4096位元組,儲存裝置以扇區為單位進行讀寫。如果沒有檔案系統,程式要自己去讀寫扇區,就得記得哪個檔案在哪個扇區。有了檔案系統之後,我們不用再關注某個檔案在物理磁碟的哪個扇區,只用關注檔案系統中的目錄和檔名。

(1)協議棧

(2)有用的應用程式包

應用程式本身不屬於作業系統核心的一部分。

應用程式是給人用的,面向某種功能的,譬如ping程式用來測試網路是否聯通,ifconfig程式用來配置網絡卡。

(1)核心是作業系統核心的簡稱。

核心負責實現作業系統的核心功能,核心不包括應用程式。

因此只有核心是無法使用的,因為做任何事情都是通過相應的應用程式來完成的。

賣作業系統的人把核心和一些常用的應用程式打包在一起提供給普通使用者,這就是作業系統的發行版(也就是普通意義上的作業系統)。

(2)核心只有乙個(),發行版有很多(整合不同的應用程式,譬如ubuntu、redhat、suse、centos……)。

(1)對龐大的整體要有個認識。學習路線就是先建立框架和整體,然後逐漸去學習各個細節部分,逐步細化。

(2)對各分層的作用要清楚。

(3)對層次間的關聯和互相呼叫要理解。

(1)驅動就是核心中的硬體裝置管理模組,屬於發展非常活躍的部分。

(2)驅動工作在核心態(cpu在跑作業系統)(與使用者態(cpu在跑應用程式)的區別:許可權不同)

(3)驅動程式故障可能導致整個核心崩潰。

(4)驅動程式漏洞會使核心不安全。

(1)應用程式不屬於核心,而是在核心之上的;

(2)應用程式工作在使用者態,是受限制的;

(3)應用程式故障不會導致核心崩潰;

(4)應用程式通過核心定義的api介面來呼叫核心工作

(5)總結:應用程式是最終目標,核心就是為應用程式提供底層資源管理的服務員

(1)根檔案系統提供根目錄;屬於核心?no!

(2)程序1存放在根檔案系統中,程序1會使得核心態變為使用者態。

(3)核心啟動最後會去裝載根檔案系統;

(4)總結:根檔案系統為作業系統啟動提供了很多必備的資源,如根目錄、程序1。

(1)因為linux核心很龐大,**量很大、東西很多,如果設計時完全設計成一體(各個檔案、各個函式之間緊耦合),複雜度超出了人所能理解的範圍。所以模組化設計是一種必要。

(2)模組化設計就是核心中各個功能模組在**上是彼此獨立的,譬如說排程系統和記憶體管理系統之間並沒有全域性變數的互相引用,甚至函式互相呼叫也很少,就算有也是遵循乙個介面規範的。模組化設計的目的就是實現功能模組的松耦合。

(1)配置時可裁剪。linux核心在編譯之前可以進行配置,配置時可以選擇將組成核心的成千上萬個模組每乙個要或者不要。要了之後還有更多的一些細節的配置。

(2)模組化編譯和安裝。為了操作方便,從靜態的公升級逐漸變成了動態的公升級(不需要重啟系統,更不需要重新燒錄系統)。這種動態的公升級也是由模組化來支援的。

(3)原始碼中使用條件編譯。這種在uboot中已經見過了。

(1)功能可裁剪、靈活性;

(2)可擴充套件性(動態安裝解除安裝、新硬體支援);

(3)利於協作;

(1)linux0.01。初版

(2)linux0.11。很多講linux核心源**解析的書都是以這個版本為原本來講。《**linux核心設計的藝術》

(3)linux2.4。比較接近現代的版本,很多經典的書都是以2.4版本核心為參照的,譬如《ldd3》。

linux2.4的晚期核心在前幾年還會經常碰到有用的。

(4)linux2.6早期。2.6的早期和2.4晚期核心挺像的。

(5)linux2.6晚期。2.6的晚期核心較早期核心有一些改變,尤其是驅動相關的部分和一些標頭檔案的位置。2.6的晚期核心目前還算是比較主流。

(6)linux3.x 4.x

(1)並不是越新版本的核心越好;

(2)選擇soc廠家移植版本會減少工作量。

(1)2.6.35.7 + android2.3/qt4.8.3

(2)3.0.8 + android4.0

Date型別必須知道的常識

日期型別格式說明 d 月中的某一天。一位數的日期沒有前導零。dd 月中的某一天。一位數的日期有乙個前導零。ddd 週中某天的縮寫名稱,在 abbreviateddaynames 中定義。dddd 週中某天的完整名稱,在 daynames 中定義。m 月份數字。一位數的月份沒有前導零。mm 月份數字。...

你必須知道的幾個救命常識

個案1 有一婦女手提包被偷,裡面有手機 hidden 錢包等。20分鐘後,她打通了老公的 告訴自己被偷的事。老公驚呼 啊,我剛才收到你的簡訊,問咱家hidden的密碼,我立馬就回了!他們趕到銀行時,被告知裡面所有的錢都已被提走。小偷通過用偷來的手機傳送簡訊給 親愛的老公 而獲取了密碼,然後在短短20...

你必須知道五個救命常識

你必須知道五個救命常識 有一婦女手提包被偷,裡面有手機 銀行卡 錢包等。20分鐘後,她打通了老公的 告訴自己被偷的事。老公驚呼 啊,我剛才收到你的簡訊,問咱家銀行卡的密碼,我立馬就回了!他們趕到銀行時,被告知裡面所有的錢都已被提走。小偷通過用偷來的手機傳送簡訊給 親愛的老公 而獲取了密碼,然後在短短...