了解OS实验
最后更新于
最后更新于
写一个操作系统难吗?别被现在上百万行的Linux和Windows操作系统吓倒。当年Thompson趁他老婆带着小孩度假留他一人在家时,写了UNIX;当年Linus还是一个21岁大学生时完成了Linux雏形。站在这些巨人的肩膀上,我们能否也尝试一下做“巨人”的滋味呢?
那我们准备如何一步一步来实现ucore呢?根据一个操作系统的设计实现过程,我们可以有如下的实验步骤:
启动操作系统的bootloader:OpenSBI。了解操作系统启动前的状态和要做的准备工作,了解运行操作系统的硬件支持,操作系统如何加载到内存中,理解两类中断--“外设中断”,“陷阱中断”等;
物理内存管理子系统。用于理解RISC-V分段/分页模式,了解操作系统如何管理物理内存;
虚拟内存管理子系统。通过页表机制和换入换出(swap)机制,以及中断-“故障中断”、缺页故障处理等,实现基于页的内存替换算法;
内核线程子系统。用于了解如何创建相对与用户进程更加简单的内核态线程,如果对内核线程进行动态管理等;
用户进程管理子系统。用于了解用户态进程创建、执行、切换和结束的动态管理过程,了解在用户态通过系统调用得到内核态的内核服务的过程;
处理器调度子系统。用于理解操作系统的调度过程和调度算法;
同步互斥与进程间通信子系统。了解进程间如何进行信息交换和共享,并了解同步互斥的具体实现以及对系统性能的影响,研究死锁产生的原因,以及如何避免死锁;
文件系统。了解文件系统的具体实现,与进程管理等的关系,了解缓存对操作系统IO访问的性能改进,了解虚拟文件系统(VFS)、buffer cache和disk driver之间的关系。
其中每个开发步骤都是建立在上一个步骤之上的,就像搭积木,从一个一个小木块,最终搭出来一个小房子。在搭房子的过程中,完成从理解操作系统原理到实践操作系统设计与实现的探索过程。这个房子最终的建筑架构和建设进度如下图所示:
本次OS实验大致可以通过如下过程就可以完成使用:
学习相关理论知识
建立LAB实验环境,采用VMware虚拟机的最简单方式完成
阅读本LAB实验指导书,了解实验要求
下载源码
进入各个OS实验工程目录 例如:cd labcodes/lab1
根据实验要求阅读并修改代码
编译源码 例如执行:make
如果不通过则返回步骤3
如果实现不正确(即看到步骤6的输出存在不是OK的情况)则返回3
如果实现基本正确(即看到6的输出都是OK)则push
到自己github仓库
编写实验报告,发送到助教邮箱,并push
到github仓库
可以通过make qemu
让OS实验工程在qemu上运行;可以通过make debug
或make debug-nox
命令实现通过gdb远程调试 OS实验工程。