经过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

相关文章
相关标签/搜索