ArceOS入门
依本人的拙见,三阶段其实是为了让大家在正式开始项目实习前,先弄明白我们接下来要开发或者要完善的这个OS到底是一个什么样的OS。换句话说,它到底是基于一个什么样的思想去构建的?它跟市面上已有的那些微内核或者宏内核有哪些区别?或者更近一点,它跟我们之前做的rcore又有哪些异同?这应该都是我们在ArceOS入门阶段需要了解的一些事情,弄明白了这些概念是为了给接下来的开发和项目实习打下一个良好的基础。
组件化内核的概念
研究和实践基于组件构造内核的方法,尝试构造应对不同场景的各种模式内核。
前两天才考完操作系统,在书本上,对操作系统的(其中一种)定义是这样的:
操作系统是一组能有效地组织和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用的程序的集合。
感觉有一种异曲同工之妙。即,我们也许不用将操作系统看作一个完整的整体,而是一块块组件,我们通过“胶水”进行粘合,将这些组件组合成一个程序的集合,来实现诸如计算机软硬件资源管理等功能。
在组件化内核领域:所有内核实例都可以基于组合组件的方式,从简单到复杂逐级迭代的进行构建。所有内核模式都可以看作以Unikernel模式为基础,朝向特定方向的组件化扩展。
那么什么是unikernel?
Unikernel
Unikernel模式下应用与内核处于同一特权级(均为内核态),共享地址空间。Unikernel既是内核又是应用,二者合为一体。
转换到实际场景中,我们可以理解成就是一个运行在开发板上的程序,只是这个程序直接操控了这个开发板的所有硬件资源,且它只做一个任务,比如U1.0,负责向屏幕上输出信息,随后终止,退出。
而从上面的例子中,我们又可以将一个简单的输出字符串的程序,分成几个部分。比如输出部分,架构相关的部分,给分隔开,并且各自作为组件再完善,成为了组件化内核的前身。
优势:二者之间无隔离无切换,简单高效。
劣势:二者之间无隔离无切换,安全性低。
小结:通过U_1_0:helloworld,建立最基本的框架:核心组件axhal、axruntime、api、ulib以及上层应用组件。
后续版本在该基本框架的基础上,通过扩展功能组件,扩展OS能力特性。
这里扩展的部分,就是axalloc, axtask, axsync等
从Unikernel到宏内核
相对于Unikernel,宏内核的特点:
(1) 增加一个权限较低的用户特权级来运行应用。
(2) 为应用创建独立的用户地址空间,与内核隔离。
(3) 内核运行时可以随时加载应用Image投入运行。
(4) 应用与内核界限分明。
为了将我们的工作进一步推进到宏内核,我们还需要实现几个组件,其中就是axmm,用来构造用户地址空间和axfs,加载应用程序代码到地址空间。
Hypervisor
这部分暂时没有做更多的了解,因为本人想参与宏内核的开发,更多的去学习宏内核的相关知识了。此外,软件所的任务也一直在做,于是还没来得及看。
课后练习
主要是在于bump_allocator以及对挑战题目第1题的理解。因为之前也一直在做内存分配这里的工作。
bump_allocator主要还是根据bump分配器本身的一些思想去填充对应的功能即可。
而挑战题目通过优化内存块的分配来提升内存空间的使用效率,使得Indicator这个指标有显性的提升。我的实现是基于slab的,准确来说,只是修改了某个内存块的大小限制,所以优化也没有那么明显。
祝接下来项目阶段好运!