Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add 2024秋冬季阶段三总结 #648

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions source/_posts/2024三阶段总结.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
title: 2024三阶段总结
date: 2024-12-01 17:47:45
tags:
---

# 2024三阶段总结

由于考试和双十一的影响,导致我实际学习三阶段的时间不到一周,到目前为止,勉强把实验做完了(除了最后一个套娃arceos的实验还没有看)。考试自不必多说,至于双十一嘛,是由于外存不够了,要升级一下,然后迁移系统、配置环境什么的。

由于时间较少,而且刚考完一场试,变懒了,所以对ArceOS还没有仔细研究,下面的内容可能较空泛、可能有错误。

## Unikernel
在我看来,Unikernel是一个与业务无关的裸机应用,分层、模块化且可扩展,根据业务的需要可以选取需要模块或对模块进行扩展,可以像正常开发linux c应用或std rust应用一样迅速开发裸机应用。

在这一阶段,被迫看了一些关于feature、attribute、条件编译的一些知识,头一次知道原来rust里面还有workspace。

>- print_with_color
>
>就加一些特殊的字符

>- support_hashmap
>
>看群内大佬讨论,就引了一个库

>- alt_alloc
>
> 对于这个,一开始还想最初的页是怎么分配来的,后来才想明白这些页已经固定下来了,只要考虑怎么管理就行了。

>- shell
>
> 对于mv操作,我一开始想的是仅移动指向inode的指针,不拷贝文件,但发现实现有些难,就没有这样做。最终rename和mv都用了rename实现,感觉有些奇怪,但起码测例能过,不愧是arceOS,就是通用。

## 宏内核
如果按照上面的理解的话,宏内核是Unikernel上的应用,但是又有些不太对,相比于实现业务目的,它更倾向于是扩展Unikernel,看起来有些像“内核之上不只有应用,还有内核的微内核”。

>- page_fault
>
> 相比于实现page_fault,我更关注的是linkme这种骚操作。

>- sys_map
>
> 就find_free_area然后read进去,虽然感觉用find_free_area找到的地方有些不符合man mmap的说明。

## Hypervisor
在三阶段的实现中,看起来Hypervisor最没用,在裸机之上实现裸机,大部分实现都是透传的,相比于直接运行在裸机上,不仅功能减少了、性能变差了,就连能源的使用也不只是烧电,还烧头发,悲。

还有,感觉可不可以在ArceOS上同时运行宏内核或其他应用和Hypervisor,ASA(ArceOS Subsystem for ArceOS)1.0就在眼前

>- simple_hv
>
> 改一下guest的sepc,设置一下a0、a1的值

>- pflash设备模拟方式
>
> 一开始没有搞清gpa映射到hpa时,没有经过host的satp,导致在host中拿着pa当va来用,出现了问题。另外,在完成后,修改了一下pflash的内容,想要读u128转string输出,但是没想到,在对* u128解引用时,它居然会先读u128的高64位,导致映射时页面没对齐。