經過9個Linux-0.11實驗學習操做系統

<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 上得到開發環境須要的工具,以及每一個實驗的參考代碼、示例效果和注意事項。該倉庫的佈局說明以下:工具

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

  2. tmp/: 一些雜項,和主體實驗沒什麼關係。spa

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

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

<br />

經過使用 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

<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 />

P.S.

雖然這幾個實驗設計的都不錯,但因爲平臺和代碼年代久遠,以及C自己的一些特性,在實驗的過程當中總會遇到一些歷史遺留問題或者設計缺陷。我如今正試着基於RISC-V平臺用Rust寫一個教學型的操做系統,目前剛剛開始,若是你對此也有興趣,就請聯繫我吧! <br /> </font>

原文出處:https://www.cnblogs.com/liqiuhao/p/12128070.html

相關文章
相關標籤/搜索