[音乐] 通过本周前几讲的介绍大家已经
初步了解了计算机系统是一种层次结构 一个程序在编制、
转换、 调试和运行的 每一步都会涉及到计算机系统中其他的层次
程序的执行结果不仅取决于编程语言的语法、 语义
还取决于语言处理系统、 操作系统
指令集体系结构和微体系结构等各个层次 因此将计算机系统作为一个整体了解是
非常重要的,为此就有了计算机系统基础这门课程
那么本课程的主要内容包含哪些,课程内容又是如何组织的呢?
本讲将介绍有关这方面的内容 那么现在我们知道
我们已经进入了后PC时代,我们现在的这个计算资源 大家基本上手上都有手机
Ipad,iPhone等等各种手持式的计算机资源
背后实际上是通过很多大的计算机公司提供的这个数据中心,然后把所有的这种
个人的手持式计算机把它连成了一个网络,所以我们现在进入了一种后PC时代
也就是说我们的计算资源是多样化的 然后我们输入、
输出设备无处不在,随便的手写笔啊,这个触摸屏啊 等等,现在的这个计算资源,包括提供服务
的数据中心,以及可直视的终端设备以及和传统的 个人电脑已经是一个共存的时代。
但这样的一个新的 这个后PC时代下面,我们作为计算机专业的学生
需要能够对计算机系统当中的软件和硬件
进行协同设计的这种能力,也就是说在后PC时代硬件操作系统
编译等等这些计算机不同层次的概念涉及到的软硬件的部件
它们的关系更加地密切,因此对应用程序员的 要求也更高,那么我们编写应用程序的时候
必需了解计算机的底层的结构,并且必需掌握并行程序设计技术
因为我们手上的计算机,哪怕是手机都是
多核的,或者是众核的,这些不同的这些设备 又是通过分布式的这种连接方式连接起来的一种计算环境
并且我们的应用问题也越来越复杂,领域越来越广 那么我们碰到的应用问题涉及到气象、
生物、 医药、 地质、 天文等等等等 这些领域里面的一些高性能计算,这些计算密集型的一些应用
还有这种互联网应用领域的一些海量的大数据的处理
包括物联网的一些嵌入式的开发、 应用
以及大型的数据库软件,游戏、 多媒体要求实时处理的这种软件开发
这些都是非常复杂的一些应用问题 那么这些应用问题是在大规模、
分布式、 多粒度并行的一个计算环境上
构建的,因此要求我们学习计算机专业的时候更加注重
并行主题,然后培养系统观的、 软硬件贯通的这种人才
现在是一个关键的问题,因此我们
知道计算机系统它是一种层次化的一个结构
将来我们从事的科学研究 也好,在业界完成、
实现的一些计算机的应用 以及底层的系统开发也好,都离不开某一个抽象层
或者某几个抽象层,我们现在在教学过程当中
教学的对象也是在某一个层次 或者某几个层次关联的这样的一个系统
所以我们专业课程应该围绕其中一个或多个不同的
抽象层开展教学,当我们重点关注某一个抽象层去学习它的内容的时候
一定要有这个抽象层处在整个系统当中的哪一个部分,跟哪些相关
要有这样一些背景知识,一些前提,了解这些关联的前提下去学习
应该是更好的,因此我们提供一门基础课程 就是把整个计算机系统的框架性的东西
一些关联的东西作为关联来讲解,那么本课程就是这样的一门基础性的课程
通过讲解程序开发和执行来构建计算机系统的一个框架
然后大家在学了这样的一个基础的系统课程以后,再去后续学习
某一个层次的一些细节的内容,那么这样的话就可以更加深入地对计算机系统
的这个了解就更加深入,所以计算机系统基础课程
主要是从程序员角度来认识计算机系统 所以我们的教学目标是培养大家的系统能力
也就是说要使得大家将来能够成为一个高效的程序员
所谓高效的程序员,就是在程序的调试 程序性能的提升、
程序移植以及健壮性构建方面成为高手 那么通过这门课来建立计算机系统的概念
建立一个框架,为后续的操作系统、 编译、 体系结构等等这些课程
打下坚实的基础,因为这门课平台 用的体系结构,指令集体系结构ISA用的是IA-32
操作系统是Linux操作系统,语言是C语言,编译器是gcc
以这样的一个平台为我们的模型机来讲的,为什么选
这个平台呢?因为大家将来在工作的时候,或者现在已经在工作的时候
如果要做底层的开发,不管是系统开发,还是应用开发
基本上都是在一个开源的一个项目平台上面,所以我们选的这样的一个平台
而这门课实际上和coursera平台上的一个,一门MOOC课程
是华盛顿大学开设的一个硬件、 软件接口这样的一门课程
想法是类似的,我们的课程和 这门课程主要的内容都是描述程序执行的底层机制
主要是在程序和程序的底层执行机制之间
上层的程序以及底层的程序执行机制之间 建立一个关联,所以在这个关联,主要是讲关联,这样的话
主要强化大家的对整个计算机系统的理解,而不是讲结论让大家记忆
所以我们的这门课的主要的内容是围绕着程序
要以程序员的视角来认识计算机系统 那么程序当中我们知道有常量,有变量
这些常量和变量最终是用0和1表示的,所以我们要讲数据的表示
然后这些变量或者常量需要在语言当中涉及到这些运算
常量和变量的运算,那么这些运算最终是在机器里面通过指令
运算指令来实现的,所以我们要讲 底层的运算,是这些01序列是怎么运算的
然后一个内容是有关各类语句的转换与表示 因为我们高级语言当中有这种for语句啊,有这种循环语句
还有什么if语句,这种选择结构的语句 不同的这些语句它转换成的这个指令序列
是不一样的,所以我们有一个内容要讲各种语句的转换与表示
怎么样用指令来表示这些语句,实际上也就是这些语句的具体实现
而高级语言当中还会出现各种复杂的数据类型,比如说数组啊 结构、
联合uni等等,这样复杂的数据结构它实际上,比如说这边的这个数组
通常和循环结构结合起来来处理的,那么这些复杂的数据类型
它涉及到的这个处理逻辑对应的底层及其指令的表示是
怎么样子的,这也是我们其中的一个内容,就是复杂数据类型及其处理
逻辑的转换表示,然后在高级语言当中有相应的过程调用
比如C语言里面的这种函数调用,所以我们在 这门课里面也要介绍函数调用的
转换表示,是这样的一个函数调用,到底转换成 什么样的指令序列,在机器的底层是怎么实现这种函数调用的
在这个程序开发的时候,通常是多人分模块开发的
每个模块有它的转换的过程,转换成一个个的模块对应的
二进制的文件,那么这些二进制的模块文件,最终需要把它链接生成一个
可执行文件,所以这就涉及到怎么样把多个模块 进行链接,链接生成的可执行文件,怎么加载到系统运行
然后加载到系统运行以后,实际上就是一条一条指令的执行过程
所以我们这门课会简单的说一下,程序当中这个指令的执行
然后在程序执行过程当中,每一条指令要去访问存储器取指令
取来的这个指令译码以后,要去执行,执行的时候要去取数据,到存储器去取数据,所以
在指令执行过程当中,一个重要的环节就是访存,因此我们这门课里面会介绍
存储器的访问,那么在指令执行过程当中,我们第一讲讲过,比如像
这个程序,在执行的时候,它发生了异常事件,也就是访问违例
当这个计算机执行程序的时候,发生异常
还可能会发生中断,那么这些异常和中断处理的原理
内部的机制是什么,也是我们这门课介绍的一个内容 最后是输入输出
比如说在这个程序当中,有prinf这样的函数
调用,这个函数调用实际上实现的功能,就是在屏幕上
显示信息,那么这个屏幕上输出的这个过程 实际上通过系统调用,最终通过系统调用完成的
那么在高级语言当中,所有的这些输入输出的功能,它背后有一套机制
那么这套机制,这个框架性的这个机制,从用户态到
内核态,内核里面的系统调用,系统调用再去驱动具体的硬件,这样的一个
过程,我们在这门课里面会简单的给出来,这样的话为将来我们学其它的课程
做一个铺垫,那么整个这门课的内容,大概就是围绕着这个程序
展开,所以这门课主要是介绍计算机是如何生成和运行程序的
因此我们的重点,是在整个计算机系统的这个层次当中
着重在某几个层次,那么从
应用算法到编程,这个实际上是问题求解 要解决的问题,而从程序往下
用某个语言编写成程序,从这个程序往下,就是我们这门课的内容
所以我们这门课的重点,是C语言程序层 C语言程序设计层
包括C语言当中,变量和常数的 机器级表示运算,C语言当中的各种语句和过程调用的机器级表示
然后这个转换最终这高级语言转换成的是指令,所以我们这门课
还会涉及到这个指令,指令我们是用汇编来描述的,所以涉及到汇编这个层面 指令系统、
机器代码、 汇编语言,然后这个指令最终是在
微架构上执行的,比如说运算类指令它最后是要在运算器里面实现的
所以我们在这门课里面也涉及到微体系结构和这个硬件层
那么包括CPU的通用的结构,包括访存的时候涉及到的一个
存储器的整个架构
那么所有的这个过程都必须要通过操作系统编译
还有链接的支撑,也就是我们前面讲的操作系统和语言处理系统的支撑
因此这个里面还会涉及到操作系统编译和链接的部分内容
这些内容只是跟我们这门课内容相关的一部分 并不会替代操作系统以及编译的这些课程的内容
后续的这些课程会更详细地去介绍,我们这只是把关联的部分
介绍了,所以整个这门课内容大概就是这样的
就是从这个C语言程序设计往下的一些层次 那么在这个里面,这主要涉及到中间的这四个层次
因此我们主要是讲三个 内容,一个是表示,包括数据的表示、
指令的表示 指针的表示,转换就是各个不同的语句,高级语言的语句对应的机器级代码
然后转换的机器级代码如何链接生成可执行文件
最后可执行文件怎样在机器上执行,执行的时候涉及到的 访存的过程而涉及到的异常和中断的处理
以及涉及到的输入输出操作的一个执行流程,这是我们这门课的三个主要的内容
那么也就是三个主要的内容分成两大部分,表示和转换
我们作为第一部分来讲,执行控制流作为第二部分来讲
所以我们计算机系统基础课程这门课把它分成两门 短课程,一门是程序的表示、
转换与链接,另外一门就是 程序的而执行、 异常和IO处理
所以我们现在正在进行的是计算机系统 基础之一的这个课程是有关程序的表示、
转换与链接这部分的内容 这个是我们后面,也就是说意味着我们下一周开始
就开始讲这些具体的内容 [音乐]
[音乐]