Rust 异步 Runtime 的兼容层 - 施继成Rust 异步 Runtime 的兼容层 施继成 @ DatenLord Introduce what’s rust async runtime # Rust async runtime Analyze the reason of runtime isolation # Async runtime binding # Compatible layer 1 Create a wheel0 码力 | 22 页 | 957.41 KB | 1 年前3
Rust分布式账务系统 - 胡宇● 事务层与账户层分 离 ● 独立水平扩展 ● CQRS ● Event Sourcing ● 针对读场景,写场 景分别优化 ● 稳定的底层 API ● 灵活的顶层 API ● 树状结构 ● 聚合查询 ● 正确性:内存安全,线程安全 ● 可靠性: Raft 共识算法 raft-rs ● 高性能:关键路径无锁单线程 顶层架构 ● Gateway 路由层 ○ 业务 Marker 事务层 ○ 使用业务 id 进行路由 ○ 执行转账计划 ○ 分发账户变动请求 ● Auticuro 账户层 ○ 使用账户 id 进行分区 ○ 执行账户变动请求 ○ 更新账户余额 分布式账务系统 性能展示 8 vCPUs * 5 节点 SSD 磁盘 当 TPS = 10K 时, 延迟 P99 < 20ms 分布式账务系统 高吞吐,超低延迟 账户层: Auticuro Auticuro 分布式账务系统 账户层: Auticuro ● 1. 接受转账请求,转换成 events ○ Tokio + Tonic 分布式账务系统 1 2 3 4 ● 1. 接受转账请求,转换成 events ● 2. 将 events 送入 Raft 共识,等待 events 被多数节点保存 ○ 共识:基于 raft-rs 的可靠消息队 列 ○ 存储: Rocksdb0 码力 | 27 页 | 12.60 MB | 1 年前3
洛佳 组件化驱动、ROM运行环境与RustSBI• 致力于向科研、教学和产业界推广 Rust语言 汲取Rust嵌入式和操作系统生态经验,总 结而成的新一代驱动开发方法。动、静态 基地址结合,高灵活性;一次开发,同时 复用于嵌入式、固件和内核中。 # 组件化驱动 合理利用嵌入式、桌面和服务器芯片片内 ROM代码,构造零开销的运行环境。进一 步地,可完成安全引导、安全镜像分发和 通常的嵌入式开发等功能。 # ROM运行环境 # com/YdrMaster/fast- trap 示例:RustSBI原型设计系统选型界面 RustSBI与生态后续引导链 • 对RISC-V UEFI,RustSBI准备好SBI 环境。 • RustSBI充当至关重要的安全 层,并准备好S态软件的环境 • UEFI部分运行在S态 • 对LinuxBoot,RustSBI参与准备好 rootfs和最小Linux环境的代码中。 • 一个优秀的例子是Oreboot1 • RustSBI原型设计系统将会提供0 码力 | 21 页 | 3.12 MB | 1 年前3
Comprehensive Rust(简体中文) 202412的计数可确保只要有引用,内含的值就会保持有效。 • Rust 中的“Rc”与 C++ 中的“std::shared_ptr”类似。 • Rc::clone 的成本很低:这个做法会创建指向相同分配的指针,并增加引用计数,而不会产生深 层的克隆,排查代码性能问题时通常可以忽略。 • make_mut 实际上会在必要时克隆内部值(“clone-on-write”),并返回可变的引用。 • 使用 Rc::strong_count 可查看引用计数。 but it's important to know what Unsafe Rust is. 不安全的代码通常内容很少而且与其他代码隔离,其正确性也应得到仔细记录。这类代码通常封装在安全 的抽象层中。 不安全 Rust 提供了五种新功能: • 解引用原始指针。 • 访问或修改可变的静态变量。 • 访问 union 字段。 • 调用 unsafe 函数,包括 extern 函数。 • 实现 unsafe 符的代码 就很理想。 鉴于 Android 中越来越多地使用 Rust,演讲者可能会提到以下任何一项: • 服务示例:DNS-over-HTTP • 库:Rutabaga 虚拟图形接口 • 内核驱动程序:Binder • 固件:pKVM 固件 186 第 32 部分 设置 We will be using a Cuttlefish Android Virtual Device to0 码力 | 359 页 | 1.33 MB | 10 月前3
尝试用RUST写教学操作系统https://github.com/mit-pdos/biscuit/ • Standford:用rust写OS – https://web.stanford.edu/class/cs140e/ 5 内核开发需要的程序设计语言 Yu Zhang, Foundation of PLs, CSEW’18⋅ Beijing 6 我们的尝试-教学操作系统ucore 7 我们的尝试-系统类课程的协调 2BA.2FVuMVYRUjHn7aQ1bnpqMkAli6Q- 10 效果比较-代码量统计 11 Rust的语言特征 • 类型推断->现代语言标配 • 面向对象特性->OO风格开发内核是符合思 维习惯的 • 通过泛型实现高效多态 • 匿名函数->一部分的函数式特性 • 比C/C++ 更好的代码管理, 重用: cargo 和 crate • 干净宏->简化静态分析 https://rucore.gitbook.io/rust-os-docs/bootloader 20 后续工作 • 适合操作系统开发的语言剪裁 – 汇编 – C – Rust – … – 什么是适合内核开发的语言特征? 21 22 您认为系统软件教学应该选择什么程序设计语言? 作答 正常使用主观题需2.0以上版本雨课堂 主观题 10分 讨论时间 230 码力 | 23 页 | 1.53 MB | 1 年前3
Rust OS 开源操作系统训练营的教与学-0615-李明暑期实习 (2个月) 训练营的四阶段培养目标和要求 Rust 语言编程 RISC-V体系结构 一阶段 完成94道Rustlings编程题 (2周) OS 大实验 rCore/uCore 内核 二阶段 完成5个OS编程大实验 (2周) ArceOS 组件化 操作系统 三阶段 Hypervisor 虚拟化技术 四阶段 完成1个OS组件或驱动 (4周) 完成1个硬件虚拟化适配 是否学习过OS课程? 是否学习过Rust编程? 90%以上是初学Rust 75%以上是初学OS 训练营培养 Rust OS 人才的三个方向 Rust for Linux 驱动开发 组件化OS 内核开发 多核异构处理器 虚拟化开发 Rust OS 产学研用生态建设 用 研 学 产 智能网联汽车操作系统,工业安全操作系统, 机器人操作系统,物联网AIoT等 鹏城实验室,启元实验室,中关村实验室,泉城实验室,0 码力 | 26 页 | 2.62 MB | 1 年前3
⽤ egg 孵化你的 SQL 优化器 - 王润基第三届中国Rust开发者⼤会 ⽤ egg 孵化你的 SQL 优化器 王润基 RisingWave 内核开发⼯程师 ? Parser Binder Optimizer Executor SQL AST Logical Plan Physical Plan Table Catalog Storage RisingLight 查询引擎的整体结构 SELECT name, url0 码力 | 39 页 | 6.48 MB | 1 年前3
Rust 是否需要另⼀种“⾊彩”的 Future? - 郭⼦兴Err(e) �� Poll��Ready(Err(e)), } } } Future 中的 IO 基于 poll 的 IO 事件被表达为在内核通知消息 准备好时,⼀次性地同步获取。 struct PollOnce{ inner: F, } impl Future for PollOnce where 0 码力 | 19 页 | 7.77 MB | 1 年前3
Hello 算法 1.1.0 Rust版”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归: 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用第 1. 点和第 2. 点的技巧。 给定一个函数,我们可以用上述技巧来统计操作数量: fn algorithm(n: i32) { let mut a = 1; // +0(技巧0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版”。 2. 归:触发“终止条件”后,程序从最深层的递归函数开始逐层返回,汇聚每一层的结果。 而从实现的角度看,递归代码主要包含三个要素。 1. 终止条件:用于决定什么时候由“递”转“归”。 2. 递归调用:对应“递”,函数调用自身,通常输入更小或更简化的参数。 3. 返回结果:对应“归”,将当前递归层级的结果返回至上一层。 观察以下代码,我们只需调用函数 recur(n) ,就可以完成 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 文。 ‧ 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他 操作,因此系统无须保存上一层函数的上下文。 以计算 1 + 2 + ⋯ + ? 为例,我们可以将结果变量 res 设为函数参数,从而实现尾递归: 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用第 1. 点和第 2. 点的技巧。 给定一个函数,我们可以用上述技巧来统计操作数量: fn algorithm(n: i32) { let mut a = 1; // +0(技巧0 码力 | 387 页 | 18.51 MB | 10 月前3
共 24 条
- 1
- 2
- 3













