0%

计算机组成原理学习笔记

计算机的基本概念

计算机是一种能够存储程序,能够自动连续的执行程序,对各种数字化信息进行算数运算或逻辑运算的工具。
为了存储程序和数据,需要存储器;为了进行运算程序需要运算器;为了输入程序和数据,以输出运算结果,需要输入输出设备;控制器则对计算机的工作进行控制管理。
这些要点是由冯·诺依曼提出的,这是计算机发展使的一个里程碑。

我们将冯·诺依曼体制中至今仍广泛采用的要点归纳为以下三点:

  1. 采用二进制码表示数据和指令,即信息的数字化。
  2. 采用存储程序的工作方式,即事先编制程序,事先存储程序,自动、连续的执行程序。
  3. 由存储器,运算器,控制器,输入输出设备等5大部件组成计算机的硬件系统。

    存储程序的工作方式

    事先编制程序,将求解问题的处理过程用程序来实现,计算机最终执行的程序,其形态就是指令序列,即若干指令的有序集合,每一步执行一条指令。也就是说,预先编好的程序最终变成:指令序列和有关的原始数据。
    事先存储程序,编好的程序由输入设备送入计算机,存放在存储器中。存储器中存储的是二进制编码。
    自动、连续的执行程序,程序已经事先存储在存储器中,启动计算机并运行程序后,计算机就可以依照移动的顺序逐条读取指令,按照指令的要求执行操作,直到程序执行完毕。

    信息的数字化表示

    计算机中的信息可以分为两类:控制信息和数据信息。数据可以分为两类:数值型数据和非数值型数据。非数值型数据比如字符、文字、图像、声音、视屏等一类信息,以及条件、命令、状态等逻辑信息。计算机怎么表示上述信息呢?
    计算机的全称是电子式数字计算机。电子式指计算机的主要部件由电子电路构成,计算机内传送和处理的信息是电子信号。计算机中的信息都采用数字化表示方法,二进制0和1表示。
    从物理实现层次看,数字代码需要用电信号去体现,这样才能用电子电路部件实现信息的传送和运算处理。电信号分为数字信号和模拟信号
    模拟信号用信号的某些参量去模拟信息,比如用电信号的幅值去模拟数值的大小。许多物理量,如压力、温度、湿度等,需要先通过传感器变为模拟信号,再转换为数字信号,才可以用计算机处理。
    数字信号它的单个数字信号只有两种状态,比如高电平或低电平、有脉冲或无脉冲,这两种状态可用1和0来表示,称为二值逻辑。所以数字信号分为电平信号和脉冲信号

    计算机的硬件、软件组成

    计算机硬件组成

    CPU(Central Processing Unit)即中央处理器,是硬件系统的核心部件,负责读取和执行指令。
    主存储器也叫内存储器,我们希望计算机系统中的存储器容量大,存取速度快,但这往往是有矛盾的。所以常将存储器分为几级。高速缓冲存储器,主存储器,外存储器。组合成一个完成的多级存储系统。
    主存储器划分为许多单元,通常每个单元存放8位二进制,称为1个字节。每个单元都有一个唯一的编号,称为存储单元地址。对于主存储器来说,寻找存储单元(寻址)的依据是地址码,所存取的数据是指令或数据。
    外存储器用来存放那些需要联机存放,但暂不执行的程序和数据,当需要运行它们时再由外村调入内存。
    输入输出设备,计算机系统大多配备了键盘、鼠标、显示器、打印机等常规的输入输出设备,简称I/O设备。

    计算机软件

    从软件配置和功能的角度看,可将软件分为系统软件和应用软件
    系统软件包括操作系统,编译程序和解释程序,各种软件平台。
    应用软件就不胜枚举了,包括:科学计算类;数据处理类;自动控制类;计算机辅助设计类;人工智能类等等。

    计算机的性能指标

    基本字长:CPU的基本字长是指参与一次运算的二进制数的位数。
    数据通路宽度:数据总线一次所能并行传送的二进制数的位数。
    运算速度,CUP时钟频率和主频,大多数计算机采用CPU主频作为速度指标。
    主存容量和外存容量,配置的外围设备及其性能,系统软件配置等。

    提高计算机的性能

    更换CPU以及增加主存容量。

    计算机的应用

    娱乐活动,人工智能,在线教学,科学计算,大数据处理等。

计算机中的信息表示,计算机采用数字化方式来表示各种信息。内部信息分为数据信息和指令信息。计算机所有指令的集合称为该计算机的指令系统。

数值型数据的表示

计算机中处理的数可以是无符号数,也可以是有符号数。对于有符号数,通常约定数的某一位表示符号:0表示正号,1表示负号。这种在计算机中使用的连同数符一起数码化的数称为机器数。机器数形式的二进制位数受机器字长的限制,因为机器数的表示范围和精度也受到限制。计算机中常用的机器数的表示方法有三种:原码、补码和反码

原码, 反码, 补码基本概念

原码

原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。

原码的优点

简单直观;例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011。

原码的缺点

原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。显然出错了。

补码

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

补码的特性

  1. 一个负整数(或原码)与其补数(或补码)相加,和为模。
  2. 对一个整数的补码再求补码,等于该整数自身。
  3. 补码的正零与负零表示方法相同。

反码

正数的反码与其原码相同;负数的反码是对其原码除符号位外逐位取反。

原码, 反码, 补码表示方法

原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。

反码

正数的反码是其本身。
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。

补码

正数的补码就是其本身。
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)。

1
2
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补

总结:

正数的原码,反码,补码相同。
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 末位+1。

定点数与浮点数

定点数分为定点整数和定点小数。
按照IEEE标准,常用的浮点数的格式为:

数符 阶码 尾数 总位数
1 8 23 32
1 11 52 64
1 15 64 80

字符的表示

ASCII码

基本的ASCII码有128个字符,包括96个可打印字符和32个控制字符。使用7个二进制位对字符进行编码,对应的ISO标准为ISO646标准。A的ASCII码为65,0为48,a为97等。由于计算机基本处理单位是字节(8个二进制位),所以用一个字节来存储ASCII码,最高位通常为0。

扩展ASCII码与标准ASCII码保持兼容,扩充了(128~255)128个字符。一共可以表示256个字符。无论是ASCII码还是扩展ASCII码,都无法对上万个的汉子进行编码。

GB2312编码

GB2312是1980年发布的,标准号为GB2312-1980,也被称为国标码。几乎所有的中文系统和国际化的软件都支持该编码。由6763个汉子和682个全角的字符组成。其中一级汉子3755个,二级汉子3008个。GB2312采用二维矩阵法对所有字符进行编码,矩阵大小为94 x 94,可以表示8836种情况,每一行为区,每一列为位,区位确定了唯一的位置,称为字符的区位码。区位分别用一个字节表示,所以中文字符需要占用两个字节。为了区分是中文编码还是西文字符,需要每个字节分别加上160的方法转换为存储码,计算机存储的是此编码的补码,位码在前,区码在后。
GB2312编码用两个字节表示一个汉字,理论上可以表示65536个汉字。
但上面说到GB2312采用94 x 94的矩阵,表示7000多个字符。

GBK编码

GBK编码标准兼容GB2312,共收录汉字21003多个,符号883个。GBK的出现弥补了GB2312的不足。GBK采用双字节表示,首字节在81-FE之间,尾字节在40-FE之间,去除xx7F一条线。苹果OS以GB2312为基本汉字编码,windows以GBK为基本汉字编码。

Big5编码

也称大五码,是一种繁体中文汉字字符集编码,与GB2312编码范围存在冲突,不能同时支持两种字符集的字符。Big5编码成为繁体中文编码的事实标准,在台湾,香港,澳门以及其他海外华人中普遍使用。

ANSI编码

不同的国家和地区制定了不同的标准,由此产生了GB2312,GBK,Big5,等各自的编码标准,这些用1至4个字节来表示一个字符的各种汉字延伸编码方式称为ANSI编码,在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 当然对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ANSI编码与Unicode编码之间最大也最明显的区别。

Unicode编码

如上ANSI编码条例中所述,世界上存在着多种编码方式,在ANSi编码下,同一个编码值,在不同的编码体系里代表着不同的字。在ANSI编码体系下,要想打开一个文本文件,不但要知道它的编码方式,还要安装有对应编码表,否则就可能无法读取或出现乱码。为什么电子邮件和网页都经常会出现乱码,就是因为信息的提供者可能是日文的ANSI编码体系和信息的读取者可能是中文的编码体系,他们对同一个二进制编码值进行显示,采用了不同的编码,导致乱码。这个问题促使了unicode码的诞生。
如果有一种编码,将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。每个符号对应一个唯一的编码,乱码问题就不存在了。这就是Unicode编码。

UTF-8

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言。
如果UNICODE字符由2个字节表示,则编码成UTF-8很可能需要3个字节。而如果UNICODE字符由4个字节表示,则编码成UTF-8可能需要6个字节。用4个或6个字节去编码一个UNICODE字符可能太多了,但很少会遇到那样的UNICODE字符。UTF-8编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。

Base64编码

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
转码过程例子:

1
2
3
4
5
6
7
8
9
10
11
12
3*8=4*6
内存1个字节占8位
转前: s 1 3
先转成ascii:对应 115 49 51
2进制: 01110011 00110001 00110011
6个一组(4组) 011100110011000100110011
然后才有后面的 011100 110011 000100 110011
然后计算机是8位8位的存数 6不够,自动就补两个高位0了
所有有了 高位补0
科学计算器输入 00011100 00110011 00000100 00110011
得到 28 51 4 51
查对下照表 c z E z

大小端模式

大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。

指令信息的表示

一台计算机能够直接识别并执行的程序只能是机器语言程序。机器语言程序是由机器指令序列组成的,它们是产生各种控制信息的基础。一条机器指令是一组有意义的二进制代码。一台计算机的所有指令的集合构成该机的指令系统,指令系统是软件和硬件的接口。

指令格式

一条指令应包含以下信息:操作码,操作数的地址,操作结果的地址,下一条指令的地址。指令的基本格式为:操作码、地址码。

地址码结构

三地址指令,由于地址较多,造成指令码长。RISC(精简指令集计算机)的运算类指令使用三地址格式。
二地址指令,Intel 80x86 的运算类指令使用二地址指令格式。
一地址指令,零地址指令。
在计算机中,指令和操作数同样是以二进制代码形式存储的。

操作码结构

固定长度操作码,可变长度操作码,复合型操作码。

指令长度

变字长指令,固定字长指令。指令字长与机器字长没有固定的关系。

常用寻址方式

立即寻址,直接寻址,寄存器寻址,间接寻址,变址寻址,相对寻址,堆栈寻址等。

指令类型

算术和逻辑运算类指令,数据传送类指令,程序控制类指令,系统类指令。

存储器是计算机的重要组成部分,存储器由一些能够表示二进制数中0,1两种状态的物理器件组成。一个高性能的计算机系统要求存储器的存储容量大,存取速度快,成本低廉,能支持复杂的系统结构。
从用户的角度看,存储器还可以形成另一种层次结构,物理存储器和虚拟存储器。

存储器的分类

按存储器在计算机系统中的作用分类:内部存储器,外部存储器,高速缓冲存储器。
按存取方式分类:随机存取存储器 RAM,只读存储器 ROM,顺序存取存储器 SAM,直接存取存储器 DAM
按存储介质分类:磁芯存储器,半导体存储器,磁表面存储器,光盘存储器。
按信息的可保存性分类:易失性存储器和永久性存储器。

主存的主要技术指标

存储容量,存取速度,可靠性,存取宽度。

高速缓冲存储器 CaChe

为了减小CPU与主存之间的速度的差异,通常插入一个速度较快,容量较小的SRAM,起到缓冲作用,这就是Cache技术。
Cache的工作原理基于程序和数据访问的局部性。在一个较短的时间间隔内,地址往往集中在存储器逻辑地址空间的很小范围内。这种对局部范围的存储器地址频繁访问,而对此范围外的地址访问很少的现象称为程序访问的局部性
命中率指CPU访问Cache时,所需信息恰好在Cache中的概率,目前Cache的访问命中率可达90%以上。Cache的命中率与Cache的映像方式,替换算法,程序特性等因素有关。

Cache的组织

地址映像:直接映像,全相连映像,组相连映像。
替换算法:先进先出算法(FIFO),最近最少使用算法(LRU)。
多层次Cache存储器。近年来,在一个系统中使用多个Cache已经很普遍了。

外部存储器

硬磁盘存储器,光盘存储器。

存储系统的层次结构

寄存器,Cache,主存储器,联机外部存储器,脱机外部存储器。
磁盘冗余阵列,使用多台磁盘存储器组成的大容量外存子系统,它由多台磁盘机按一定的规则组合在一起构成的。
并行存储技术,在高速的大型计算机中,普遍采用并行主存系统,在一个存取周期中可并行存取多个字,依靠整体信息吞吐率的提高,解决CPU与主存之间的速度匹配问题。

虚拟存储系统的组织

页式虚拟存储器,段式虚拟存储器,段页式虚拟存储器。
存储管理部件(MMU),为了实现逻辑地址到物理地址的转换,并在页面失效时进入操作系统环境,系统设置了由硬件实现的存储管理部件,整个虚拟存储器的管理由MMU部件和操作系统共同完成。

输入输出系统

在不同的计算机系统中,主机与IO设备之间的链接方式可能不同,但总线连接方式是最常用的互连方式。
IO接口的几种控制方式:直接程序控制方式,中断方式以及DMA方式。
系统总线一般包括地址总线,数据总线和控制总线。对传输速度的限制可通过增设局部总线或设置多组总线方法来解决。
常见的输入输出设备有键盘,鼠标,显示器,打印机等。