本课程来自中国大学慕课网的 计算机组成原理
第一章 概述
第一节 冯诺依曼计算机
冯诺依曼计算机的核心是存储程序,即把需要执行的程序先存储到计算机里,然后计算机自动抽出指令执行。
冯诺依曼计算机的组成:
- 输入设备
- 存储器:不光能存储数据,还能存储指令。内部每条指令由二进制码标识,由操作码和地址码组成,操作码指示操作的类型,地址码指出要进行运算的数据的地址。
- 控制器:能自动的取出指令,一条条的执行。
- 运算器:执行加减乘除以及一些逻辑运算。
- 输出设备
第二节 现代计算机结构
与冯诺依曼计算机基本一样,多出来的就是寄存器,减少调用存储器带来的时延。
计算机结构:
程序执行前:数据和指令都存在存储器中,指令包括OP(操作码)和ADDR(数据地址)字段组成。首个指令的地址交给PC寄存器。
程序执行:
- 取出PC中的指令
- 对指令中的OP进行解码,明白该进行什么操作。
- 根据指令中ADDR找到操作数,有可能直接给出,或位于存储器中,或寄存器中。
- ALU进行运算。
- 运算结果存入存储器或寄存器中,或者直接输出
- 将PC中的地址加一,继续执行步骤1,开始下一条指令。
第三节 编程语言
机器语言:只有0和1的指令,十分不灵活,阅读也困难,但是机器唯一认识的语言。
汇编语言:用助记符和标号表示指令,与机器语言一一对应。可以进行的操作有:把存储器的数据装入寄存器,把寄存器的数据存入存储器,对操作数加减乘除,或者符合一定条件就跳转。
汇编语言比机器语言更容易理解和编写,但是机器不认识,所以需要通过汇编程序转换成机器语言。但是汇编语言还有两大问题,一是一条指令只对应一个操作,即汇编语言是面向操作的,所以编写复杂的程序时会非常长;第二是汇编语言不可移植,一个汇编程序只对应一台电脑,十分不方便。为了解决这俩两个问题,我们把汇编语言向上抽象得到了高级语言。
高级语言:是面向算法的语言,一条指令可能包含几十个,上百个操作。分为面向对象和面向过程两种。
高级语言机器也无法直接理解,所以需要把高级语言转换成机器语言,有两种方式:
- 编译,编译程序将高级语言转换为机器级语言,生成可执行文件。
- 解释,解释程序逐条指令进行翻译,翻译出来直接执行,不生成可执行文件。
第四节 程序的开发执行与其支撑环境
程序的运行过程:
- .cpp源程序经过预处理生成.i源程序
- .i源程序经过编译生成.s汇编语言程序程序
- .s汇编语言程序程序经过汇编程序生成.o机器语言程序
- 各个.o机器语言程序经过链接生成.exe可执行程序。
一个程序执行时的数据流动过程:
- 通过键盘输入要执行的程序名字(linux命令行),名字先被传到寄存器里,然后通过寄存器的存入命令存入存储器。
- 系统将控制权交给该执行程序,执行的结果仍然存入存储器中,这是存储程序的过程。
- 执行的结果从存储器转移到输出窗口中。
由于数据经常在各个寄存器和存储器中流动,所以现代计算机采用了缓存技术。
高级语言程序开发和执行需要的支撑:
- 操作系统:包括人机接口(如WINDOWS界面和LINUX命令行),和操作系统内核(采用了指令集体系结构来管理硬件)
- 语言处理系统:包括编辑器,和各种翻译软件(预处理器,编译器,汇编程序,连接器)。
第五节 现代计算机层次结构
语言发展的过程是一个不断抽象的过程,因此不断有新的层次出现。
高级语言程序需要转换为机器语言程序才能运行,转换是靠语言处理系统,转换的过程是在操作系统的提供的界面和内核上进行的。转换成机器语言后,再通过ISA(指令集体系结构)来调用硬件。
整个计算机的抽象层次:
上层是底层的抽象,底层为上次提供支持。程序运行的结果不光和算法以及编程语言有关,也和底层的实现息息相关。
ISA是一种规约,规定了软件如何使用硬件。不同的ISA规定的使用硬件的方式,如寄存器和操作是不同的。但是同一种ISA的硬件实现可以不同。
第二章 计算机性能评价
计算机性能评价的两个指标:执行时间和吞吐量。执行时间是指完成一个任务需要的时间,吞吐量是其倒数,即单位时间内完成的任务数。
用户感受到的执行时间:
- CPU时间,包括用户CPU时间,和系统CPU时间。
- 其他时间:包括I/O的时间,或等待CPU执行其他程序的时间。
本章主要讨论计算机性能中的CPU时间,即CPU真正花在程序上的时间。
CPI:每条指令的时钟周期数
CPU执行时间=CPI* 指令数 *时钟周期;
等式右边这三项和以下几个方面有关: - 软件部分:算法和编译器
- ISA:软硬件接口
- 硬件部分:硬件是如何组织的,以及实现硬件的技术。
其中,CPI和指令数主要与软件部分和ISA相关,时钟周期与硬件相关。
CPU时间通常由基准程序进行评测,但有时候不准,所以要通过加权平均或算数平均的方式来得出评价结果。