写在前面:
- 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
一、计算机的软硬件概念
1、计算机系统由“硬件”和“软件”组成
(1)所谓“硬件”,是指计算机的实体部分,它由看得见摸得着的各种电子元器件等实物组成,如主机、外部设备等。
(2)所谓“软件”,它看不见摸不着,由人们事先编制的具有各类特殊功能的程序组成。
2、软件的分类
(1)系统软件:系统软件又称为系统程序,主要用来管理整个计算机系统,监视服务,使系统资源得到合理调度,高效运行,它包括标准程序库、语言处理程序、操作系统、服务程序、数据库管理系统、网络软件等。
(2)应用软件:应用软件又称为应用程序,它是用户根据任务需要所编制的各种程序,如科学计算程序、数据处理程序、过程控制程序、事物管理程序等。
二、计算机系统的层次结构
1、现代计算机的解题过程
通常由用户用高级语言编写程序(称为源程序),然后将它和数据一起送入计算机内,再由计算机将其翻译成机器能识别的机器语言程序(称为目标程序),机器自动运行该机器语言程序,并将结果输出。
2、多级层级结构的计算机系统
(1)早期的计算机只有机器语言(用0、1代码表示的语言),用户必须用二进制代码(0、1)来编写程序(即机器语言程序),这就要求程序员对他们所使用的计算机硬件及其指令系统十分熟悉,编写程序难度很大,但用户编写的机器语言程序可以直接在机器上执行,直接执行机器语言的机器称为实际机器。
(2)20世纪50年代开始出现了符号式的程序设计语言,即汇编语言,它用符号ADD、SUB、MUL、DIV等分别表示加、减、乘、除等操作,并用符号表示指令或数据所在存储单元的地址,使程序员可以不再使用繁杂而又易错的二进制代码来编写程序。但是,实际上没有一种机器能直接识别这种汇编语言程序,必须先将汇编语言程序翻译成机器语言程序,然后才能被机器接受并自动运行,这个翻译过程是由机器系统软件中的汇编程序来完成的。如果把具有翻译功能的汇编程序的计算机看作一台机器,那么可以认为
在
之上,用户可以利用
的翻译功能直接向
输入汇编语言程序,而
又会将翻译后的机器语言程序输入给
,
执行后将结果输出(
不是一台实际机器,它只是人们感到存在的一台具有翻译功能的机器,称这类机器为虚拟机)。
(3)20世纪60年代开始先后出现各种面向问题的高级语言,如C语言,这类高级语言对问题的描述十分接近人们的习惯,并且还具有较强的通用性,只要掌握这类高级语言的语法和语义便可直接用这种高级语言来编程。当然,机器本身是不能识别高级语言的,因此在进入机器
运行前,必须将高级语言程序翻译成汇编语言程序或其它中间语言程序,然后再将其翻译成机器语言程序,也可以将高级语言程序直接翻译成机器语言程序,这些工作都由虚拟机器
完成,对程序员而言,他们并不知道这个翻译过程。
①通常将高级语言程序翻译成机器语言程序的软件称为翻译程序,翻译程序有两种,一种是编译程序,另一种是解释程序。
②编译程序是将用户编写的高级语言程序(源程序)的全部语句一次全部翻译成机器语言程序,而后再执行及其语言程序,只要源程序不变,就无需再进行翻译。
③解释程序是将源程序的一条语句翻译成对应于机器语言的一条语句,并且立即执行这条语句,接着翻译源程序的下一条语句,并执行这条语句,如此重复至完成源程序的全部翻译任务,它的特点是翻译一次执行一次,即使下一次重复执行该语句时也必须重新翻译。
(4)机器部也可向下延伸而形成下一级的微程序机器
,机器
是直接将机器
中的每一条机器指令翻译成一组微指令,即构成一个微程序,机器
没执行完对应于一条机器指令的一个微程序后便由机器
中的下一条机器指令使机器
自动进入与其相对应的另一个微程序的执行。
(5)实际上,在实际机器与虚拟机器
之间还有一级虚拟机器
,它是由操作系统软件构成的,操作系统提供了在汇编语言和高级语言的使用和实现过程中所需的某些基本操作,还起到控制并管理计算机系统全部硬件和软件资源的作用。
(6)虚拟机器还可向上延伸,构成应用语言虚拟机。
(7)如下图所示,虚线以上的三个虚拟机器属于计算机的软件部分,虚线以下的则属于计算机的硬件部分,下层是上层的基础,上层是下层的扩展。
三、计算机组成和计算机体系结构
1、计算机体系结构
(1)计算机体系结构是指那些能够被程序员所见到的计算机系统的属性,即概念性的结构与功能特性。
(2)计算机系统的属性通常是指用机器语言编程的程序员(也包括汇编语言程序设计者和汇编程序设计者)所看到的传统机器的属性,包括指令集、数据类型、存储器寻址技术、I/O机理等,大都属于抽象的属性。
(3)由于计算机系统具有多级层级结构,因此站在不同层次上编程的程序员所看到的计算机属性也是各不相同的。
2、计算机组成
(1)计算机组成是指如何实现计算机体系结构所体现的属性,它包含了许多对程序员来说是透明的硬件细节,例如指令系统体现了机器的属性,这是属于计算机结构的问题,但指令的实现,即如何取指令、分析指令、取操作数、运算、送结果等,这些都属于计算机组成的问题。
(2)当两台机器指令系统相同时,只能认为它们具有相同的结构,至于这两台机器如何实现其指令的功能,完全可以不同,也就是它们的组成方式是不同的。