Skip to content
This repository has been archived by the owner on Jan 31, 2024. It is now read-only.

oscomp/proj57-TisuOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 

Repository files navigation

proj57-TisuOS

太素OS

基于 RISCV 架构的 Rust 系统内核-太素OS

源码

项目描述

目前太素OS已经大致完成如下功能:

  • Uart 通用异步收发传输器,命令行的输入可以通过 MMIO 获取,同时可以输出到命令行,作为主要的调试手段
  • 中断 包括汇编、Rust 两部分,中断首先跳转到汇编部分,再转到 Rust 部分。汇编部分负责保存与恢复环境,中断负责具体的处理
  • 内存管理
    • 分页管理,将内存按照 4kb 大小的页表进行记录管理,前 1G 的地址属于 MMIO。128MB 内存,内核分到 80MB
    • 分块堆内存管理,在分页管理的基础上,采用类似 SLAB 的方法,每次分配内存时将大小对齐到 2^n,将申请到的内存按照对应大小划分成许多块进行标记管理。
  • 页表映射 在分页管理的基础上,管理三级的页表。仅在映射时进行内存申请。
  • PLIC 平台级中断控制, 主要用于控制时钟中断和软件中断(待完成)
  • 时钟中断,现设置为 15_0000 个周期(15ms)进行一次中断
  • 同步 利用 RISCV 原子交换实现
    • 单重锁,仅可以同时上锁一次
    • 多重锁,同一个核心可以上锁多次(主要是给中断时的进程调度使用,可以在函数调用中多次上锁)
    • 读写锁,支持读取时允许多次上锁,写入时只允许锁一次
  • 进程,分为用户、内核两种,作为程序存在的标志
    • 内存映射,默认映射执行地址的一个页表以及栈内存对应页表。同时为内核进程映射所有内核用地址以及用户地址,为用户进程映射内核系统调用地址
    • 进程代表程序,管理所属的所有线程
  • 线程,作为进程的子集,通过 fork 产生,更加轻量,不需要再次进行内存映射
    • 每个线程分配16张页表作为栈
    • 调度,通过时钟中断触发调度,暂停当前内核标记为 Running 的进程、选取下一个标记为 Waiting 的进程标记为 Running 并运行
    • 第一个线程作为主线程,主线程结束所有线程被卸载,进程结束
  • 块设备,即磁盘。支持同步读写(用单重锁实现,操作发出后锁住,读写完成后触发中断解锁)、异步读写(创建一个 Sleeping 的进程,读写完成后触发中断唤醒待执行进程)
  • GPU,图形化显示
  • 输入设备,包括键盘、鼠标等的输入(nographic 选项下无效,因为需要 qemu 的窗口捕捉输入)
  • 磁盘读写缓冲 预先读取大块磁盘中的内容放置在缓冲内存中。所有读写操作都写入缓冲部分内存。目前只实现了读取,写入待完成。
  • FAT32文件系统 目前实现了 FAT32 文件系统的读取。文件系统以文件树的形式展示,可以读取运行 elf 程序
  • Shell(调试用)一个简单的命令行交互程序,以独立进程运行,用于调试功能
  • 图形接口
    • element,基本显示单元,维护一个矩形作为显示内容,支持透明度
    • canvas,在 element 的基础上支持翻页功能
  • 桌面系统 一个简单的桌面系统,包含命令行窗口、文件夹窗口、Dock。支持一些简单的交互

所属赛道

2021全国大学生操作系统比赛的“OS功能设计”赛道

参赛要求

  • 以小组为单位参赛,最多三人一个小组,且小组成员是来自同一所高校的本科生(2021年春季学期或之后本科毕业的大一~大四的学生)
  • 如学生参加了多个项目,参赛学生选择一个自己参加的项目参与评奖
  • 请遵循“2021全国大学生操作系统比赛”的章程和技术方案要求

项目导师

张根

难度

中等

特征

一个带图形界面的相对完整的操作系统,用Rust编写,运行在RISC-V 64 CPU上。

文档

License

GPL-v3

预期目标

注意:下面的内容是建议内容,不要求必须全部完成。选择本项目的同学也可与导师联系,提出自己的新想法,如导师认可,可加入预期目标

题目一

设计并完善图形 API

题目描述

对于新手而言,一个美观的图形界面可以成为他们学习操作系统的主要动力,同时也可以吸引更多同学加入到操作系统的研究当中。所以图形界面对于教学工作而言非常重要。

太素OS已经实现了底层的图形绘制 API。目前有一个内嵌在内核里的桌面系统,但是相关的系统调用还没有完成。现在需要制作相关的系统调用并将桌面系统独立编译为 elf 文件。

要求大致需要完成以下工作:

  1. 完善相关的系统调用
  2. 在 1 的基础上制作一个桌面系统,编译成独立的 elf 文件,通过系统调用的方式进行工作。
  3. 优化系统调用 API 的工作方式,使得系统运行于 QEMU 上不至于有明显的卡感。

你可以重构相关的图形部分代码。

建议:

  • 充分利用 Rust 的特性、减少不安全代码
  • 各个模块之间尽量降低耦合度

题目二

设计并完善任务系统

题目描述

太素OS的任务系统较为简单,目前还没有设置优先级等特性。多核调度也仅仅只是由主核心进行触发。现在需要设计一个功能更加完备的任务系统,要求:

  • 具有优先级或权重等特性,能够据此进行合理的时间片分配
  • 多核调度能够更加灵活,不再或减少对于主核心的依赖
  • 设计并实现线程间通信功能
  • 设计并实现定时任务定时唤醒

题目三

设计并完善文件系统

题目描述

太素OS中的文件是将硬盘镜像挂载到 Linux 虚拟机后拷贝过去的。文件系统对于测试系统调用、页表映射、内存分配的功能具有非常大的意义。目前项目中的文件系统较为粗糙,仅仅实现了FAT32格式的读取以及简单的写入。硬件无关的系统调用也没有制作。任务如下:

  • 添加其它类型的文件系统支持,如:ext、ntfs 等
  • 设计新的虚拟文件系统,设计合理的文件抽象

Releases

No releases published

Packages

No packages published