本课涵盖的内容
如下图,本课重点在高级语言以下的各抽象层(从上到下,第3~6层):
- C语言程序设计层:数据的机器级表示和运算、语句和过程调用的机器级表示
- 操作系统、编译和链接的部分内容
- 指令集体系结构(ISA)和汇编层:指令系统、机器代码、汇编语言
- 微体系结构及硬件层:CPU的通用结构、层次结构存储系统
一、计算机系统基本组成结构与基本功能
冯·诺依曼结构
现代计算机的原型。冯·诺依曼结构最重要的思想是“存储程序”,即任何要计算机完成的工作都要先被编写成程序,然后将程序和原始数据送入主存并启动执行。一旦程序被启动,计算机应能在不需操作人员干预下,自动完成逐条取出指令和执行指令的任务。当年基于冯诺依曼结构设计的“存储程序”计算机,被称为IAS(the Institute for Advance Study at Princeton)计算机
抽象出来的结构图如下所示:
冯诺依曼结构提出,计算机应由运算器、控制器、存储器、输入设备、输出设备五个基本部件组成:
- 存储器:不仅能存放数据,还能存放指令,形式上二者没有区别,但计算机应能区分数据还是指令
- 控制器:应能自动取出指令来执行
- 运算器:应能进行加减乘除,并能进行一些逻辑运算和附加运算
- 输入/输出设备:操作人员可通过IO设备和主机进行通信
二、程序的开发和执行过程
最早的程序开发
很简单,直接输入指令和数据,启动后把第一条指令地址送PC开始执行
后来用高级语言开发程序,就需要更复杂的支撑环境
- 需要编辑器编写源程序
- 需要一套翻译转换软件处理各类源程序
- 编译方式:预处理程序、编译器、汇编器、链接器
- 解释方式:解释程序
- 需要一个可以执行程序的界面(环境)
- GUI方式:图形用户界面
- CUI方式:命令行用户界面
其中,前两个属于语言处理程序,第三个属于人机接口。语言处理系统提供语言处理程序+语言的运行时系统(运行时系统如库函数,调试、优化等功能)。操作系统提供人机接口+操作系统内核(如printf)。语言处理系统+操作系统=系统软件。系统软件又是在指令集体系结构的基础上构建起来的(操作系统最终是由指令实现的,而指令是按照一定规范编写的,这个规范就是指令集体系结构)。而指令集体系结构最终是由计算机硬件实现的,即指令集体系结构是计算机硬件的一种抽象,抽象成软件能够直接使用的一个接口,软件就可通过此接口来使用具体硬件了
三、计算机系统层次结构
- 不同时期,计算机系统的层次结构:
- 最早的计算机用机器语言编程(机器语言为第一代程序设计语言),其层次结构如下图
- 后来用汇编语言编程(汇编语言为第二代程序设计语言),其层次结构如下图
- 现代计算机用高级语言编程(第三代程序设计语言为过程式语言、第四代程序设计语言为非过程化语言),其层次结构如下图
- 最早的计算机用机器语言编程(机器语言为第一代程序设计语言),其层次结构如下图
- 计算机系统的不同用户:
- 最终用户:工作在由应用程序提供的最上面的抽象层
- 系统管理员:工作在由操作系统提供的抽象层。系统管理用通过操作系统提供的命令对操作系统进行管理,如进行备份、升级、杀毒等
- 应用程序员:工作在由语言处理系统(编译器、汇编器等)的抽象层,语言处理系统建立在操作系统上。如编写游戏的程序员
- 系统程序员:实现系统软件(语言处理程序、操作系统)。工作在ISA层次,必须对ISA非常了解,是直接用指令编写程序的
- 指令集体系结构ISA:
Instruction Set Architecture,指令集体系结构。ISA是一种规约,规定了如何使用硬件。可看作对硬件的抽象,所有软件功能都建立在ISA之上,没有它,软件就无法使用计算机硬件。规定内容如下:- 可执行的指令的集合,包括指令格式、操作种类、每种操作对应的操作数的相应规定
- 指令可以接受的操作数的类型
- 操作数所能存放的寄存器的结构,包括每个寄存器的名称、编号、长度、用途
- 操作数所能存放的存储空间的大小和编址方式
- 操作数在存储空间存放时按照大端还是小端方式存放
- 指令获取操作数的方式,即寻址方式
- 指令执行过程的控制方式,包括程序计数器PC、条件码定义等
- ISA和计算机组成(微结构)之间的关系:
计算机组成/微体系结构图如下:
由于不同ISA规定的指令集不同,如IA-32规定只有8个通用寄存器,MIPS规定有32个通用寄存器,那么相对应的IA-32里寄存器的编号只有3位,MIPS里指令中寄存器的编号就有5位。因此指令集ISA和微体系结构是密切相关的,计算机组成必须能够实现ISA规定的功能,如提供GPR、标志、运算电路等。
而有时,同一种ISA可以有不同的计算机组成,如乘法指令可用ALU或乘法器实现。有没有乘法指令属于ISA要考虑的问题,而如何实现乘法指令是微体系结构需要考虑的问题
ISA实际上就是计算机组成的抽象,也是计算机硬件的抽象。
四、计算机系统基础课程内容概要
三个主题:
- 表示:
- 不同数据类型(带符号整数、无符号整数、浮点数、数组、结构等)在寄存器或存储器中如何表示和存储?
- 指令如何表示和编码(译码)?
- 存储地址(指针)如何表示?如何生成复杂数据结构中数据元素的地址?
- 转换
- 高级语言程序对应的机器级代码是怎样的?如何转换并链接生成可执行文件?
- 执行控制流
- 计算机能理解的“程序”是如何组织和控制的?
- 如何在计算机中组织多个程序的并发执行?
- 逻辑控制流中的异常事件及其处理
- I/O操作的执行控制流(用户态->内核态)