总结与计划
NUDT-OS目前只是一个简单的类UNIX系统,采用混合内核架构,本章简要总结已实现的各模块功能和特点,并给出后续的拓展方向和计划。
总结
NUDT-OS是一个x86_64架构的,使用Rust实现的64位分时多任务操作系统。试图平衡微内核性能低于宏内核可靠性低的问题,我们采用基于内核线程的混合内核架构,目前运行在单核CPU上,主要实现的模块和特点总结如下:
模块 | 功能和特点 |
---|---|
任务管理 | 具有进程、内核线程、用户线程三种对象 内核统一调度内核线程和用户线程 采用 多对多线程模型 ,一个协程执行器内核线程服务多个用户线程支持互斥锁、信号量、管道等进程间通信 |
内存管理 | 每个进程有独立的地址空间 切换进程时切换地址空间 所有 用户线程共享内核栈 |
文件系统 | 一个简易的文件系统 一切皆文件,将多种对象都抽象为文件 实现管道,命令行参数,重定向 |
异步管理 | 利用协程实现多个异步系统调用 利用协程实现多对多线程模型 |
内核服务线程 | 每个内核服务线程执行一种特定服务 用户通过系统调用向内核服务线程发送请求并获得服务 内核服务线程崩溃时系统保持稳定,并可以`重启恢复内核线程 |
目前实现的系统调用如下:
- 任务管理类:
- fork:复制当前进程
- exec:当前进程加载可执行文件
- waitpid:等待子进程结束并回收子进程资源
- getpid:获取进程号
- gettid:获取线程号
- thread_join:等待线程结束
- thread_create:创建用户线程
- kthread_req:向内核线程发送请求
- thread_exit:线程退出
- proc_eixt:进程退出
- sleep:线程睡眠
- yield:线程放弃CPU,主动调度
- get_time:获取系统时钟数
- 文件类:
- dup:复制文件描述符
- open:打开文件
- close:关闭文件
- pipe:创建管道
- read:从文件读取
- write:向文件写入
- 同步互斥:
- mutex_create:创建互斥锁
- mutex_lock:互斥锁上锁
- mutex_unlock:互斥锁解锁
- semaphore_create:创建信号量
- semaphore_up:增加信号量资源
- semaphore_down:减少信号量资源
- condvar_create:创建条件变量
- condvar_wait: 当前线程阻塞条件变量
- condvar_signal: 唤醒条件变量阻塞的线程
计划
- 添加多核支持
- 实现更完善的文件系统
- 添加更多内核线程
- 添加C语言用户程序支持
- 添加更多设备驱动