一个完全用rust写的开源操作系统-Starry

1. Starry

Starry是2023年全国大学生计算机系统能力大赛操作系统设计赛-内核实现赛的二等奖作品。Starry是在组件化OS的arceos的基础上,进行二次开发的操作系统内核,使用宏内核架构,能够运行Linux应用的内核。

原始的操作系统大赛的仓库为
https://gitlab.eduxiji.net/202310003101649/starry

目前的宏内核的arceos的开发仓库
https://github.com/Arceos-monolithic (推荐)
(目前仅仅建议使用较为稳定的riscv64架构)

2. Starry 宏内核实现

2.1 axmem 内存管理

宏内核相比于unikernel主要差别在于多进程和多个地址空间。axmem模块负责进程地址空间的管理更确切的说是虚拟地址空间的管理。

在这里插入图片描述
axmem模块依赖于例如page_table和page_table_entry,slab_allocator等其他crate。先回顾一下基本的页表相关的内容页表相当于一棵树Satp是作为页表的根。
在这里插入图片描述
然后是具体sv39模式下的分页

在这里插入图片描述

总而言之,从页表中,可以获取到对应的一个具体虚拟地址页到一个物理地址页的映射但是,对于一个进程来说,同样需要知道他拥有了哪些虚拟地址空间。

首先,操作系统不会把所有空间都分配给某个进程,而是把该进程用到的空间都分配给他。其次,举个例子,在结束进程的时候,需要清理该进程所拥有的进程地址空间,所以必须进行一个记录和维护。

进程虚拟地址空间的特点:拥有多个不一定连续的段(并不是实际意义上的代码段啥的,只是类比,类比)每个段具有多个虚拟空间的页。
在这里插入图片描述
因此Starry用了两个数据结构来表示这个MapArea用于表示一段空间,其中维护了起始地址,对应的物理页面信息等等。分别放在 axmem/src/lib.rs 和axmem/src/area.rs中。

在这里插入图片描述
在这里插入图片描述
当数据结构确定了之后,相应的操作其实都很好理解了,无非就是增删查改。(请注意这两个数据结构的调用关系,比如下图中上层memoryset需要增加一个area的时候,就要调用下层的一个接口)当然还有剩下两个文件,分别是用于描述shared mem和文件系统映射到内存的问题。但是这两个对于理解地址空间这件事情并没有太大影响。

在这里插入图片描述
除此之外,值得关注的还有更改pagetable的satp寄存器内容来切换页表的操作值得留意,和前面介绍的内容不同,这部分并没有放在axmem中,而是具体到不同架构中,放在axhal/src/arch里面对应架构的mod中。
在这里插入图片描述

2.2 axtask 任务管理

Axtask是在之前arceos里面就有的一个模块,但是为了能够适应多进程多地址空间,做了很多的更改。

在这里插入图片描述

从启动开始看一个新的task是怎么生成的最开始是汇编代码,在axhal/platform对应的platform文件夹下面的platform下面,进入rust_entry函数。

在这里插入图片描述
在处理了一大堆前置的东西之后,在rust_entry里面终于进入了rust_main函数。

在这里插入图片描述
在rust_main函数里面,终于开始了喜闻乐见的往屏幕上打印一些基础信息的阶段,在之后,终于开始了一大堆东西的初始化。

在这里插入图片描述

在这里,我们可以看到这么一段代码这段代码的含义是,如果是多进程的内核,就启动多进程,而如果是有多线程的要求,那么启动多线程的。

在这里插入图片描述

但是多进程也会有多线程的呀,那么不要灰心,进入init_kernel_processer函数仍然需要调用axtask的init_scheduler,至于其他的内容则是初始化一个内核进程的内容罢了。

在这里插入图片描述
来看看init_scheduler做了什么实质性的内容,只有run_queue的init(虽然timer也很重要,但是跟我们的多进程多线程没啥关系)

在这里插入图片描述

在这里,你可以看到一个idle的task以及一个main_task。并且在最后,把current task设置为了main task请注意idle和main的差别,当前的代码执行流应当归属于main task,因此idle是一个新建的,然后继续运行main。

在这里插入图片描述
除此之外,和一个task相关的数据结构则放在task.rs文件中。

在这里插入图片描述

2.3 axprocess 进程管理

axprocess是增加的一个模块。该模块实现了进程这个概念。核心主模块在process.rs文件中。

一个很大的不同点在于:axtask和axprocess分别相当于线程和进程,因此,与很多只能看到内核进程的操作系统不同,在Starry中,是能够同时看到进程和进程中的线程的。

在这里插入图片描述

在这里插入图片描述

对于一个进程而言需要管理的资源如下图所示:

  • 子进程
  • 所拥有的线程
  • 文件描述符

在这里插入图片描述
还是回到前面的分支,多任务和多进程的区分之处,这回,来看看除了init_scheduler生成了idle和main的任务之外,还做了什么。
他初始化了一个process结构体,并且把对应的IDLE的task塞进去了。

思考一下:main task咋办?他没被塞到任何进程里面去

在这里插入图片描述
在rust_main里面process或者task init之后,再经过了其他的init,最后会运行到main。

在这里插入图片描述
而这部分,会最终运行到apps里面的用户态函数入口。

在之前我们讲到测例的这个run testcase的这个loop的时候,来注意一下这里面代码的main_task。
在这里插入图片描述

最后来考虑一下进程的切换。在这里他调用了一个yield now task。

在axprocess/api.rs中借用了axtask的yield_now。这又调用了run_queue的yield_current,最终调用runqueue的一个resched

在这里插入图片描述

随后是run_queue的switch_to函数,他在这里,对于切换不同的进程地址空间,使用了如下的代码(又回到了熟悉的函数),来切换不同的页表基地址寄存器。

在这里插入图片描述
最后会运行到context_switch,从而使用汇编,保存旧的任务的寄存器值,加载新的寄存器的值。

在这里插入图片描述

3. Starry 代码流程

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51-42 NÜWA:女娲,统一的多模态预训练模型

21年11月,微软、北大联合发布了NUWA模型,一个统一的多模态预训练模型,在 8 个下游任务上效果惊艳。目前该项目已经发展成为一系列工作,而且都公开了源代码。 Abstract 本文提出了一种统一的多模态预训练模型N̈UWA,该…

【精简改造版】大型多人在线游戏BrowserQuest服务器Golang框架解析(1)——功能清单

1.匿名登录 2.服务连接 3.新手引导 4.随机出生点 5.界面布局 6.玩法帮助 7.NPC会话 8.成就系统 9.成就达成 10.用户聊天 11.战斗&信息展示 12.药水使用 13.副本传送 14.玩家死亡 15.超时断开

实验:使用FTP+yum实现自制yum仓库

实验准备 FTP服务器端:centos-1(IP:10.9.25.33) 客户端:centos-2 两台机器保证网络畅通,原yum仓库可用,已关闭防火墙和selinux FTP服务器端 ①安装vsftpd并运行,设定开机自启动 安装vsftpd…

金融数字化能力成熟度指引

1 范围 本文件提出了金融数字化能力成熟度模型、成熟度计算方法,明确了不同维度金融数字化转型能力 相应的分档要求。 本文件适用于金融机构衡量金融科技应用和数字化转型发展水平,检视自身数字化发展优势与短板, 加快数字化转型&#xff0c…

金蝶云星空和金蝶云星空单据接口对接

金蝶云星空和金蝶云星空单据接口对接 来源系统:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践,面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司,提供一个通用的ERP服务平台。K/3Cloud支持的协同应用包括但…

Linux Makefile

1.开发背景 linux 下编译程序需要用到对应的 Makefile,用于编译应用程序。 2.开发需求 编写 Makefile 编译应用程序 1)支持多个源文件 2)支持多个头文件 3)支持只编译修改的文件,包括源文件和头文件 4)支持…

Web程序设计-实验03 JavaScript语言基础

题目 【实验主题】 素数问题求解。计算(判断) 1~100中哪些是素数、哪些是合数。 素数也称为质数,是只能被1及其自身整除的自然数。与素数相对应的是合数,合数可以被分解为若干个素数的乘积,这些素数称为这个合数的质…

数据结构从入门到实战——顺序表的应用

目录 一、基于动态顺序表实现通讯录 二、代码实现 2.1 通讯录的初始化 2.2 通讯录的销毁 2.3 通讯录的展示 2.4 通讯录添加联系人信息 2.5 通讯录删除联系人信息 2.6 通讯录修改联系人信息 2.7 通讯录的查找联系人信息 2.8 将通讯录中联系人信息保存到文件中 2.9…

【Windows10】Anaconda3安装+pytorch+tensorflow+pycharm

文章目录 一、下载anaconda0.双击下载的文件1. 选择All users2. 安装路径3. 勾选环境变量和安装python4.安装完成5.添加环境变量6.测试是否安装成功 二、安装pytorch(先看四!先检查一下自己电脑是不是只能安装GPU版的1.查看conda图形化界面2.在安装pytor…

【图解计算机网络】网络协议分层解析

网络协议分层解析 网络协议分层应用层传输层网络层数据链路层 TCP/IP分层模型通讯示例 网络协议分层 网络协议分层一共有OSI七层网络协议,TCP/IP四层网络网络协议,还有五层网络协议。 七层由于分层太多过于复杂,实际应用中并没有使用&#x…

代码编辑工具PilotEditPro18.4版本在Windows系统的下载与安装配置

目录 前言一、PilotEdit Pro安装二、使用配置总结 前言 “ PilotEdit Pro是一个功能强大且功能丰富的文本和代码编辑器,可满足程序员、开发人员和IT专业人员的不同需求。定位为一个多功能的编辑解决方案,PilotEdit Pro以其对广泛的文本和代码文件格式的…

Nginx莫名奇妙返回了404

描述 nginx作为反向代理,代理python的服务,但是通过代理访问服务的时候,报了404的错误。 难受的是客户现场没有查看日志的权限,只有查看配置文件的权限,我们检测了几遍配置文件也没有找到问题,哎~ 问题引…

相机摄影入门技巧,数码摄影技巧大全

一、资料前言 本套数码相机摄影资料,大小1.08G,共有42个文件。 二、资料目录 《aking人像摄影技巧分享》.pdf 《Nikon.D90数码单反摄影技巧大全》FUN视觉.全彩版.pdf 《不可不学的摄影技巧》.pdf 《常用场景摄影》.pdf 《单反数码摄影专家技法》.…

【Web】AFCTF 2021 题解(部分)

目录 BABY_CSP search secret google authenticator 随便做做,环境是NSS上的 BABY_CSP CSP绕过_script-src self-CSDN博客 CSP指令值 *: 星号表示允许任何URL资源,没有限制; self: 表示仅允许来自同源&#xff…

盲人购物指南:智能化辅助引领超市购物新体验

作为一名资深记者,我有幸见证了一位盲人朋友借助一款名为蝙蝠避障的高科技辅助应用,独立完成超市购物之旅,这一过程充分展示了盲人购物指南新时代的到来。 在前往超市的路上,这款应用犹如一位贴心的“电子向导”,实时为…

Android Room 记录一个Update语句不生效的问题解决记录

代码展示 1.数据实体类 Entity public class User {PrimaryKey(autoGenerate true)private long id;private String name;private String age;private String sex;public User(String name, String age, String sex) {this.name name;this.age age;this.sex sex;}public …

【剪映专业版】14为视频添加炫酷特效

视频课程:B站有知公开课【剪映电脑版教程】 1.特效 画面特效:用于整个画面 人物特效:仅用于画面中的人物,如画面中无人,则不起作用 2.添加特效 按号添加 可通过鼠标推动实现特效时间调节 可叠加使用特效 3.特效修…

危险场景智能运维巡检系统

在石油、天然气、煤炭和化工等行业,特别是在I/IIC级防爆区场景中,存在着诸如易燃、易爆、高温、有毒有害以及粉尘等危险因素。例如,油气转运站、催化裂化装置、煤化工甲醇车间以及制氢站等地点,都面临着这些潜在的危险。传统的人工…

34. 【Android教程】菜单:Menu

作为 Android 用户,你一定见过类似这样的页面: 它就是我们今天的主角——菜单,它的使用场景和作用不用多说,几乎每个 App 都会用到它,今天我们就一起来看看 Android 提供的几种菜单类型及用法。 1. 菜单的几种类型 根…

如何实现文件上传到阿里云OSS!!!(结合上传pdf使用)

一、开通阿里云OSS对象存储服务 对象存储 OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储 OSS 是一款海量、安全、低成本、高可靠的云存储服务,提供 99.995 % 的服务可用性和多种存储类型,适用于数据湖存储,数据迁移,企…