手寫了個作業系統
內功決定一個程式設計師的上限,這是每個程式設計師都知道的道理。程式設計師要修哪些內功呢:彙編、C語言、C++、作業系統核心…
這些修內功的課程,市面上少有人做,做相關課程的人,大多缺實戰經驗,所以課程偏理論,大家學起來總感覺軟綿綿的不得勁…
子牙老師之前是JVM專家,離開圖靈後做了手寫JVM小班,一舉成功,這次帶來的是他的新課程手寫作業系統,非常硬核、重實戰…推薦給大家
哈嘍,小夥伴們好,我是子牙。深入研究Windows核心、Linux核心、Hotspot原始碼…
大家期待已久的手寫作業系統課程終於來啦! 既手寫JVM課程後又一全網唯一的硬核課程!一期包含七大專題,三個月時間, 直播授課 ,手把手帶你實現一個可執行的作業系統。
知道你有很多問題想問,別急,聽我娓娓道來。為了方便大家更好地瞭解課程,我錄了個更相信的影片版。雖然是課程試看影片,我也其中也分享了很多與作業系統學習相關的知識…
手寫作業系統
手寫一個作業系統,應該是所有Coder的夢想吧。奈何這方面的資料奇缺,雖然有部分書籍,但是沒有一定的基礎也是看不懂的,導致很多Coder這一生都沒能實現這個夢想。
我比較幸運,十多年時間,誤打誤撞補齊了手寫作業系統需要的絕大多數基礎,於是在手寫JVM課程做完之後,做了這個課程。
先說下一個完整的作業系統包含哪些,如圖
那實現一個作業系統需要哪些基礎呢:
-
語言層面:彙編、C語言。這兩門語言要達到精通級別,能融會貫通使用才行。因為寫核心會涉及到彙編與C語言之間的互相呼叫
-
作業系統層面,對作業系統的中斷機制、程序執行緒機制、記憶體機制要非常瞭解,最好是瞭解Windows、Linux兩個核心對於此的底層實現。這些機制是你寫一個能跑的作業系統必備的,你腦海中沒有那麼多底料,在實現的時候遇到各種奇葩問題,你將束手無策
-
尤其要對作業系統的執行流機制非常熟悉,要熟練使用ROP技術構建執行流,在寫核心的時候會經常用到此技術,比如任務的退出、fork函式
-
硬體層面,需要對BIOS中斷、螢幕操作、鍵盤操作、時鐘中斷、CPU段頁門非常熟悉,熟練使用
-
還要了解Linux的可執行檔案格式ELF,要熟練使用gcc、nasm,深刻理解編譯、連結,沒有這一塊的知識點,你寫的核心將無法除錯,也就意味著你寫不出來
-
……
看到這,有些小夥伴就慌了:這我能學得會嗎?穩住,別怕,有我!課程會在合適的節點穿插講彙編、C語言、作業系統核心、硬體、gcc、elf、Makefile等關聯知識,還有課後答疑及課後練習。
你只要感興趣,都可以學,不用擔心基礎問題,是真的能讓你學得會的作業系統課程 。
不過你確實需要花費一點努力,下點苦功夫才能學會。這些知識你今天不學,遲早還是要學。技術這行,如果沒有實力支撐,就是吃青春飯,底層功力紮實,才能越老越吃香!而且網際網路紅利已經結束,進入內卷時代,與其被別人卷,不如主動卷,成為TOP!
學這個課有什麼用
咱們也不能空談理想,聊點現實的:寫一個作業系統,有什麼現實意義呢?
一、從面試角度來說,無論你是Java、Python、go,亦或是c、c++,面試中都會被問到作業系統或者硬體相關的問題,你可能不知道,或者背答案應付。問題一變,就啞口無言了。如果你寫過一個作業系統,你將深入理解這些,面試官問一個問題,你能答出一串,獲得好感,佔得談薪先機
二、從工作角度來說,如果你寫過作業系統,打通了這層認知,你寫的每一行程式碼,你能一眼看穿它的本質,想想這種堅定的感覺,再想想你平時惴惴不安的感覺,你選哪個?
三、從就業角度來說,未來是萬物互聯時代,IOT、人工智慧、虛擬現實等這些產業的背後涉及的作業系統,無不是Linux系。我的這個手寫作業系統課程,會結合講Windows核心、Linux核心,寫一個自己的核心。一個課程,讓你學會三個作業系統,為不確定的未來留點後路
四、從學習角度來說,新技術層出不窮,底層技術已經基本穩定。追逐新技術,沒有盡頭。萬變不離其宗,作業系統就是技術行業的宗,學一次,受益終身。學習,要追求效率,要學習那些相對不變的,有個這個基礎,再去學那些變化的,秒懂。比如你學會了linux的多執行緒,就等於同時學會了所有程式語言的多執行緒
五、從個人發展角度來說,如果你沒有底層功力,技術這行你能達到的高度是非常有限的,因為你沒有自學能力,遇到問題你只能問別人,等別人的答案,可能還不一定是正確答案…想想求人的痛苦,為何自己不成為實力的擁有者呢?
課程詳細介紹
前面講的可能看起來有點牛叉,不免會讓有些人懷疑我是不是在吹牛,所以我準備給出有力的事實
手寫作業系統課程安排
先給大家看下完整的手寫作業系統課程安排,一共五期,當前是一期招生
手寫作業系統一期大綱
手寫作業系統一期程式碼
一期課程相關的程式碼我已經全部寫完
-
真實模式切入保護模式
-
實現記憶體檢測、實體記憶體管理模組、虛擬記憶體管理模組
-
實現了輸出模組。 要知道你用Linux終端,它會自動翻頁,這個功能你如果寫核心都是要自己實現的
-
實現了鍵盤中斷。 就是你鍵盤敲什麼,螢幕就顯示什麼,為後面加入命令列做準備
-
實現了時鐘中斷,通過時鐘中斷排程任務。 與Windows、Linux一模一樣
-
實現了程序執行緒、任務切換、阻塞喚醒。 當然,任務模組的東西很多,後面會逐步加入
-
實現態的切換,由核心態切入使用者態發起系統呼叫
-
實現了系統呼叫模組,通過0x80中斷實現應用態對核心態的範圍及返回
課程配套程式碼,分支我是按照課時打的,方便大家到時閱讀程式碼
課程筆記已經做好了,與上面貼的課程大綱一模一樣,會嚴格按照筆記授課,可以放心
多工切換是怎麼切的?看下酷帥的程式碼片段
你如果看過其他相關的影片,你會發現大家沒辦法除錯C語言。如果這樣,無疑讓學習門檻變得很高,在我這裡是不允許的,於是我花了大量時間攻克了此。即,我提供的環境,是可以除錯你寫的C語言的
最後介紹下自己:前阿里P8。2021年加入圖靈學院成為一名講師,專注講JVM與作業系統。2022年離職創業嘗試做手寫JVM,運氣較好,一舉成功。
一年多開設了五期班,積累了500多VIP。課程幹活滿滿,全網唯一,零差評。
手寫作業系統,依舊將是零差評。
真心做教育,踐行“子牙出品,必屬精品”
如果你想更多瞭解我,歡迎去我公眾號【硬核子牙】看我之前的文章及我的奮鬥歷程。白手起家程式設計師的職場心得,應該會對你有很大啟發
8.11-8.22為預售價格, 8.22-9.30為早鳥價,10月開課恢復原價4000
價效比超高,可全網比價! 感興趣的小夥伴別錯過超大優惠上車哦~
- 手寫了個作業系統
- Linux黑科技|mmap實現詳解
- JIT Compilation:理解與實現
- Linux核心除錯利器|kprobe 原理與實現
- 自己動手寫一個GDB|基本功能
- 怎樣學好計算機底層技術?
- 一文讀懂eBPF|即時編譯(JIT)實現原理
- 一文看懂eBPF|eBPF實現原理
- 一文看懂eBPF|eBPF的簡單使用
- 學習計算機底層原理,我推薦幾個大佬!
- 搞懂程序組、會話、控制終端關係,才能明白守護程序幹嘛的?
- 跟大佬們一起起飛!
- 一文讀懂|Linux 程序管理之CFS負載均衡
- Linux 多核 SMP 系統的引導
- 深入理解Linux核心之記憶體定址
- 圖解|Linux 組排程
- 網際網路圈,年末小聚
- 手把手教你|攔截系統呼叫
- KSM機制剖析 — Linux 核心中的記憶體去耦合
- 使用 GDB Qemu 除錯 Linux 核心