BiteTheDisk 小站 BiteTheDisk OS kernel 开发小记

历届文档整理

Progressing…

[Docs] 任务控制块

应用程序的一次执行过程称为一个任务。

[Docs] 系统设计与整体架构

RISC-V架构定义了4种特权级别,其中只有M模式是必须实现的,其余特权级别可以根据运行在CPU上的应用需求进行调整。

[Docs] 概述

BTD-OS是一款基于 Rust 语言开发的宏内核操作系统,适用于 RISC-V64 平台。

[Docs] 文件系统优化历程

三阶段优化

动态链接

实现动态连接十分简单,只需要在加载elf文件时判断是否存在interpret段,如果存在就加载对应的动态连接器, 将动态连接器内容映射进内存并将程序入口设置为动态连接器的入口。接下来动态连接器会完成剩下的连接工作。

Rust 和 C 的交互

在 Rust 中,字符串是一个胖指针,包括具有所有权的 String 以及 &'a str,并且为 utf-8 编码

而在 C 中,字符串只是一个单纯的指针,以有符号的 i8 为单元,以 \0 作为结尾,长度不包括结尾 ‘\0’

在使用 Rust 编写 initrpoc 和 系统调用的时候,由于测例所要求的的接口所使用的的字符串相关参数均为 C 标准,所以我们需要将 Rust 和 C 之间的字符串进行转换

[全国赛I] 信号处理

在目前的实现中信号总共有63种,1-31为非实时信号,34-63是实时信号。32和33为未定义信号。 信号是每个进程独有的,除此之外每个进程还有信号掩码。

[全国赛I] busybox 预加载

由于大部分测试需要使用 busybox,为了避免多次解析 elf、从零创建地址空间等问题,我们采用了类似于加载initproc的方法。

[全国赛I] 进程/线程调度

在我们的内核中,我们使用 TASKMANAGER 管理分别处于就绪态,阻塞态的进程,包括因为调用 nanosleep 而休眠的进程。