<font size="3"> ## 簡介html
2019年秋,我自學了一下哈工大的操做系統課程,感受其設計的教程和實驗做爲操做系統入門是個不錯的選擇(雖然是基於較老的Linux-0.11寫的)。實驗大體覆蓋了操做系統中的核心概念,例如啓動、中斷、外設IO、上下文切換/系統調用,進程管理與調度,進程間通訊,內存管理/地址轉換,文件系統等。並且每一個實驗在教材中都有對應的說明,作起來很順暢。我作完後整理了一下相關資源,但願能幫到一些自學的同窗。linux
<br />git
該課程使用的教材是 李治軍 和 劉宏偉 編著的《操做系統原理、實現與實踐》(ISBN: 978-7-04-049245-3),你能夠在 這裏 得到。除了和課程對應的實驗,這本書還在最後設計了4個大的項目,包含內核級線程,虛擬內存,GUI以及網絡協議的實現。github
另外,趙炯 編著的《Linux內核徹底註釋-內核版本0.11》也是一本不錯的參考書,你能夠在 這裏 獲取。bash
<br />網絡
你能夠在 Hack-Linux-0.11 上得到開發環境須要的工具,以及每一個實驗的參考代碼、示例效果和注意事項。該倉庫的佈局說明以下:工具
oslab.zip:原Linux 0.11的代碼和在GNU/Linux下開發所需的工具,例如Bochs 2.3.7和GCC 3.4。佈局
tmp/: 一些雜項,和主體實驗沒什麼關係。spa
Lab 6.Ext. Print paging status/: 在完成實驗6後,我設計了一個打印頁地址轉換的實驗。操作系統
其餘的八個目錄與書上的八個實驗相對應,每一個目錄包含的是相對於原Linux 0.11更改的文件,另外還有一份README.md,說明了實驗的注意事項以及示例效果。
<br />
經過使用 rsync
和 cp
這類的工具,咱們能夠方便的修改原始的Linux 0.11代碼,並運行修改後的內核。例如,在個人機器上,能夠經過如下bash命令來運行Lab 6.Ext.對應的內核:
qiuhaoli@VM:~/tmp/oslab$ rsync -a ../Hack-Linux-0.11/Lab\ 6.Ext.\ Print\ paging\ status/linux-0.11/ ./linux-0.11/ qiuhaoli@VM:~/tmp/oslab$ sudo ./mount-hdc qiuhaoli@VM:~/tmp/oslab$ cd ./hdc/usr/include/ qiuhaoli@VM:~/tmp/oslab/hdc/usr/include$ sudo cp ../../../../Hack-Linux-0.11/Lab\ 6.Ext.\ Print\ paging\ status/hdc/usr/include/* . qiuhaoli@VM:~/tmp/oslab/hdc/usr/include$ cd ../../.. qiuhaoli@VM:~/tmp/oslab$ cd linux-0.11/ qiuhaoli@VM:~/tmp/oslab/linux-0.11$ make && ../run
<br />
本下載oslab.zip後,你能夠參考 HIT-MANUAL 完成實驗環境的搭建。要注意的是,在搭建過程當中可能會遇到32位庫缺失問題,能夠經過指定安裝對應的32位版本庫或者multilib
解決,例如:
qiuhaoli@VM:~/tmp$ sudo apt install gcc-multilib linux-libc-dev:i386
<br />
另外,某些頭文件或者庫在不一樣的GNU/Linux發行版或者不一樣版本的系統中放置的位置可能不一樣,例如 /usr/include/asm
與 /usr/include/asm-generic
,能夠作一下連接:
qiuhaoli@VM:~/tmp$ ln -s /usr/include/asm-generic /usr/include/asm
<br />
最後,當你不知道某個文件或文件夾對應的庫時,可使用 apt-file
這個工具進行查找,例如:
qiuhaoli@VM:~/tmp$ apt-file search /usr/include/asm gcc-multilib: /usr/include/asm linux-libc-dev: /usr/include/asm-generic/auxvec.h ...
<br />
<br />
雖然這幾個實驗設計的都不錯,但因爲平臺和代碼年代久遠,以及C自己的一些特性,在實驗的過程當中總會遇到一些歷史遺留問題或者設計缺陷。我如今正試着基於RISC-V平臺用Rust寫一個教學型的操做系統,目前剛剛開始,若是你對此也有興趣,就請聯繫我吧! <br /> </font>
原文出處:https://www.cnblogs.com/liqiuhao/p/12128070.html