rCore:一个由rust语言写的基于riscv架构的类unix操作系统
QEMU 是一个开源的虚拟化软件,可以模拟多种架构的硬件,使用户能够在不同的平台上运行操作系统和应用程序。在rcore中用到qemu-system-riscv64
BIOS是计算机的固件,负责在启动时初始化硬件并引导操作系统。在rcore中使用RUSTSBI
编译:cargo+riscv64gc-unknown-none-elf(指定平台)
在开源操作系统青训营的第二阶段,对rcore的学习中,写出一个os是循序渐进的
第一步:先脱离标准库限制去打印字符串,裸机打印”hello world”
用到链接脚本(.ld)内核程序加载脚本(.S)RUSTSBI(bootloader)riscv汇编代码
Riscv下的OS代码三模式:M(machine)S(supervisor)U(user)
M模式:RUSTSBI实现
S模式:各种操作系统功能的底层实现,涉及访问内存硬件资源
U模式:应用程序,地址空间与S模式隔离,受错误处理机制监视
entry.S和linker.ld:加载内核到内存中
Rustsbi提供中断和异常的处理,定时器,内存管理等
第二步:实现分时时间轮转运行应用程序
用到switch.S(切换脚本),trap.S(异常处理脚本),懒加载
批处理系统:
在任务队列中加载应用程序
设置任务的状态:运行(running),挂起(ready),退出(exit)
保存当前任务的上下文
切换到下一个任务,放入switch中运行
在这个基础上加每个任务运行最大时间限制就是分时时间轮转了,用到定时器中断
异常处理
enable_timer_interrupt函数实现定时
Trap_handler实现监督,
超时则挂起当前任务,运行下一个任务
Trap_handler
中断处理
程序异常时退出并报错
系统调用
第三步,实现虚拟页表在内存中存储数据
用到SV39,mmu(硬件,辅助虚拟地址转换为物理地址)
第四步,实现进程管理

第五步,实现文件系统
也就是disinode这个结构体索引到具体的数据块
一个块512个字节,可以存放一定数量的索引,被称为索引块,也可以存放数据,被称为数据块
第六步,实现并发(多线程)
也就是将原本的进程中一个个线程单独拎出来,放到列表中执行
这样也就方便对每个线程操控,进行死锁检测
先潦草记一下rcore的大框架,后面有空在细说