本章我们来实现第一类内核对象:任务管理(Tasks)。
任务对象主要包括:线程 Thread
,进程 Process
,作业 Job
。以及一些辅助性的对象,例如负责暂停任务执行的 SuspendToken
和负责处理异常的 Exception
。
为了能够真实表现线程对象的行为,我们使用 Rust async 运行时 async_std
中的用户态协程来模拟内核线程。
这样就可以在用户态的单元测试中检验实现的正确性。
考虑到未来这个 OS 会跑在裸机环境中,将会有不同的内核线程的实现,我们创建一个特殊的硬件抽象层(Hardware Abstraction Layer,HAL),来屏蔽底层平台的差异,对上提供一个统一的接口。
这个 HAL 的接口未来会根据需要进行扩充。
本章中我们只会实现运行一个程序所必需的最小功能子集,剩下的部分则留到跑起用户程序之后再按需实现。