rcore介绍

rCore:一个由rust语言写的基于riscv架构的类unix操作系统

QEMU 是一个开源的虚拟化软件,可以模拟多种架构的硬件,使用户能够在不同的平台上运行操作系统和应用程序。在rcore中用到qemu-system-riscv64

BIOS是计算机的固件,负责在启动时初始化硬件并引导操作系统。在rcore中使用RUSTSBI

编译:cargo+riscv64gc-unknown-none-elf(指定平台)

在开源操作系统青训营的第二阶段,对rcore的学习中,写出一个os是循序渐进的

第一步:先脱离标准库限制去打印字符串,裸机打印”hello world”

用到链接脚本(.ld)内核程序加载脚本(.SRUSTSBIbootloaderriscv汇编代码

Riscv下的OS代码三模式:MmachineSsupervisorUuser

M模式:RUSTSBI实现

S模式:各种操作系统功能的底层实现,涉及访问内存硬件资源

U模式:应用程序,地址空间与S模式隔离,受错误处理机制监视

entry.Slinker.ld:加载内核到内存中

Rustsbi提供中断和异常的处理,定时器,内存管理等

第二步:实现分时时间轮转运行应用程序

用到switch.S(切换脚本),trap.S(异常处理脚本),懒加载

批处理系统:

在任务队列中加载应用程序

设置任务的状态:运行(running),挂起(ready),退出(exit)

保存当前任务的上下文

切换到下一个任务,放入switch中运行

在这个基础上加每个任务运行最大时间限制就是分时时间轮转了,用到定时器中断

                                                                       异常处理

enable_timer_interrupt函数实现定时

Trap_handler实现监督,

超时则挂起当前任务,运行下一个任务

Trap_handler

中断处理

程序异常时退出并报错

系统调用

第三步,实现虚拟页表在内存中存储数据

用到SV39,mmu(硬件,辅助虚拟地址转换为物理地址)

SV39 划分了 39 位虚拟地址和 56 位物理地址
39 =vpn0(2^9)+ vpn1(2^9)+ vpn2(2^9)+ page_offset (2^12)
vpn0, vpn1, vpn2 都是虚拟页号,索引到页表
第一级页表包含了第二级页表的地址,
第二级页表包含了第三级页表的地址,
第三级页表包含了映射的物理页号 (44 ) 和页表项(读写权限),
物理页号 + 页内偏移量为物理地址
(在 rcore mm 目录中有相应的转换计算和映射处理)

第四步,实现进程管理

虚拟地址的基础上,
任务 + 内存栈 -->进程
实现 fork exec spawn 等系统调用
调度算法采用优先级调度
优先级值越小,步长越大,进程越靠前,越先执行

第五步,实现文件系统

也就是disinode这个结构体索引到具体的数据块

一个块512个字节,可以存放一定数量的索引,被称为索引块,也可以存放数据,被称为数据块

第六步,实现并发(多线程)

也就是将原本的进程中一个个线程单独拎出来,放到列表中执行

这样也就方便对每个线程操控,进行死锁检测

先潦草记一下rcore的大框架,后面有空在细说

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值