1 前言

在学习 rcore 之后,为了更加了解其中的细节,萌生了自己写一个操作系统练练手的想法。这个操作系统只是用于个人学习所用,所有设计都是简化处理。

Forfun OS 项目源码-Github

kernel
kernel
Arch-related features (linker scripts, entry assembly...)
Arch-related features (linker scripts, entry assembly...)
Memory Manager (PageTable, Phys Frame Allocator, Virtual Address Allocator, MemoryArea, Memory Manager for process)
Memory Manager (PageTable, Phys Frame Allocator, Virtual Address Allocator, MemoryArea, Memory Manager for proce...
Board-related (Not used now)
Board-related (Not used now)
RUSTSBI/Bootloader
RUSTSBI/Bootloader
Process Manager (TCB)
Process Manager (TCB)
Scheduler (Task Switch, Round-robin)
Scheduler (Task Switch, Round-robin)
Interrupt
& Trap Handler
Interrupt...
Timer 
Timer 
IPC (sem, pipe, signal, shared memory...)
IPC (sem, pipe, signal, shared memory...)
syscall handler
syscall handler
Trap
Trap
Filesystem in user env
Filesystem in user env
Shell in user env
Shell in user env
APP1
APP1
APPn
APPn
Text is not SVG - cannot display

项目架构

1.1 详细设计文档

2 项目结构

按照初步的设想,需要实现操作系统几大基础功能

  • 系统调用
  • 任务调度
  • 内存及 MMU 管理
  • 进程管理
  • 进程间通信

整个操作系统按照微内核设计,驱动,文件系统,网络栈均放在用户层。因此在用户层还需要实现

  • 块设备驱动
  • sd 卡驱动
  • 网卡驱动
  • 文件系统接入
  • 网络协议栈移植

本操作系统计划支持以下架构和 bsp

  • riscv
    • qemu
    • k210
  • armv8
    • qemu
    • 树莓派

3 快速开始

3.1 安装环境

为了方便体验,可以使用 docker 进行运行开发,请预先安装 docker

如果不想在 docker 中进行开发,环境安装请参考 https://rcore-os.cn/rCore-Tutorial-Book-v3/chapter0/5setup-devel-env.html

3.2 运行 Forfun OS

请确认已安装 docker

make docker_start

make docker_into

# 启动内核
make run

# 运行正常,会进入 shell
# 运行 hello_world
>> hello_world
hello world!

# 目前还没有支持中断,所以如果运行 loop_test 不会退出的程序,无法使用 crtl-c
# 停止内核,目前必须用 kill 才可以停止
make kill

3.3 可以运行的用户程序

  • hello_world
  • loop_test
  • sleep_test

4 后续计划

加粗的任务应该会完成,剩余的看情况了

4.1 移植

  • 移植到 k210 开发板
  • 移植到 armv8-qemu
  • 移植到树莓派

4.2 内核优化

  • 线程功能
  • 多核管理
  • 中断处理
  • client - service IPC 实现 select 功能,监听多个 channel
  • 内存管理优化,取消恒等映射

4.3 用户程序

  • 用户程序堆优化,从固定堆大小到可动态伸缩
  • 优化文件系统服务,提供更多服务
  • 优化 Shell
  • 开发更多内核 feature 测试程序
  • 开发一个类 systemd manager

4.4 驱动

  • sd card 驱动
  • 网络驱动和协议栈

结语

本操作系统主要参考 rcore-os 的设计和实现。当然有一些部分是不一样,比如内存管理,微内核架构等等。但总的来说,还属于拾人牙慧之作。

计划是完成上述加粗的任务项,剩下的也很有意思,但是可能没有那么多时间了。

同时在实现的过程中会实时更新一些博客,记录具体功能的设计及实现,供自己以后参考。

另外,本人水平有限,对于操作系统开发更是所知不多,如果您发现博客中有错漏之处,还请不吝赐教。

欢迎在 Github 中提 issue,PR,issue 甚至可以只是一条评论,这只是一个玩具项目,所以请放轻松😊