🐳
uCore OS(on RISC-V64)实验指导书
  • Introduction
  • LAB0:ready~go!
    • 实验目的
    • 实验内容
    • 前导知识
      • 了解uCore
      • 了解RISC-V
      • 了解OS实验
      • 了解实验环境
      • 了解开发调试基本工具
      • 了解硬件模拟器
    • 配置环境
      • 安装虚拟环境
      • 安装开发工具
      • 安装硬件模拟器
      • 安装调试工具
  • LAB0.5:最小可执行内核
    • 实验目的
    • 实验内容
    • 练习
    • 内存布局
    • 链接脚本
    • 真正的入口点
    • 从SBI到stdio
    • 编译运行
    • 项目组成与执行流
  • LAB1:中断机制
    • 实验目的
    • 实验内容
    • 练习
    • RISC-V中断相关
    • 上下文处理
    • 中断处理程序
    • 时钟中断
    • 项目组成与执行流
  • LAB2:物理内存管理
    • 实验目的
    • 实验内容
    • 练习
    • 地址与页表
    • 物理内存探测
    • 以页为单位管理物理内存
    • 页面分配算法
    • 项目组成与执行流
  • LAB3:虚拟内存管理
    • 实验目的
    • 实验内容
    • 练习
    • 页面置换
    • PageFault
    • 使用多级页表
    • 页面置换机制
    • FIFO置换算法
    • 项目组成与执行流
  • LAB4:进程管理
    • 实验目的
    • 实验内容
    • 练习
    • 进程与线程
    • 相关结构体
    • 进程模块初始化
    • 进程切换
    • 项目组成与执行流
  • LAB5:用户程序
    • 实验目的
    • 实验内容
    • 练习
    • 用户进程
    • 用户程序
    • 创建并执行用户进程
    • 系统调用
    • 用户进程的退出和等待
    • 项目组成与执行流
  • LAB6:进程调度
    • 实验目的
    • 实验内容
    • 练习
    • 进程状态
    • 再次认识进程切换
    • 调度算法框架
    • 项目组成与执行流
  • LAB7:同步互斥
    • 实验目的
    • 实验内容
    • 练习
    • 同步互斥的基本概念
    • 信号量
    • 条件变量与管程
    • 项目组成与执行流
  • LAB8:文件系统
    • 实验目的
    • 实验内容
    • 练习
    • 文件系统介绍
    • 文件系统抽象层VFS
    • 硬盘文件系统SFS
    • 设备即文件
    • 从中断到终端
    • 项目组成与执行流
由 GitBook 提供支持
在本页
  • 实验内容
  • 开发OS实验的步骤

这有帮助吗?

  1. LAB0:ready~go!
  2. 前导知识

了解OS实验

上一页了解RISC-V下一页了解实验环境

最后更新于4年前

这有帮助吗?

写一个操作系统难吗?别被现在上百万行的Linux和Windows操作系统吓倒。当年Thompson趁他老婆带着小孩度假留他一人在家时,写了UNIX;当年Linus还是一个21岁大学生时完成了Linux雏形。站在这些巨人的肩膀上,我们能否也尝试一下做“巨人”的滋味呢?

实验内容

那我们准备如何一步一步来实现ucore呢?根据一个操作系统的设计实现过程,我们可以有如下的实验步骤:

  1. 启动操作系统的bootloader:OpenSBI。了解操作系统启动前的状态和要做的准备工作,了解运行操作系统的硬件支持,操作系统如何加载到内存中,理解两类中断--“外设中断”,“陷阱中断”等;

  2. 物理内存管理子系统。用于理解RISC-V分段/分页模式,了解操作系统如何管理物理内存;

  3. 虚拟内存管理子系统。通过页表机制和换入换出(swap)机制,以及中断-“故障中断”、缺页故障处理等,实现基于页的内存替换算法;

  4. 内核线程子系统。用于了解如何创建相对与用户进程更加简单的内核态线程,如果对内核线程进行动态管理等;

  5. 用户进程管理子系统。用于了解用户态进程创建、执行、切换和结束的动态管理过程,了解在用户态通过系统调用得到内核态的内核服务的过程;

  6. 处理器调度子系统。用于理解操作系统的调度过程和调度算法;

  7. 同步互斥与进程间通信子系统。了解进程间如何进行信息交换和共享,并了解同步互斥的具体实现以及对系统性能的影响,研究死锁产生的原因,以及如何避免死锁;

  8. 文件系统。了解文件系统的具体实现,与进程管理等的关系,了解缓存对操作系统IO访问的性能改进,了解虚拟文件系统(VFS)、buffer cache和disk driver之间的关系。

其中每个开发步骤都是建立在上一个步骤之上的,就像搭积木,从一个一个小木块,最终搭出来一个小房子。在搭房子的过程中,完成从理解操作系统原理到实践操作系统设计与实现的探索过程。这个房子最终的建筑架构和建设进度如下图所示:

ucore系统结构图

开发OS实验的步骤

本次OS实验大致可以通过如下过程就可以完成使用:

  1. 学习相关理论知识

  2. 建立LAB实验环境,采用VMware虚拟机的最简单方式完成

  3. 阅读本LAB实验指导书,了解实验要求

  4. 进入各个OS实验工程目录 例如:cd labcodes/lab1

  5. 根据实验要求阅读并修改代码

  6. 编译源码 例如执行:make

  7. 如果不通过则返回步骤3

  8. 如果实现不正确(即看到步骤6的输出存在不是OK的情况)则返回3

  9. 如果实现基本正确(即看到6的输出都是OK)则push到自己github仓库

  10. 编写实验报告,发送到助教邮箱,并push到github仓库

可以通过make qemu让OS实验工程在qemu上运行;可以通过make debug或make debug-nox命令实现通过gdb远程调试 OS实验工程。

源码

下载