尝试用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年秋季操作系统专题训练课 18 RUST对Linux安全漏洞的安全性增强(2) 19 正在进行的工作 • 形成一组基于RustOS的操作系统课实验 https://rucore.gitbook.io/rust-os-docs/bootloader 20 后续工作 • 适合操作系统开发的语言剪裁 – 汇编 – C – Rust – … – 什么是适合内核开发的语言特征? 21 220 码力 | 23 页 | 1.53 MB | 1 年前3
2.3 用golang写一个操作系统统 复睿:李四保 ⽤用Golang ⾃自我介绍 l 开发过银⾏行设备 l 同花顺移动证券 l 前后参与创⽴立过多家公司 l ⽤用Golang写了⼀一个云操作系统 电⼒力、⽯石化、银⾏行、证券、⼲⼴广电、电商 研发、产品、运营、公司运营 l 多种职业 l 喜欢各种宗教 l 喜欢在虚⽆无中创造⼀一个世界 l 多个⾏行业 ⾃自我介绍 说⼀一万句,不如做⼀一件事:⽤用Golang写⼀一个操作系统 来份硬菜:⽤用Golang写⼀一个操作系统 l 操作系统 相对完整的控制系统资源,有应⽤用体系 Unix,CP/M,dos、windows, l ⽣生态操作系统 在原有操作系统内核基础上,构建新的应⽤用体系及应⽤用⽣生态 ios、android l 云操作系统 chrome chrome os和阿⾥里云os。在上⼀一层操作系统基础之上和⾃自家的云系统进⾏行整合 l 去中⼼心化的云操作系统 Leither 架构基本和chrome os类似,只是将后端的云系统去中⼼心化,使之脱离巨头的控制 操作系统历史 l 互联⺴⽹网正在整合各个⾏行业,对各个传统⾏行业进⾏行重构 l 互联⺴⽹网的格局正在固化 ⾏行业巨头垄断互联⺴⽹网资源,全⾯面压制创新空间0 码力 | 33 页 | 1014.12 KB | 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
Python3 基础教程 - 廖雪峰以做网站,很多著名的网站包括 YouTube 就是 Python 写的;可以做网 络游戏的后台,很多在线游戏的后台都是 Python 开发的。总之就是能 干很多很多事啦。 Python 当然也有不能干的事情,比如写操作系统,这个只能用 C 语言写; 写手机应用,只能用 Swift/Objective-C(针对 iPhone)和 Java(针对 Android);写 3D 游戏,最好用 C 或 C++。 如果你是小白用户,满足以下条件: 10 种编程语言的变化图: Python3 基础教程【完整版】 http://www.yeayee.com/ 8/531 总的来说,这几种编程语言各有千秋。C 语言是可以用来编写操作系统 的贴近硬件的语言,所以,C 语言适合开发那些追求运行速度、充分发 挥硬件性能的程序。而 Python 是用来编写应用程序的高级编程语言。 当你用一种语言开始作真正的软件开发时,你除了编写代码外,还需要 应运而生。Unicode 把所有语言都统一到一套编码里, 这样就不会再有乱码问题了。 Unicode 标准也在不断发展,但最常用的是用两个字节表示一个字符(如 果要用到非常偏僻的字符,就需要 4 个字节)。现代操作系统和大多数 编程语言都直接支持 Unicode。 现在,捋一捋 ASCII 编码和 Unicode 编码的区别:ASCII 编码是 1 个字 节,而 Unicode 编码通常是 2 个字节。0 码力 | 531 页 | 5.15 MB | 1 年前3
简明 X86 汇编语言教程 序的困难程度,要比调试一个 结构化的程序的难度高很多,因为“结构化”是以牺牲运行效率来提高可读性与可调试性,这 对于完成一般软件工程的编码阶段是非常必要的。然而,在一些地方,比如,硬件驱动程序、 操作系统底层,或者程序中经常需要执行的代码,结构化程序设计的这些优点有时就会被它 的低效率所抹煞。另外,如果你想真正地控制自己的程序,只知道源代码级的调试是远远不 够的。 浮躁的人喜欢说,用 C++写程序足够了,甚至说,他不仅仅掌握 用 db 来强制编码。 3.2 保护模式 实模式的东西说得太多了,尽管我已经删掉了许多东西,并把一些原则性的问题拿到了 这一节讨论。这样做不是没有理由的——保护模式才是现在的程序(除了操作系统的底层启 动代码)最常用的 CPU 模式。保护模式提供了很多令人耳目一新的功能,包括内存保护(这 是保护模式这个名字的来源)、进程支持、更大的内存支持,等等。 对于一个编程人员来说,能“偷懒 的每一个项目都描述一块内存。例如,一个项目中包含了某块被描述 的内存的物理的基地址、长度,以及其他一些相关信息。 保护模式是一个非常重要的概念,同时也是目前撰写应用程序时,最常用的 CPU 模式(运行 在新的计算机上的操作系统很少有在实模式下运行的)。 为什么叫保护模式呢?它“保护”了什么?答案是进程的内存。保护模式的主要目的在于允 许多个进程同时运行,并保护它们的内存不受其他进程的侵犯。这有点类似于 C++中的机制,0 码力 | 63 页 | 598.28 KB | 1 年前3
C++高性能并行编程与优化 - 课件 - 10 从稀疏数据结构到量化数据类型)不一定就是完美解决方案,要根据实际情况判断。 真正的解决: tbb::spin_mutex 其实主要的瓶颈在于 std::mutex 会切换到操作系统内核中去调度 ,非常低效。而 tbb::spin_mutex 则是基于硬件原子指令的,完全 用户态的实现。区别: std::mutex 的陷入等待会让操作系统挂起 该线程,以切换到另一个;而 tbb::spin_mutex 的陷入等待是通过 不断地 while (locked); antaichi.pdf ← ??? 第 7 章: SPGrid 操作系统管理内存的最小单位:页( 4KB ) • 当调用 malloc 时,操作系统并不会实际分配那一块内存,而是将这一段内存标记为“不可 用”。当用户试图访问(写入)这一片内存时,硬件就会触发所谓的缺页中断( page fault ),进入操作系统内核,内核会查找当前进程的 malloc 历史记录。如果发现用户写 入的地址是他曾经 户写入的地址根本不是他 malloc 过的 地址,那就说明他确实犯错了,就抛出段错误( segmentation fault )。 • 当一个尚且处于“不可用”的 malloc 过的区间被访问,操作系统不是把整个区间全部分配完 毕,而是只把当前写入地址所在的页面( 4KB 大小)给分配上。也就是说用户访问 a[0] 以后只分配了 4KB 的内存。等到用户访问了 a[1024] ,也就是触及了下一个页面,他才0 码力 | 102 页 | 9.50 MB | 1 年前3
Go 入门指南(The way to Go)工程师:Robert Griesemer,参与开发 Java HotSpot 虚拟机;Rob Pike,Go 语言项目总负责人,贝 尔实验室 Unix 团队成员,参与的项目包括 Plan 9,Inferno 操作系统和 Limbo 编程语言;Ken Thompson,贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一,与 Rob Pike 共同开 发了 UTF-8 字符集规范。自 年 1 月起,Ken Thompson 就开始研发一款以 C 语言为目标结果的编 译器来拓展 Go 语言的设计思想。 这是一个由计算机领域 “发明之父” 所组成的黄金团队,他们对系统编程语言,操作系统和并行都有着非 常深刻的见解 图 1.1 Go 语言设计者:Griesemer、Thompson 和 Pike Go入门指南 - 4 - 本文档使用 看云 构建 在 2008 年年中,Go 快速编译,高效开发 高效执行 并发支持,轻松驾驭 静态类型 标准类库,规范统一 易于部署 文档全面 免费开源 第2章:安装与运行环境 2.1 平台与架构 Go 语言开发团队开发了适用于以下操作系统的编译器: Linux FreeBSD Mac OS X(也称为 Darwin) 目前有2个版本的编译器:Go 原生编译器 gc 和非原生编译器 gccgo,这两款编译器都是在类 Unix0 码力 | 380 页 | 2.97 MB | 1 年前3
Python 标准库参考指南 3.10.15 应用技巧与最佳实践 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 16 通用操作系统服务 585 16.1 os --- 多种操作系统接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 threading_helper --- 用于线程测试的工具 . . . . . . . . . . . . . . . . . 1630 26.18 test.support.os_helper --- 用于操作系统测试的工具 . . . . . . . . . . . . . . . . . . . . 1631 26.19 test.support.import_helper --- 用于导入测试的工具 API 来鼓励和加强 Python 程序的可移植性。 Windows 版本的 Python 安装程序通常包含整个标准库,往往还包含许多额外组件。对于类 Unix 操作系统, Python 通常会分成一系列的软件包,因此可能需要使用操作系统所提供的包管理工具来获取部分或全部可选 组件。 在这个标准库以外还存在成千上万并且不断增加的其他组件 (从单独的程序、模块、软件包直到完整的应用 开发框架),访问0 码力 | 2207 页 | 10.45 MB | 9 月前3
Python 标准库参考指南 3.8.20 --- 生成管理密码的安全随机数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547 16 通用操作系统服务 551 16.1 os --- 多种操作系统接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 API 来鼓励和加强 Python 程序的可移植性。 Windows 版本的 Python 安装程序通常包含整个标准库,往往还包含许多额外组件。对于类 Unix 操作系统, Python 通常会分成一系列的软件包,因此可能需要使用操作系统所提供的包管理工具来获取部分或全部可选 组件。 在这个标准库以外还存在成千上万并且不断增加的其他组件 (从单独的程序、模块、软件包直到完整的应用 开发框架),访问 有些模块是用 C 编写并内置于 Python 解释器中;另一些模块则是用 Python 编写并以源码形式导入。有些模块提供专用于 Python 的接口, 例如打印栈追踪信息;有些模块提供专用于特定操作系统的接口,例如操作特定的硬件;另一些模块则提供 针对特定应用领域的接口,例如万维网。有些模块在所有更新和移植版本的 Python 中可用;另一些模块仅在 底层系统支持或要求时可用;还有些模块则仅当编译和安装0 码力 | 2052 页 | 9.74 MB | 9 月前3
Python 标准库参考指南 2.7.18 digest algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 15 通用操作系统服务 399 15.1 os —操作系统接口模块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 API 来鼓励和加强 Python 程序的可移植性。 Windows 版本的 Python 安装程序通常包含整个标准库,往往还包含许多额外组件。对于类 Unix 操作系统, Python 通常会分成一系列的软件包,因此可能需要使用操作系统所提供的包管理工具来获取部分或全部可选 组件。 在这个标准库以外还存在成千上万并且不断增加的其他组件 (从单独的程序、模块、软件包直到完整的应用 开发框架),访问 有些模块是用 C 编写并内置于 Python 解释器中;另一些模块则是用 Python 编写并以源码形式导入。有些模块提供专用于 Python 的接口, 例如打印栈追踪信息;有些模块提供专用于特定操作系统的接口,例如操作特定的硬件;另一些模块则提供 针对特定应用领域的接口,例如万维网。有些模块在所有更新和移植版本的 Python 中可用;另一些模块仅在 底层系统支持或要求时可用;还有些模块则仅当编译和安装0 码力 | 1552 页 | 7.42 MB | 9 月前3
共 240 条
- 1
- 2
- 3
- 4
- 5
- 6
- 24













