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 | +-----------------------+-----------------+ |