Linux核心的起步

2021-07-09 21:42:13 字數 1585 閱讀 8151

目的:

2023年猴年來臨,經過過去兩年的積累,有了進一步的方向和定位:

依賴大資料(雲計算)的雲端gos和分散在各種可移動、可程式設計、智慧型終端的ros兩個os的互聯互通。

針對gos,經過過去幾年在hadoop平台領域的積累,基本能夠觸類旁通,mr/rdd/graph/ps/streaming、實時記憶體計算都不斷的匯集到gos的計算能力中。

而ros則更加輕盈,同時又承載著gos的觸角和末端神經,兩者相輔相承,共同打造商業的智慧型os時代。

linux作為最適合的os的原形,從此開始入手最合適不過,也彌補一下這方法的不足。

a.記憶體管理

b.程序管理

c.裝置管理

d.檔案系統

e.自旋鎖、訊號量(同步函式)

f.工作佇列、tasklet

g.核心資料結構(鍊錶、hash鍊錶、紅黑樹)

從這些基礎設施,逐步的著手核心的研究和分析。

linux作業系統的核心提供兩種記憶體分配的介面

1.從最底層的記憶體管理機制入手,提供頁式的記憶體管理

依賴alloc_pages,呼叫獲取的是頁面位址,通過page_address來獲取記憶體位址

使用__get_free_pages來直接獲取記憶體位址,該函式封裝了上述的alloc_pages和page_address

注意:alloc_pages的分配單元以頁為單位,至少為乙個頁

2.從slab系統分配記憶體,提供基於物件的記憶體管理

如果使用slab申請記憶體,需要建立slab物件

可以使用kmem_cache_create建立slab物件,提供物件的名稱、大小、建構函式、析構函式,然後通過kmem_cache_alloc和kmem_cache_free來申請和釋放記憶體

linux核心中的kmalloc就是使用slab提供的物件管理,

另外關注vmalloc的使用,把實體地址不連續的記憶體頁,對映為連續的記憶體區間。

在核心中實現任務排程,需要控制任務的睡眠、喚醒

__wait_event(wq,condition) 程序處於不可中斷的睡眠,只有條件成立,恢復執行

相關的函式

wait_event_timeout  如果超時時間到達,恢復執行

wait_event_interruptible 程序進行可中斷的睡眠,可接受訊號量

wait_event_interruptible_timeout 同時支援超時、可接受訊號量

wait_event_interruptible_exclusive 設定為排他性等待,如果滿足喚醒條件的有多個,只喚醒乙個排他性程序

重點:先關注核心的任務睡眠和喚醒處理機制

核心中的中斷的實現:

在中斷上下文中執行,不可休眠

軟中斷:跟硬體關係不緊密,可以開啟中斷執行,在軟中斷上下文執行。

注意:關注計算機系統中的中斷的重要性、以及使用的技巧

linux核心的預設軟中斷

網路裝置:傳送和接受軟中斷

塊裝置:實現軟中斷

核心內部定義的tasklet軟中斷【同一時刻乙個tasklet只能有乙個cpu執行,不同的tasklet可以在不同的cpu上執行】

而軟中斷,同一時刻可以在不同的cpu並行執行,所以必須考慮重入的問題

Linux程式設計起步 GCC基本用法

初學時最好從命令列入手,這樣可以熟悉從編寫程式 編譯 除錯和執行的整個過程。編寫程式可以用vi或其它編輯器編寫。編譯則使用gcc命令。要往下學習首先就得熟悉gcc命令的用法。gcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多...

Linux程式設計起步 GCC基本用法

初學時最好從命令列入手,這樣可以熟悉從編寫程式 編譯 除錯和執行的整個過程。編寫程式可以用vi或其它編輯器編寫。編譯則使用gcc命令。要往下學習首先就得熟悉gcc命令的用法。gcc命令提供了非常多的命令選項,但並不是所有都要熟悉,初學時掌握幾個常用的就可以了,到後面再慢慢學習其它選項,免得因選項太多...

linux核心測試 Linux核心測試的生命週期

linux核心測試 在針對linux核心的持續整合測試中 我寫了關於 持續核心整合 cki 專案及其更改核心開發人員和維護人員工作方式的使命。本文深入 了該項目的更多技術方面以及所有部分如何組合在一起。核心中每一項令人興奮的功能,改進和錯誤都始於開發人員提出的更改。這些更改將出現在不同核心儲存庫的大...