zoukankan      html  css  js  c++  java
  • 通过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写一个教学型的操作系统,目前刚刚开始,如果你对此也有兴趣,就请联系我吧!


  • 相关阅读:
    调试导论
    CSP-S2 2020 游记
    【题解】51nod 1327 棋盘游戏
    基础数学专题复习
    ubuntu 下 zsh 插件及安装方式
    ubuntu 下 Deepin-TIM 折腾笔记
    微服务学习笔记
    使用 Portainer 管理 Docker 笔记(含本地和远程)
    博客收藏
    定制unittest测试报告【转】
  • 原文地址:https://www.cnblogs.com/liqiuhao/p/12128070.html
Copyright © 2011-2022 走看看