forked from rcore-os/blog
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
45 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
--- | ||
title: 2024秋冬开源操作系统训练营第四阶段总结-chy669086 | ||
date: 2024-12-19 17:32:46 | ||
categories: | ||
- 第四阶段总结报告 | ||
tags: | ||
- author:chy669086 | ||
--- | ||
|
||
|
||
参与方向:宏内核,posix 接口相关。 | ||
|
||
我在四阶段中编写的是 futex 有关的代码。 | ||
|
||
## 设计思路 | ||
|
||
暂时请求了五个 os 需要实现的接口,分别是 | ||
|
||
- `sched_yield` 退出当前的任务,不放回调度队列。 | ||
- `translate_vaddr` 将当前任务的虚拟地址转换成操作系统可以访问的地址 | ||
- `current_task` 取得当前任务 | ||
- `current_prosess_id` 取得进程 id | ||
- `wake` 传入一个 `FutexQ` 类型,唤醒任务(提供了 `get_task` 函数取得任务) | ||
|
||
`FutexQ` 是存放任务的重要类型,内有 `key` `bitset` `task` 三个字段,其中 `key` 和 `bitset` 是用来唤醒任务的重要字段。 | ||
|
||
`FutexKey` 是一个枚举,现在只实现了一个 `Private`,`Shared` 暂时没有开发的思路。 | ||
|
||
任务等待队列存储在 `FutexQueues` 中,通过一个 `futex` 的唯一 key 通过哈希变换后放入或唤醒。 | ||
|
||
现在实现的调用有:`FUTEX_WAIT` `FUTEX_WAKE` `FUTEX_REQUEUE` `FUTEX_CMP_REQUEUE` `FUTEX_WAKE_OP` 以及对应的 bitset 版本 | ||
|
||
因为三阶段提供的宏内核中没有合适的线程实现,二阶短的项目不知道什么原因不能编译 `link-me` 的代码,所以我直接把整个模块移植到了阶段二的仓库,并编写测试通过。 | ||
|
||
## 收获 | ||
|
||
说实话还是不是很擅长编写 no_std 的代码,所以我还是依赖了很多外部库。 | ||
|
||
虽然没有通过最初的设想去适配到任何一个系统里去(直接移植还是太不松耦合了),但是我也花了很多时间去尝试适配,其中阶段二的项目仓库是最接近完成的一个,结果编译错误了,经过测试发现把 `futex::syscall::sys_futex` 函数调用去掉就可以通过编译,一时间不知道从何改起。转到 `arceos` 适配的时候,在被迫阅读了大量源码之后,发现提供的宏内核示例压根没有创建线程的系统调用,自己写了半天并没有写出来,所以又放弃了。 | ||
|
||
虽然写的挺差的,而且最近也到学校的期末周了,确实有没有太多时间写这个项目了,但是通过这次 posix 接口的编写,我还是学会了不少东西。 | ||
|
||
## 总结 | ||
|
||
从训练营开始到现在也过去 12 周了,看着自己从对操作系统毫无概念一步步到现在还是很感慨的。感谢老师的辛勤付出,感谢训练营能给我一个这样的平台。 |