1.1计算机概论 1.1.1计算机的发展概况 1946年2月,世界公认的第一台通用电子数字计算机在美国宾夕法尼亚大学诞生,取名为ENIAC(埃尼阿克)(Electronic Numerical Integrator And Calculator,电子数字积分计算机),其主要元件为电子管、继电器等。它的诞生标志着一种全新的信息处理工具的出现。在推动计算机发展的众多因素中,电子元器件的发展起着决定性的作用。计算机是指能够自动、快速、准确地进行信息处理的电子工具。 1. 计算机的发展 计算机的发展像任何新生事物一样,也经历了一个不断完善的过程。根据计算机所采用的物理器件的不同,一般将电子计算机的发展划分为以下几个时代。 第一代计算机采用电子管作为逻辑元件。程序设计主要使用机器指令或符号指令,其应用领域主要是科学计算和军事。 第二代计算机用晶体管代替了电子管,主存储器均采用磁芯存储器,磁鼓和磁盘开始用作主要的外存储器,这段时期约从1959—1965年,是电子元件的晶体管时代。程序设计使用了更接近于人类自然语言的高级程序设计语言,计算机的应用领域也从科学计算扩展到了事务处理、工程设计等多个方面。与第一代相比,第二代计算机的体积变小、速度变快、价格变低、功能和可靠性增加。 第三代计算机采用中小规模的集成电路块代替了晶体管等分立元件,半导体存储器逐步取代了磁芯存储器的主存储器地位,磁盘成了不可缺少的辅助存储器,计算机进入了产品标准化、模块化和系列化的发展时期,这段时期从1965—1971年,是电子元器件的集成电路的中小规模时代。在计算机软件方面,出现了操作系统和会话式语言。计算机的管理、使用方式由手工操作完全改变为自动管理,使计算机的使用效率显著提高。这时期的计算机运算速度可以达到每秒几十万次,开始广泛地应用到各种领域。 第四代计算机出现时间为1971年至今,这是电子元件快速发展的时期,是电子元件的大规模集成电路时代。1971年,英特尔公司推出了世界上第一款微处理器4004,这是第一个可用于微型计算机的四位微处理器,它包含2300个晶体管。随后英特尔又推出了8008,由于运算性能很差,其市场反应十分不理想。1974年,8008发展成8080,成为第二代微处理器。8080作为代替电子逻辑电路的器件被用于各种应用电路和设备中,如果没有微处理器,这些应用就无法实现。Zilog公司生产了8080的增强型Z80,摩托罗拉公司生产了6800,英特尔公司于1976年又生产了增强型8085,但这些芯片基本没有改变8080的基本特点,都属于第二代微处理器。它们均采用NMOS工艺,集成度约9000只晶体管,平均指令执行时间为1μs~2μs,采用汇编语言、BASIC和FORTRAN编程,使用单用户操作系统。 2. 计算机的分类 (1) 按信息的形式和处理方式可分为模拟计算机和数字计算机两大类。  模拟计算机: 参与运算的数值由不间断的连续量表示,其运算过程是连续的。模拟计算机由于受元器件质量影响,其计算精度较低,应用范围较窄,目前已很少生产。  数字计算机: 参与运算的数值用断续的数字量表示,其运算过程按数字位进行计算。数字计算机由于具有逻辑判断等功能,是以近似人类大脑的“思维”方式进行工作,所以又被称为“电脑”。 (2) 按用途又可分为专用计算机和通用计算机。  专用计算机: 针对某类问题能显示出最有效、最快速和最经济的特性,但它的适应性较差,不适于其他方面的应用。我们在导弹和火箭上使用的计算机很大部分就是专用计算机。这些东西就是再先进,也不能用它来玩游戏。  通用计算机: 适应性很强,应用面很广,但其运行效率、速度和经济性依据不同的应用对象会受到不同程度的影响。 (3) 按计算机系统的规模分为巨型机、大型机、小型机、微型计算机和工作站5大类。  巨型机: 运行速度快,存储容量大,结构复杂,造价昂贵,主要用于尖端科学研究领域。例如我国制造的银河机等,能同时控制上百台计算机。  大型机: 规模仅次于巨型机,有比较完善的指令系统和丰富的外部设备,主要用于计算机网络。  小型机: 造价比大型机的成本低,维护也比较容易,用途广泛,可用于科学计算和数据处理。  工作站: 是介于微型机和小型机之间的一种高档微型机。通常配有高分辨率的大屏幕显示器和大容量的内、外存储器,具有较强的数据处理能力和图形处理能力。在网络环境下,任何一台微型计算机或终端都可以称为一个工作站,它是网络中的一个用户结点,与我们在计算机分类中的工作站用词相同,但含义不同。  微型计算机: 简称“微机”,是人们常见的计算机。微型计算机已经走入千家万户,其运用最广泛,造价最便宜,受到很多人士的喜爱。 1.1.2计算机的特点和用途 1. 计算机的特点 计算机是一种可以进行自动控制、具有记忆功能的现代化计算工具和信息处理工具。它有以下5个方面的特点。 1) 运算速度快 电子计算机的工作基于电子脉冲电路原理,由电子线路构成其各个功能部件,其中电场的传播扮演主要角色。我们知道,电磁场传播的速度是很快的,现在高性能计算机每秒的运算速度已由早期的每秒几千次发展到现在的最高可达每秒几千亿次乃至万亿次。这样的运算速度是何等的惊人。如果一个人在一秒钟内能作一次运算,那么一般的电子计算机一小时的工作量,一个人得做100多年。很多场合下,运算速度起决定作用。例如,计算机控制导航,要求“运算速度比飞机飞的还快”; 气象预报要分析大量资料,如用手工计算需要十天半月,失去了预报的意义。计算机如此高的运算速度是其他任何计算工具无法比拟的,它使得过去需要几年甚至几十年才能完成的复杂运算任务,现在只需几天、几小时、甚至更短的时间就可完成。这正是计算机被广泛使用的主要原因之一。 运算速度是计算机的一个重要性能指标。计算机的运算速度通常用每秒钟执行定点加法的次数或平均每秒钟执行指令的条数来衡量。 2) 计算精度高 一般来说,现在的计算机有几十位有效数字,而且理论上还可更高。因为数在计算机内部是用二进制数编码的,数的精度主要由这个数的二进制码的位数决定,可以通过增加数的二进制位数来提高精度,位数越多精度就越高。 圆周率的计算从古至今,有一千多年的历史了,我国古代数学家祖冲之只算得π值为小数点后8位,德国人鲁道夫用了一生的精力把π值精确到35位。法国的谢克斯花了15年时间,把π值算到了707位,此后再没有人能胜过他了。可第一台电子计算机只用了70小时,就把π值精确到2035位,并且只用了40秒钟就发现了谢克斯计算的π值在第528位上出了错。当然,528位以后也就全都错了。现在,电子计算机已把π值算到10亿位以上。有意义的是,π值仍然没有出现循环,若人类以后发现了其中的奥秘,应该也有电子计算机的一份功劳。 3) 记忆力强 计算机的存储器类似于人的大脑,可以“记忆”(存储)大量的数据和计算机程序而不丢失。例如,它可存储数字、文字、图像和声音等各种信息,记忆力大得惊人,可轻易地“记住”一个大型图书馆的所有资料,而且还可以把中间结果存储起来,供以后使用。 4) 具有逻辑判断能力 人是有思维能力的。思维能力本质上是一种逻辑判断能力,也可以说是因果关系分析能力。计算机也具有逻辑判断能力,在程序的执行过程中,它会根据上一步的执行结果,运用逻辑判断方法自动确定下一步的执行命令。正是因为计算机具有这种逻辑判断能力,使得计算机不仅能解决数值计算问题,而且能解决非数值计算问题,如信息检索、图像识别等。 5) 可靠性高、通用性强 由于采用了大规模和超大规模集成电路,现在的计算机具有非常高的可靠性。现代计算机不仅可以用于数值计算,还可以用于数据处理、工业控制、辅助设计、辅助制造和办公自动化等,具有很强的通用性。 2. 计算机的用途 由于计算机有运算速度快、计算精度高、记忆能力强、可靠性高和通用性强等一系列特点,使计算机几乎进入了一切领域,它服务于科研、生产、交通、商业、国防和卫生等各个领域。可以预见,其应用领域还将进一步扩大。计算机的主要用途如下。 1) 数值计算 主要指计算机用于完成和解决科学研究及工程技术中的数学计算问题。计算机具有计算速度快、精度高的特点,在数值计算等领域里刚好是计算机施展才能的地方,尤其是一些十分庞大而复杂的科学计算,靠其他计算工具有时简直是无法解决的。如天气预报,不但复杂且时间性要求很强,不提前发布就失去了预报天气的意义。用解气象方程式的方法预测气象变化准确度高,但计算量相当大,所以只有借助于计算机,才能更及时、准确地完成这样的工作。 2) 数据及事务处理 所谓数据及事务处理,泛指非科技方面的数据管理和计算处理。其主要特点是,要处理的原始数据量大,而算术运算较简单,并有大量的逻辑运算和判断,结果常要求以表格或图形等形式存储或输出。如银行日常账务管理、股票交易管理和图书资料的检索等,面对巨量的信息,如果不用计算机处理,仍采用传统的人工方法是难以胜任的。事实上,计算机在非数值方面的应用已经远远超过了在数值计算方面的应用。 3) 自动控制与人工智能 由于计算机不但计算速度快且又有逻辑判断能力,所以可广泛用于自动控制。实时控制是指及时搜集检测数据,按最佳值对事物进程的调节控制,如工业生产的自动控制。利用计算机进行实时控制,既可提高自动化水平,保证产品质量,也可降低成本,减轻劳动强度。 计算机有记忆能力,又擅长进行逻辑推理运算,因此计算机可以模仿人的思维,让计算机具有一定的学习和推理功能,能够自己积累知识,并且独立解决问题,这就是计算机的人工智能。随着智能机器人的研制成功,它可以代替人完成不宜由人来进行的工作。预计21世纪,人工智能的研究目标是使计算机更好地模拟人的思维活动,那时的计算机将可以完成更复杂的控制任务。 4) 计算机辅助设计、辅助制造和辅助教育 计算机辅助设计(CAD)和计算机辅助制造(Computer Aided Manufacturing,CAM)为设计、制造工作自动化提供了广阔的前景,受到了普遍的重视。利用计算机的制图功能,实现各种工程的设计工作,称为计算机辅助设计。 如桥梁设计、船舶、飞机、集成电路、计算机和服装等的设计。目前,在电子、机械、造船、航空、建筑、化工和电器等方面可以利用带有计算机的机器人进行部分的制造工作,这样可以提高设计质量,缩短设计和生产周期,提高自动化水平。 计算机辅助教学(Computer Aided Instruction,CAI)是利用计算机的功能程序把教学内容变成软件,使得学生可以在计算机上学习,使教学内容更加多样化、形象化,以取得更好的教学效果。 5) 通信与网络 随着信息化社会的发展,通信业也发展迅速,计算机在通信领域的作用越来越大,特别是计算机网络的迅速发展。目前遍布全球的因特网(Internet)已把地球上的大多数国家联系在一起,加之现在适应不同程度、不同专业的教学辅助软件不断涌现,利用计算机辅助教学和利用计算机网络在家里学习代替去学校、课堂这种传统教学方式已经在许多国家变成现实,如我们国家许多大学开设的网络远程教育等。 除此之外,计算机在电子商务、电子政务等应用领域也得到了快速的发展。同时还可以使用多媒体计算机进行娱乐活动,如看电视、看VCD、听音乐、玩游戏、在网上和朋友聊天等。 1.1.3计算机的工作原理 半个世纪以来,计算机已发展成为一个庞大的家族,尽管各种类型的计算机在性能、结构和应用等方面存在着差别,但是它们的基本组成结构却是相同的。现在人们所使用的计算机硬件系统的结构一直沿用了由美籍 匈牙利著名数学家冯·诺依曼提出的模型,它由运算器、控制器、存储器、输入设备和输出设备5大功能部件组成。 1. 存储程序控制原理 冯·诺依曼原理电子计算机采用了“存储程序控制”原理。这一原理是1946年由美籍匈牙利数学家冯·诺依曼提出的,所以又称为“冯·诺依曼原理”。这一原理在计算机的发展过程中始终发挥着重要影响,确立了现代计算机的基本组成和工作方式。直到现在,各类计算机的工作原理还是采用冯·诺依曼原理思想。冯·诺依曼原理的核心是“存储程序控制”。“存储程序控制”原理的基本内容如下。 (1) 采用二进制形式表示数据和指令。 (2) 将程序(数据和指令序列)预先存放在主存储器中,使计算机在工作时能够自动高速地从存储器中取出指令,并加以执行。 (3) 由运算器、存储器、控制器、输入设备和输出设备5大基本部件组成计算机系统,并规定了这5大部件的基本功能。冯·诺依曼思想实际上是电子计算机设计的基本思想,奠定了现代电子计算机的基本结构,开创了程序设计的时代。 2. 计算机的构成原理 图11是一个计算机的典型结构图,程序运行过程如下。 图11计算机构成原理图 (1) 将程序和数据通过输入设备送入存储器。 (2) 启动运行后,计算机从存储器中取出程序指令送到控制器去识别,分析该指令要求什么事。 (3) 控制器根据指令的含义发出相应的命令(如加法、减法),将存储单元中存放的操作数据取出送往运算器进行运算,再把运算结果送回存储器指定的单元中。 (4) 当运算任务完成后,就可以根据指令将结果通过输出设备输出。 1.2计算机常用的数制及编码 1. 计算机常用的数制 数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。编码是采用少量的基本符号,选用一定的组合原则,以表示大量复杂多样的信息的技术。计算机是信息处理的工具,任何信息必须转换成二进制形式数据后才能由计算机进行处理、存储和传输。 按进位的原则进行计数的方法,称为进位计数制。例如,在十进位计数制中,是按照“逢十进一”的原则进行计数的。 常用进位计数制有十进制(Decimal Notation)、二进制(Binary Notation)、八进制(Octal Notation)和十六进制(Hexadecimal Notation)。 2. 计算机中常用的编码 所谓字符编码就是规定用怎样的二进制编码来表示文字和符号。字符编码主要有以下几种: BCD码(二十进制码)、ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码)和汉字编码。 1) BCD码 把十进制数的每一位分别写成二进制数形式的编码,称为二十进制编码或BCD编码。BCD编码方法很多,但常用的是8421编码。它采用四位二进制数表示一位十进制数,即每一位十进制数用四位二进制表示。这四位二进制数各位权由高到低分别是23、22、21、20,即8、4、2、1。这种编码最自然,最简单,且书写方便、直观、易于识别。如十进制数1998的8421码为0001 1001 1001 1000。 2) ASCII码 计算机中,对非数值的文字和其他符号进行处理时,要对文字和符号进行数字化转换,即用二进制编码来表示文字和符号。字符编码(Character Code)是用二进制编码来表示字母、数字及专门符号。在计算机系统中,有两种重要的字符编码方式: ASCII和EBCDIC。计算机中普遍采用的ASCII 码主要用于微型机与小型机; EBCDIC码(扩展的二十进制交换码)是西文字符的另一种编码,采用8位二进制表示,共有256种不同的编码,可表示256个字符,主要用于IBM的大型机。下面简要介绍ASCII码。 ASCII码有7位版本和8位版本两种,国际上通用的是7位版本,7位版本的ASCII码有128个元素,只需用7个二进制位(27=128)表示,其中控制字符34个,阿拉伯数字10个,大小写英文字母52个,各种标点符号和运算符号32个。在计算机中实际用8位表示一个字符,这时最高位取0。例如,数字0的ASCII码为(48)10,二进制为(01001000)2,大写英文字母A的ASCII码为65,空格的ASCII码为32等。当然,ASCII的最高位也可用作奇偶检验或进行扩展。常用的7位版本ASCII码表如表11所示。 表11ASCII码表 H L 0000 0001 0010 0011 0100 0101 0110 0111 0000 NUL DLE SP 0 @ P ‘ p 0001 SOH DC1 ! 1 A Q a q 0010 STX DC2 “ 2 B R b r 续表 H L 0000 0001 0010 0011 0100 0101 0110 0111 0011 ETX DC3 # 3 C S c s 0100 EOT DC4 $ 4 D T d t 0101 ENQ NAK % 5 E U e u 0110 ACK SYN & 6 F V f v 0111 BEL ETB , 7 G W g w 1000 BS CAN ) 8 H X h x 1001 HT EM ( 9 I Y i y 1010 LF SUB * : J Z j z 1011 VT ESC + ; K [ k { 1100 FF FS ’ < L \ l | 1101 CR GS  = M ] m } 1110 SO RS . > N 䥺SymbolYCp n ~ 1111 SI US / ? O - o DEL 3) 汉字编码 西文是拼音文字,基本符号比较少,编码比较容易,因此,在一个计算机系统中,输入、内部处理、存储和输出都可以使用同一代码。汉字种类繁多,编码比拼音文字困难,因此在不同的场合要使用不同的编码。通常有输入码、国标码、机内码和字形码4种类型的编码。 输入码所解决的问题是如何使用西文标准键盘把汉字输入到计算机内的编码,是外码。根据不同的编码方式,输入码主要可以分为三类: 数字编码、拼音编码和字编型码。 (1) 数字编码。就是用数字串代表一个汉字,常用的是国标区位码。它将国家标准局公布的6763个两级汉字分成94个区,每个区分94位。实际上是把汉字表示成二维数组,区码、位码各用两位十进制数表示,输入一个汉字需要按4次键。数字编码是唯一的,但很难记住。比如“中”字,它的区位码以十进制表示为5448(54是区码,48是位码),以十六进制表示为3630(36是区码,30是位码)。 (2) 拼音编码。是以汉字读音为基础的输入方法。由于汉字同音字太多,重码率较高,输入后一般要进行选择,影响了输入速度。 (3) 字型编码。是以汉字的形状确定的编码,即按汉字的笔画部件用字母或数字进行编码。如五笔字型、表形码,便属此类编码,其难点在于如何拆分一个汉字。 国标码是指我国1981年公布的“中华人民共和国国家标准信息交换汉字编码”,代号为GB 2312—80。用连续的两个字节来表示一个汉字,每个字节的最高位均为0,因此可以表示的汉字数为214=16384个。将汉字区位码的高位字节、低位字节各加十进制数32(即十六进制数的20),便得到国标码,在国标码中共收录汉字和图形符号7445个。国标码本身也是一种汉字输入码,通常称为区位输入法。一级常用汉字3755个,按汉语拼音字母排序;二级常用字3008个,按部首排列。 国标码是汉字信息交换的标准编码,但因其前后字节的最高位为0,与ASCII码发生冲突。如“保”字,国标码为31H和23H,而西文字符1和#的ASCII也为31H和23H,现假如内存中有两个字节为31H和23H,这到底是一个汉字,还是两个西文字符1和#?于是就出现了二义性,显然,国标码是不可能在计算机内部直接采用的,因此就出现了汉字机内码。 汉字机内码采用变形国标码,其变换方法为: 将国标码的每个字节都加上128,即将两个字节的最高位由0改为1,其余7位不变,就成为机内码。 图12编码关系示意图 汉字机内码和汉字存在着一一对应的关系。同一个汉字,在同一种汉字操作系统中,内码是相同的。正是由于机内码的存在,输入汉字时就允许用户根据自己的习惯使用不同的汉字输入法,如五笔字型、自然码和智能拼音等,进入系统后再统一转换成机内码存储。 表示汉字字形的字模数据,也称为字模码,是汉字的输出形式。通常用点阵、矢量函数等表示。用点阵表示时,字形码指的就是这个汉字字形点阵的代码。根据输出汉字的要求不同,点阵的多少也不同。 这几种汉字编码之间的关系可以用图12所示的示意图来表示。 1.2.1进位计数制及其之间的转换 1. 进位计数制的基数和位权 “基数”和“位权”是进位计数制的两个要素。 (1) 基数: 就是进位计数制的每位数上可能有的数码的个数。例如,十进制数每位上的数码有0、1、2、…、9这10个数码,所以基数为10。 (2) 位权: 是指一个数值的每一位上数字的权值大小。例如,十进制数4567从低位到高位的位权分别为100、101、102、103。因为: 4567=4×103+5×102+6×101+7×100 (3) 数的位权表示: 任何一种数制的数都可以表示成按位权展开的多项式之和。例如,十进制数的435.05可表示为: 425.05=4×102+2×101+5×100+0×10-1+5×10-2 位权表示法的特点是: 每一项=某位上的数字×基数的若干幂次,而幂次的大小由该数字所在的位置决定。 2. 二进制数 计算机中之所以采用二进制,是因为二进制运算简单、电路简单可靠、逻辑性强。 二进制数是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。二进制数也是采用位置计数法,其位权是以2为底的幂。其特点是每个数的数位上只能是0或1两个数字。二进制数中最大的数字是1,最小的数字是0,基数为2。如10011010与00101011是两个二进制数。一个二进制数也可以按照位权展开。如(1101.101)2可以展开成下面的表达式: (1101.101)2=1×23+1×22+0×21+1×20+1×2-1+0×2-2+1×2-3 二进制数的算术运算基本规律和十进制数的运算十分相似。最常用的是加法运算和乘法运算。 加法运算: 0+0=0 1+1=10 0+1=1+0=1 乘法运算: 0×0=0 1×1=1 0×1=1×0=0 3. 八进制数 按“逢八进一”的原则进行计数,称为八进制数,即每位上计满8时向高位进一。八进制数的特点是每个数的数位上只能是0、1、2、3、4、5、6、7这8个数字。八进制数中最大数字是7,最小数字是0,基数为8。如(1347)8与(62435)8是两个八进制数。八进制数的位权表示如下: (705.12)8=7×82+0×81+5×80+1×8-1+2×8-2 4. 十六进制数 按“逢十六进一”的原则进行计数,称为十六进制数,即每位上计满16时向高位进一。十六进制数的特点是每个数的数位上只能是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F这16个数码。十六进制数中最大数字是F,即15,最小数字是0,基数为16。如(109)16与(2FDE)16是两个十六进制数。十六进制数的位权表示如下: (109.13)16=1×162+0×161+9×160+1×16-1+3×16-2 (2FDE)16=2×163+15×162+13×161+14×160 5. 常用计数制间的对应关系(见表12) 表12计算机数值关系 十进制 二进制 八进制 十六进制 0 0 0 0 1 1 1 1 2 10 2 2 4 100 4 4 8 1000 10 8 10 1010 12 A 15 1111 17 F 16 10000 20 10 6. 各数制之间的转换 1) 十进制数转换成非十进制数 将数由一种数制转换成另一种数制称为数制间的转换。我们日常生活中经常使用的是十进制数,而在计算机中采用的是二进制数。所以在使用计算机时就必须把输入的十进制数换算成计算机所能够接受的二进制数。计算机在运行结束后,再把二进制数换算成人们所习惯的十进制数输出。这两个换算过程完全由计算机自动完成。 图13十进制和二进制的转换 转换方法如下。 十进制整数化为二进制整数采用“余数法”,即把被转换的十进制整数反复地除以2,直到商为0,所得的余数(从高位往低位读)就是该数的二进制表示。依此类推,十进制数转换成八进制、十六进制的方法分别为:“除以8取余数”、“除以16取余数”。 十进制小数转换成二进制小数的方法则不同,要将十进制小数连续乘以2,选取进位整数,直到满足精度要求为止。简称“乘以2取整法”。同理,十进制小数转换成八进制、十六进制一样,分别采用“乘以8取整法”、“乘以16取整法”。下面以一个十进制数为例来说明转换过程。将十进制数(123.625)10转换成二进制数的过程如下: 转换时,分整数部分和小数部分分别进行转换。整数为(123)10,采用除2取余法,如图13所示。 所以(123)10=(1111011)2。 十进制数的小数部分为0.625,转换成二进制小数时,采用乘2取整法,具体实现过程如图14所示。 所以(0.625)10=(0.101)2。 (高位) (低位) 0.625 ×2 第一位小数→1 (十分位) 250 ×2 第二位小数→0 (百分位) 500 ×2 第三位小数→1 (千分位) 000 图14十进制和二进制的转换 2) 非十进制数转换成十进制数 非十进制数转换成十进制数采用“位权法”,即把各非十进制数按位权展开,然后求和。例如: (11010)2=1×24+1×23+0×22+1×21+1×20=(26)10 (273)8=2×82+7×81+3×80=(187)10 (7AF)16=7×162+10×161+15×160=(1867)10 3) 二进制数与八进制、十六进制数之间的转换 把二进制数转换为八进制数时,按“三位并一位”的方法进行。以小数点为界,将整数部分从右向左每三位一组,最高位不足三位时,添0补足三位; 小数部分从左向右,每三位一组,最低有效位不足三位时,添0补足三位。然后,将各组的三位二进制数按权展开后相加,得到一位八进制数。 相反,将八进制数转换成二进制数时,采用“一位拆三位”的方法进行。即把八进制数每位上的数用相应的三位二进制数表示。 (10110101110.11011)2转换成八进制的方法如下: 以小数点为分界线,整数部分从右向左,每三位为一组分割为011、101、110,最高位不足三位,添一个0,为010。然后,每一个三位的二进制数按位权展开,计算得到的值就是对应的八进制数字。最后,把它们连起来就是所得结果。即: (010)2=(2)8(110)2=(6)8 (101)2=(5)8(110)2=(6)8 所以(10110101110)2=(2656)8,小数部分则从右向左每三位为一组分割,低位不足三位的以0补足,即110、110。按位权展开,结果为(0.11011)2=(0.66)8。把小数部分和整数部分合起来,最终转换的结果为(10110101110.11011)2=(2656.66)8。 八进制数转换成二进制数则刚好相反,每一位的八进制数转换成三位二进制数即可; 十六进制数转换成二进制数时,每一位十六进制数转换成四位的二进制数。 1.2.2计算机的三种码制 计算机中参与运算的数有正负之分,计算机中数的正负号也是用二进制表示的。用二进制数表示符号的数称为机器码。常用的机器码有原码、反码和补码。 数值有正负之分,计算机就用一个数的最高位存放符号,最高位为0,表示这个数是一个正数; 为1则为负数。这就是机器数的原码。设机器能处理的位数为8。即字长为1byte,原码能表示数值的范围为(-127~127),共256个。有了数值的表示方法就可以对数进行算术运算。但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题。如下,假设字长为8位。 (1)10-(1)10=(1)10+(-1)10=(0)10 (00000001)原+(10000001)原=(10000010)原=(-2),结果显然不正确。两个整数用原码表示进行加法运算时,是没有问题的。上面的问题出现在带符号位的负数身上,所以对非负整数相加如果采用原码表示的话结果是不正确的。于是就出现了反码,一个负数用原码表示后,对除符号位外的其余各位逐位取反就产生了反码,正数的反码是它本身。下面是反码的减法运算: (1)10-(1)10=(1)10+(-1)10=(0)10 (00000001)反+(11111110)反=(11111111)反=(-0)有问题,因为没有-0这种说法。 (1)10-(2)10=(1)10+(-2)10=(-1)10 (00000001)反+(11111101)反=(11111110)反=(-1),计算结果正确,问题出现在(+0)和(-0)上,在人们的计算概念中,0是没有正负之分的。在上面的计算中,却出现了-0,于是人们引入了补码的概念。负数的补码就是在反码的基础上加1,而正数不变,正数的原码、反码和补码是一样的。有了补码的概念后,再用补码进行上面的运算: (1)10-(1)10=(1)10+(-1)10=(0)10 (00000001)补+(11111111)补=(00000000)补=(0),结果正确。 (1)10-(2)10=(1)10+(-2)10=(-1)10 (00000001)补+(11111110)补=(11111111)补=(-1),结果正确。所以补码的设计目的如下。 (1) 使符号位能与有效值部分一起参加运算,从而简化运算规则。 (2) 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。 下面再对原码、反码和补码的有关内容做个总结。 (1) 在计算机系统中,数值一律用补码来表示(存储)。 (2) 使用补码的主要原因: 可以将符号位和其他位统一处理; 同时,减法也可按加法来处理。另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 (3) 原码: 一个整数,按照绝对值大小转换成的二进制数,称为原码。 (4) 反码: 将二进制数按位取反,所得的新二进制数称为原二进制数的反码。 (5) 补码: 反码加1称为补码。 (6) 正数的原码、反码和补码是一致的,而只有负数才进行转换。 1.2.3定点数和浮点数 1. 基本概念 计算机中的数据包括数值型数据和非数值型数据两大类,它们在计算机中一律以二进制形式存放。前者可以参加算术运算,后者不参与算术运算,本节只讨论数值型数据。 在计算机内部,二进制位(bit,b)是数据的最小单位。通常将8位二进制位编在一起进行处理,称为一个字节(Byte,B),字节是计算机中信息存储和管理的基本单位。计算机的存储器容量也用字节(B)来计算和表示。 在数学中,一个数的长度没有限制,但为了能够用有限的空间存储,任何数据在计算机中都有事先规定的长度限制,同一类型的数据使用同样的数据长度。例如,计算机中的一个整数通常占用两个字节存储。因此,超过范围的数据不能存储在有限的空间中,可能产生数据“丢失”,不足的数据则用0进行填充。可见,数的存储长度与数的实际长度(二进制位数)无关。 在计算机中,数的符号用最高位来表示,并约定: 0代表正数,1代表负数。 为了节省内存,计算机中数值型数据的小数点的位置是隐含的,且小数点的位置既可以是固定的,也可以是变化的。如果小数点的位置事先已有约定,不再改变,此类数称为“定点数”。相比之下,如果小数点的位置可变,则称为“浮点数”。在计算机中,通常是用定点数来表示整数和纯小数,分别称为定点整数和定点小数。对于既有整数部分、又有小数部分的数,一般用浮点数表示。 2. 定点数 在计算机中没有专门表示小数点的位,小数点的位置是约定默认的。一般固定在机器数的最低位之后,或是固定在符号位之后。前者称为定点纯整数,后者称为定点纯小数。例如,用8位原码表示定点整数(100)10,(100)10=(1100100)2,定点整数表示如图15所示。 对于纯小数,小数点约定在符号位的后面。如用8位原码表示定点纯小数(-0.6875)10=(-0.1011)2,定点纯小数表示如图16所示。 图15定点整数表示 图16定点纯小数表示 定点数表示法简单直观,但是数值表示的范围太小,运算时容易产生溢出。 3. 浮点数 浮点数是小数点的位置可以变动的数。为增大数值表示范围,防止溢出,采用浮点数表示法。浮点表示法类似于十进制中的科学计数法。 在计算机中进行存储时,一个浮点数所占用的存储空间被划分为两部分,分别存放尾数和阶码。尾数部分通常使用补码或原码定点小数方式,阶码则采用补码定点整数方式。尾数的长度影响该数的精度,而阶码则决定该数的表示范围。为保证不损失有效数字,对尾数进行规格化处理,也就是平时所说的科学计数法,即保证尾数的最高位为1,实际数值通过阶码进行调整。 一般浮点数在机器中的格式为: 阶符 阶码 数符 尾数 阶符表示指数的符号位,阶码表示幂次,数符表示尾数的符号位,尾数表示规格化后的小数值。 假设有二进制数N、M为二进制小数,e是一个二进制整数,M称为数N的尾数,M表示了数N的全部有效数字; e称为数N的阶码,阶码e指明了小数点的位置。则N可以表示为: N=M×2e 如二进制数-110101101.01101可以写成-0.11010110101101×21001,这个数在机器中的格式为(阶码用8位表示,尾数用24位表示): 0 0001001 1 11010110101101000000000 当然,定点数和浮点数比较起来各有特点,同样大小的存储空间,可以存放的浮点数远比定点数取值范围要大,但浮点数的运算规则比定点数更复杂。 1.3计算机系统的组成 1.3.1计算机系统 一个完整的计算机系统由硬件系统和软件系统两大部分组成。硬件(hardware)即硬设备,是指计算机的各种看得见、摸得着的实实在在的物理设备的总称,是计算机系统的物质基础。软件(software)是在硬件系统上运行的各类程序、数据及有关文档的总称。 计算机硬件和软件存在密切的关系,没有配备软件的计算机叫“裸机”,不能供用户直接使用。而没有硬件对软件的物质支持,软件的功能则无法发挥。只有硬件和软件相结合才能充分发挥计算机系统的功能。 图17所示为计算机系统的组成。 计算机系统 硬件主机 中央处理器控制器 运算器 内存储器随机存储器 只读存储器 外部设备输入设备(鼠标、键盘等) 输出设备(软盘、硬盘和光盘等) 软件系统软件操作系统 各种计算机语言 数据库管理系统等 应用软件字处理软件 计算机辅助类软件 各种信息管理系统软件等 图17计算机系统组成示意图 现代计算机系统中硬件与软件之间的关系常可分成若干层次,如图18所示。 图18硬件和软件关系图 由图18可见,硬件(裸机)在最里层,是计算机系统工作的物质基础,它的外面是操作系统。操作系统对计算机系统中的各类资源(如处理器、存储器、设备和数据等)进行管理,以及提供方便用户使用的多种服务功能,隐蔽对硬件的复杂操作,从而把裸机改造成功能更强、使用更方便的系统。操作系统是最基本的系统软件。操作系统的外面是其他系统软件,用来对用户的操作和开发软件提供支持(如本文编辑、汇编程序、编译程序、连接程序和命令解释程序等),它们不是操作系统的一部分,一般与操作系统一起由供应商提供。此外,人们也将系统实用软件、系统工具软件等视为系统软件。系统软件外面是应用软件,它们是为各应用领域服务的软件,如数据库软件、财务软件等。 用户可以直接经系统软件操纵计算机,也可通过实用软件或工具软件操纵计算机,根据用户的需求产生用户软件,如事务处理等; 还可直接使用应用软件满足自己的需要。 1.3.2计算机的硬件系统 无论是巨型机、大型机、小型机,还是微型机,尽管它们在规模和性能方面存在着极大的差别,但其硬件系统都是由中央处理器、存储器和I/O系统等几部分组成的。下面简要介绍这几部分的功能。 1. 中央处理器 中央处理器(Central Processing Unit,CPU)负责完成大部分的信息处理操作。它主要由三大部分组成: 寄存器组(register block)、算术逻辑单元( Arithmetic Logic Unit,ALU)和控制单元(Control Unit,CU),如图19所示。 图19计算机的基本结构模型 寄存器组用以在指令执行过程中存放操作数和中间数据,由 ALU 完成指令所规定的运算和操作; CU控制 ALU 和 Register 正确地完成某一操作。内部总线用来在寄存器之间及寄存器和ALU之间提供高速的数据通路; 外部总线则把CPU 和存储器、I/O设备连接起来完成数据交换。 CPU需要完成的功能如下。  读取指令: 从内存中读取下一条要执行的指令。  解释指令: 对指令进行译码来确定所需执行的操作。  读取数据: 根据指令要求从存储器或者I/O 端口读取数据。  处理数据: 根据指令要求对数据进行算术或逻辑运算。  保存数据: 把执行的结果保存回存储器或者I/O 设备。 CPU中的寄存器通常可以分为两类: 用户可见的寄存器(uservisible register)和状态控制寄存器(Control And Status Register,CSR)。 (1) 用户可见的寄存器。 用户能够通过机器语言来访问这些寄存器。合理优化地使用这些寄存器可以减少对主存的访问次数,从而提高程序的执行速度。 (2) 状态控制寄存器。 这些寄存器被控制器用来控制 CPU 的操作。通常是程序员不可见的,但也有某些寄存器在某种特定的状态下可以由某些特权指令进行访问。常见的 CSR 有程序计数器(Program Counter,PC)、指令寄存器(Instruction Register,IR)、存储器地址寄存器(Memory Address Register,MAR)、存储器缓冲寄存器(Memory Buffer Register,MBR)及程序状态字(Program Status Word,PSW)。PC中存放着下一条待取指令的地址。当程序顺序执行时,CPU在取回一条指令后,会自动修改PC中的值以使其指向下一条指令。而程序中的分支或跳转指令也是通过修改PC中的值来达到改变流程的目的。IR中存放着CPU刚取回的指令,以供指令译码使用。CPU和存储器之间的数据交换通过MAR和MBR来实现。MAR中存放着待访问的内存单元的地址,而MBR则存放从内存中读入的数据或要写回内存单元的数据。这4个寄存器(PC、IR、MAR、MBR)用来实现在CPU和存储器(memory)之间的数据交换。另外,CPU内部,在ALU与MBR、用户可见的寄存器之间也可能存在用作输入输出缓冲的寄存器。 ALU负责对数据进行算术和逻辑运算。计算机系统的其他部分,即寄存器、存储器及I/O设备把待处理的数据输入到ALU,由ALU进行处理,然后把运算结果输出,同时设置标志位。 控制器负责控制整个计算机系统的运行,读取指令寄存器、状态控制寄存器及从外部来的控制信号(例如中断信号),发布外控制信号控制CPU与存储器、I/O设备进行数据交换,发布内控制信号控制寄存器间的数据交换,控制ALU完成指定的运算功能,并且管理其他的CPU内部操作。 控制器的基本功能就是时序(sequencing)控制和执行(execution)控制。根据当前运行的程序,控制器使CPU按一定的时序关系执行一系列的微操作(microoperation),从而完成程序规定的动作。 目前,CPU已经发展到多核时代,与单核处理器相比,多核处理器在体系结构、软件、功耗和安全性设计等方面面临着巨大的挑战,但也蕴含着巨大的潜能。以双核为例,所谓双核心处理器,简单地说就是在一块CPU基板上集成两个处理器核心,并通过并行总线将各处理器核心连接起来。双核心并不是一个新概念,而只是CMP(Chip Multi Processors,单芯片多处理器)中最基本、最简单、最容易实现的一种类型。其实在RISC处理器领域,双核心甚至多核心都早已经实现。CMP最早是由美国斯坦福大学提出的,其思想是在一块芯片内实现SMP(Symmetrical MultiProcessing,对称多处理)架构,且并行执行不同的进程。早在20世纪末,惠普和IBM就已经提出双核处理器的可行性设计。IBM 在2001年就推出了基于双核心的POWER4处理器,随后是Sun和惠普公司,都先后推出了基于双核架构的UltraSPARC及PARISC芯片。但此时双核心处理器架构还都是在高端的RISC领域,直到2005年,Intel和AMD才相继推出自己的双核心处理器,双核心才真正走入了主流的X86领域。现在双核CPU是用户配置计算机的首选。不久以后,Intel和AMD将推出双核以上的CPU芯片。 2. 存储器系统 计算机的存储系统由分布在计算机各个不同部件的多种存储设备组成,有位于CPU内部的寄存器,以及用于CU的控制存储器(Control Memory)。 内部存储器是可以被处理器直接存取的存储器,又称为主存储器 (Main Memory),有时也简称为主存或内存。另外还有外部存储器 (External Memory),需要处理器通过 I/O系统与之交换数据,又称为辅助存储器(Auxiliary Memory),有时也简称为辅存或外存。除了正在执行的程序和处理的数据存放在主存储器外,其他所有的信息都保存在辅助存储器中,当需要时再从辅存中调入主存。下面对主存储器和辅助存储器逐一进行介绍。 1) 主存储器 主存储器的分类如下。 按存储介质分,有半导体存储器、磁表面存储器和光存储器。按读写性质分,有随机读写存储器(Random Access Memory,RAM)和只读存储器 (ReadOnly Memory,ROM)。根据在运行中能否长时间保存信息来分,RAM又有静态存储器(SRAM)和动态存储器(DRAM)两种。静态存储器利用双稳态触发器来保存信息,只要不断电,信息就不会丢失; 而动态存储器利用MOS电容存储电荷来保存信息,使用时需不断给电容充电才能使信息保持。SRAM的集成度低、功耗大、速度快,可用作缓存(Cache); DRAM的集成度高、功耗小、速度较快,可用作主存。 根据半导体制造工艺的不同,只读存储器可分为掩膜式ROM、可编程序只读存储器(Programmable ReadOnly Memory,PROM)、可擦可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、 (Electrically Erasable Programmable ReadOnly,EEPROM)和快擦除读写存储器(Flash Memory)。  掩膜式ROM: 由芯片制造商在制造时写入内容,整机工作过程中只能读出,而不能像随机存储器那样能快速、方便地加以改写。掩膜式ROM所存数据稳定,断电后所存数据也不会改变,因而常用于存储各种固定程序和数据。  PROM: 可由用户根据自己的需要来确定ROM中的内容,常见的熔丝式PROM是以熔丝的接通和断开来表示所存的信息为1或0。刚出厂的产品,其熔丝是全部接通的,使用前,用户根据需要断开某些单元的熔丝(写入)。显而易见,断开后的熔丝是不能再接通了,因此,它是一次性写入的存储器。掉电后不会影响其所存储的内容。  EPROM: 是一种可重写的存储器芯片,并且其内容在掉电时也不会丢失。换句话说,它是非易失性的,并通过EPROM编程器进行编程,EPROM编程器能够提供比正常工作电压更高的电压对EPROM编程。一旦经过编程,EPROM只有在强紫外线的照射下才能够进行擦除。为了进行擦除,EPROM的陶瓷封装上具有一个小的石英窗口,这个石英窗口一般情况下使用不透明的胶带覆盖,当擦除时将这个胶带揭掉,然后放置在强紫外线下大约20分钟,信息就被擦除了,可重新写入信息。  EEPROM: 是一种电可擦除可编程只读存储器,其内容在掉电时不会丢失。在平常情况下,EEPROM与EPROM一样是只读的,需要写入时,在指定的引脚加上一个高电压即可写入或擦除,而且其擦除的速度极快。通常EEPROM芯片又分为串行EEPROM和并行EEPROM两种,串行EEPROM在读写时数据的输入输出是通过2线、3线、4线或SPI总线等接口方式进行的,而并行EEPROM的数据输入输出则是通过并行总线进行的。  Flash Memory: 是在 EPROM与 EEPROM基础上发展起来的,它与EPROM一样,用单管来存储一位信息。它与EEPROM的相同之处是用电来擦除、但是只能擦除整个区或整个器件。快擦除读写存储器于1983年推出,1988年商品化。它兼有ROM和RAM两者的性能,又有DRAM一样的高密度。目前价格已低于DRAM,芯片容量已接近于DRAM,是唯一具有大存储量、非易失性、低价格、可在线改写和高速度(读)等特性的存储器,是近年来发展很快、很有前途的存储器。 2) 辅助存储器 辅助存储器用于存放当前不需要立即使用的信息。一旦需要,再和主机成批交换数据,是主存储器的后备,因此称为辅助存储器; 它又是主机的外部设备,因此又称为“外存储器”。辅助存储器的最大特点是存储器容量大、可靠性高、价格低。 辅助存储器主要分为磁表面存储器和光存储器。  磁表面存储器: 通过磁头来进行读写。磁头线圈中通入一定方向和大小的脉冲电流,磁化磁头的导磁体,从而建立起一定方向和强度的磁场。当磁介质从磁头下经过时,从磁头间隙处将其磁化。由于剩磁效应的存在,当磁场消失后,磁介质表面仍存在剩磁。线圈中电流方向不同,磁介质上被磁化的方向也不同——用以代表1和0。随着电流的变化及磁介质磁头间的相对运动,就可以把二进制信息序列转化为介质表面的磁化单元序列。  光存储器: 是由光盘驱动器和光盘片组成的光盘驱动系统。光存储技术是一种通过光学方法读写数据的技术,它的工作原理是改变存储单元的反射率、反射光极化方向,利用这种性质的改变来写入二进制数据。在读取数据时,光检测器检测出光强和极化方向等的变化,从而读出存储在光盘上的数据。由于高能量激光束可以聚焦成约0.8um的光束,并且激光的对准精度高,因此它比硬盘等其他存储技术具有更高的存储容量。 3. 输入设备 输入设备用于从计算机外部将数据、命令输入到计算机的内部,供计算机处理。常用的输入设备有键盘、鼠标、磁盘驱动器、磁带机、光笔、CDROM驱动器、扫描仪、数字化仪和摄像机等。 4. 输出设备 输出设备将计算机处理后的结果信息,转换成人们能够识别和使用的数字、文字、图形、声音和电压等形式。常用的输出设备有显示器、磁盘、打印机、绘图仪、音响和投影仪等。 当然,有些设备既可以作为输入设备,又可以作为输出设备,例如软盘驱动器、硬盘驱动器磁带机等。 1.3.3微型计算机系统 微机的运算和控制核心,即所谓的中央处理单元,被称为微处理器(microprocessor)。它是一块大规模集成电路芯片,代表着整个微型计算机系统的性能。所以,通常就将采用微处理器为核心构造的计算机称为微机。 微处理器的性能经常用字长、时钟频率和集成度等基本的技术参数来反映。字长(word)表明微处理器每个时间单位可以处理的二进制数据位数,例如一次进行运算、传输的位数。时钟频率表明微处理器的处理速度,反映了微处理器的基本时间单位。集成度表明微处理器的生产工艺水平,通常用芯片上集成的晶体管数量来表达。微处理器的发展速度是很快的。 (1) 1971年,美国Intel(英特尔)公司为日本制造商设计了一个微处理器芯片。该芯片成为世界上第一个微处理器4004。它字长4位,集成了约2300个晶体管,108kHz主频,并将2250个晶体管封装在很小的空间之内。实际运算速度更达到了每秒6万次。 (2) 1972年,Intel发布了8008处理器。这是一款8位微处理器,集成3500个晶体管,主频200kHz。 (3) 1978年,Intel公司首次生产出16位的微处理器,并命名为i8086。1979年,Intel公司推出了8088芯片,它仍旧是属于16位微处理器,内含29000个晶体管,时钟频率为4.77MHz。16位微处理器的代表芯片还有80286,时钟频率由最初的6MHz逐步提高到20MHz。 (4) 1985年,Intel推出了第一种32位微处理器,80386芯片,制造工艺也有了很大的进步,80386内含27.5万个晶体管,时钟频率为12.5MHz,后提高到20MHz、25MHz、33MHz。1989年推出的80486芯片的时钟频率从25MHz逐步提高到33MHz、50MHz,集成了120万个晶体管。32位微处理器的代表芯片还有1993年推出的Pentium(奔腾),俗称80586。晶体管集成数量高达310万个,时钟频率由最初推出的60MHz和66MHz,提高到200MHz。1996年推出的Pentium Pro,内部含有高达550万个晶体管,处理速度几乎是100MHz的Pentium的2倍。Pentium MMX(多能奔腾),带有多媒体增强指令集技术。1999年推出的PentiumⅢ,针对因特网和三维多媒体程序的应用要求新增了70条SSE(Streaming SIMD Extensions)指令,提高了浮点3D数据的处理能力,主频达到1GHz。2000年推出的Pentium 4微处理器,具有1.25亿个晶体管,3.4GHz时钟频率。 1.3.4计算机软件系统 计算机软件也是计算机系统重要的组成部分,如果把计算机硬件看成是计算机的躯体,那么计算机软件就是计算机系统的灵魂。没有软件支持的计算机称为“裸机”,只是一些物理设备的堆砌,几乎是不能工作的。 1. 计算机软件的含义 计算机软件(computer software)是指计算机程序及其相关文档的总和,是一系列按照特定顺序组织的计算机数据和指令的集合。软件并不只是包括可以在计算机上运行的程序,与这些程序相关的文件一般也被认为是软件的一部分。程序是计算任务的处理对象和处理规则的描述; 文档是为了便于了解程序所需的阐明性资料。程序必须装入机器内部才能工作,文档一般是给人看的,不一定装入机器。与传统观念不同的是,程序不等于软件,软件的定义更加强调文档的重要性,文档为软件的设计、开发和维护提供了重要的依据和支持。 软件(中国内地及香港用语,台湾地区称作软体)是用户与硬件之间的接口界面。用户主要是通过软件与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,为了使计算机系统具有较高的总体效用,在设计计算机系统时,必须通盘考虑软件与硬件的结合,以及用户的要求和软件的要求。 软件的基本要求如下。 (1) 运行时,能够提供所要求功能和性能的指令或计算机程序集合。 (2) 程序能够满意地处理信息的数据结构。 (3) 描述程序功能需求,以及程序如何操作和使用所要求的文档。 软件具有与硬件不同的特点。 (1) 表现形式不同。硬件有形,有色,有味,看得见,摸得着,闻得 到; 而软件无形,无色,无味,看不见,摸不着,闻不到。软件大多存在于人们的大脑里或纸面上,它的正确与否,是好是坏,一直要到程序在机器上运行才能知道。这就给设计、生产和管理带来许多困难。 (2) 生产方式不同。软件是开发,是人智力的高度发挥,不是传统意义上的硬件制造。尽管软件开发与硬件制造之间有许多共同点,但这两种活动是根本不同的。 (3) 要求不同。硬件产品允许有误差,而软件产品却不允许有误差。 (4) 维护不同。硬件是要用旧用坏的,在理论上,软件是不会用旧用坏的。但在实际上,软件也会变旧变坏。因为在软件的整个生存期中,一直处于改变(维护)状态。 2. 计算机软件的发展 软件的发展大致经历了如下三个阶段。 (1) 第一阶段(20世纪40年代到20世纪50年代中期)为发展初期。在这个阶段,软件开发采用低级语言,效率低下,应用领域基本局限于科学和工程的数值计算。人们不重视软件文档的编制,注重考虑代码的编写。 (2) 第二阶段(20世纪50年代中期到20世纪60年代后期),相继诞生了大量的高级语言,程序开发的效率显著提高,并产生了成熟的操作系统和数据库管理系统。在后期,由于软件规模不断扩大,复杂度大幅提高,产生了“软件危机”,也出现了有针对性地进行软件开发方法的理论研究和实践。 (3) 第三阶段(20世纪70年代至今),软件应用领域和规模持续扩大,大型软件的开发成为一项工程性的任务,由此产生了“软件工程”并得到长足发展。同时软件开发技术继续发展,并逐步转向智能化、自动化、集成化和并行化等方向。 3. 软件的分类 一般来讲,软件被划分为系统软件、应用软件和介于这两者之间的中间件。其中系统软件为计算机使用提供最基本的功能,但是并不针对某一特定应用领域。而应用软件则恰好相反,不同的应用软件根据用户和所服务的领域提供不同的功能。软件被应用于世界的各个领域,对人们的生活和工作都产生了深远的影响。 1) 系统软件 系统软件是负责管理、控制、维护、开发计算机的软硬件资源,使得它们可以协调工作,并提供编制应用软件的资源环境,让计算机使用者和其他软件将计算机当作一个整体,而不需要顾及到底层每个硬件是如何工作的。 系统软件主要包括操作系统,另外还有程序设计语言及其处理程序和数据库管理系统等。操作系统在软件系统中居于核心地位,负责对所有的软、硬件资源进行统一管理、调度及分配。它是用户和计算机的一个接口。 一般来讲,系统软件包括操作系统和一系列基本的工具(如编译器、数据库管理、存储器格式化、文件系统管理、用户身份验证、驱动管理和网络连接等方面的工具)。数据库管理系统(DBMS)也是十分重要的一个系统软件。因为大量的应用软件都需要数据库的支持,如信息管理系统、电子商务系统等。 系统软件有如下这些。  操作系统(如DOS、UNIX、Windows、Linux和Mac OS等)。  数据库管理系统(如Microsoft SQL Server、Oracle、Sybase和Informix等)。  各种程序设计语言的翻译程序。 2) 应用软件 应用软件是为了某种特定的用途而被开发的软件。应用软件是指为解决某一领域的具体问题而编制的软件产品,如办公软件、图像处理程序和各类信息管理系统等。应用软件因其应用领域的不同而丰富多彩。它可以是一个特定的程序,如一个图像浏览器。也可以是一组功能联系紧密,可以互相协作的程序的集合,如微软的Office软件。还可以是一个由众多独立程序组成的庞大的软件系统。