尝试用RUST写教学操作系统尝试用RUST写教学操作系统 向勇、陈渝 清华大学计算机系 20181123 1 背景 • 用什么语言写操作系统? – 汇编 – C – C++ – GO – RUST – … 2 3 各位老师所教的课程信息统计 计算机组成原理 编译原理 操作系统 其他 A B C D 提交 多选题 1分 此题未设答案 我们的尝试-教学操作系统ucore 7 我们的尝试-系统类课程的协调 8 用RUST写操作系统: 2018年春季操作系统课 http://os.cs.tsinghua.edu.cn/oscourse/OS2018spring/projects#A.2Bi.2F56C4u.2Bi6FbnpqMkAli6Q- 9 用RUST写操作系统: 2018年秋季操作系统专题训练课 RUST的安全哲学 • 尝试把系统正确性证明整合到语 ⾔言本身当中 • Rust有严格的安全约束,也可以 把编译时约束转移到运⾏时(例 如Mutex,RefCell),也允许程序 员显式地指出不安全(unsafe块), 并使⽤安全封装和管理不安全 • unsafe块是一个精妙的设计,在你 想偷懒破坏安全性时给你带来⼩ 小的骚扰 13 Rust的安全特征 • 类型安全: 远离void*0 码力 | 23 页 | 1.53 MB | 1 年前3
 基于静态分析的Rust内存安全缺陷检测研究基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 报告日期:2022.11.25 复旦大学 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 Rust语言 ❑ 系统级安全编程语言 ▪ 内存安全 ▪ 并发安全 ▪ 效率 2006年 2011年 Foundation成立 2020年 2021年 Mozilla裁员Servo团队 AWS, Huawei, Google, Microsoft, Mozilla… Rust如何保障内存安全? ❑ 内存安全问题产生的主要原因之一是指针别名导致悬空指针 ▪ 手动释放内存或调用析构函数 ▪ 函数返回时发生的自动析构或内存释放 ❑ Rust设计的目标之一是编译时检查指针别名(共享可变引用) ▪ 0x012345usize; let r = address as *const i32; } unsafe { risky(); } 调用unsafe函数 定义unsafe函数 Rust的安全哲学 ❑ Safe API无论如何被使用都不应带来未定义行为 ❑ 程序员应避免直接使用unsafe code ❑ Interior unsafe:将unsafe code封装为safe API0 码力 | 28 页 | 1.55 MB | 1 年前3
 Borsh 安全高效的二进制序列化第三届中国 Rust 开发者大会 安全高效的二进制序列化 Daniel Wang @ NEAR Borsh • 运行、编码效率 • 确定性 • 跨平台兼容性 二进制序列化的问题 Binary Object Representation Serializer for Hashing • 字节级别确定性 • 执行速度快 Borsh • 轻量级 • 每一个对象与其二进制表示之间都存在一个双射映射0 码力 | 21 页 | 3.35 MB | 1 年前3
 Rust OS 开源操作系统训练营的教与学-0615-李明第三届中国Rust开发者大会 Rust OS 开源操作系统训练营的教与学 李明 清华大学 2023-6-17 Rust China Conf 2023 Rust OS 开源操作系统训练营的教与学 1 Rust OS 开源训练营的起因和发展 Title Title Title 开源操作系统训练营的起源(2020年) 陈渝老师 向勇老师 OS Tutorial Summer 训练营的愿景和目标 目标 愿景 核心产出 探索新一代安全高性能操作系统的设计与构建 影响并培养更多的人学会写操作系统 每年为高校和企业培养1000名操作系统开发人才 参加训练营要回答的三个问题 你为什么要来参加这个活动? 为什么要以开源 的方式来参与? 我们如何能把这些 知识技能学到? Rust OS 开源操作系统训练营的教与学 2 开源训练营的总体规划和教学实践 教什么?怎么学? RISC-V体系结构 一阶段 完成94道Rustlings编程题 (2周) OS 大实验 rCore/uCore 内核 二阶段 完成5个OS编程大实验 (2周) ArceOS 组件化 操作系统 三阶段 Hypervisor 虚拟化技术 四阶段 完成1个OS组件或驱动 (4周) 完成1个硬件虚拟化适配 (4周) 台阶式向上迈进 训练营的教学/实习安排 • 春夏季训练营0 码力 | 26 页 | 2.62 MB | 1 年前3
 Rust 语言学习笔记语言设计的看法主要是:重大创新,却又博采众长。 Rust 为了解决内存安全问题重新设计了类型系统,提出了所有权的概念,同时 为了能够解决当前大多数语言无法检测到的运行时错误,rust 创造性地设计了 无畏并发。Rust 借鉴了很多优秀语言的设计理念,以及快速迭代的社区,这些 都是 Rust 受到赞赏的重要因素。 Rust 是一门系统级编程语言,被设计为保证内存和线程安全,并防止段错误。 作为系统级编程语言,它的基本理念是 可以被归为通用的、多范式、编译型的编程语言,类似 C 或者 C++。与 这两门编程语言不同的是,Rust 是线程安全的! Rust 编程语言的目标是,创建一个高度安全和并发的软件系统。它强调安全性、 并发和内存控制。尽管 Rust 借用了 C 和 C++ 的语法,它不允许空指针和悬 挂指针,二者是 C 和 C++ 中系统崩溃、内存泄露和不安全代码的根源。 Rust 中有诸如 if else 和循环语句 for 和 while (structured type)而不是类(class)。这点,与基于继承的 OO 语言 C++, Java 有相当大的差异。而跟 Ocaml, Haskell 这类函数式语言更加接近。 Rust 做到了内存安全而无需 .NET 和 Java 编程语言中实现自动垃圾收集器的 开销,这是通过所有权/借用机制、生命周期、以及类型系统来达到的。 Rust 程序设计语言的本质在于赋能(empowerment):无论你现在编写的是何0 码力 | 117 页 | 2.24 MB | 1 年前3
 Comprehensive Rust(简体中文) 20241229.6.1 解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 30 不安全 Rust 174 30.1 不安全 Rust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 30.2 解引用裸指针 177 30.6 实现 Unsafe Trait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 30.7 安全 FFI 封装容器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 30.7.1 解答 . . . . minutes • Day 4 Afternoon (2 hours and 10 minutes, including breaks) Segment Duration 错误处理 55 minutes 不安全 Rust 1 hour and 5 minutes 深入探究 除了为期四天的“Rust 基础”课程外,还有一些专业课题提供: Android 中的 Rust 深入探究 Android 中的0 码力 | 359 页 | 1.33 MB | 10 月前3
 Rust 程序设计语言 简体中文版 1.85.0. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 20.1. 不安全 Rust . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 昭著的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。 Rust 破除了这些障碍:它消除了旧的陷阱,并提供了伴你一路同行的友好、精良的工具。想 要 “深入” 底层控制的程序员可以使用 Rust,无需时刻担心出现崩溃或安全漏洞,也无需因为 工具链不靠谱而被迫去了解其中的细节。更妙的是,语言设计本身会自然而然地引导你编写出 可靠的代码,并且运行速度和内存使用上都十分高效。 已经在从事编写底层代码的程序员可以使用 Rust 内联错误信息功能。 通过使用 Rust 生态系统中丰富的工具,开发者在编写系统级代码时可以更加高效。 学生 Rust 适合学生群体,也适合有兴趣学习系统概念的人。许多人通过 Rust 学习了操作系统开发 等主题。社区对学生问题非常欢迎并乐于回答。通过类似这本书以及其他内容的努力,Rust 团队希望使系统概念能为更多人所易于理解,特别是编程新手。 公司 数百家大小规模的公司在生产环境中使用0 码力 | 562 页 | 3.23 MB | 29 天前3
 Rust 程序设计语言简体中文版...................................................................................... 484 19.1. 不安全的 Rust ............................................................................................ 昭著的陷阱。即使谨慎的实践者,亦唯恐代码出现漏洞、崩溃或损坏。 Rust 破除了这些障碍:它消除了旧的陷阱,并提供了伴你一路同行的友好、精良的工具。想 要 “深入” 底层控制的程序员可以使用 Rust,无需时刻担心出现崩溃或安全漏洞,也无需因为 工具链不靠谱而被迫去了解其中的细节。更妙的是,语言设计本身会自然而然地引导你编写出 可靠的代码,并且运行速度和内存使用上都十分高效。 已经在从事编写底层代码的程序员可以使用 Rust 联错误信息功 能。 通过使用 Rust 生态系统中丰富的工具,开发者在编写系统级代码时可以更加高效。 学生 Rust 适合学生群体,也适合有兴趣学习系统概念的人。许多人通过 Rust 学习了操作系统开发 等主题。社区对学生问题非常欢迎并乐于回答。通过类似这本书以及其他内容的努力,Rust 团队希望使系统概念能为更多人所易于理解,特别是编程新手。 公司 数百家大小规模的公司在生产环境中使用 Rust0 码力 | 600 页 | 12.99 MB | 1 年前3
 Hello 算法 1.1.0 Rust版Some(i); } } None } 值得说明的是,我们在实际中很少使用最佳时间复杂度,因为通常只有在很小概率下才能达到,可能会带来 一定的误导性。而最差时间复杂度更为实用,因为它给出了一个效率安全值,让我们可以放心地使用算法。 从上述示例可以看出,最差时间复杂度和最佳时间复杂度只出现于“特殊的数据分布”,这些情况的出现概率 可能很小,并不能真实地反映算法运行效率。相比之下,平均时间复杂度可以体现算法在随机输入数据下的 ,用于表示各种语言的字母、标点符号甚至表情符号等。 ‧ 布尔类型 bool ,用于表示“是”与“否”判断。 基本数据类型以二进制的形式存储在计算机中。一个二进制位即为 1 比特。在绝大多数现代操作系统中,1 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 ‧ 字符 char 的大小在 C 和 C++ 中为 1 字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为0 码力 | 388 页 | 18.50 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Rust 版Some(i); } } None } 值得说明的是,我们在实际中很少使用最佳时间复杂度,因为通常只有在很小概率下才能达到,可能会带来 一定的误导性。而最差时间复杂度更为实用,因为它给出了一个效率安全值,让我们可以放心地使用算法。 从上述示例可以看出,最差时间复杂度和最佳时间复杂度只出现于“特殊的数据分布”,这些情况的出现概率 可能很小,并不能真实地反映算法运行效率。相比之下,平均时间复杂度可以体现算法在随机输入数据下的 ,用于表示各种语言的字母、标点符号甚至表情符号等。 ‧ 布尔类型 bool ,用于表示“是”与“否”判断。 基本数据类型以二进制的形式存储在计算机中。一个二进制位即为 1 比特。在绝大多数现代操作系统中,1 字节(byte)由 8 比特(bit)组成。 基本数据类型的取值范围取决于其占用的空间大小。下面以 Java 为例。 ‧ 整数类型 byte 占用 1 字节 = 8 比特,可以表示 28 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 ‧ 字符 char 的大小在 C 和 C++ 中为 1 字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为0 码力 | 387 页 | 18.51 MB | 10 月前3
共 39 条
- 1
 - 2
 - 3
 - 4
 













