目的:
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 專案及其更改核心開發人員和維護人員工作方式的使命。本文深入 了該項目的更多技術方面以及所有部分如何組合在一起。核心中每一項令人興奮的功能,改進和錯誤都始於開發人員提出的更改。這些更改將出現在不同核心儲存庫的大...