资源描述
计算机原理,第一部分 计算机原理,1.1 计算机概述 1.1.1 计算机的出现 1.1.2 冯.诺依曼原理 1.1.3 计算机的分类 1.1.4 计算机的组成 1.1.5 指令系统与程序 1.2 数据及编码 1.2.1 数制与数的表示 1.2.2 软件技术中的数制 1.2.3 二进制数的运算 1.2.4 计算机中数的表示 1.2.5 计算机数据编码,1.3 计算机硬件 1.3.1 硬件系统概述 1.3.2 中央处理单元 1.3.3 主存储器 1.3.4 高速缓冲存储器 1.3.5 辅存储器 1.3.6 人机交互设备 1.3.7 子系统的内部连接 1.3.8 程序执行过程,1.4 计算机软件 1.4.1 软件的定义 1.4.2 软件与硬件的关系 1.4.3 软件的种类 1.4.4 软件的生产 习 题 1,1.1 计算机概述,计算机的出现,世界上第一台纯电子的计算机或许是Atanasoff-Berry机器,由约翰安塔纳索夫(John Atanasoff)和他的助手克里夫德柏利(Clifford Berry)于1937年1941年在美国爱荷华州立大学建造。另外一台是称为Colossus(巨人)的机器由汤米福劳尔斯(Tommy Flowers)指导在英国建造,该机器在第二次世界大战中用来破译德国人的密码。实际上在此期间,全世界共有10余台这样的机器,由于高度保密长期不为人知。以致于人们一直把稍后(1946年2月14日)建造的(当然也更加通用和快速)计算机埃尼阿克(ENIAC, Electronic Numerical Integrator and Calculator, 电子数字积分器和计算器)作为世界上第一台电子计算机。它是由约翰莫奇利(John Manchly)和他的学生J.普雷斯佩尔艾克特(J. Presper Eckert)在美国宾夕法尼亚大学摩尔电子工程学校建造的。,ENIAC,冯诺依曼 原理,冯诺依曼在参与ENIAC的建造过程中,认识到了当时计算机结构上的不足,对计算机的体系结构进行了研究,提出了今天我们称为冯诺依曼原理的三条思想: (1)计算机的结构应由存储器、算术逻辑单元、控制单元和输入输出单元构成。存储器是计算机用来存储的部件;算术逻辑单元是进行计算和逻辑操作的地方;控制单元用来对存储器、算术逻辑单元、输入输出设备等子系统的操作进行控制;输入子系统负责从计算机外部接受输入数据和计算程序,而输出子系统负责将计算机的处理结果输出到计算机的外部。,冯诺依曼(1903-1957),(2)计算机的计算程序必须存储在其存储器中。 (3)计算机中的指令是一条接着一条顺序执行的。也就是说,控制器一次从存储器取出一条指令,接着解释它、执行它。然后,依顺序或者程序要求(例如跳转)读取下一条指令。 依照上述原理建造的计算机称为冯氏体系结构的计算机。从此以后,绝大部分计算机,包括我们今天使用的计算机,都是基于冯诺依曼原理的。,计算机的分类,计算机的组成,我们考查使用算盘计算一个四则运算的过程。设有下面的算式: 1621561612312015 我们需要有算盘作为运算的工具;其次要有笔和纸,用来记录算式、中间结果和最后的计算结果;运算过程需要有一个会打算盘的人来控制:人首先把要计算的问题和数据记录下来,然后第一步先算出162156,把计算的中间结果记在纸上,再计算16123,把它和上一次的结果相加,再记录在纸上,然后计算12015,再把它从上一次的结果中减去,就得到了最后的结果。,如果用一台计算机完成上面的工作,显然该计算机也需要有相当于算盘用来进行计算的部件,我们称之为运算器;其次,该机器还要有起到纸和笔相同作用,能够记住算式、中间结果以及最终结果的部件,我们称之为存储器;再次,要有起到和打算盘的人相似作用的部件,它控制整个计算过程,我们称之为控制器。除了上面三个部分,该机器还要有可以输入算式或计算过程的装置,我们称之为输入设备;还要有将最终计算结果告诉我们的装置,我们称之为输出设备。,这里的运算器,实际上进行的是算术和逻辑运算,因此也可以称为算术逻辑单元。于是,我们得到了与冯诺依曼原理第一条相同的计算机组成模型。如图1-2所示。,至于冯诺依曼原理的第二条,在今天看起来似乎是显而易见的。但早期的计算机只是将数据存储在存储器中,而程序需要在计算机的外部通过开关板的设置和连线的改变来编排。这种方式操作十分不便,效率极低,容易引起错误。因此限制了计算机的使用。这是冯诺依曼要将存储程序作为一条重要的原理提出的原因。 冯诺依曼原理的第三条说:计算机必须一步一步依次执行程序的每一步,这一般来说是最自然、最容易实现的。但今天已经有不遵从此原理的计算机,这已经超出了本课程的范围。,可以看出,计算机除了必须包括运算器(算术逻辑单元)、控制器、存储器以及输入输出设备等物理器件外,还需要有保存在存储器中的数据和程序才能工作。我们把组成计算机的物理器件,称为计算机的硬件。而计算机的数据和程序,称为计算机的软件。,指令系统与程序,计算机通常有以下五类指令: 数据传送指令:用来将数据从计算机的一个存储单元传 送到另一个存储单元; 算术运算指令:用来进行加、减、乘、除等算术运算; 逻辑运算指令:用来进行与、或、非等逻辑运算。关于这些运算的定义见下一节; I/O指令:完成计算机的数据输入和输出操作; 控制指令:用来控制程序的执行流程。,指令通常分成操作码和操作数两大部分。操作码表示计算机执行什么操作;操作数是参加操作的数本身或者它在存储器中的位置。存储器中的位置用术语说就是地址(Address)。 使用计算机解决问题时,必须把问题的解法编成一条条指令,然后让计算机依次执行。为了能让计算机正确识别,这些指令必须是所用计算机的指令系统中具有的指令。这些解决问题的一系列指令合在一起,称为程序。,为了能让计算机自动执行程序,就必须把它预先存放在存储器的某个区域。程序通常是顺序执行的,所以程序中的指令也是一条一条顺序存放的。计算机在执行时,要把这些指令一条条取出来加以执行。因此需要有一个器件能够跟踪指令在内存中的地址,这种器件叫程序计数器PC(Program Counter)。在程序开始执行时,给PC赋以程序中第一条指令所在的地址,然后每取出一条指令PC中的内容自动更新以指向下一条指令的地址,如此才可保证指令的顺序执行。,1.2 计算机中的数与数据编码,数制与数的表示,从小学起我们就知道,如果要表示我们双手的手指个数,用数字10即可。这里10由1和0两个阿拉伯数字符号构成。由于1处在从右边开始的第二位,1代表了拾。我们对这种表示方法已经习以为常了,以至于忽略了一个明显的事实:尽管数的多少是客观的,但我们表示数的形式、方法实际上是主观的。例如,如果我们规定处在第二位的1代表8,那么,就要用12表示我们的手指个数。这里,主观规定的表示数的方法,或者说体制,就是数制。一个数制的核心,主要是对该数制下数的每一位所代表的多少进行规定。,我们现在常用的数制是拾(十)进制,从拾(十)进制的规则,我们可以推论出数制的一般规律。例如:十进制数245.24,代表二百四十五点二四,可以表示为: 245.24 21004105120.1040.01 210241015100210-1410-2 这就是说,处在小数点左边第三位的2代表2102;小数点左边第一位的5代表5100;小数点右边第二位的4代表410-2 这里,102、100和10-2称为十进制位的权。一个数的值,就是该数每一位的数码与其权的乘积的和。,我们不妨将小数点左边第一位定义为第0位,右边第一位定义为-1位,然后依次类推。则十进制数第n位的权为10n。这里n是整数(可正可负),如下表:,将上面关于十进制的规律一般化,我们可以得出,一个q进制数,其第n位的权为qn。而表示这种进制的数需要q个符号,代表从0到q-1的数字。举例来说,5进制数第n位的权为5n,表示5进制数需要0、1、2、3、4五个数字符号;2进制数第n位的权为2n,表示2进制数需要0、1两个数字符号。,根据上面的推论,假设一个有m+1位整数、n位小数的q进制数,其m整数位的数字是km,m-1整数位的数字是km-1,依此类推,第0整数位的数字为k0,小数点后第一位数字是k -1,小数点后第二位的数字是k -2,依此类推,小数点后第n位的数字是k-n,则一般化后得该q进制数的十进制值V为: Vkmqmkm-1qm-1k0q0 k -1q-1 k -2q-2k n q-n,可以得出,表示一个客观的数,使用任何一种数制(主观方法)都是可行的。不同的数制,其表示数的大小、精度是没有分别的。不同的只是,表示相同大小和精度的数,所需要的位数不同。 另外,我们也不难想象,二进制数是最低的进制,它只需要代表0和1的两个符号表示。从这个角度看,没有比二进制更简单的数制了。,软件技术中的数制,电子计算机表示数的方法只能是通过其内部的电子器件(就像算盘的珠子)的不同状态组合来实现。由于二进制数只需要两个符号就可以表示,这显然最便于用电子器件实现。例如,一个电磁继电器就有开和关两种状态,这正好可以表示二进制数的0和1。因此,计算机中的数,全部采用二进制。,由于我们人类已经习惯了采用十进制数进行记数和思考,计算机的二进制数在需要与人交流时要进行转换。一种情况是将人所习惯的十进制数输入到计算机时要转换为二进制数;另一种情况是,计算机计算出二进制数结果后要转换为人能理解的十进制数。,二进制数的缺点是表示一个相同大小和精度的数,它需要的位数很多。因此转换起来很不方便。为了便于二进制数和十进制数的转换,也为了在书写时更加简便易读,二进制数经常要转换成8进制数和16进制数。因此,在软件技术中我们经常使用的数制有2进制、8进制、10进制和16进制。,16进制的数需要表示0到15的16个符号。使用阿拉伯数字09后,还差6 个,于是我们采用英文字母A、B、C、D、E和F分别表示10到15的数字。如下表所示。这样,一个16进制数可能写成23EF.AB。,在某些混合使用不同数制的场合,我们需要有一个标识数的数制的方法。例如,数值100如果不加标识,我们就不能确定它究竟是2进制数、8进制数、10进制数,还是16进制数。标识数的数制的方法,在不同的场合有不同的具体要求,我们需要随时了解并遵守。一般当我们在进行不同数制的数的运算或转换时,常采用圆括号加下标的方式标明一个数的数制。例如:(100)2表示一个二进制数;(100)8为8进制数;(100)10是10进制数;(100)16表示一个16进制数。一般,10进制数是缺省的数制,所以有时候省略对10进制数的标注。,课堂练习,下列数书写正确吗(口答): (1) (110)2 (2) (012)2 (3) (110)8 (4) (1028)8 (5) (037)16 (6) (A12.3G5)16,将其他数制的数转换为十进制数,使用前面的公式可以将任何一种数制的数转换为十进制数。例如: (100)21220210204; (100)818208108064; (100)16116201610160256; 前面所列举的16进制数23EF.AB的10进制值为: (23EF.AB)162163316214161 151601016-11116-2 9199.66796875,课堂练习,将下列数转换成十进制数: (1) (110)2 (2) (110)8 (3) (110)16 (4) (100110)2 (5) (100110)8 (6) (100110)16 (7) (7301)8 (8) (AB2.E3)16,将十进制数转换为其他数制的数,Word文档: 将十进制数转换为其他数制的数,二进制、八进制和十六进制数的转换,Word文档: 二进制、八进制和十六进制数的转换,二进制数的运算,计算机中数是用二进制方式表示的,那么运算也是以二进制方式进行的。这一节我们对二进制整数的各种运算进行了解。由于本节的数大部份是二进制,所以对二进制数省略了数制标注。,算术运算加法,算术运算指加、减、乘和除。二进制数的算术运算完全类似于十进制。 二进制加法的运算规则为: 000; 01101; 110 进位1 1111 进位1,例: 计算二进制数10110101与1111的和。 解:进位: 1 1 1 1 1 1 被加数: 1 0 1 1 0 1 0 1 加数: 1 1 1 1 和: 1 1 0 0 0 1 0 0 即:10110101111111000100。,算术运算减法,二进制减法的运算规则为: 000; 110; 101; 011 借一位。,例: 计算二进制数算式1110111010111010的结果。 解:借位:0 1 1 0 0 0 0 借位后被减数:1 0 0 0 1 1 1 被减数:1 1 1 0 1 1 1 0 减数: 1 0 1 1 1 0 1 0 差:0 0 1 1 0 1 0 0 即:1110111010111010110100,算术运算乘法,二进制乘法的运算规则为: 000; 01100; 111。 左移运算:将所有位左移,末尾补0。 如:101左移一位:1010(相当于乘以2) 101左移两位:10100(相当于乘以22),算术运算除法,除法是乘法的逆运算。 右移运算:将所有位右移,末尾位移出。 如:101左移一位:10(相当于除以2取整) 101左移两位:1(相当于除以22取整),逻辑运算,所谓逻辑运算是指对逻辑真(True)和假(False)所进行的运算。计算机中全部采用二进制数,而二进制数的每一位要么是1,要么是0。如果我们用1表示逻辑状态真,0表示逻辑状态假,则可以对二进制数的每一位按逻辑运算规则进行运算。,逻辑运算按照需要参与的逻辑状态个数,分为一元运算和二元运算。一元运算只有一种,就是非(Not)运算。非运算改变参与运算的逻辑状态。即如果状态为真,则变为假;反之,如果状态为假,则变为真。而二元运算有与(And)、或(Or)和异或(Xor)三种。参与与运算的两个状态,只有都是真时,结果才为真;参与或运算的两个状态,只要有一个为真,结果就为真;参与异或运算的两个状态,只有状态不同时结果才为真。,各种逻辑运算的规则可以通过其真值表描述:,例: 对二进制数10011001作非运算。 解:对二进制数的逻辑运算,是按位进行的。即对二进制数逐位进行逻辑运算。则: NOT 1 0 0 1 1 0 0 1 0 1 1 0 0 1 1 0 即:10011001的逻辑非为1100110。,例: 试计算二进制数10011001和二进制数11011011与、或、异或的结果。 解:与运算: 1 0 0 1 1 0 0 1 AND 1 1 0 1 1 0 1 1 1 0 0 1 1 0 0 1 或运算: 1 0 0 1 1 0 0 1 OR 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 异或运算: 1 0 0 1 1 0 0 1 XOR 1 1 0 1 1 0 1 1 0 1 0 0 0 0 1 0,课堂练习,计算: (1) 1110+1001101 (2) 10111+10111 (3) 11110-10101 (4) 1011001-10110 (5) 1011001的NOT运算结果 (6) 11110、10101的AND、OR、XOR运算结果,计算机中数的表示,我们已经粗略地知道,计算机中的数是用二进制表示的。本节将介绍: 无符号的整数 带符号整数 整数的偏移码 浮点表示法,无符号整数的表示,无符号的整数,就是从0到无穷大的自然数。表示这种数时不需要考虑符号,只需要将它转化成二进制,然后存放在计算机中即可。 计算机存放二进制数时,通常是有一定的长度限制的。这就是说,计算机保存的无符号数的范围是有限的。根据数制的定义公式,一个 n 位无符号二进制数的最大值是:2n -1,带符号整数的表示,计算机中参与计算的数,显然是有正有负的。带符号的二进制整数存在多种表示方法,本小节主要介绍二进制数的原码、反码和补码,以及他们的特点和应用。,原码,如果用二进制数的最高位表示其符号,用剩下的位表示其绝对值,这样得到的二进制数的表示就是原码。原码表示中,正数的最高位为0,负数的最高位为1。例如: 整数 (+105)10,其8位二进制原码为:0 1101001; 整数 (-105)10,其8位二进制原码为:1 1101001。 上面的表示中,二进制数01101001和11101001,称为机器数,而其实际所代表的值+105和-105,称为该机器数的真值。,原码表示的优点是简单易懂,与真值的换算方便。但用原码计算时,如果两个异号数相加或者同号数相减,就需要用到减法。在计算机设计中,要尽量将运算用加法和移位完成。因此,计算机中实际上没有用原码形式存储带符号的整数。但由于其简单与直观,在不涉及数字运算的应用场合还是会用到。,反码,正数的反码与原码相同。即最高位是符号位,用0表示正,其余位表示该数的值。例如: (+127)10的8位二进制反码:01111111; (+31)10的8位二进制反码:00011111。 负数的反码通过将其正数的反码按位取反(包括符号位)得到。例如: (-127)10的8位二进制反码:10000000; (-31)10的8位二进制反码:11100000。 在反码表示中,0有两种表示方法。姑且称为0和0: +0的8位二进制反码: 00000000; -0的8位二进制反码: 11111111。,反码的特点: (1)0有两种表示方法; (2)n位二进制反码所能表示的数的范围是2 n112 n11。如8位二进制反码所能表示数的范围是127127; (3)当反码的符号位是0(即正数)时,后面的位数为数值部分;当符号位为1(即负数时),将后面的位数按位取反后才得到其数值。 由于反码中0有两种表示,会引起很大的混乱,另外,进行加减法也不方便。所以计算机中没有使用反码存储带符号的整数。反码的意义在于它是下面要介绍的补码的基础。另外,它的某些特性使其可用于诸如错位检测和纠错的数据通信应用程序中。,补码,带符号数的n位二进制补码按如下的步骤得到: (1)首先将数的绝对值转换为二进制数,不管符号; (2)如果得到的二进制位数不足n位,在高位补0,直到总位数为n; (3)如果符号为正,就不需要作变动。如果符号为负,则从最低位开始到首次出现的1为止,将所有的0和首次出现的1保持不变,其余位取反。,例:求(+31)10和( -31)10的8位二进制补码。 解:31所对应的二进制数为11111。 ( +31)10的8位二进制补码只需在高位补3个0,即00011111。而( -31)10的补码需要保持00011111最低位的1不变,其他位取反。即11100001。 例:求( +126)10和( -126)10的8位二进制补码。 解: ( 126)10所对应的二进制数为1111110。( +126)10的8位二进制补码只需在高位补1个0,即01111110。而 ( -126)10的补码需要保持01111110最低位的0和第一个1不变,其他位取反。即10000010。,特别地有: +0的补码:00000000; -0的补码:00000000。 这样,在补码表示中,0只有一种表示法,克服了在反码中0有两种表示的缺点。,求一个补码的十进制真值的方法是: (1)如果最高位是0,则直接将此二进制数转换为十进制数,并在前面加上正号; (2)如果最高位是1,则将最低位连续的0和第一个出现的1保持不变,将其余位(包括符号位)按位取反,然后将得到的二进制数转换为十进制数,并在前面加负号。,例:计算8位二进制补码10000000的真值。 解:由于最高位为1,所以该数是负数。将该二进制数最低位连续的0和第一个出现的1保持不变。这样得到的二进制数还是10000000。将此数转换成十进制数为128,然后在前面加负号,得到(128)10。所以,8位二进制补码10000000的真值是-128。 从该例子看出,8位二进制补码所表示的数的范围是 -128+127。一般地,我们可以给出,一个n位二进制补码所能表示的数的范围是-2n1+(2n11)。,以上面列举的补码表示的数为例,我们考查用补码进行加法运算的情况。首先我们看31-127 = 31+(-127)。算式为: 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 结果10100000也是一个补码表示,其符号为负,绝对值是保持最低位连续的0和第一个1不变,将其余位按位取反,最后得到01100000 =(96)10。所以结果为-96,与实际相符。,总结上述内容,补码有以下特点: (1)0只有一种表示,即所有位全为0; (2)n位二进制补码表示数的范围为-2n1+(2n11) ; (3)通过用补码表示带符号的数,可以用加法运算实现减法,有助于简化计算机的设计。 由于上述特点,现在计算机中带符号的数,实际上都是采用补码存储的。二进制补码是现在计算机中最重要、应用最普遍的整数表示法。,带符号整数表示法小结,在上述各小节的介绍中,需要注意的一个共同点是,当我们将一个带符号整数转换为某种形式的二进制编码时,编码的长度是一个重要的参数。例如,同样的一个整数5,编码成4位二进制数和8位二进制数结果是不同的。在一般的数据表示中,整数部分最前面的0是没有意义的,可以省略。但在作二进制数编码时,如果转换的二进制数位数不够编码长度,我们要用0来填充。下面的例子可以说明这点。 例:分别写出(5)10和(5)10的4位、6位和8位二进制补码。 解:(5)10和(5)10不同位数的补码见下表:,另外一个要注意的地方是,计算机中的机器数与真值之间的对应关系,决定于机器数的编码方式。即同样一个机器数,它所代表的无符号数、原码、反码和补码的真值是不同的。换句话说,用不同的编码规则去解读同一机器数,会得到不同的结果。 下表列出了所有8位机器数按不同的编码去解读所得的十进制数真值。,计算机数据编码,上一节我们探讨了计算机中数的表示形式。然而,今天的计算机并不单纯用作计算。计算机实际要处理的数据还包括文字、图片、声音以及动画等。那么,这些数据形式在计算机中是如何表示的呢?答案是用二进制编码。所谓编码(Code),也可以叫代码。二进制编码就是用一系列的二进制数字代表某种数据。用这种观点看,上一节的内容实际上是关于计算机中数值的二进制编码的。数值在计算机中的编码由数值天然的大小决定。而文字、图像等数据的编码则需要人为的规定。,采用二进制数字编码表示数据的原因和我们在上一节中所述道理一样。这就是数据在计算机中最终都是要用计算机物理器件的状态组合来表示的,而二进制数的物理表示最为简便。表示非数值数据的二进制数,并没有数量意义(有时或许有序号意义),所以也可以把他们看成是一系列二进制位(bit)的排列模式,称为位模式(bit pattern)。通常把长度为8的位模式称为1个字节。它是我们度量位模式长度,有时甚至是处理数据的基本单位。 数据被编码存入计算机并被处理后,当需要从计算机中输出时,要重新转换为数据本来的形式。将原始形式的数据转换成二进制编码的过程称为编码(encode),而将二进制编码转换为原始形式的数据的过程称为解码(decode)。,文字的编码 ASCII编码,1960年代初期,美国国会图书馆(Library of Congress, LC)制订了英文字符集和交换码,以作为美国图书馆界书目交换的共同标准。后来这个交换码发展成为美国的国家标准ASCII(American Standard Code for Information Interchange,美国信息交换标准代码),而且被国际标准化组织(International Standard Organization, ISO)接受为国际标准,标准号为ISO646(其全名为7-bit coded character set for information interchange,信息交换用7位编码字符集)。该编码使用7位表示一个符号,总共可表示的符号为27128种。,汉字编码GB2312编码,GB2312码是中国国家汉字信息交换码,全称信息交换用汉字编码字符集基本集。由国家标准总局于1981年5月发布,通行于中国大陆和新加坡等地 。GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。GB2312将收录的汉字分成两级:第一级是常用汉字计3755个,第二级汉字是次常用汉字计3008个。GB2312中一个图形字符采用两个字节表示,每个字节采用七位编码。习惯上称第一个字节为高字节,第二个字节为低字节。高字节和低字节的编码范围都是从(21)16到(7E)16。汉字编码从(3021)16开始,结束于(777E)16。当GB2312编码在计算机内存储时,为了与ASCII码区分,编码的高字节和低字节的最高位要置为1,这样得到的代码称为“内码”。这样,与GB2312编码对应的内码是在原编码的基础上加(8080)16。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最基本的中文字符集。,1.3 计算机硬件,硬件系统概述,基于冯诺依曼原理的计算机,从硬件方面看是由运算器、控制器、存储器以及输入输出设备组成的。运算器是用于加工、处理数据的部件,主要完成对数据的算术和逻辑运算。控制器是计算机的控制部件,它控制其他部件协调统一工作,并且还能完成对指令的分析和执行。存储器是计算机的记忆装置,它的主要功能是存放程序和数据。输入设备从计算机外部获取数据,而输出设备将计算机处理的结果输出到外部。上述五大部分之间是相互配合关联的。控制器要向其他部件发送控制信号,以协调它们的工作;运算器要从输入设备获得数据,与存储器双向交换数据,将计算结果传给输出设备;而控制器要从存储器中获得指令代码数据。 中央处理单元、主存储器、高速缓冲存储器、辅存储器以及其他输入/输出设备等,是构成计算机系统的主要物理器件,也可看成是构成计算机系统的子系统。下面我们对它们逐一简介。,存储器在现代计算机中,被分成多种层次。其中最主要的是内存,也称为主存,是计算机进行计算和数据处理的工作场所。程序在执行时,程序代码和相关数据都是存放在主存中的。而在CPU内部,有一些暂时存放数据的存储单元,称为寄存器,它与运算部件之间有紧密的联系,有助于提高计算的速度。在CPU与主存之间,还有一种用来提高CPU对主存的读写速度的存储器,称为高速缓冲存储器(Cache)。为了获得高的性能,现在很多计算机将高速缓冲存储也分为几级。高速缓存现在一般直接集成在CPU上。在主存之外,还有用来在计算机断电后持久保存程序和数据的大容量存储设备,如磁盘、光盘等,称为外存,或者辅存。辅存所起的作用与主存不同,它可让计算机从外部获取数据,也可将结果输出给外部,所以既是输入设备,也是输出设备。上述存储器从寄存器、高速缓存、主存到辅存,存储容量是越来越大,而读写速度却是越来越低。如图32所示。,中央处理单元,中央处理单元(CPU)是计算机的心脏。它有三个组成部分:算术逻辑单元(ALU)、控制器、寄存器组。,算术逻辑单元,CPU中的算术逻辑单元负责算术和逻辑运算。算术运算中最简单的一元运算是增量(加1)和减量(减1)运算。最简单的二元运算是加、减、乘和除。逻辑运算中,包含一元逻辑运算非(Not),二元逻辑运算与、或和异或。不管是逻辑运算还是算术运算,都必须在控制器的管理下完成。例如,控制器要根据指令代码从各种运算中选择一种。,寄存器,寄存器是CPU用来临时存放数据的独立的高速存储单元。CPU在计算时需要多个寄存器参与。多个寄存器组成寄存器组。寄存器组的每一个寄存器都有一个专门的名字或代号。常见的寄存器有以下几种: (1)数据寄存器 过去,计算机只有一个寄存器用来交替存储输入数据(直接来自内存的输入数据)或结果。现在,越来越多的复杂运算改由硬件设备实现(而不是使用软件),因而需要一些寄存器来保存这些运算的中间结果。这就是在计算机CPU中需要大量的数据寄存器来提高运算速度的原因。在图33中,我们只是示意性地画出了3个通用数据寄存器,分别是R1、R2和Rn。,(2)指令寄存器 现代计算机中不仅要存储数据,还要存储相应的程序。CPU的主要职责是从内存中逐条地读取指令,并将取出的指令存储在指令寄存器(图33中的寄存器I)中,解释并执行指令。后面我们还会讨论这个问题。 (3)程序计数器 CPU中另一个专用寄存器是程序计数器(图33中的PC寄存器) 。程序计数器中保存当前正在执行的指令的内存地址。当前指令执行完毕,计数器自动修改,指向下一条指令的地址。,控制器,CPU的第三个部分是控制器。控制器类似于人脑中控制身体各部分运动的区域。控制是通过电子线路的电平状态(高电平或低电平)实现的。例如,假定一个简单的ALU可以进行10种不同的运算。为了指定这些运算,控制单元需要通过4条线路连接到算术逻辑单元。四条线路每条都有高电平(断开)和低电平(导通)两种状态,组合起来可以表示16种不同的状态(24)。可以使用其中10种表示算术和逻辑运算,而其他的6种作别的用途。如果用0表示线路的高电平,1表示线路的低电平,则线路的状态编码就是0000、0001、0010、1111。可以定义0000(所有线路高电平,即全部断开)表示不进行任何运算,0001表示加,0010表示减,等等。,主存储器,主存储器是计算机内部的另一个主要子系统(如下页图)。它是存储单元的集合。每一个存储单元都有唯一的标识号,称为地址。数据以称为字(Word)的二进制位组合传入和传出存储器。也就是说,字是存储器读写的基本单位。计算机一个存储单元所能存放的数据,刚好是该计算机的一个字。字的位数称为字长。不同的计算机的字长可能是不同的。如早期的微型计算机,字长一般是8位,后来,微机的字长逐步发展为16位、32位以及现在的64位。我们说某计算机是多少位的,就是指该计算机的字长是多少位。显然,计算机的字越长,对存储器的读写效率越高。但字长增加也成倍增加了计算机的复杂性和制造的难度。,前面曾经指出8位的二进制位模式称为一个字节(Byte)。字节在计算机技术中是一个应用非常普遍的度量单位。计算机的字长可以用字节表示,存储容量的大小也是以字节为基本单位的。下表列出了常用的表示存储容量的单位。,地址空间,存储器中的每个存储单元,其大小等于该计算机的字长,都需要有一个唯一地址来识别。存储器中所有可标识的独立地址集合,称为地址空间。例如,一个64KB、字长为1字节的存储器的地址空间为从0到65535。在计算机内部,地址也是用二进制位模式表示的,所以上面的地址空间实际上是从(0000000000000000)2(地址0)到(1111111111111111)2(地址65535)。我们可以把他们看成无符号二进制整数。通常,如果计算机有n个字(注意,不是字节)的存储单元,那就需要有log2n位的无符号二进制整数来标识每一个存储单元。 例: 一台计算机有128MB内存。该计算机字长为64位。需要多少位来寻址内存中的任意一个字(word)? 解:内存空间容量为128MB,即227B。字长64位即8(即23)字节。所以内存空间共有224个单字的存储单元。寻址任意一个单字需要的地址的位数是log2224,即24位。,主存储器的种类,在计算机中,通常有两种类型的主存储器。一种是随机读写存储器(Random Access Memory, RAM),一种是只读存储器(Read Only Memory, ROM)。,RAM,随机存取存储器(RAM)是计算机主存的主要组成部分。 RAM和ROM的主要区别在于,用户可以读写RAM,即用户可以在RAM中写信息,之后可以方便地通过覆盖来擦除原有信息。RAM的另一个特点是易失性。当计算机断电或者关掉计算机,RAM中的数据将不复存在。RAM从技术上可以分为静态随机读写存储器(SRAM)和动态随机读写存储器(DRAM)。,ROM,只读存储器(ROM)的内容是由制造商写进去的。用户只能读不能写。它的特点是非易失性,即切断电源后,数据也不会丢失。通常ROM用来存储那些关机后也不能丢失的程序或数据。例如,用ROM来存储开机时运行的引导程序。,高速缓冲存储器,高速缓冲存储器(Cache)的存取速度要比主存快,但比CPU和CPU中的寄存器慢。高速缓存通常容量较小,且常被置于CPU和主存之间,如图35所示。,辅存储器,辅存储器是可以大量存储数据的装置,它存储的信息在计算机断电后也不会丢失。辅助存储器的价格比主存便宜,但速度更慢。在计算机结构中,辅存属于输入和输出设备。 根据实现的原理,辅存主要分成两类,一是磁介质辅存,一是以激光进行读写的光存储设备。,磁介质辅存,磁介质辅存设备使用材料的磁性存储数据位。磁介质上的点如果有磁性则表示1,如果没有磁性则表示0。现在仍在使用的磁介质存储设备主要有磁盘和磁带。,磁盘,磁盘是由一张或多张磁片构成的。磁片由薄磁膜封装起来。信息是通过每一个磁片上的读/写磁头读写磁介质表面来进行读取和存储的。图36给出了磁盘的物理结构。,图36 磁盘的物理结构,为了将数据存储在磁盘的表面,每个盘面都被划分为同心的圆环形磁道(track)。每个磁道又被分成若干个扇区(sector)(如图37所示)。磁道间通过磁道间隔隔开,而扇区间通过扇区间隔隔开。,图37 磁盘的表面结构,磁盘是随机存取设备。但磁盘的读取是以扇区为最小单位。一个扇区通常包含数百至数千字节(如512字节)。磁盘上的数据也被分成块(Block)。一个块可以包含一个或多个扇区上。 磁盘的性能取决于几个因素。最重要的因素是角速度、寻道时间和传送时间。角速度定义了磁盘的旋转速度。寻道时间定义了读写磁头寻找数据所在磁道的时间。传送时间定义了将数据从磁盘移到CPU内存所需的时间。 历史上,磁盘分为软盘与硬盘。软盘是单片的,用塑料封套保护,其读写机构在磁盘驱动器上。单张软盘的容量一般为1.44MB。而硬盘将盘片与读写机构做成一体,用金属壳体封装。硬盘技术随着计算机技术的发展而朝着容量更大、体积更小、速度更快、性能更可靠、价格更便宜的方向不断发展,是计算机最主要的辅存装置。软盘由于读写速度慢、可靠性低、容量小,近年已被逐步淘汰。现在我们说磁盘,一般是指硬盘。,磁带,磁带是将磁性材料涂在塑料带基上形成的。按照磁带的宽度,一般分为4mm磁带、8mm磁带、四分之一英寸磁带、二分之一英寸磁带等。结构上,磁带用两个滚轮承接。当滚轮转动时,拉动磁带行走,就可以通过磁头来读写磁带上的数据了。如图38所示。,图38 磁带的机械结构示意图,光存储设备,光存储设备使用激光在特别的存储介质上读取和写入数据。存储介质被做成中间带孔的圆盘,故称为光盘。光盘表面是连续的由里至外的螺旋形轨迹。轨迹由不同长度的凹坑和平台组成,代表二进制数的0和1。当激光照射在轨迹上,凹坑和平台反射的光线的强弱不同。借此光存储设备可以识别出光盘上的数据。最开始出现的光盘是小型光盘CD(Compact Disc),用来存放高保真的数字立体声音乐。在音乐CD的基础上,陆续产生了用于计算机数据存储的只读光盘存储器CD-ROM、可刻录光盘CD-R、可重写光盘CD-RW。小型光盘标准容量只有650M,不能满足大容量信息存储的要求。工业界很快又推出了比CD容量大很多的数字多功能光碟DVD(Digital Versatile Disc)。,CD-ROM,CDROM盘的直径为120mm,厚度为1.2mm。中间有一个直径是15mm的圆孔。盘片外沿有一个1mm宽的无数据环,环绕中心孔的13.5mm内环也不存放数据。因此半径方向上可以存放数据的宽度只有38mm。在此宽度上,分布着中心距离为1.6m的螺旋轨迹。轨迹上刻上了反映数据编码的不同长度和间隔的凹坑。凹坑宽度为0.5m,深度约为0.12m。当用波长是780nm、光点直径为1m的激光照射盘片上的轨迹时,则有凹坑的地方因为坑底反射的光线比坑面反射的光线延迟了半个振动周期(这考虑了光盘材料的折射率为1.55),或者说相位相差180,这样这两股反射光相互抵消,就好象没有了反射。而没有凹坑的间隔地带,光线会有反射。这样,利用光电传感器就能够检出盘面上的凹坑与平台,解读出数据编码。,CD-R,为了能够让用户自行写入数据到CD-ROM盘片,以便作小规模的数据发布或者数据备份,在CD-ROM的基础上,出现了CD-R光盘。这种光盘可以供用户一次写入,多次读出。因此也叫WORM(Write-Once, Read-Many)盘。,CD-RW,CD-R只能写一次,不能满足用户希望多次擦写的需要。于是,通过改变CD-R上的有机染料层,业界又推出了可以多次擦写的光盘,CD-RW(CD Rewritable)。CD-RW与CD-R的制造过程十分相似。其不同点主要在: 使用银、锢、锑和碲的合金取代CD-R上的有机染料层。这种合金有两种稳定的状态,晶体态(透明)和无定型态(不透明),称为相变合金; 写数据时,驱动器使用高能激光束照射合金层,将它从晶体态转变成无定型态,降低其反射性。这样可以模拟CD-ROM盘片上的坑; 读数据时,采用低能量的激光束,与读取CD-ROM类似。低能量的激光束不会改变合金层的状态; 擦除数据时,使用中等能量的激光束,将合金从无定型态转变为晶体态。 CD-RW在容量、速度和格式方面与CD-ROM相同。写和擦除需要使用刻录光驱,读可以使用普通光驱。,DVD,由于一方面计算机需要存储的信息量的爆炸式增长,另一方面,人们对数字影音质量的要求不断提高,CD盘片650M的存储容量远远不能满足人们的需求。光存储界仿照CD的原理,重新定义了新的数字多功能光盘(DVD)的标准。 DVD的总容量有了很大的提高。 由于数据存储密度的提高,DVD的读取速度也相应得到了提高。其标准速度(1倍速)是1350KB/s。以第三代 DVD-ROM 读取速度都在四倍速以上计算,存取速度就有5.4MB/s,相当于CD-ROM的36倍速。,人机交互设备,每一台计算机都需要一些可以和操作者进行交流的设备。这些设备必须能够接受人的输入数据,并将人所需要的结果表现出来,供人阅读参考。这些人机交互设备和辅存储器一样,也属于输入/输出设备。最常见的人机交互设备有键盘、鼠标、显示器和打印机。,键盘,从原理上看,计算机键盘有两种。一种称为编码键盘,每按一个键,就通过键盘上的数字电路产生该键对应的一个编码;另一种称为非编码键盘。在键盘上安装了一个单片计算机,将键排列成行和列,单片机按照一定的规律不断扫描这些按键。当发现有键被按下,则确定其位置。然后根据位置用程序成生一个键盘编码,称为扫描码。这两种键盘的目的都是要根据操作者所按键产生一个键盘编码。编码键盘的优点是响应速度快,不需要单片机作为控制器件。但当键数增加时,编码键盘的设计很复杂。还有一个弱点是,编码键盘不便于扩展键盘功能。非编码键盘的优点是可以用程序扩展键盘功能,定义新的按键。现在我们所见的键盘都是非编码键盘。,键盘产生的扫描码通过连线送到计算机的键盘接口上。键盘接口是计算机主机板上的一部分电路。它每收到一个键盘扫描码,就会自动向CPU发出一个请求,请求CPU暂停目前的工作来处理新收到的键盘编码。CPU将当前正在进行的工作(即执行的程序)保存好后,转向处理键盘编码的工作(程序)。这个处理的结果是,键盘扫描码被CPU翻译成对应的ASCII编码,并存储在一个称为键盘缓冲区的内存块中。然后,计算机取出刚才被打断的工作,继续执行。计算机的这种工作方式,称为中断执行方式。,从操作者按键到该键对应的ASCII码被保存在键盘缓冲区,键盘的输入过程即告结束。对这些按键如何解释和处理,是其他程序的事情。例如,在文字处理程序的输入界面,按键被解释成输入的文字。在命令解释程序中,一连串的按键被解释成一个命令。这些程序在需要获得键盘输入时,会读取键盘缓冲区。每读取一个键盘码就从缓冲区清除一个,这样键盘缓冲区就不会被填满。当程序不需要按键输入时,操作人员如果不停按键,则有可能填满键盘缓冲区。这时计算机会发出响声表明键盘缓冲区出现了溢出。,鼠标,鼠标可以分为机械鼠标、光机鼠标和光电鼠标。机械鼠标用纯机械的方法将位移信号转换成电脉冲信号,精度低,可靠性差,容易磨损,现在已经被淘汰。光机鼠标是在机械式鼠标中采用光栅信号传感器产生位移脉冲信号,提高了灵敏度。我们今天所见的“机械鼠标”都是光机式的。光电鼠标则完全采用光电元件实现位移信号的转换,精度高,使用寿命长。,显示器,显示器是计算机的标准输出设备。它从计算机的显示控制卡或者叫图形卡、图形适配器等获得图像信号,然后还原成图像供操作员观看。显示控制卡输出的显示信号分为数字和模拟两种。模拟信号是将一幅图像上用红、绿、兰三基色表示的每一点的颜色信号,用一定频率的载波进行调制后得到的。较早的显示器只能接受模拟信号。而数字信号类似于位图编码,用二进制数表示每一个点的颜色值。现在很多显示器可以直接接受DVI标准的数字信号。一般数字信号可以获得更加准确和稳定的图像还原。但由于显示器技术的进步,模拟信号和数字信号二者的效果差别已经可以忽略。,显示控制卡是一块相对独立的电路板,当然也可以把它集成到主板上,带有自己的微处理器和信号处理电路。它的功能是根据计算机内存空间中一个特定区域称为显示内存的内容,产生传送给显示器的图像信号。从程序员的角度看,要设定或改变显示器的显示结果,只需改变显示内存中的内容。其他的事情分别由显示控制卡和显示器自动完成,不需要我们关心。 将显示控制卡输出的图像信号还原成图像有不同的方式。历史上最先采用并沿用至今的是阴极射线管(CRT)显示器。现在更加流行的是液晶显示器(LCD)和等离子体显示器。后二种显示器是平板式的,比阴极射线管体积小很多,正在逐步取代CRT显示器。,打印机,打印机和显示器类似,从计算机获得图像或者文字信息后,将信息复现在纸上,供人阅读、保存或者分发。因此打印机也是最常见和重要的计算机输出设备。 与显示器需要连接到专门的显示控制卡(电路接口)不同,打印机通常使用计算机的标准通信接口,如RS232串口、并行输出口、USB口等。计算机只需要将打印内容转换成所使用打印机能够识别的数据格式,并将数据传送到连接打印机的标准接口即可完成打印。打印机从接口获得这些数据后,将数据转换为控制打印机的着色机构的电信号,将数据或者图文复现在纸上。 根据所使用的着色原理,打印机可以分为针式、喷墨式、激光式、热敏式、热转移式等多种。,子系统的内部连接CPU和主存的连接,CPU和主存之间通常由称为总线(bus)的三组线路连接。他们分别是数据总线、地址总线和控制总线。 数据总线:数据总线由多根导线组成。每一根线上每次传送二进制数的一位。导线的数量取决于计算机字(word)的长度。例如,如果计算机字长是32位,则数据总线需要32根导线,以便同一时间可以传送一个字长的信息。数据总线传送的是要处理的数据。 地址总线:地址总线传送的是主存中的某个字的地址。地址总线的导线数量取决于存储空间的大小。如果存储空间为2n字,则地址总线一次需要传送n位地址数据,因此需要n根导线。 控制总线:控制总线负责在CPU和主存之间传送控制信息。例如,每次访问主存时,必须有一个控制代码从CPU发送到主存,用于指示是进行读操作还是写操作。控制总线的导线数量取决于计算机所需要的控制命令的总数。如果计算机有2m条控制指令,则控制指令的编码长度为m位,因为m位可以定义2m个不同的操作。相应的,控制总线的导线数必须为m条。,输入/输出设备的连接,输入/输出设备不能直接与CPU和主存的总线相连。因为输入/输出设备的本质与CPU和主存的本质不同。输入/输出设备都是些机电、磁性或光学设备,而CPU和主存是电子设备。与CPU和主存相比,输入输出设备的操作速度要慢很多。因此要有中介来处理这种差异。输入输出设备是通过一种被称为输入输出控制器或接口的器件连接到总线上的。 现在比较常见的输入输出控制器有小型计算机系统接口(SCSI)、火线(IEEE 1394接口)和通用串行总线(USB)。,程序执行过程,现在的通用计算机都是使用程序完成数据处理或者控制的任务。所谓程序,就是一系列对计算机进行控制的指令的集合。这一节,我们基于计算机硬件基础知识,对计算机程序的执行过程作原理性说明。,时钟周期、机器周期与指令周期,数字电子计算机的中央处理单元(CPU),是由数字电路实现的。数字电路在工作时,需要统一的时钟脉冲来控制各部分电路的步调,使之协调地一个节拍一个节拍地工作。时钟脉冲的周期,就是时钟周期,其倒数就是我们常常说的CPU的主频。 CPU完成一个最基本的内部操作所用的时间,称为机器周期。例如从指定内存单元中取出一条指令,放在指令寄存器中,称为取指。与取指对应的机器周期,称为取指周期。每一个机器周期,根据其复杂程度不同,包含不同数量的(一般为3到6个)时钟周期。,CPU执行一条指令所需要的时间,称为指令周期。一个指令周期,由一个或者多个机器周期构成。指令越复杂,需要的机器周期数越多。 一个指令周期至少要包含以下三个步骤: 取指令 在取指阶段,控制单元命令系统将程序计数器所指向的内存中的指令复制到CPU的指令寄存器中。复制完成后,程序计数器自动加1指向下一条指令。 译码 当把指令置于指令寄存器后,该指令由控制单元进行译码。指令译码的结果是产生系统可以执行的操作代码。 执行 指令译码完成后,控制单元发出一系列控制信号到CPU的各部件,使之执行规定的动作。,1.3 计算机软件,软件的定义,冯诺依曼原理告诉我们,计算机中必须存储程序才能工作。实际上,早期的非冯诺依曼计算机也需要通过对一系列开关的开闭和配线的改变来编程。这就是说,离开了控制计算机工作的指令序列程序,计算机什么事情也做不了。程序实际上是计算机的组成部分。开始,人们将计算机中存储的程序和数据结构统称为软件,以对应组成计算机的物理器件的集合硬件。但随着软件技术和计算机应用的发展,软件的含义有了扩展。今天,软件内涵至少包括三个方面:(1)控制计算机工作,并使硬件功能得到充分发挥的指令集合程序;(2)使程序高效率、正确运行的数据结构;(3)说明程序如何使用和操作的技术文档。也就是说,软件并不完全等同于计算机程序。,软件与硬件的关系,硬件和软件可以看成计算机的两个方面,就像一枚硬币的正反面。计算机的软件和硬件是相互依赖、缺一不可的。没有软件,硬件不能发挥作用;没有硬件,软件是无法存在的。 另一方面,硬件和软件在某种意义上是可以相互转化的。例如,实现某些处理功能的程序逻辑,也可以使用数字电路实现。有些用硬件实现的逻辑,用软件实现也很方便。软件与硬件相互转化的例子,在数字信号处理、数据编码/解码方面很常见。同样的逻辑使用软件实现的速度没有用硬件快,但软件可以修改,具有弹性。另外,用硬件实现往往需要专门的数字信号处理芯片,会增加机器的成本。 软件和硬件相互转化是有条件的。理解这一点,不要误认为任何软件都可以转化为硬件,或者任何硬件都能转化为软件。,软件的种类,一般将计算机的软件从性质上分为系统软件和应用软件两大类。系统软件是计算机中最基本的程序及相关数据
展开阅读全文