Arceos 总结
核心学习了arceos作为组件化设计的理念,抽象微内核、宏内核和VVM之间的共同点。
基于这些比如调度task,内存空间mmaddr,文件系统fs的底层组件,可以方便的完成需求。
lab1 内存分配挑战
通过lab1内存分配器的实现,对内存加深了理解,就是个大byte[],物理地址就是index。
lab1核心实现就是借用操作系统的分配思想,内存空间分堆区和栈区,堆区存放不需要回收的数据(一直增长,没有内存碎片),栈区放需要回收的,包括vec中间扩容的。这部分处理掉可以达到373,参考实现:
https://github.com/martin1847/oscamp/blob/lab1/arceos/labs/lab_allocator/src/lib.rs
1 | # 每轮最小生存对象 |
unikernel
这种模式内核就是应用,共享地址空间,系统调用变成了函数调用。(不过在现有硬件下一个上下文貌似在几个us的级别,相比IO的10毫秒级别,感觉可以忽略不计,又有些鸡肋)
虽然理论上可以达到应用最佳性能,是服务端serverless的理想方案。
不过考虑到裸机成本,需要引入虚拟化。这也让我对Hypervisor加大了兴趣。
宏内核
利用arceos的组件化能力,较少改动就可以支持。
这里做了一个mmap的实验。这里做了个小优化,内容小于一页的时候,直接读取到对应地址,减少一次内存copy。
1 | if size_align > PAGE_SIZE_4K { |
Hypervisor
据说现在的云厂商大部分都是基于KVM的硬件虚拟化方案,也即 Type 1 虚拟化。
对既能达到高性能、又能安全便捷的技术,非常感兴趣。原来硬件层面提供了一些支持、能力。
通过实验,对riscv架构下GVA->GPA->HPA页表转换支持、中断注入增加了了解。
对于type 1.5虚拟化页增加了兴趣,尤其看到Jailhouse这种还可以物理隔离,那么rtos和传统分时os就可以共存了,可以在智能驾驶、新能源汽车系统上发挥作用。
1 | +-----------------------+-----------------+ |