CS 410/510语言和低级编程
上次更新日期:2018年12月18日
课程档案
2018年秋季

这是CS410/510 LLP(语言和低级编程),于2015年春季授课2016年,最近一次是2017年秋季,波特兰州立大学大学。此页面提供对材料的持续访问为课程开发的内容,包括课堂幻灯片,演示程序、示例代码和实验室练习。

请随时联系主要作者/讲师有任何与此处提供的材料:马克·琼斯(mpj@pdx.edu),计算机科学系,马西工程学院&计算机科学,波特兰州立大学.

许可:所有课堂幻灯片均已分发根据Creative Commons Attribution 3.0许可和几乎所有源文件的其他方的许可)根据GNU通用公共许可证,3.0版。请参见个人文件和文件夹以获取更多详细信息。

致谢:材料的开发该课程的部分资助来自国家科学基金会,授予编号CNS-1422979。

课程描述

本课程是关于低水平、裸露金属的发展系统——特别关注微内核——以及关于编程语言在这方面的作用和设计应用程序域-从低级汇编到高级函数语言和领域特定语言。课程材料是分为三部分:

  1. 常规低级编程概述技术。这将包括介绍一些典型PC系统的可编程硬件组件(例如内存管理单元、中断控制器和计时器)和它们在基本操作系统实现中的使用摘要。

  2. 实用微内核的案例研究实现。这些案例研究将用于开发更详细地了解在其构造中使用的编程语言。这个我们计划研究的两种特殊微内核是“猪肉”是PSU开发的L4和“seL4”的实现L4的“安全增强”版本,由年的一个团队开发澳大利亚,使用功能抽象进行访问控制和资源管理。这个seL4级系统特别是,近年来,它获得了一些声誉“世界上第一个端到端操作系统内核实现正确性和安全性的证明强制执行。

  3. 关于面向对象的编程语言设计的思考在此应用程序域中使用。这部分课程将以我们在中看到的示例为基础并从中获得信息前面的部分。特别是,我们将研究一些函数式编程Habit的特点具有某些特定语言特征和广泛采用的语言抽象数据类型,专门设计用于以开发低级系统为目标。

背景:CEMLaBS项目:

本课程是作为“CEMLaBS”,这是一个由NSF支持的研究项目2014年至2018年。(“CEMLaBS”是偶数的长首字母缩写更长的正式标题:“使用功能增强的微核作为基于语言的安全测试平台”。)的三个版本这里描述的课程是在三年内提供的CEMLaBS项目不断发展。

以下文本提供了CEMLaBS的一些简要背景项目及其研究目标概述:

seL4的工作被公认为正式的里程碑验证,并为构建值得信赖的系统。其开发成本和然而,维护费用相当高。此外,许多在seL4验证中建立的安全属性(包括不存在代码注入攻击、缓冲区溢出和空指针解引用)通过用语言编写微内核来自动保证它集成了基于语言的安全机制,例如增强型系统。在这些见解的激励下CEMLaBS项目的目标是评估:用一种语言编写这种软件实际上是可行的具有有意义的、基于语言的安全保障;什么这可能会产生实际影响,尤其是在减少核查成本;以及是否有可能满足通常需要的性能目标应用。

前提条件:

这门课没有正式的先决条件,但学生们预计将有:

  • 操作系统方面的一些背景知识(由于本科级别的CS333或波特兰州立大学研究生水平,或其他机构);

  • 一些编程语言经验(由于在本科阶段学习CS320/421/422等课程,或研究生级别的CS558);

  • 以前使用Linux命令行和标准工具集,以及丰富的编程经验。这个是课程的一个重要的实际考虑因素使用C和汇编进行大量编程练习IA32 Linux环境中的语言。

课程目标:

成功完成本课程后,学生将能够:

  1. 编写可以使用低级编程语言在裸露环境中运行的简单程序。
  2. 讨论低级系统软件开发中的常见挑战,包括在裸露环境中调试。
  3. 解释传统操作系统功能(多地址空间、上下文切换、保护等)如何激发对硬件支持的渴望(并从中受益)。
  4. 开发代码来配置和使用可编程硬件组件,如内存管理单元(MMU)、中断控制器(PIC)和间隔计时器(PIT)。
  5. 描述典型引导过程中的关键步骤,包括引导加载程序的作用。
  6. 描述用于管理地址空间、线程和进程间通信(IPC)的微内核抽象的动机、实现和应用。
  7. 解释访问控制和资源管理功能的使用和实现。
  8. 使用功能抽象开发程序,就像seL4微内核提供的那样。
  9. 说明在系统软件开发中使用一系列特定领域的语言。
  10. 使用实际案例研究评估和比较语言设计提案。
  11. 描述现代高级编程语言的特性,包括抽象数据类型和高阶函数,并展示如何在构建低级软件时利用它们。
  12. 解释低级系统编程的需求如何激发对基于语言支持的渴望(并从中受益)。


课程时间表:

本课程为期十周,安排如下讲座和实验:

主题 幻灯片

第1周:简介:课程目标和概述。汇编语言编程。

实验室练习:视频RAM仿真.

(2个以上) (6个以上)

第2周:裸机编程和工具。引导过程。基本PC架构。

实验室练习:裸机编程的基本示例和练习.

(2个以上) (6个以上)

第3周:对操作系统抽象的硬件支持。中断、故障和异常。

实验室练习:上下文切换和定时器中断.

(2个以上) (6以上)

第4周:内存管理和保护模式。

实验室练习:寻呼,第1部分:管理MMU.

(2个以上) (6个以上)

第5周:案例研究1:L4微内核-简介和基础。

实验室练习:寻呼,第2部分:过程.

(2个以上) (6个以上)

第6周:案例研究1,续:实施和使用。

实验室练习:使用“猪肉”(波特兰或内核)的演示.

(2个以上) (6个以上)

第7周:案例研究2:seL4微内核-基于能力的访问控制和资源管理。

实验室练习:能力.

(2个以上) (6个以上)

第8周:案例研究2,续:实施和使用。领域特定语言。

(2个以上) (6个以上)

第九周:语言设计I。

(2个以上) (6个以上)

第十周:语言设计II。

(2个以上) (6个以上)

支持软件:

这个类的主要工作环境是Linux虚拟机,可以在Linux、Windows和Mac OS X上托管使用的计算机虚拟机.Unix命令行、汇编语言和C语言的使用需要编程工具。

用于构建合适的虚拟机的详细说明集机器可用通过单击此处.

除了与相应的实验室一起包装外文件通过课程表中的链接,源代码样本/演示程序和实验室练习是GitHub上也提供了:https://github.com/zipwith/llp-labs网站.

参考资料:

本课程没有必要的教科书,但有web上有许多可用的有用资源,可用于进一步阅读和更详细的文档。(学生是希望深入研究这些材料。)这个以下列表包括一些可能特别有用。其中大多数可在公共互联网;我们提供原始副本的链接,其中可能,但在某些情况下使用本地副本。所有权利,共当然,保留原作者。