實戰:用 C 語言實現操作系統

一直以來,我們學習線程切換與調度,都是通過閱讀操作系統書籍或 Linux 源碼甚至反彙編 Window 內核代碼。無論怎樣,這些東西都很抽象,學習起來十分困難。

另外,隨着現代化編程語言逐漸流行,C++20 的正式發佈,都離不開用戶態線程這些基礎知識。再比如 Golang 的 Goroutine,騰訊公司的開源的 libco,百度的 BRPC 中的 bhtread,如果想深刻理解它們,都需要紮實的基本功。

本次 Chat 會帶你循序漸近的掌握下面的知識點:

  • 控制流切換原理
  • 上下文切換
  • 線程設計
  • 調度函數的封裝與代碼模塊化
  • 線程的主動切換
  • 時間片輪轉調度

本文實驗環境:
ubuntu 16.04 32 位操作系統(讀者請務必提前安裝好);
挑選一個你自己覺得好用的虛擬機軟件,比如 VMWare;
請把你的虛擬機環境配置成單核 CPU。

學習時間:大於 5 小時

爲什麼使用 32 位系統?因爲方便初學者學習,能更快速的掌握原理。
在這裏插入圖片描述
圖1 用戶態線程運行示例

需要注意的是,上面的代碼,並沒有使用操作系統爲我們提供的 pthread 系列函數,thread_create 和 thread_join 函數都是自己純手工實現的。唯一使用操作系統的函數就是設置時鐘,因此會有時鐘信號產生,這一步是爲了模擬時間片輪轉算法而做的。

本場 Chat 作者——Allen()
百度高級研發工程師,CSDN 博客專家。目前從事智能交互式對話系統雲端開發。負責過大流量、高併發等業務場景。

掃碼查看完整 Chat 原文,進入讀者圈與作者深度交流

本場 Chat 關鍵點總結:
理解“棧切換”的本質
掌握指令執行與棧的關係
掌握上下文是如何切換的
理解主動切換,知道主動切換可能會發生在哪些地方
理解什麼是時間片
對於不主動讓出 cpu 的線程,是如何切換到其它進程的

這一整篇文章裏,我們完成了線程切換與線程調度的框架,在此基礎上,我們還可以做更多有關線程的東西,比如線程的同步與互斥,還有更多的線程狀態。理解了本文之後,更深入的學習對你來說已經不是難事了!

點擊鏈接 瞭解本場 Chat,開始實戰操作系統!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章