Skip to content

Commit

Permalink
blog4
Browse files Browse the repository at this point in the history
  • Loading branch information
martin.cong committed Dec 22, 2024
1 parent ed8d602 commit 235205d
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions source/_posts/2024A-stage4-arceos-unikernel1-Martin1847.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,29 @@ tags:

这一块也是非常复杂的点。

TODO
印象比较深刻的是三级页表的内存占用,以及`mmap`的实现。通过`mmap`可以从内核申请共享内存、或者映射文件,减少系统调用次数。这里也是默认`lazy init`,用到的时候通过缺页中断去真正完成映射。

通过分页`PTE`也很好了保护了内存安全,是否可执行。

![riscv-sv39-pte](https://rcore-os.cn/rCore-Tutorial-Book-v3/_images/sv39-pte.png)

另外一点就是内存分配算法,内存本质就是一个大的`byte[]`,找到一个可用的(按页不按页都可以)地址,也即`index`返回即可。

开启分页后`MMU`会进行更多安全检查。比如“数据执行保护”(Data Execution Prevention, DEP)或“不可执行位”(No-eXecute, NX),CPU碰到不可执行的代码区,会触发异常。起到防注入、溢出等的保护。



## 文件系统虚拟化

了解了ELF文件格式,静态link,动态link,以及文件inode的底层细节。

TODO

设计一个高效的文件系统是个复杂的工程,本质根内存分配一样,要减少内部碎片、外部碎片,而磁盘访问速度远远不及内存,真是一件复杂的事情。

# 总结

计算机没有魔法。通过这阵子的学习,对于CPU、内存如何协同工作加深了理解。
哪些是硬件的支持,哪些是OS的抽象、编译器的辅助,有了更深刻的认识。
比如栈的处理,编译器处理函数上下文、OS初始化栈、CPU提供栈指针寄存器,共同协作完成。
这是一次很好的练习,对于从最底层看本质非常有帮助。

感谢清华大学的主办,感谢各阶段的老师们的指导!

0 comments on commit 235205d

Please sign in to comment.