marp: true theme: default paginate: true _paginate: false header: '' footer: '' backgroundColor: white style: @import url('https://unpkg.com/tailwindcss@^2/dist/utilities.min.css');
从操作系统的角度看
编译原理和计算机组成原理
陈渝
清华大学
2023年5月13日
第七届全国高校计算机类专业系统能力培养高峰论坛
报告内容
- 背景和问题
- 编译/操统/计组的特点与联系
- 关于编译/操统/计组的综合实践
背景与问题
自我介绍
- 清华大学计算机系软件所 陈渝
- 研究方向:操作系统
- 教学内容:
- “计算机科学基础” 大一第一学期
- “编译原理” 大三第一学期
- “操作系统” 大三第二学期
- “高级操作系统” 研究生课
背景与问题
清华SYS课程系列
- 计算机系统概论 大二第一学期
- 计算机组成原理 大三第一学期
- “编译原理” 大三第一学期
- “操作系统” 大三第二学期
- “计算机系统结构” 大三第二学期
- “计算机网络原理” 大三第一学期
背景与问题
- WHY "从操作系统角度看编译原理/计算机组成原理"
- SYS Courses --> SOS Courses
- 学生觉得学习这三门课程很难/量大,缺乏兴趣
- 老师觉得讲授这三门课程很难/量大,缺乏动力
- 三门课程的内容相对独立,缺少联系
- 与实际应用的联系不够紧密,缺少牵引性
背景与问题
- WHY "从操作系统的角度看编译原理和计算机组成原理"
- 我们培养学生的目标
- 系统分析能力:提问题
- 系统抽象能力:建模型
- 系统综合能力:系统观
- 系统设计能力:提思路
- 系统实现能力:写代码
- 这些能力更多是通过学生的自身实践来获得的,上课是实践的辅助
- 而老师的主要精力可能花在讲授知识上了,导致目标与现状不符
- 我们培养学生的目标
背景与问题
简洁明了的上古计算机系统
- Dennis Ritchie开发的CC编译器源码行数:< 1万行
- Ken Thompson开发的UNIX内核源码行数:< 1万行
- Intel 4004 晶体管数量:2300个
- Marcian Hoff提出单芯片设计思路,Federico Faggin完成设计实现
编译器<-->操作系统<-->计算机组成之间的整体交互简单清晰 学生能够通过实践对计算机系统有全面的理解 通过Compiler/OS/CPU的实践让学生足以产生计算机操作的连贯画面
背景与问题
日趋复杂的现代计算机系统
- GCC-11 编译器源码行数:1667万行
- Linux-6.0 内核源码行数:3306万行
- AMD桌面处理器5950X 晶体管数量:395亿
复杂性的必然结果是专业化,清晰度消失了 计算机系统的本质隐藏在各种晦涩的接口和实现中 学生也陷入了知识的汪洋大海中,难以把握全局
背景与问题
学生学习系统类课程的困难
- 实际实现与抽象概念的巨大差距
- 学生难以理解老师和课本中的概念
- 代码阅读量不够
- 学生难以理解程序的实现细节
背景与问题
学生学习系统类课程的困难
- 复杂的实验和编程任务
- 课程通常需要与计算机底层打交道
- 学生可能缺乏与计算机底层相关的实践经验
- 缺乏系统性和整体性
- 学生难以理解系统类课程的知识体系
- 学生难以把这些课程综合起来理解和灵活运用
背景与问题
解决上述问题的已有方法
- 新类型教材与实验
- 《计算机系统基础 第2版》,袁春风、余子濠
- 《计算机系统- 系统架构与操作系统的高度集成》(Computer Systems: An Integrated Approach to Architecture and Operating System), Umakishore Ramachandran等
- 《计算机系统设计原理》(Principal of Computer System Design), Jerome H. Saltzer等
背景与问题
解决上述问题的已有方法
- 新类型教材与实验
- 《深入理解计算机系统》(Computer Systems: A Programmer's Perspective,CSAPP ), Randal E. Bryant等, 2003
- 全面覆盖计算机系统原理
- 注重底层原理的实践和应用
- 一些内容过于深入
- 《深入理解计算机系统》(Computer Systems: A Programmer's Perspective,CSAPP ), Randal E. Bryant等, 2003
背景与问题
解决上述问题的已有方法
- 新类型教材与实验
- 《从NAND到Tetris:用硬件和软件构建现代计算机》(The Elements of Computing Systems: Building a Modern Computer from First Principles), Noam Nisan等,2005
- 从基础的布尔逻辑、组合逻辑和时序逻辑开始,逐步引导读者构建出一个简单的计算机
- 涵盖了计算机系统的各个层面,包括硬件、指令集架构、汇编语言、编译器、操作系统和应用程序等
报告内容
- 背景和问题
- 编译/操统/计组的特点与联系
- 关于编译/操统/计组的综合实践
编译/操统/计组的特点与联系
- 共性在哪里?
- 关系在哪里?
- 需要学生掌握的核心点是啥?
编译/操统/计组的特点与联系
编译/操统/计组的特点与联系
编译/操统/计组的特点与联系
编译/操统/计组的特点与联系
编译/操统/计组的特点与联系
共性的关键点
归纳与抽象(做减法)
- 编译原理:词法与语法(去除复杂语法分析/代码优化/中间表示等)
- 操作系统:进程(去除地址空间/文件/同步互斥/性能优化等)
- 计算机组成原理:机器指令/语言(去除流水线等优化实现) 简化已有课程的知识点,只留下基本综合知识点
编译/操统/计组的特点与联系
共性的关键点(留本质)
语言 Language
- 编译原理:高级语言--中间语言--汇编语言
- 操作系统:高级语言+汇编语言+系统调用
- 计算机组成原理:机器语言(汇编语言)及其硬件实现
编译/操统/计组的特点与联系
关系的关键点(留本质)
接口 Interface
- 编译原理--计算机组成原理:数据与程序的机器表示
- 编译原理--操作系统:机器视角下的程序结构/控制流/变量访问
- 计算机组成原理--操作系统:汇编语言/特权级/中断/虚拟地址
编译/操统/计组的特点与联系
需要学生掌握的核心点:高级语言编写的程序如何编译&加载&运行
- 基于语言和接口,用全局的思路来理解编译/操统/计组
- 用一个工程项目(甚至一个程序)来实践编译/操统/计组
- 讲课内容:简化的编译/操统/计组的核心关联知识
- 编译:高级语言 --> 汇编语言 --> 机器语言
- 计组:机器语言 --> 特权级指令:数据处理/CPU状态
- 操统:高级语言 --> 特权级指令:控制CPU/处理中断
报告内容
- 背景和问题
- 编译/操统/计组的特点与联系
- 关于编译/操统/计组的综合实践
关于编译/操统/计组的综合实践
关于编译/操统/计组的综合实践
邢其正 本科:北京科技大学,研究生:北京大学,将去阿里工作
- 2021年作为出题导师参加全国大学生计算机系统能力大赛
- https://github.com/maxXSoft
- proj5-fuxi-full-system-with-cpu-compiler-os
- 处理器: Fuxi (伏羲), 32-bit pipelined RISC-V CPU
- 编译器: Yu (羽), a simple system programming language
- 操作系统: GeeOS (寂), a lightweight, UNIX like operating system written in YuLang,running on Fuxi
关于编译/操统/计组的综合实践
- 初步构想
- 学生能够得到的收获
- 三者的抽象能力
- 三者的综合能力
- 三者的实践能力
- 不涉及
- 性能优化,/操作系统/编译器/计算机组成的非相关复杂细节
- 学生能够得到的收获
关于编译/操统/计组的综合实践
- 初步构想
关于编译/操统/计组的综合实践
- 初步构想
- 一个简化RISC-V的处理器设计:定义机器语言
- 初级:纯软件实现的硬件指令功能模拟
- 高级:课硬件实现的时钟周期级模拟仿真
- 基本计算/控制指令
- 特权级/中断支持
- (option)虚拟地址支持
- 一个简化RISC-V的处理器设计:定义机器语言
关于编译/操统/计组的综合实践
- 初步构想
- 一个简化C语言的编译器设计:定义高级语言
- 初级:C语言的子集,只有基本整型数的运算和基本控制逻辑,编译为RISC-V汇编语言
- 高级:C语言的子集,可支持指针和函数,可编译为RISC-V机器语言
- 一个简化C语言的编译器设计:定义高级语言
关于编译/操统/计组的综合实践
- 初步构想
- 一个面向简化RISC-V并基于简化C语言的OS设计:定义上下接口
- 初级:支持一个计算和"Helloworld"输出功能的应用加载与执行
- 高级:支持两个应用交替加载与执行
- 一个面向简化RISC-V并基于简化C语言的OS设计:定义上下接口
关于编译/操统/计组的综合实践
- 初步构想
- 简化已有三门课程
- 形成教程和实验指导书
- 能够在线进行实验
谢谢!
计算机系统能力大赛操作系统比赛 https://os.educg.net
开源操作系统训练营 https://github.com/LearningOS/rust-based-os-comp2023