Skip to content

Commit

Permalink
Add 2024秋冬开源操作系统训练营第四阶段总结报告-XiangyuTu
Browse files Browse the repository at this point in the history
  • Loading branch information
XiangyuTu committed Dec 21, 2024
1 parent 84012b9 commit 9534c00
Showing 1 changed file with 28 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---

title: 2024秋冬开源操作系统训练营第四阶段总结报告
date: 2024-12-22 01:15:00
tags:
- author:XiangyuTu
- repo:https://github.com/XiangyuTu/aruntime
---

作为常年开发网络程序的我,对异步、并发操作却仅仅停留在使用层面,这对我来说是一件长期的困扰。于是在第四阶段,我毫不犹豫地选择了“基于协程异步机制的OS”方向。在这个方向上,我学到了很多新的知识,也遇到了很多新的问题。

## 第一周

第一周的任务主要是了解 Rust 中异步的基本概念,通过阅读资料,我了解到了 Rust 中的 `async``await` 关键字背后的原理,并且了解到了如何实现有栈/无栈协程。过去我只了解过有栈协程,而无栈协程对我来说是一个全新的概念,其 LLVM Generator 的实现机制让我感到十分精妙。在这一周中,我主要是通过阅读资料和代码来了解这些概念,对于这些概念的理解还不是很深入。

## 第二周

第二周主要的工作是阅读 Tokio 代码,我阅读了 Tokio 的 `net``signal``sync` 模块,我将部分代码的分析记录在了共享文档中,这些代码的阅读让我对异步编程有了更深入的理解。

## 第三周

第三周通过阅读 `epoll``io-uring` 等相关资料,我了解到了异步 IO 的原理。通过阅读 `async-io``polling` 的代码,我了解了 `epoll` 在 Rust 异步运行时中的运用,而通过阅读 `monoio``tokio-uring` 的代码,我了解了 `io-uring` 在 Rust 异步运行时中的运用,这些代码的阅读让我对异步 IO 有了更深入的理解。`io-uring` 的机制起初让我感到困惑,但是在领悟到 `io-uring` 事实上是一个异步的系统调用框架而不是 `epoll` 这样的文件描述符复用机制后,我便茅塞顿开。

在阅读了大量相关的资料后,我也着手开始实现一个简单的异步运行时,通过对 [`mini-rust-runtime`](https://github.com/ihciah/mini-rust-runtime) 的学习和修改,我将其中使用 `polling` 实现的基于 `epoll` 的异步运行时改为了基于 `io-uring` 的异步运行时,并初步支持了文件的异步读写。因为使用 `io-uring` 必须从系统调用层面进行编程,抽象层次很低,在查阅了大量资料后我才勉强完成了这个十分粗糙的实现。

## 总结

毫不夸张的说,这短短的三周我学到了近年来对我来说最有价值的知识,使我对异步编程的理解有了质的飞跃,使我未来能更好地开发出高性能的网络程序。在学习的过程中,我也遇到了很多问题,但是通过查阅资料和请教老师,我都得到了解决。这次训练营对我来说是一次非常有意义的经历,我也希望未来能有机会继续参加这样的活动。

0 comments on commit 9534c00

Please sign in to comment.