各高校:
在教育部高等学校计算机类专业教学指导委员会(简称“教指委”)的组织和推动下,以南京大学、清华大学、北京航空航天大学、国防科技大学、中国科技大学、北京大学、上海交通大学、浙江大学为代表的一批国内重点高校率先开展了以培养计算机类专业学生系统能力为目标的课程和教学改革。近两年,教指委公布了两批“系统能力培养——专业课程体系改革及课程建设”项目示范院校和试点院校,引导系统能力培养课程改革向不同类型、不同层次高校推进,促使越来越多的高校迫切希望对研究项目中的核心课程——“计算机系统基础”进行导教。
在已经成功举办四届“计算机系统基础”课程导教班的基础上,经过对授课教师的广泛调研,教育部高等学校计算机类专业教学指导委员会、南京航空航天大学计算机科学与技术学院、机械工业出版社华章分社将联合举办“2017年计算机系统基础课程导教班”。本次导教班特邀南京大学苏丰副教授、南京大学唐杰副教授、南京航空航天大学陈丹副教授、华中科技大学谭志虎副教授、天津大学魏继增副教授以及本课程实验设计者余子濠主讲。本次导教班分为两个阶段,第一阶段重点进行“理论和Lab实验”的研讨和导教,第二阶段重点进行“x86模拟器编程实验PA”的研讨和导教。导教班讲师团队精心安排了课程内容,期望为开设此课程或有意开设此课程的教师搭建交流平台,进一步推动课程的建设。
敬请各高校选派课程相关教师参会交流。
一、导教班时间安排
◎ 报到:
第一阶段:2017年8月10日
第二阶段:2017年8月16日
◎ 第一阶段导教(理论和Lab实验):2017年8月11日—8月16日
◎ 第二阶段导教(x86模拟器编程实验PA):2017年8月17日-8月19日
◎ 地点:南京航空航天大学江宁校区
二、主讲教师
唐杰 南京大学计算机科学与技术系副教授,“计算机系统基础”课程主讲教师。2013年7月至2014年2月在美国普渡大学电气与计算机工程学院访问学者。主持或参与过十多项科研项目的研究和开发工作,包括国家“十二五”科技重大专项、863 课题、国家自然科学基金、江苏省自然科学基金课题等,获得过国防科工委科技进步二等奖一次,在国内外学术会议和学术期刊上发表论文30 多篇,获得国家发明专利授权2项。
苏丰 南京大学计算机科学与技术系副教授,“计算机系统基础”课程主讲教师。 分别于2000年和2002年在香港理工大学、微软亚洲研究院进行短期访问研究和合作开发, 2005.12-2006.12赴法国从事图像处理方面博士后访问研究。 近年来,在国内外学术期刊和国际学术会议上发表论文40余篇。
魏继增 天津大学计算机科学与技术学院副教授。主讲“VLSI系统设计”、“计算机系统结构”和“数字逻辑电路”三门课程。目前隶属天津市级教学团队,作为第二作者参与编著国家级规划教材《SoC设计方法与实现技术》。主要研究方向:异构多核处理器、非易失存储器、嵌入式系统。作为负责人主持国家自然科学基金项目1项,天津市自然科学基金项目1项,横向项目2项。
谭志虎 华中科技大学计算机学院副教授,院长助理。长期讲授“计算机组成原理”、“计算机硬件基础”等课程,曾获校青年教师教学竞赛一等奖,现担任计算机组成原理课程组组长,该课程获国家精品网络资源课程,长期关注计算机系统能力培养改革实践,熟悉计算机系统基础课程理论与实践各环节,对系统基础课程在传统课程体系中的落地有较深刻的体会。
陈丹 南京航空航天大学计算机科学与技术学院副教授,“计算机系统基础”课程主讲教师。多次参加“计算机系统基础导教班”并在教学中积极实践和持续改进授课理念及方式,取得了很好的教学效果,对该课程的教学目标、内容、方法,及其在计算机系统能力培养中的作用和价值有深刻的理解。
余子濠 中国科学院计算技术研究所博士生,毕业于南京大学计算机科学与技术系,教学版x86模拟器NEMU和“计算机系统基础”课程实验PA的设计者。多年担任该课程实验的助教,并不断完善实验的设计。现参与全系统教学实验ProjectN的设计与开发。主要研究方向包括数据中心云计算架构与QoS保障,参与国家重点研发计划项目“软件定义的云计算基础理论与方法”,为项目中率先创新提出的标签化体系结构的首席架构师,对系统能力在系统性科研项目中的作用有较深刻的体会。
三、导教班内容安排
基于前四届导教班的教师反馈、对高校授课教师的调研,并结合《计算机系统基础》(袁春风著,2014年出版)教材内容,本次导教班课程安排如下。
◎ 课程教学目的与要求
使学生能从程序员角度认识计算机系统,能够建立高级语言程序、ISA、OS、编译器、链接器等之间的相互关联,对指令在硬件上的执行过程和指令的底层硬件执行机制有一定的认识和理解,从而增强学生在程序调试、性能提升、程序移植和健壮性等方面的能力,并为后续的“计算机组成与设计”、“操作系统”、“编译技术”、“计算机体系结构”等课程打下坚实基础。
学完本课程后,学生应对以下问题有比较深刻的认识:
√ 程序中处理的数据在机器中如何表示和运算?
√ 程序中各类控制语句对应的机器级代码结构是怎样的?
√ 多个程序模块是如何链接起来形成可执行目标文件的?
√ 机器级代码及构成机器级代码的指令是如何在机器上执行的?
√ 指令执行过程中最重要的存储访问操作是如何进行的?
√ 操作系统内核是如何打断应用程序的正常执行的?
√ 程序中I/O操作功能是如何通过请求操作系统内核提供的系统调用服务来完成的?
◎ 课程教学内容简介
本课程的内容主要包含三个主题:(1)表示。主要包括:不同数据类型(如带符号整数、无符号整数、浮点数、数组、结构等)的数据在寄存器或存储器中如何表示和存储、指令的表示和编码、存储地址(指针)的表示以及复杂数据结构中数据元素的地址的表示。(2)转换。主要包括:高级语言程序与机器级代码的对应关系。(3)执行控制流。主要包括:机器级代码的执行流程、特别是指令执行过程中的访存过程、逻辑控制流中的异常事件及其处理、I/O操作的执行控制流(如何从用户态转入内核态执行)。
本课程主要介绍高级语言程序中的数据类型及其运算、语句和过程调用等是如何在计算机系统中实现的,从宏观上介绍计算机系统涉及到的各个层次。主要内容包括:数据的机器级表示和基本运算、程序的转换及机器级表示、程序的链接、程序和指令的底层执行机制、存储器层次结构、Cache、虚拟存储器、异常和中断、I/O操作的实现机制等。
◎ 导教班教学安排
本次导教班将安排两个阶段。第一阶段(共6天)进行“理论和Lab实验”教学;第二阶段(共3天)进行“x86模拟器编程实验PA”教学。
Lab实验是一系列小实验,相对完整和独立,目标集中且规模较小,分别围绕二进制数据表示、程序目标代码的表示与跟踪调试、缓冲区溢出攻击与防范等内容进行实验内容设置,适合所有学校的实验教学环节。
x86模拟器编程实验PA实现一个功能完备(但经过简化)的x86模拟器NEMU(NJU EMUlator),最终在NEMU上运行游戏“仙剑奇侠传”,来让学生探究“程序在计算机上运行”的机理。PA包括一个准备实验(配置实验环境)以及4部分连贯的实验内容:简易调试器、指令系统、存储管理、中断与I/O。从教学内容的角度来看,PA涵盖了“计算机系统基础”教材中约95%的内容;从计算机系统栈的角度来看,从微结构、ISA、操作系统,到编程语言、算法、应用程序,PA都会涉及到,向学生呈现出一个简单但完整的计算机系统的构建过程。整个实验在Linux环境中使用C语言实现,因为涉及到软硬件各个层面,所以难度较大,比较适合课时安排较多且前期课程基础较好的学校开设本实验教学。
第一阶段教学内容安排
|
天 |
单元 |
讲课内容 |
内容说明 |
主讲人 |
|
8月11日 |
上午 |
数据的表示和运算
|
定点数的编码表示、无符号整数和带符号整数的表示、浮点数的表示、C语言程序的整数类型和浮点数类型、逻辑值、西文字符、汉字字符、数据宽度单位、数据在寄存器和存储器中的存放、大端/小端、对齐、按位运算和逻辑运算、移位运算、位扩展和位截断运算、无符号和带符号整数的加减运算、无符号和带符号整数的乘除运算、变量与常数之间的乘除运算、浮点数的加减乘除运算 |
陈丹 |
|
下午 |
Lab1:数据表示
|
实验中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将大大加深对数据整数,浮点数编码表示的了解。通过本次实验熟悉基本linux命令操作、编程环境。 学员亲自尝试解决几个简单的题目,体验实验流程,掌握部署在线实验和离线实验的方法,掌握学生实验自动评测的方法。 |
谭志虎 |
|
|
8月12 日
|
上午 |
程序的机器级表示(1)
|
程序转换概述、数据类型及其格式、寄存器组织与寻址方式、传送指令、定点算术运算指令、按位运算指令、控制转移指令、x87浮点处理指令、MMX/SSE指令集、过程调用的机器级表示概述、IA-32中用于过程调用的指令、过程调用的执行步骤、IA-32的寄存器使用约定、IA-32的栈、栈帧及其结构 |
陈丹 |
|
下午 |
Lab2:二进制炸弹
|
本实验的目的是增强对程序的机器级表示、汇编语言、调试器和逆向工程等方面原理与技能的掌握。采用逆向工程拆除一个linux二进制炸弹程序,包含了6个关卡。炸弹每个关卡要求输入一个特定字符串,你的输入符合程序预期,炸弹就被拆除,否则“爆炸”。为完成拆弹任务,需要使用gdb调试器和objdump来反汇编炸弹的可执行文件并单步跟踪调试每关的机器代码,从而理解每一汇编语言代码的行为或作用,进而设法推断拆除炸弹所需的目标字符串。不同关卡分别对应不同的高级语言结构1.字符串比较;2.循环;3.条件/分支;4.递归调用和栈;5:指针6.链表/指针/结构; 学员亲自尝试解决1-2个关卡,并掌握部署在线实验和离线实验的方法,掌握学生实验包生成和分发的方法,掌握学生分数自动导出的方法。 |
谭志虎 |
|
|
8月13 日 |
上午 |
程序的机器级表示(2)
|
按值传递参数和按地址传递参数、递归过程调用、选择语句的机器级表示概述、if-else语句的机器级表示、条件运算表达式的机器级表示、switch语句的机器级表示;循环结构的机器级表示概述数组元素在存储空间的存放和访问、数组的存储分配和初始化、数组与指针、指针数组和多维数组、结构体成员在存储空间的存放和访问、结构体数据作为入口参数、联合体数据的分配和访问、数据的对齐、越界访问和缓冲区溢出、兼容IA-32的64位系统。 |
陈丹 |
|
下午 |
Lab3:缓冲区溢出攻击
|
本实验的目的在于加深对IA-32函数调用规则和栈结构的具体理解。实验中学生扮演黑客的角色是对一个可执行程序实施一系列不同难度级别的缓冲区溢出攻击。 学员亲自尝试解决1-2个攻击手段,并掌握部署在线实验和离线实验的方法,了解学生分数自动导出的方法。 |
谭志虎 |
|
|
8月14日 |
上午 |
程序的链接
|
程序的链接概述、链接的意义与过程、ELF目标文件格式、重定位目标文件格式、可执行目标文件格式、符号和符号表、符号解析、与静态库的链接、重定位信息、重定位过程、可执行文件的加载、动态链接的特性、程序加载时的动态链接、程序运行时的动态链接、动态链接举例 |
苏丰 |
|
下午 |
Lab4:ELF格式与链接
|
修改和完善一个由多个模块组成的程序(称为“linkbomb”),使其在运行时满足指定要求。需要完成的修改包括:1)修改二进制可重定位目标文件(.o文件)的内容;2)依照模块链接的需求,编写相应C语言程序模块,实现特定函数接口(基于从二进制目标模块中发现的接口函数调用形式)。 |
苏丰 |
|
|
8月15日 |
上午 |
存储器层次结构
|
存储器的层次结构、存模块与CPU之间的连接、主存模块的读写操作、Load指令和Store指令的操作过程、程序访问的局部性、cache基本工作原理、cache行与主存块的映射cache中主存块的替换算法、cache一致性问题、影响cache性能的因素、IA-32的cache结构举例、cache和程序性能、虚拟地址空间、分页方式、页表、逻辑地址向物理地址的转换、快表(TLB)、分段、段页式、存储保护、段选择符和段寄存器、段描述符、描述符表、用户不可见寄存器、逻辑地址向线性地址转换、线性地址向物理地址转换 |
苏丰 |
|
下午 |
Lab5:Cache性能
|
实验包括两部分:编写一个200-300行的C程序来模拟Cache缓存的行为;实现和优化一个矩阵转置函数,以使Cache缺失率达到最小。 |
苏丰 |
|
|
8月16日 |
上午 |
异常和中断
|
程序的进程的概念、进程的逻辑控制流、进程的上下文切换、进程的私有地址空间、程序的加载和运行、异常的分类、中断的分类、异常和中断的响应过程、中断向量表、中断描述符表、IA-32中异常和中断的处理、Linux对异常和中断的处理、IA-32/Linux的系统调用 |
唐杰 |
|
下午 |
I/O操作的实现
|
用户程序中的I/O函数、文件的基本概念、系统级I/O函数、C标准I/O库函数、用户程序中的I/O请求、I/O设备、设备控制器、I/O端口及其编址、I/O控制方式、与设备无关的I/O软件、设备驱动程序、中断服务程序、再谈hello程序的整个运行过程 |
唐杰 |
|
|
晚上 |
课程教学研讨会 |
|||
第二阶段教学内容安排(主讲人:魏继增、余子濠)
|
天 |
单元 |
讲课内容 |
内容说明 |
|
8月17日 |
上午 |
PA介绍 寄存器结构体 简易调试器 自由讨论 |
PA与课程内容的关系 数组、struct、 union之间的嵌套关系,IA-32通用寄存器组织 熟悉NEMU框架 |
|
下午 |
指令生命周期 Binary Scaling 添加变量支持 自由讨论 |
数据的表示、程序的机器级表示、指令生命周期 浮点数的表示、编码、机器数和真值的关系 符号与符号表 |
|
|
8月18日 |
上午 |
打印栈桢链 实现loader 黑客小练习 自由讨论 |
过程调用的机器级表示、栈桢及其结构 可执行目标文件格式、程序的加载 C代码的机器级表示、代码的本质 |
|
下午 |
cache的访问 实现IA-32分段机制 自由讨论 |
cache的工作原理 IA-32分段机制的工作原理 |
|
|
8月19日 |
上午 |
实现IA-32分页机制 实现TLB |
IA-32分页机制的工作原理 TLB的工作原理 |
|
下午 |
实现IA-32中断机制 运行hello world 移植打字小游戏/仙剑 自由讨论 |
IA-32中断机制的工作原理 内核对中断/异常的处理过程、系统调用 中断、I/O |
四、报名须知
1. 本次导教班费用:第一阶段 2500元/人,第二阶段 1500元/人,两个阶段均参加为3500元/人。
缴费方式:A 现场缴费,现金、刷卡(银行卡、公务卡均可)
B 汇款,汇款账号信息具体如下 [ 汇款时请务必注明:2017年“计算机系统基础”课程导教班+学校名+姓名(例如,2017年“计算机系统基础”课程导教班+北京大学+张三等2人)]:
开户行:中国工商银行百万庄分理处,银行12位代码:102100000144
户 名:北京华章图文信息有限公司
账 户:0200 0014 0900 6799 252
用 途:2017年“计算机系统基础”课程导教班会务费
2. 报到时间:第一阶段: 8月10日下午14:00以后。第二阶段:8月16日下午14:00以后。
3. 交通费、食宿费自理。参会教师请自行预订酒店(南航周边推荐酒店见报名回执),会务组不代为预订。
4. 参会教师请填写附件中的报名回执发至会议联系人处,收到会议联系人的回复邮件后方为报名成功。
会议联系人:陈蕾, 邮箱shoffice@hzbook.com,电话021-63078048,13816182483。
教育部高等学校计算机类专业教学指导委员会
南京航空航天大学计算机科学与技术学院
机械工业出版社华章分社
(北京华章图文信息有限公司)
国北京西城区百万庄大街22号
邮编:100037
电子邮箱:cmpedu@cmpedu.com
教材网咨询:010-88379833
网上购书:010-88379170 / 9693
团购热线:010-68326294
随手扫一扫~了解多多