Skip to content

Commit

Permalink
第三阶段总结报告-郑超群 (#637)
Browse files Browse the repository at this point in the history
  • Loading branch information
LordaeronESZ authored Dec 22, 2024
1 parent 8a63c76 commit 487d180
Showing 1 changed file with 105 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
---
title: 2024秋冬开源操作系统训练营第三阶段总结报告-郑超群
date: 2024-12-01 14:30:58
categories: 操作系统
tags:
- author: LordaeronESZ
- repo: https://github.com/LearningOS/2024a-rcore-LordaeronESZ
---

由于 11 月事情较为繁忙(比赛和研一课程等),因此三阶段实际花的时间并不是很多,加之 ArceOS 项目的复杂性较高,导致这一阶段个人的学习效果不算太理想,对项目的代码框架还不算很熟悉。后续准备深入啃一啃各模块的源代码,并在四阶段深入学习 Hypervisor 虚拟化方向。以下是我在三阶段过程中的学习日志。

<!--more-->

### 14日

由于前几天比赛没有时间,因此从今天才开始学习 ArceOS,首先按照[指导书](https://rcore-os.cn/arceos-tutorial-book/index.html)把 ArceOS 的设计理念简单过了一遍。然后开始看课程录播,看了第一节课的内容。

有一点小问题:用 VSCode 打开 `oscamp/arceos` 项目,rust-analyzer 插件会检查出代码错误(实际上并没有)。可以在项目的 `.vscode/settings.json` 中(没有则新建)添加键值对:`"rust-analyzer.cargo.features" : ["axstd"]` ,但是似乎只能解决 **部分问题**,仍然存在报错的情况出现。

**课后练习 1**,要求将打印出来的 `[WithColor]: Hello, Arceos!` 变成任意彩色,最简单的方法是直接修改 `print_with_color` 程序,使用 ANSI 转义码,如:`println!("\x1b[32m[WithColor]: Hello, Arceos!");`.

**课后练习 2** 等着明天再做吧。。。

### 15日

忙着新电脑开发环境的配置与数据的迁移,无进展。

### 16日

首先仍然是看课程录播,看了第二节课的内容。

下午要参加校园马拉松,无进展。

### 17日

**课后练习 2** 支持 HashMap 类型有点问题,感觉对 Rust 的模块机制还不是太熟悉,先放着吧。

对着 PPT 再简单过了一遍相应模块的代码,尝试完成 **课后练习 3** —— bump 内存分配算法,未完成。

看了第三节课的内容,**课后练习 4****挑战作业 1** 明天开始尝试。

### 18日

基本完成了 bump 内存分配算法(只是通过测试样例)。

尝试完成 **挑战作业 1**,首先我是尝试直接将 bump 照抄过来看看效果,但是却无法编译,提示 `make: mkfs.fat: No such file or directory`,询问 GPT 发现是我的 WSL2 没有安装对应的工具,使用命令 `sudo apt install dosfstools` 安装并将 `/usr/sbin` 导入 PATH 环境变量即可。照抄完成后,得到的 Indicator 分数为 0,暂且搁置。

最后,看了第四次课程的直播,**课后作业 4** 开了个头,感觉不太难,明天再做吧。

### 19日

首先完成了 **课后作业 4**,实现比较简单。`do_rename` 只需要调用 `ulib` 提供的系统调用接口 `std::fs::rename` 即可,而 `do_mv` 则需要先使用 `std::fs::read` 读取被移动文件的数据,并使用 `std::fs::write` 写入一个新的文件中,再将原来的文件删除,即可完成移动操作。

宏内核部分简单开了个头,尝试了一下 **课后作业 5**,感觉还是对 ArceOS 整体框架不太熟悉。

### 20日

今天忙于帮忙搬东西,几乎没有进展,只是看了课程的直播录屏,并过了一遍 PPT。

### 21日

忙于处理区域赛报名等琐事,无进展。

### 22日

今天开始决定仔细啃 ArceOS 的代码,今天主要啃了 `axlog` 模块和 `axhal` 的一部分,明天继续。

### 23日

今天先是把昨晚的课程录播看了一遍,主要专注于 ArceOS 理念,没有涉及太多的模块细节。

然后接着啃 `axhal` 模块,仍然没有啃完。。。

### 24日

今天主要忙于周报总结和上课作业和汇报等琐事,继续啃 `axhal` 模块,仍然未完成。

### 25日

看了 Hypervisor 第一次课的直播,总算将 `axhal` 模块啃完了。。。

### 26日

啃完了 `axruntime` 模块,尝试将现有几个模块串起来,实现一个基本的 Unikernel,待完成。

### 27日

把原 ArceOS 成功运行了,之前失败的原因貌似是 qemu 的版本问题(为 rCore 实验配置的 7.0.0 版本),重新安装完整版的 qemu_system 后成功了。

### 28日

看了 Hypervisor 第二次课的录播,其他基本无进展。

### 29日

整体再理了一下 ArceOS 的架构,思考在原始 ArceOS 项目中如何实现 Hypervisor,主要分为如下几个步骤:

1. 创建 payload 目录,下面存放客户操作系统(Guest)的源代码。
2. 在 Makefile 中添加 `make payload` 选项,作用是编译 payload 目录下的源代码为二进制文件。
3. 编写 `update_disk.sh`,作用是将编译好的二进制文件挂载到 `make disk_img` 生成的磁盘镜像中。
4. 编写 Hypervisor 程序,作为 ArceOS Unikernel 启动时的 APP,同时需要启用 qemu 的 BLK。

### 30日

整理训练营三阶段 h_4_0 的代码,尝试删除无关的代码,构建一个精简且较为完善的 Hypervisor,基本完成。

0 comments on commit 487d180

Please sign in to comment.