Skip to content

Commit

Permalink
2024秋冬开源操作系统训练营第四阶段总结-chy669086
Browse files Browse the repository at this point in the history
  • Loading branch information
chy669086 committed Dec 21, 2024
1 parent 99baa7e commit 731a536
Showing 1 changed file with 45 additions and 0 deletions.
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 周了,看着自己从对操作系统毫无概念一步步到现在还是很感慨的。感谢老师的辛勤付出,感谢训练营能给我一个这样的平台。

0 comments on commit 731a536

Please sign in to comment.