通過9個Linux-0.11實驗學習操作系統


簡介

2019年秋,我自學了一下哈工大的操作系統課程,感覺其設計的教程和實驗作為操作系統入門是個不錯的選擇(雖然是基於較老的Linux-0.11寫的)。實驗大致覆蓋了操作系統中的核心概念,例如啟動、中斷、外設IO、上下文切換/系統調用,進程管理與調度,進程間通信,內存管理/地址轉換,文件系統等。而且每個實驗在教材中都有對應的說明,做起來很順暢。我做完后整理了一下相關資源,希望能幫到一些自學的同學。


指導教材

該課程使用的教材是 李治軍 和 劉宏偉 編著的《操作系統原理、實現與實踐》(ISBN: 978-7-04-049245-3),你可以在 這里 獲得。除了和課程對應的實驗,這本書還在最后設計了4個大的項目,包含內核級線程,虛擬內存,GUI以及網絡協議的實現。

另外,趙炯 編著的《Linux內核完全注釋-內核版本0.11》也是一本不錯的參考書,你可以在 這里 獲取。


實驗資源

你可以在 Hack-Linux-0.11 上獲得開發環境需要的工具,以及每個實驗的參考代碼、示例效果和注意事項。該倉庫的布局說明如下:

  1. oslab.zip:原Linux 0.11的代碼和在GNU/Linux下開發所需的工具,例如Bochs 2.3.7和GCC 3.4。

  2. tmp/: 一些雜項,和主體實驗沒什么關系。

  3. Lab 6.Ext. Print paging status/: 在完成實驗6后,我設計了一個打印頁地址轉換的實驗。

  4. 其他的八個目錄與書上的八個實驗相對應,每個目錄包含的是相對於原Linux 0.11更改的文件,另外還有一份README.md,說明了實驗的注意事項以及示例效果。


通過使用 rsynccp 這類的工具,我們可以方便的修改原始的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

環境搭建

本下載oslab.zip后,你可以參考 HIT-MANUAL 完成實驗環境的搭建。要注意的是,在搭建過程中可能會遇到32位庫缺失問題,可以通過指定安裝對應的32位版本庫或者multilib 解決,例如:

qiuhaoli@VM:~/tmp$ sudo apt install  gcc-multilib linux-libc-dev:i386

另外,某些頭文件或者庫在不同的GNU/Linux發行版或者不同版本的系統中放置的位置可能不同,例如 /usr/include/asm/usr/include/asm-generic ,可以做一下鏈接:

qiuhaoli@VM:~/tmp$ ln -s /usr/include/asm-generic /usr/include/asm

最后,當你不知道某個文件或文件夾對應的庫時,可以使用 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
...



P.S.

雖然這幾個實驗設計的都不錯,但由於平台和代碼年代久遠,以及C本身的一些特性,在實驗的過程中總會遇到一些歷史遺留問題或者設計缺陷。我現在正試着基於RISC-V平台用Rust寫一個教學型的操作系統,目前剛剛開始,如果你對此也有興趣,就請聯系我吧!



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM