<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