软件是指在硬件上运行的程序和相关的数据及文档. 计算机系统性能的好坏,很大程度上是由软件的效率和作用来表征的,而软件性能的发挥又离不开硬件的支持,对某一功能来说,其既可以用软件实现,又可以用硬件实现,则称为软硬件在逻辑上是等效的.在设计计算机系统时,要进行软/硬件的功能分配.通常来说,一个功能若使用较为频繁且用硬件实现的成本较为理想,则使用硬件解决可以提高效率,而用软件实现可以提高灵活性,但效率往往不如硬件实现高.
计算机硬件的基本组成
1. 早期的冯·诺依曼机
冯·诺依曼在研究EDVAC机时提出了"存储程序"的概念,"存储程序"的思想奠定了现代计算机的基本结构,以此概念为基础的各类计算机通称为冯·诺依曼机.
-
计算机硬件系统由运算器,存储器,控制器,输入设备和输出设备5大部件组成
-
指令和数据均用二进制代码表示
-
指令由操作码和地址码组成,操作码,操作码指出操作的类型,地址码指出操作数的地址
-
指令和数据以同等地位存储在存储器中,并可按地址寻访
-
指令在存储器内按顺序存放,通常,指令是顺序执行的,在特定条件下可以按照运算结果或根据设定的条件改变执行顺序
-
早期的冯·诺依曼机以运算器为中心,输入/输出设备通过运算器与存储器传送数据
注: 虽然指令和数据都以二进制形式存放在存储器中,但CPU可以根据指令周期的不同阶段来区分是指令还是数据.
通常在取指阶段取出的是指令,在执行阶段取出的是数据
CPU只有在确定取出的是指令后,才会将其操作码送去译码,因此不可能易居译码的结果来区分指令和数据
2. 现代计算机的组织结构
在微处理器问世之前,运算器和控制器分离,而且存储器的容量很小,因此设计成运算器为中心的结构,其他部件都通过运算器完成信息的传递
现代计算机已发展为以存储器为中心,使I/0操作尽可能地绕过CPU,直接在I/0设备和存储器之间完成,以提高系统的整体运行效率
3. 计算机的功能部件
传统冯·诺依曼计算机和现代计算机的结构虽然有所不同,但功能部件是一致的,它们的功能部件如下:
-
输入设备
-
输出设备
-
存储器,用来存储程序和数据,分为主存储器和辅助存储器,CPU能直接访问的存储器是主存储器,辅助存储器用于帮助主存储器记忆更多的信息,辅助存储器中的信息必须调入主存后,才能被CPU访问
主存储器的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式.
存储体的最基本组成如下图,存储体存放二进制信息,地址寄存器(MAR)(对应着存储单元的个数,如MAR为10位,则有2^10=1024个存储单元,记为1K. MAR的长度与PC的长度相等)存放访存地址,经过地址译码后找到所选的存储单元.数据寄存器(MDR)(MDR的位数和存储字长相等,一般为字节的二次幂的整数倍)用于暂存要从存储器中读或写的信息,时序控制逻辑用于产生存储器操作所需的各种时序信号
存储器(1)–>存储单元(多个)—>存储元件(多个)
每个存储元件存储一位二进制代码"0"或"1", 因此存储单元可存储一串二进制代码,称这串代码为存储字,这串代码的位数为存储字长(可以是1B(8bit)或是字节的偶数倍)
注:MAR与MDR虽然是存储器的一部分,但在现代CPU中确实存在于CPU中,cache(高速缓存)也存在于CPU中
-
运算器: 是计算机的执行部件,用于进行算术运算和逻辑运算,算术运算是按算术运算规则进行的运算,如加减乘除;逻辑运算包括与.或,非,异或,比较,移位等运算.
- 运算器的核心是算术逻辑单元==(ALU), 运算器包含若干通用寄存器,用于暂存操作数和中间结果,如累加器(ACC),乘商寄存器(MQ),操作数寄存器(X), 变址寄存器(IX),基址寄存器(BR)==等,其中前三个寄存器是必备的.
- 还有程序状态寄存器==(PSW)==, 也称为标志寄存器,用于存放ALU运算得到的一些标志信息或处理机的状态信息,如结果是否溢出,有无产生进位或借位,结果是否为负等
-
控制器:由程序计数器(PC), 指令寄存器(IR), 和控制单元(CU)组成. PC用来存放当前欲执行指令的地址,可以自动加1以形成下一条指令的地址,它与主存的MAR之间有一条直接通路. IR用来存放当前的指令,其内容来自主存的MDR,指令中的操作码OP(IR)送至CU,用以分析指令并发出各种微操作命令序列,而地址Ad(IR)送至MAR,用以取操作数
CPU和主存之间通过一组总线相连,总线中有地址,控制,数据3组信号线,MAR中的地址信息会直接送到地址线上,用于指向读/写操作的主存存储单元;控制线中有读/写信号线,指出数据是从CPU写入主存还是从主存读出到CPU,根据是读操作还是写操作来控制将MDR中的数据是直接送到数据线上还是将数据线上的数据接收到MDR中
4. 计算机软件
软件按照功能分类,可分为系统软件和应用软件
系统软件主要有 操作系统(OS), 数据库管理系统(DBMS), 语言处理程序,分布式软件系统,网络软件系统,标准库程序,服务性程序等,
5. 三个级别的语言
- 机器语言:二进制代码语言
- 汇编语言:用英文单词或其缩写代替二进制的指令代码,需要经过汇编转换为机器语言
- 高级语言:编译–>汇编或者直接翻译成机器语言程序
6. 计算机的工作过程
- 将程序和数据装入主存储器
- 将源程序转换为可执行文件
- 从可执行文件的首地址开始逐条执行指令
从源程序到可执行文件
C语言程序,都必须被转换为一系列的低级机器指令,这些指令按照一种称为可执行目标文件的格式打好包,并以二进制磁盘文件的形式存放起来.
以UNIX系统中的GCC编译器程序为例,读取源文件hello.c, 并把它翻译成一个可执行目标文件hello,整个翻译过程可分为4个阶段完成
-
预处理阶段:预处理器(cpp)对源程序中以字符#开头的命令进行处理,例如将#include命令后面的.h文件内容插入程序文件.输出结果是一个以.i为扩展名的源文件hello.i
-
编译阶段:编译器(ccl)对预处理后的源程序进行编译,生成一个汇编语言源程序hello.s, 汇编语言源程序中的每条语句都以一种文本格式描述了一条低级机器语言指令
-
汇编阶段:汇编器将hello.s翻译成机器语言指令,把这些指令打包成一个称为可重定位目标文件的hello.o, 它是一种二进制文件,因此在文本编辑器中打开它时会显示乱码
-
连接阶段:连接器将多个可重定位目标文件和标准库函数合并为一个可执行目标文件,或简称为可执行文件.本例中,连接器将hello.o和标准库函数printf所在的可重定位目标模块printf.o合并,生成可执行文件hello,最终生成的可执行文件被保存在磁盘上.
指令执行过程的描述
程序中第一条指令的地址置于PC中,根据PC取出第一条指令,经过译码,执行步骤等,控制计算机各功能部件协同运行,完成这条指令的功能,并计算下一条指令的地址.用新得到的指令地址继续读出第二条指令并执行,直到程序结束为止.
取数指令(将指令地址码指示的存储单元中的操作数取出后送至运算器的ACC中)为例:
-
取指令:PC—>MAR—>M---->MDR—>IR
根据PC取指令到IR,将PC的内容送MAR,MAR中的内容直接送地址线,同时控制器将读信号送读/写信号线,主存根据地址线上的地址和读信号,从指定存储单元读出指令,送到数据线上,MDR从数据线接收指令信息,并传送到IR中
-
分析指令: OP(IR)—>CU
指令译码并送出控制信号,控制器根据IR中指令的操作码,生成相应的控制信号,送到不同的执行部件,在本例中,IR中是取数指令,因此读控制信号被送到总线的控制线上.
计算机系统的多级层次结构
地址译码器是主存的构成部分,不属于CPU,地址寄存器虽然一般属于主存,但现代计算机中绝大多数CPU内集成了地址寄存器
相联存储器既可以按地址寻址又可以按照内容(某些字段)寻址,为与传统存储器区别,又称按内容寻址的存储器
寄存器>cache>内存
11 12 15 16 17
寄存器的设置对汇编语言不透明,汇编程序员要对寄存器进行直接操作.
全面代表计算机的性能的是实际软件的运行情况
软件和硬件在逻辑上是等效的,但不是等价的.
向后兼容值得是时间上向后兼容,即新机器兼容使用以前机器的指令系统.
QP-1617270718422)]
寄存器的设置对汇编语言不透明,汇编程序员要对寄存器进行直接操作.
全面代表计算机的性能的是实际软件的运行情况
软件和硬件在逻辑上是等效的,但不是等价的.
向后兼容值得是时间上向后兼容,即新机器兼容使用以前机器的指令系统.