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第17届全国高校操作系统课程教学研讨会


报告内容

- 背景和问题

- 编译/操统/计组的特点与联系

- 关于编译/操统/计组的综合实践

  • 清华操作系统课件:learningos.github.io/os-lectures/
  • 清华编译原理实验:decaf-lang.github.io/minidecaf-tutorial/
  • 奥地利萨尔茨堡大学三课融合实践:https://github.com/cksystemsteaching/selfie

背景与问题

  • 清华大学计算机系软件所 陈渝
    • 研究方向:操作系统
    • 教学内容:
      • “计算机科学基础” 大一第一学期
      • “编译原理” 大三第一学期
      • “操作系统” 大三第二学期
      • “高级操作系统” 研究生课

bg right:40% 100%


背景与问题

清华SYS课程系列

  • 计算机系统概论 大二第一学期
  • 计算机组成原理 大三第一学期
  • “编译原理” 大三第一学期
  • “操作系统” 大三第二学期
  • “计算机系统结构” 大三第二学期
  • “计算机网络原理” 大三第一学期

bg right:45% 100%


背景与问题

  • WHY "从操作系统角度看编译原理/计算机组成原理"
  • SYS Courses --> SOS Courses
    • 学生觉得学习这三门课程很难/量大,缺乏兴趣
    • 老师觉得讲授这三门课程很难/量大,缺乏动力
    • 三门课程的内容相对独立,缺少联系
    • 与实际应用的联系不够紧密,缺少牵引性

bg right:20% 100%


背景与问题

  • 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
      • 全面覆盖计算机系统原理
      • 注重底层原理的实践和应用
      • 一些内容过于深入

背景与问题

解决上述问题的已有方法

  • 新类型教材与实验
  • 《从NAND到Tetris:用硬件和软件构建现代计算机》(The Elements of Computing Systems: Building a Modern Computer from First Principles), Noam Nisan等,2005
    • 从基础的布尔逻辑、组合逻辑和时序逻辑开始,逐步引导读者构建出一个简单的计算机
    • 涵盖了计算机系统的各个层面,包括硬件、指令集架构、汇编语言、编译器、操作系统和应用程序等

报告内容

- 背景和问题

- 编译/操统/计组的特点与联系

- 关于编译/操统/计组的综合实践


编译/操统/计组的特点与联系

- 共性在哪里?

- 关系在哪里?

- 需要老师/学生掌握的核心点是啥?


编译/操统/计组的特点与联系

bg 90%


编译/操统/计组的特点与联系

bg 90%


编译/操统/计组的特点与联系

bg 90%


编译/操统/计组的特点与联系

bg 90%


编译/操统/计组的特点与联系

共性的关键点

方法:归纳与抽象(做减法)--形成--> 关键点

  • 编译原理:词法与语法(去除复杂语法分析/代码优化/中间表示等)
  • 操作系统:进程(去除地址空间/文件/同步互斥/性能优化等)
  • 计算机组成原理:机器指令/语言(去除流水线等优化实现) 简化已有课程的知识点,只留下基本关键点

编译/操统/计组的特点与联系

共性的关键点(留本质)

语言 Language --体现--> 功能

  • 编译原理:高级语言--中间语言--汇编语言
  • 操作系统:高级语言+汇编语言+系统调用
  • 计算机组成原理:机器语言(汇编语言)及其硬件实现

编译/操统/计组的特点与联系

关系的关键点(留本质)

接口 Interface --体现--> 关系

  • 编译原理<-->计算机组成原理:数据与程序的机器表示
  • 编译原理<-->操作系统:机器视角下的程序结构/控制流/变量访问
  • 计算机组成原理<-->操作系统:汇编语言/特权级/中断/虚拟地址

编译/操统/计组的特点与联系

需要老师/学生掌握的核心点:高级语言编写的程序如何编译--加载--运行

  • 基于语言接口,用全局的思路来理解编译/操统/计组
  • 用一个工程项目(甚至一个程序)来实践编译/操统/计组
  • 讲课内容:简化的编译/操统/计组的核心关联知识
    • 编译:高级语言 --> 汇编语言 --> 机器语言
    • 计组:机器语言 --> 特权级指令:数据处理/CPU状态
    • 操统:高级语言 --> 特权级指令:控制CPU/处理中断

报告内容

- 背景和问题

- 编译/操统/计组的特点与联系

- 关于编译/操统/计组的综合实践


关于编译/操统/计组的综合实践

bg 90%


关于编译/操统/计组的综合实践

邢其正 本科:北京科技大学,研究生:北京大学,将去阿里工作

  • 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

关于编译/操统/计组的综合实践

  • 初步构想
    • 老师/学生能够得到的收获
      • 三者的抽象能力
      • 三者的综合能力
      • 三者的实践能力
    • 不涉及
      • 性能优化,/操作系统/编译器/计算机组成的非相关复杂细节

关于编译/操统/计组的综合实践

  • 初步构想
    • 综合性辅助工具:简化三门课程,形成辅助工具
    • 可视化展示:能够动态展示软硬件协同的运行细节
    • 课外实验指导:形成课外实验指导书,可扩展工具

bg right:50%  100%


关于编译/操统/计组的综合实践

  • 初步构想

bg 90%


关于编译/操统/计组的综合实践

  • 初步构想
    • 一个简化RISC-V的处理器设计:定义机器语言
      • 初级:纯软件实现的硬件指令功能模拟
      • 基本计算/控制指令
      • 特权级/中断支持
      • (option)虚拟地址支持
      • (option)高级:课硬件实现的时钟周期级模拟仿真

关于编译/操统/计组的综合实践

  • 初步构想
    • 一个简化的C语言子集的编译器设计:定义高级语言,编译为RISC-V汇编语言
      • 初级:只有基本整型数的运算和基本控制逻辑
      • 中级:可支持函数和结构型数据
      • (option)高级:可支持指针、数组

关于编译/操统/计组的综合实践

  • 初步构想
    • 一个面向简化RISC-V并基于简化C语言的OS设计:定义上下接口
      • 初级:支持一个计算和"Helloworld"输出功能的应用加载与执行
      • 中级:支持两个应用交替加载与执行
      • 高级:支持虚拟内存
      • 高级:支持文件系统

谢谢!

全国大学生计算机系统能力大赛操作系统比赛 https://os.educg.net

开源操作系统训练营 https://github.com/LearningOS/rust-based-os-comp2023