描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302509813丛书名: 高等学校计算机基础教育教材精选
编辑推荐
统筹兼顾,计算思维引领,串联编排各知识环节;
面向多领域实际问题,展现计算及计算思维作用;
前置背景知识要求低,适用于各专业大学新生。
面向多领域实际问题,展现计算及计算思维作用;
前置背景知识要求低,适用于各专业大学新生。
内容简介
本书兼顾计算机科学基础知识和计算思维,以计算思维能力培养为主线,串联信息表示、计算机系统、操作系统、网络、多媒体技术、科学计算及新方向等内容,选择Python作为计算实践的语言,内容偏重于如何将计算思维应用于计算机科学等领域以解决问题。实践内容将在授课内容的基础上进行拓展,并要求运用Python及相关的配套库进行问题求解练习。希望通过应用问题求解的学习和实践,培养读者在理解计算机系统的基础上,主动在各自专业学习中利用计算思维的方法和技能,进行问题求解的能力和习惯。学完本书后,希望读者能动手解决具有一定难度的实际问题。
本书适合作为高等学校计算机基础课程的教材,也可作为计算机培训、计算机等级考试和计算机初学者的参考书。本书可与《大学计算机基础实验教程(第2版)》配合使用。
本书适合作为高等学校计算机基础课程的教材,也可作为计算机培训、计算机等级考试和计算机初学者的参考书。本书可与《大学计算机基础实验教程(第2版)》配合使用。
目 录
目录
大学计算机基础(第3版)第1章计算与社会1
1.1计算概论1
1.2计算装置发展简史4
1.2.1机械式计算装置4
1.2.2图灵机和图灵7
1.2.3现代电子计算机10
1.2.4计算机的发展趋势12
1.3计算技术的应用14
1.4信息化社会与人19
1.5计算思维概论21
1.6小结23
1.7习题23
第2章Python简介25
2.1引言25
2.2Python基本元素26
2.2.1对象、表达式和数值类型27
2.2.2变量和赋值28
2.2.3str类型与输入29
2.3内置数据结构31
2.3.1列表31
2.3.2元组33
2.3.3字典34
2.4控制语句35
2.4.1分支语句35
2.4.2循环36
2.5函数37
2.6使用模块40
2.7面向对象基础41
2.8Python编程示例——打印月历45
2.9小结49
2.10习题49
大学计算机基础(第3版)目录第3章计算思维52
3.1概述53
3.2逻辑思维与算法思维56
3.2.1逻辑思维56
3.2.2算法思维59
3.2.3小结61
3.3问题求解策略62
3.3.1基本步骤62
3.3.2分解法63
3.3.3模式与归纳65
3.3.4小结68
3.4抽象与建模68
3.4.1抽象68
3.4.2建模71
3.5评价解决方案74
3.5.1解是否正确74
3.5.2解的效率如何76
3.5.3小结77
3.6算法、数据结构与程序78
3.6.1算法设计常用策略78
3.6.2算法的描述79
3.6.3算法示例81
3.6.4数据结构86
3.6.5程序设计语言87
3.7“捉狐狸”问题求解示例90
3.8小结94
3.9习题94
第4章信息、编码及数据表示96
4.1信息论基础96
4.2编码及其解释99
4.3数值的数字化103
4.4计算机数值表示105
4.4.1计算机码制105
4.4.2定点数和浮点数108
4.5字符的数字化110
4.5.1汉字编码111
4.5.2Unicode码112
4.6声音的数字化113
4.7图像的数字化115
4.8信息处理示例119
4.8.1数据压缩示例及Python实现119
4.8.2生成图像验证码及Python实现122
4.8.3Python绘制分形图形123
4.9小结126
4.10习题126
第5章计算机系统130
5.1概述131
5.2计算机硬件系统133
5.2.1中央处理器134
5.2.2存储系统138
5.2.3总线141
5.2.4输入输出系统142
5.3操作系统143
5.3.1概述144
5.3.2进程管理145
5.3.3存储管理149
5.3.4文件管理150
5.3.5设备管理152
5.3.6用户接口153
5.3.7操作系统的加载155
5.4Python构建冯·诺依曼体系结构模拟器156
5.5利用Python使用操作系统159
5.5.1利用Python查看进程信息159
5.5.2利用Python查看系统存储信息161
5.5.3Python文件操作163
5.6小结165
5.7习题165
第6章计算机网络及应用168
6.1计算机网络基础168
6.1.1计算机网络的发展历史169
6.1.2计算机网络的分类171
6.1.3计算机网络体系结构与协议172
6.1.4计算机网络传输介质及设备177
6.2Internet基础179
6.2.1Internet概述179
6.2.2TCP/IP协议182
6.2.3Python TCP/IP网络编程186
6.3Internet应用190
6.3.1万维网190
6.3.2电子邮件192
6.3.3文件传输194
6.3.4搜索引擎196
6.3.5Python编程示例196
6.4无线网络198
6.5物联网201
6.6小结202
6.7习题203
第7章数据库技术应用基础204
7.1概述204
7.1.1数据管理发展简史206
7.1.2数据库的基本概念206
7.1.3数据库技术管理数据的主要特征208
7.1.4数据库的应用209
7.2数据模型211
7.2.1概念模型212
7.2.2逻辑模型216
7.2.3ER模型到关系模型的转化221
7.3数据库管理系统222
7.3.1数据库管理系统的功能222
7.3.2常见数据库管理系统软件223
7.4Python数据库程序设计示例225
7.5Python数据分析示例226
7.6小结231
7.7习题232
第8章科学计算233
8.1泰勒级数234
8.1.1泰勒级数的主项234
8.1.2余项及误差236
8.2插值及拟合238
8.2.1拉格朗日插值238
8.2.2牛顿插值239
8.2.3埃尔米特插值241
8.2.4函数拟合242
8.3数值微积分244
8.3.1数值微分244
8.3.2数值积分247
8.4非线性方程数值解249
8.4.1二分法求根249
8.4.2函数迭代法求根250
8.4.3牛顿迭代法求根251
8.5线性方程组求解252
8.5.1直接法求解252
8.5.2迭代法求解255
8.6符号计算257
8.7小结262
8.8习题262
第9章计算机发展新技术264
9.1高性能计算265
9.1.1高性能计算的含义及意义265
9.1.2高性能计算的关键技术266
9.1.3高性能计算的典型应用270
9.1.4高性能计算的发展挑战270
9.1.5Python高性能编程——计算π272
9.2云计算与大数据274
9.2.1云计算274
9.2.2大数据276
9.3人工智能278
9.3.1人工智能的基本概念与发展历程278
9.3.2搜索280
9.3.3知识表示与推理281
9.3.4机器学习283
9.3.5智能控制285
9.3.6Python机器学习示例——预测外卖配送时间286
9.4新型计算技术289
9.4.1量子计算289
9.4.2光计算290
9.4.3生物计算291
9.5小结292
9.6习题292
参考文献294
前 言
前言
大学计算机基础(第3版)人要成功融入社会所必备的思维能力,是由其所处时代能够获得的工具决定的。计算机是信息社会的必备工具之一,如何有效利用计算机分析和解决问题,将与阅读、写作和算术一样,成为 21 世纪每个人的基本技能,而不仅仅属于计算机专业人员。计算机正在对人们的生活、工作,甚至思维产生深刻的影响。
“大学计算机基础”是大学本科教育的第一门计算机公共基础课程,它的改革越来越受到人们的关注。本课程的主要目的是从使用计算机、理解计算机系统和计算思维3个方面培养学生的计算机应用能力。从2008年开始,以“计算思维”的培养为主线开展计算科学通识教育,逐渐成为国内外计算机基础教育界的共识。
基于这种认识,第2版教材进行了较大幅度的修改,增加了计算思维所占的比重。指导思想是兼顾计算机基础知识和计算思维,选择Python作为实践语言,将信息表示与处理、计算机系统、网络、数据库、多媒体等知识既作为教学内容,又作为计算思维求解问题的研究对象,加以实践,教材内容更偏重于如何将计算思维应用于各领域求解问题。最终,通过这种问题求解的学习和实践,希望学生在理解计算机基础知识的同时,能主动在各自专业学习中利用计算思维的方法和技能,进行问题求解,能动手解决具有一定难度的实际问题。
经过一年的实践,综合各方面的反馈,对第2版教材进行了改版。
(1) 对计算思维的内容进行了重新梳理,在第2版中将计算思维、计算机问题求解的内容统一到计算思维的几个核心概念下。
(2) 对Python基础知识进行了重新组织,更新了案例。
(3) 将原来分布在两章的计算机硬件系统与操作系统合并成为一章,连贯性更好。
(4) 合并了信息表示和多媒体技术基础,从信息角度,把字符、数值、图像、声音等同等对待和处理。
(5) 新增了一章科学计算的内容,以体现Computing in Science的理念,即结合高等数学和计算思维,使学生在大学入学之初就能解决现实世界复杂规模的问题。
第3版教材包含9章内容,大致可分为如下部分: 计算与社会(第1章);Python简介(第2章);计算思维(第3章);信息、编码及数据表示(第4章);计算机系统、计算机网络及应用,数据库技术应用基础(第5、6、7章);科学计算(第8章);以及计算机发展新技术(第9章)。
本书内容涉及计算机专业多门课程的知识,概念庞杂,术语繁多。表面上看,章与章之间的联系松散。对于初学者来说,学好这门课程不容易,融会贯通就更加困难了。如何把握全书的脉络?建议以 “信息表示和信息处理”“计算思维与计算机问题求解”作为理解章节内容联系的两条主要线索。
计算机系统是信息处理的工具,而信息处理依赖于某种形式的信息表示。本书中主要介绍了用01符号串表示数值信息、字符信息、声音信息和图像信息的方法。介绍了以文件和数据库形式组织信息的技术。介绍了计算机系统处理信息的工作原理。每一个计算机系统功能都涉及某类或某几类信息,每一个计算机系统功能都可以转换为信息处理过程。读者应该思考: 这些信息是怎样表示的?为什么要使用这种表示方法?计算机系统的功能由哪些信息处理过程组成?这些处理过程包含哪些步骤?处理步骤是如何(自动)实现的?
在理解信息表示和信息处理的基础上,学习计算思维,是为了更好地发挥计算机的作用,解决具体问题。读者在学习计算思维时,应该考虑: 以计算机基础知识为研究内容,用计算思维如何思考问题和解决问题?如何类比其他领域的问题?碰到具体问题时,可以思考该问题是否有计算的解?解是什么?如何实现解?如何让计算机帮助求解?
同时,这两条线索又是统一的,本书的案例以计算机系统本身作为对象,展示了用计算思维与计算机问题求解来研究计算机系统的方法。为读者将计算思维扩展到其他学科领域做了良好的示范。
如果这些问题都明晰了,对融会贯通全书内容有很大帮助。
本书适用于计算机专业和非计算机专业一年级新生,不要求有计算机程序设计经验,并且也不是以程序设计为主要内容,而是要求学生专注于理解计算思维求解问题的方法和技能。一些Python语言基础知识的介绍,是帮助读者阅读和理解教材中给出的Python程序。希望读者能在理解的基础上,对这些程序进行小修改,来实践自己的问题求解方法。同时建议与本书配套的《大学计算机基础实验教程(第2版)》配合使用,效果更好。
本书的第 1~7章主要由李暾编写或在前两版基础上进行了更新,第8章由刘万伟编写,第9章由陈立前编写。各章案例及新增内容由李暾、毛晓光、刘万伟、周海芳、周竞文等编写。全书由李暾、毛晓光负责统稿。王志英、宁洪、陈怀义、王保恒等教授对本书的编写给予了许多指导,陈立前、周竞文为本书的文字整理和校对做了大量工作。此外,本书还参考了很多文献资料和网络素材,在此一并表示衷心的感谢。
本书的写作集体根据多年的教学实践,在内容的甄选、全书组织形式等方面既借鉴了同类书的成功经验,也做出了自己的努力。但是改进的空间还很大,热切希望广大读者能够予以斧正。
编者
2018年7月大学计算机基础(第3版)
免费在线读
第5章第5章计算机系统【学习内容】
本章介绍计算机系统软硬件相关内容,主要知识点如下。
(1) 计算机系统的基本概念及其组成。
(2) 冯·诺依曼体系结构及各部分工作机制。
(3) 操作系统的基本概念及其主要功能。
(4) 计算机软件系统的分类、层次结构及主要功能。
(5) 计算思维在计算机系统中的体现。
(6) 利用操作系统接口编程查看系统状态。
【学习目标】
通过本章的学习,读者应掌握如下内容。
(1) 了解计算机系统的组成,理解系统各部分的作用。
(2) 理解冯·诺依曼体系结构。
(3) 掌握中央处理器的工作过程。
(4) 理解存储系统的设计原理、构成和工作原理。
(5) 理解输入输出系统的构成和控制方式,掌握基本术语。
(6) 理解总线结构、工作原理以及评价指标。
(7) 掌握操作系统的角色和基本功能。
(8) 理解进程管理、文件管理、设备管理、用户接口等基本概念。
(9) 掌握操作系统进程管理的基本功能和策略。
(10) 理解操作系统存储管理的概念、功能和常用方式。
(11) 理解文件的组织方式,了解文件管理的功能和基本策略。
(12) 理解操作系统设备管理的方式。
(13) 了解操作系统提供的不同用途的用户接口的要素和形式。
(14) 了解计算机软件系统的分类、层次结构及主要功能。
(15) 了解对复杂系统如冯·诺依曼体系结构的抽象与模拟的方法。
(16) 了解通过Python编程使用主流操作系统典型功能的方法。本章主要介绍信息处理核心装置——计算机系统,包括其软硬件构成与结构、如何支持信息处理,以及各部分在信息处理中的作用。首先介绍计算机硬件系统的体系结构,以冯·诺依曼体系结构为依据,介绍计算机系统的硬件构成。然后围绕着该体系结构各部件,介绍它们如何进行信息表示、信息传递和信息处理,偏重于各部件的核心构成以及基本工作原理。
操作系统是计算机系统中最重要的软件,它对计算机系统的软硬件资源进行管理、协调,并代表计算机与外界进行通信。正是有了操作系统,才使得计算机硬件系统成为真正可用,本章介绍操作系统如何完成上述功能。介绍操作系统的基本概念,根据操作系统的系统管理角色和功能,依次介绍进程管理、存储管理、文件管理、设备管理和用户接口,以及操作系统的加载等所涉及的基本概念和策略。
最后,对硬件系统用模拟的方法进行了研究,展示了如何利用Python编程使用操作主要功能。
大学计算机基础(第3版)第5章计算机系统5.1概述
一般来说,计算机是一种可编程的机器,它接收输入,存储并且处理数据,然后按某种有意义的格式进行输出。可编程指的是能给计算机下一系列的命令,并且这些命令能被保存在计算机中,并在某个时刻能被取出执行。
通常所说的计算机实际上指的是计算机系统,它包括硬件和软件两大部分。硬件系统指的是物理设备,包括用于存储并处理数据的主机系统,以及各种与主机相连的、用于输入和输出数据的外部设备,如键盘、鼠标、显示器和磁带机等,根据其用途又分为输入设备和输出设备。计算机的硬件系统,是整个计算机系统运行的物理平台。计算机系统要能发挥作用,仅有硬件系统是不够的,还需要具备完成各项操作的程序,以及支持这些程序运行的平台等条件,这就是软件系统。所以,一个实际的计算机系统通常由图51所示的结构构成。
图51计算机系统的构成
目前占主流地位的计算机硬件系统结构是冯·诺依曼体系结构,由美国科学家冯·诺依曼等在1946年提出。在此之前出现的各种计算辅助工具,如差分机等,其用途是固定的,即各种操作是在制造机器的时候就固定下来,不能用于其他用途。以常见的计算器为例,人们只能用它进行各类定制好的运算,而无法用它进行文字处理,更不能打游戏。要使这类机器增加新的功能,只能更改其结构,甚至重新设计机器。所以,这类计算装置是不可编程的。
冯·诺依曼体系结构的核心思想——存储程序改变了这一切。通过创造一组指令集,并将各类运算转化为一组指令序列,使得不需改变机器结构,就能使其具备各种功能。在冯·诺依曼体系结构中,程序和数据都是以二进制形式存放在计算机存储器中,程序在控制单元的控制下顺序执行。程序是计算机指令的一个序列,指令是计算机执行的最小单位,由操作码和操作数两部分构成。操作码表示指令要执行的动作,操作数表示指令操作的对象是什么,即数据。
在该体系结构中,计算机由5部分组成: 存储器、运算器、控制器、输入和输出设备(见图52)。需要执行的程序及其要处理的数据保存于存储器中,控制器根据程序指令发出各种命令,控制运算器对数据进行操作、控制输入设备读入数据以及控制输出设备输出数据。
图52冯·诺依曼体系结构
在冯·诺依曼体系结构形成之前,人们将数据存储于主存中,而程序被看成是控制器的一部分,两者是区别对待和处理的。而将程序与数据以同样的形式存储于主存中的特点,对于计算机的自动化和通用性,起到了至关重要的作用。
冯·诺依曼体系结构指的是单机体系结构。为了提高计算机的性能,科学家们提出了各种体系结构。例如,由多个计算机构成的并行处理结构、集群结构等。它们的出现,是为了满足特定任务的要求,这些任务要求计算机系统有更高的能力,以满足诸如气象预报、核武器数值模拟、航天器设计等任务的需求。目前,主流的并行计算结构有对称多处理系统(Symmetric Multi Processing,SMP)、大规模并行处理系统(Massively Parallel Processing,MPP)和集群等。
除了看得见摸得着的硬件之外,计算机系统中还包含各种计算机软件系统,简称为软件。计算机科学对软件的定义是,“软件是在计算机系统支持下,能够完成特定功能和性能的程序、数据和相关的文档”。于是,软件可形式化地表示为
软件=知识 程序 数据 文档
程序是用计算机程序设计语言描述的。无论是低级语言(如汇编语言),还是高级语言(如C 、Java),程序都可以在相应语言编译器的支持下转换成操纵计算机硬件执行的代码。数据是程序加工的对象和结果。计算机直接加工的数据结构只有简单的整型数、浮点数、逻辑量、字符,人们可以根据需要,在此基础上定义复杂的数据结构。基于大量数据处理的软件需要数据库系统的支持,涉及数据的加工、存储、检索、传输、应用等。文档记录软件开发的活动和中间制品、记录软件的配置及变更,用于软件专业人员和用户的交流,以及用于软件开发、过程管理和运行阶段的维护。
软件系统是用户与硬件之间的接口,着重解决如何管理和使用计算机的问题。用户主要是通过软件系统与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,以及使计算机系统具有较高的总体效用,在设计计算机系统时,必须通盘考虑软件与硬件的结合,以及用户的要求和软件的要求。没有任何软件支持的计算机称为裸机,其本身不能完成任何功能,只有配备一定的软件才能发挥功效。
软件是抽象的逻辑产品,而不是物理产品。由于不受材料的限制,也不受物理定律或加工过程的制约,具有很大的灵活性。软件的灵活性具有双重性,程序员通过编程可以让计算机巧妙地工作,同时也很容易让软件变得极为复杂,难以理解。软件开发过程的监督、控制、管理有着特殊的困难。因此,软件在开发、生产、维护和使用等方面与硬件相比存在明显的差异。
图53计算机软件
系统的结构
软件的分类原则、方法很多,从软件的功能上分为系统软件和应用软件,从实时性上分为实时软件和非实时软件,从软件运行环境上分为单机软件和网络软件,从加工的数据类型上分为事物处理软件、科学和工程计算软件,从计算方法上分为基于传统算法的软件、基于符号演算和推理规则的人工智能软件,等等。
计算机软件系统的结构如图53所示,这是典型的分层结构,下层系统向上层系统提供服务,上层系统利用下层系统提供的服务,以及特定的程序,可以完成指定的任务。使用计算机并不会直接操作计算机硬件,而是通过在操作系统和各种应用软件上的操作来控制计算机完成各种任务。
5.2计算机硬件系统
目前占主流地位的计算机硬件系统结构是冯·诺依曼体系结构,如图54所示。该图中,冯·诺依曼体系结构中的控制器和运算器被集中于CPU中,分别对应控制器和算术逻辑单元,主存对应存储器,各种输入输出设备分别对应体系结构中的输入设备和输出设备,各种总线(图中以空心箭头表示)对应于冯·诺依曼体系结构图中的互连线,用于传输命令和数据。
图54典型的计算机硬件组织结构
5.2.1中央处理器
一般把中央处理器简称为处理器,是执行存储在主存中的指令的引擎。CPU一般由算术逻辑运算器(Arithmetic and Logic Unit,ALU)、控制单元(Control Unit,CU)和寄存器组构成,由CPU内部总线将这些构成连接为有机整体,如图55所示。
图55CPU的内部结构
控制单元的主要功能包括指令的分析、指令及操作数的传送、产生控制和协调整个CPU工作所需的时序逻辑等。一般由指令寄存器(Instruction Register,IR)、指令译码器(Instruction Decoder,ID)和操作控制器(Operation Controller,OC)等部件组成。CPU工作时,根据程序计数器保存的主存地址,操作控制器从主存取出要执行的指令,存放在指令寄存器IR中,经过译码,提取出指令的操作码、操作数等信息,操作码将被译码成一系列控制码,用于控制CPU进行ALU运算、传输数据等操作,通过操作控制器,按确定的时序,向相应的部件发出微操作控制信号,协调CPU其他部件的动作。操作数将被送到ALU进行相对应的操作,得出的结果在控制单元的控制下保存到相应的寄存器中。
ALU的主要功能是实现数据的算术运算和逻辑运算。ALU接收参与运算的操作数,并接收控制单元输出的控制码,在控制码的指导下,执行相应的运算。ALU的输出是运算的结果,一般会暂存在寄存器组中。此外,还会根据运算结果输出一些条件码到状态寄存器,用于标识一些特殊情况,如进位、溢出、除零等。
寄存器组由一组寄存器构成,分为通用和专用寄存器组,用于临时保存数据,如操作数、结果、指令、地址和机器状态等。通用寄存器组保存的数据可以是参加运算的操作数或运算的结果。专用寄存器组保存的数据用于表征计算机当前的工作状态,如程序计数器保存下一条要执行的指令,状态寄存器保存标识CPU当前状态的信息,如是否有进位、是否溢出等。通常,要对寄存器组中的寄存器进行编址,以标识访问哪个寄存器,编址一般从0开始,寄存器组中寄存器的数量是有限的。
数据和指令在CPU中的传送通道称为CPU内部总线,总线实际上是一组导线,是各种公共信号线的集合,用于作为CPU中所有各组成部分传输信息共同使用的“公路”。一般分为数据总线(Data Bus,DB)、地址总线(Address Bus,AB)、控制总线(Control Bus,CB)。其中,数据总线用来传输数据信息;地址总线用于传送CPU发出的地址信息;控制总线用来传送控制信号、时序信号和状态信息等。
指令是CPU执行的最小单位,由操作码和操作数两部分构成,如图56(a)所示。操作码表示指令的功能,即执行什么动作,操作数表示操作的对象是什么,例如寄存器中保存的数据、立即数等。计算机能识别的指令是由0和1构成的字串,称为机器指令。指令的长度通常是一个或几个字长,长度可以是固定的,也可是可变的。图56(b)给出了某款CPU的加法指令的示意图。该指令长度为16位(一个字长),从左至右标识各位为bit15~bit0。bit15~bit12代表的是操作码,为0001,在该CPU中表示加法操作。bit11~bit0对应操作数的表示,由于该指令需要3个操作数,bit11~bit0将会被拆分为3段,分别对应两个相加数(源操作数)和一个求和结果(目的操作数)。bit11~bit9对应保存目的操作数的寄存器地址,在该示例中为110,表示寄存器R6,bit8~bit6与bit2~bit0分别对应保存源操作数的寄存器地址,分别为R2和R6。则这条指令表示将寄存器R6和R2 中保存的数值进行加运算,结果保存回寄存器R6。bit5~bit3用于扩展加法指令的操作,此处不做解释。
图56指令
机器指令由0和1字符构成,计算机易于阅读和理解,但是,不适合人使用。所以,在指令中引入助记符表示操作码和操作数,以帮助人理解和使用指令。这样的指令称为汇编指令。如图56(c)所示,用ADD来标识该指令是加法指令,R6和R2标识用到的寄存器。计算机不能直接执行汇编指令,要由汇编器将其翻译成对应的机器指令才可执行。对图56(c)的ADD指令,汇编器会将其翻译成图56(b)的形式。
CPU的指令是由指令集体系结构(Instruction Set Architecture,ISA)规定的。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。ISA是与程序设计有关的计算机结构的一部分,定义了指令类型、操作种类、操作数数目与类型,以及指令格式等,可用CPU指令集的指令来编写程序。程序就是用于控制计算机行为完成某项任务的指令序列。在指令集中,通常定义的指令类型有3种。
(1) 操作指令: 是处理数据的指令,例如算术运算和逻辑运算都是典型的操作指令。
(2) 数据移动指令: 它的任务是在通用寄存器组和主存之间、寄存器和输入输出设备之间移动数据。例如,将数据从主存移入寄存器的LOAD指令,和反方向移动数据的STORE指令等。
(3) 控制指令: 能改变指令执行顺序的指令。例如无条件跳转指令,将程序计数器的值更改为一个非顺序的值,使得下一条指令从新位置开始。
图57是一个程序示例,为了便于阅读,采用了汇编指令编写,分号后面是程序的注释,帮助人们阅读和理解程序,而计算机将忽略这些注释。
图57程序示例
这段程序用于计算1 2 … 1000的值。利用寄存器R1和R0,开始时将R0设为0,R1设为1。然后将R1的值加到R0上,同时R1增1。此后将R1的值与1000进行比较,如果R1比1000小,则重复执行将R1加到R0上以及R1增1的操作,然后再比较。这种重复执行将在R1大于1000时结束,同时将结束程序的运行。程序中,add是操作指令,ble是控制指令。ble与cmp一起使用,当cmp比较结果为小于等于1000时,该指令被执行,将执行顺序跳转到loop所标示的指令。
CPU的工作过程是循环执行指令的过程。指令的执行过程是在控制单元的控制下,精确地、一步一步地完成的。称这个执行的步骤顺序为指令周期,其中的每一步称为一个节拍。不同的CPU可能执行指令的节拍数不同,但是通常图58指令执行常见节拍划分
都可归为以下4个阶段(见图58)。
(1) 取指令: 指令通常存储在主存中,CPU通过程序计数器获得要执行的指令存储地址。根据这个地址,CPU将指令从主存中读入,并保存在指令寄存器中。
(2) 译码: 由指令译码器对指令进行解码,分析出指令的操作码,所需的操作数存放的位置。
(3) 执行: 将译码后的操作码分解成一组相关的控制信号序列,以完成指令动作,包括从寄存器读数据、输入到ALU进行算术或逻辑运算。
(4) 写结果: 将指令执行节拍产生的结果写回到寄存器,如果有必要,将产生的条件反馈给控制单元。
以上的节拍划分是粗粒度的,通常每个节拍所包含的动作很难在一个时钟周期内完成,因此,会进一步将每个节拍进行细化,细化后的每个动作可在一个时钟周期内完成,不可再细分。例如,取指令阶段可以再细分为如下。
(1) 将程序计数器的值装入到主存的地址寄存器。
(2) 将地址寄存器所对应的主存单元的内容装入主存数据寄存器。
(3) 控制单元将主存数据寄存器的内容装入指令寄存器,同时对程序计数器“增1”。
可见,取指令这个节拍要花费3个时钟周期。对现代计算机来说,每个时钟周期非常短。例如对主频为3.3GHz的CPU,每秒将完成33亿个时钟周期,每个时钟周期的时间长度为0.303ns,而取指令节拍将花费0.909ns。
在最后一个节拍完成后,控制单元复位指令周期,从取指令节拍重新开始运行,此时,程序计数器的内容已被自动修改,指向下一条指令所在的主存地址。操作指令和数据移动指令的执行不会主动修改程序计数器的值,程序计数器将会自动指向程序顺序上的下一条指令。而控制指令的执行将会主动改变程序计数器的值,使得程序的执行将不再是顺序的。
图59程序在主存中的存储形式以图57的程序为例来理解CPU的工作过程。假设这段程序存放在主存中的排列形式如图59所示。要开始执行这段代码时,将会由操作系统将程序计数器的值设为A0,在取指令阶段将该地址的指令“mov #0, R0”取出存入指令寄存器,同时程序计数器“增1”为A1。mov指令经译码后,在控制单元控制下将寄存器R0置为0。此时指令执行结束,控制单元复位,从取指令重新执行——根据程序计数器的值A1取下一条指令。该过程将一直执行到ble指令。该指令执行完后,将会对程序计数器进行覆盖,将loop对应的指令地址写入程序计数器,使得下一条指令将不再是顺序执行的,而是跳转到loop指令开始执行。当条件满足时,ble指令的执行不修改程序计数器的值,此时,将取halt指令开始执行。
5.2.2存储系统
计算机系统中的存储器一般分为主存(又称为内存)和辅存(又称为外存),主存可与CPU直接进行信息交换,其特点是运行速度快,容量相对较小,在系统断电后,其保存的内容会丢失。辅存属于外部设备的范畴,如硬盘、光盘等,它们通过各种专门接口与计算机通信。辅存与CPU之间不能直接交换数据,其特点是存储容量大,存取速度比主存慢,系统断电后其保存的信息不会丢失,存储的信息很稳定。
主存储器的一般结构如图510所示,包括用于存储数据的存储体和外围电路,外围电路用于数据交换和存储访问控制,与CPU或高速缓存连接。外围电路中有两个非常重要的寄存器——数据寄存器MDR(Memory Data Register)和地址寄存器MAR(Memory Address Register),前者是用于临时保存读出或写入的数据,后者用于临时保存访问地址。要访问主存时,首先将要访问的地址送入MAR,如果是读主存,则在控制电路控制下,将MAR指向的主存单元数据送入MDR,然后发送到CPU或高速缓存;如果是写主存,则首先要将需写入的数据送到MDR,在控制电路控制下,将MDR数据写入到MAR指向的主存单元。
图510主存储器的结构
主存中存储的最基本单元是一个01符号串,可以代表数字、字符等信息。存储器由很多可存放长度(位数)相同的01符号串的单元组成,称为主存单元,每个主存单元有一个编号,这个编号就是主存地址。主存地址用二进制数来表示,如果表示地址的二进制数有m位,则主存地址最大可编码到2m-1(从0开始编码),也就是说最多可以有2m个主存单元,称为存储容量。可以通过主存地址来对主存单元存放的01符号串进行读写,这种读写操作通常被称为访问主存。访问主存时可根据地址独立地对各单元数据进行读写,访问时间与被访问地址无关,因此,主存又称为随机访问存储器(Random Access Memory,RAM)。为了规整化,主存单元的长度一般标准化为8位,即一个字节(Byte),再由字节组合成字。
主存中存储电路的原理类似于电容,主存中通过对电路进行充电来存储信息,但是这很容易流失,因此,需要在很短的时间内不断地充电,称为刷新。采用这种技术的主存又称为动态存储器(Dynamic RAM)。
根据存储能力与电源的关系可将主存分为易失性存储器和非易失性存储器,计算机系统主存一般都包含这两类存储器。前者指的是当电源供应中断后,存储器所存储的数据便会消失的存储器,如RAM、DRAM等,断电后保存的信息将会丢失。后者指即使电源供应中断,存储器所存储的数据并不会消失,重新供电后,就能够读取其中数据的存储器,如只读存储器(ReadOnly Memory,ROM)等,断电后保存的信息不会丢失,ROM也可随机访问。在现代计算机系统的主存中,一般都包含这两种存储器。
除主存容量外,主存的另两个重要指标是存储器访问时间和存储周期。存储器访问时间指从启动一次存储器操作到完成该操作所经历的时间。具体讲,从一次读操作命令发出到该操作完成,将数据读入数据寄存器为止所经历的时间。存储周期指连续启动两次独立的存储器操作(如连续两次读操作)所需间隔的最小时间,通常,存储周期略大于存储时间。目前,主存访问速度总比CPU速度慢得多。一次访问时间大约为5~10ns,比CPU的速度慢很多。
由于电源线的尖峰电压或被高能粒子冲击等原因,主存中偶尔也会出错,即保存的信息在某个瞬间由0变为1或由1变成了0。主存中经常采用检错码或纠错码,即在存储的信息中附加一些位,用于检测主存是否出错,其中检错码能检测出1位或多位错,而纠错码能在检测出错误后将出错位改回其正确值。以最常用的奇偶校验码为例,它是在原数据基础上,附加上1位奇偶校验位。根据原数据中1的位数来确定校验位,使整个码字中1的位数为偶数(或奇数)。当某一位出错时,造成校验位将不正确,以此检测出发生了错误。例如,假设字节中保存的信息为11100101,该数有5个1,为奇数,如果采用偶校验,则校验位应为1;如果采用奇校验,校验位为0。当该字节被读出时,会再次对原有的8位进行判定,如果某1位由1变成0或由0变成1,则计算出的奇偶校验与原校验位不符,表示发生了错误。至于要进行纠错,则需要更复杂和强大的编码。
图511典型的高速缓存配置一直以来,CPU的速度总比主存访问速度快。虽然随着工艺水平的提高,主存的访问速度也在不断提高,但是仍然赶不上CPU速度的提高。CPU发出访问主存请求后,往往要等多个时钟周期后才能得到主存内容。存储器越慢,CPU等待的时间就越长。目前,技术上的解决办法是利用更小更快的存储设备与大容量低速的主存组合使用,以适中的价格得到速度和高速存储器差别不大的大容量存储器。
这种更小更快的存储设备称为高速缓存存储器(Cache),简称为高速缓存。高速缓存逻辑上介于CPU和主存之间,可以将其集成到CPU内部,也可置于CPU之外。图511给出了一种典型的高速缓存配置方式。位于CPU
本章介绍计算机系统软硬件相关内容,主要知识点如下。
(1) 计算机系统的基本概念及其组成。
(2) 冯·诺依曼体系结构及各部分工作机制。
(3) 操作系统的基本概念及其主要功能。
(4) 计算机软件系统的分类、层次结构及主要功能。
(5) 计算思维在计算机系统中的体现。
(6) 利用操作系统接口编程查看系统状态。
【学习目标】
通过本章的学习,读者应掌握如下内容。
(1) 了解计算机系统的组成,理解系统各部分的作用。
(2) 理解冯·诺依曼体系结构。
(3) 掌握中央处理器的工作过程。
(4) 理解存储系统的设计原理、构成和工作原理。
(5) 理解输入输出系统的构成和控制方式,掌握基本术语。
(6) 理解总线结构、工作原理以及评价指标。
(7) 掌握操作系统的角色和基本功能。
(8) 理解进程管理、文件管理、设备管理、用户接口等基本概念。
(9) 掌握操作系统进程管理的基本功能和策略。
(10) 理解操作系统存储管理的概念、功能和常用方式。
(11) 理解文件的组织方式,了解文件管理的功能和基本策略。
(12) 理解操作系统设备管理的方式。
(13) 了解操作系统提供的不同用途的用户接口的要素和形式。
(14) 了解计算机软件系统的分类、层次结构及主要功能。
(15) 了解对复杂系统如冯·诺依曼体系结构的抽象与模拟的方法。
(16) 了解通过Python编程使用主流操作系统典型功能的方法。本章主要介绍信息处理核心装置——计算机系统,包括其软硬件构成与结构、如何支持信息处理,以及各部分在信息处理中的作用。首先介绍计算机硬件系统的体系结构,以冯·诺依曼体系结构为依据,介绍计算机系统的硬件构成。然后围绕着该体系结构各部件,介绍它们如何进行信息表示、信息传递和信息处理,偏重于各部件的核心构成以及基本工作原理。
操作系统是计算机系统中最重要的软件,它对计算机系统的软硬件资源进行管理、协调,并代表计算机与外界进行通信。正是有了操作系统,才使得计算机硬件系统成为真正可用,本章介绍操作系统如何完成上述功能。介绍操作系统的基本概念,根据操作系统的系统管理角色和功能,依次介绍进程管理、存储管理、文件管理、设备管理和用户接口,以及操作系统的加载等所涉及的基本概念和策略。
最后,对硬件系统用模拟的方法进行了研究,展示了如何利用Python编程使用操作主要功能。
大学计算机基础(第3版)第5章计算机系统5.1概述
一般来说,计算机是一种可编程的机器,它接收输入,存储并且处理数据,然后按某种有意义的格式进行输出。可编程指的是能给计算机下一系列的命令,并且这些命令能被保存在计算机中,并在某个时刻能被取出执行。
通常所说的计算机实际上指的是计算机系统,它包括硬件和软件两大部分。硬件系统指的是物理设备,包括用于存储并处理数据的主机系统,以及各种与主机相连的、用于输入和输出数据的外部设备,如键盘、鼠标、显示器和磁带机等,根据其用途又分为输入设备和输出设备。计算机的硬件系统,是整个计算机系统运行的物理平台。计算机系统要能发挥作用,仅有硬件系统是不够的,还需要具备完成各项操作的程序,以及支持这些程序运行的平台等条件,这就是软件系统。所以,一个实际的计算机系统通常由图51所示的结构构成。
图51计算机系统的构成
目前占主流地位的计算机硬件系统结构是冯·诺依曼体系结构,由美国科学家冯·诺依曼等在1946年提出。在此之前出现的各种计算辅助工具,如差分机等,其用途是固定的,即各种操作是在制造机器的时候就固定下来,不能用于其他用途。以常见的计算器为例,人们只能用它进行各类定制好的运算,而无法用它进行文字处理,更不能打游戏。要使这类机器增加新的功能,只能更改其结构,甚至重新设计机器。所以,这类计算装置是不可编程的。
冯·诺依曼体系结构的核心思想——存储程序改变了这一切。通过创造一组指令集,并将各类运算转化为一组指令序列,使得不需改变机器结构,就能使其具备各种功能。在冯·诺依曼体系结构中,程序和数据都是以二进制形式存放在计算机存储器中,程序在控制单元的控制下顺序执行。程序是计算机指令的一个序列,指令是计算机执行的最小单位,由操作码和操作数两部分构成。操作码表示指令要执行的动作,操作数表示指令操作的对象是什么,即数据。
在该体系结构中,计算机由5部分组成: 存储器、运算器、控制器、输入和输出设备(见图52)。需要执行的程序及其要处理的数据保存于存储器中,控制器根据程序指令发出各种命令,控制运算器对数据进行操作、控制输入设备读入数据以及控制输出设备输出数据。
图52冯·诺依曼体系结构
在冯·诺依曼体系结构形成之前,人们将数据存储于主存中,而程序被看成是控制器的一部分,两者是区别对待和处理的。而将程序与数据以同样的形式存储于主存中的特点,对于计算机的自动化和通用性,起到了至关重要的作用。
冯·诺依曼体系结构指的是单机体系结构。为了提高计算机的性能,科学家们提出了各种体系结构。例如,由多个计算机构成的并行处理结构、集群结构等。它们的出现,是为了满足特定任务的要求,这些任务要求计算机系统有更高的能力,以满足诸如气象预报、核武器数值模拟、航天器设计等任务的需求。目前,主流的并行计算结构有对称多处理系统(Symmetric Multi Processing,SMP)、大规模并行处理系统(Massively Parallel Processing,MPP)和集群等。
除了看得见摸得着的硬件之外,计算机系统中还包含各种计算机软件系统,简称为软件。计算机科学对软件的定义是,“软件是在计算机系统支持下,能够完成特定功能和性能的程序、数据和相关的文档”。于是,软件可形式化地表示为
软件=知识 程序 数据 文档
程序是用计算机程序设计语言描述的。无论是低级语言(如汇编语言),还是高级语言(如C 、Java),程序都可以在相应语言编译器的支持下转换成操纵计算机硬件执行的代码。数据是程序加工的对象和结果。计算机直接加工的数据结构只有简单的整型数、浮点数、逻辑量、字符,人们可以根据需要,在此基础上定义复杂的数据结构。基于大量数据处理的软件需要数据库系统的支持,涉及数据的加工、存储、检索、传输、应用等。文档记录软件开发的活动和中间制品、记录软件的配置及变更,用于软件专业人员和用户的交流,以及用于软件开发、过程管理和运行阶段的维护。
软件系统是用户与硬件之间的接口,着重解决如何管理和使用计算机的问题。用户主要是通过软件系统与计算机进行交流。软件是计算机系统设计的重要依据。为了方便用户,以及使计算机系统具有较高的总体效用,在设计计算机系统时,必须通盘考虑软件与硬件的结合,以及用户的要求和软件的要求。没有任何软件支持的计算机称为裸机,其本身不能完成任何功能,只有配备一定的软件才能发挥功效。
软件是抽象的逻辑产品,而不是物理产品。由于不受材料的限制,也不受物理定律或加工过程的制约,具有很大的灵活性。软件的灵活性具有双重性,程序员通过编程可以让计算机巧妙地工作,同时也很容易让软件变得极为复杂,难以理解。软件开发过程的监督、控制、管理有着特殊的困难。因此,软件在开发、生产、维护和使用等方面与硬件相比存在明显的差异。
图53计算机软件
系统的结构
软件的分类原则、方法很多,从软件的功能上分为系统软件和应用软件,从实时性上分为实时软件和非实时软件,从软件运行环境上分为单机软件和网络软件,从加工的数据类型上分为事物处理软件、科学和工程计算软件,从计算方法上分为基于传统算法的软件、基于符号演算和推理规则的人工智能软件,等等。
计算机软件系统的结构如图53所示,这是典型的分层结构,下层系统向上层系统提供服务,上层系统利用下层系统提供的服务,以及特定的程序,可以完成指定的任务。使用计算机并不会直接操作计算机硬件,而是通过在操作系统和各种应用软件上的操作来控制计算机完成各种任务。
5.2计算机硬件系统
目前占主流地位的计算机硬件系统结构是冯·诺依曼体系结构,如图54所示。该图中,冯·诺依曼体系结构中的控制器和运算器被集中于CPU中,分别对应控制器和算术逻辑单元,主存对应存储器,各种输入输出设备分别对应体系结构中的输入设备和输出设备,各种总线(图中以空心箭头表示)对应于冯·诺依曼体系结构图中的互连线,用于传输命令和数据。
图54典型的计算机硬件组织结构
5.2.1中央处理器
一般把中央处理器简称为处理器,是执行存储在主存中的指令的引擎。CPU一般由算术逻辑运算器(Arithmetic and Logic Unit,ALU)、控制单元(Control Unit,CU)和寄存器组构成,由CPU内部总线将这些构成连接为有机整体,如图55所示。
图55CPU的内部结构
控制单元的主要功能包括指令的分析、指令及操作数的传送、产生控制和协调整个CPU工作所需的时序逻辑等。一般由指令寄存器(Instruction Register,IR)、指令译码器(Instruction Decoder,ID)和操作控制器(Operation Controller,OC)等部件组成。CPU工作时,根据程序计数器保存的主存地址,操作控制器从主存取出要执行的指令,存放在指令寄存器IR中,经过译码,提取出指令的操作码、操作数等信息,操作码将被译码成一系列控制码,用于控制CPU进行ALU运算、传输数据等操作,通过操作控制器,按确定的时序,向相应的部件发出微操作控制信号,协调CPU其他部件的动作。操作数将被送到ALU进行相对应的操作,得出的结果在控制单元的控制下保存到相应的寄存器中。
ALU的主要功能是实现数据的算术运算和逻辑运算。ALU接收参与运算的操作数,并接收控制单元输出的控制码,在控制码的指导下,执行相应的运算。ALU的输出是运算的结果,一般会暂存在寄存器组中。此外,还会根据运算结果输出一些条件码到状态寄存器,用于标识一些特殊情况,如进位、溢出、除零等。
寄存器组由一组寄存器构成,分为通用和专用寄存器组,用于临时保存数据,如操作数、结果、指令、地址和机器状态等。通用寄存器组保存的数据可以是参加运算的操作数或运算的结果。专用寄存器组保存的数据用于表征计算机当前的工作状态,如程序计数器保存下一条要执行的指令,状态寄存器保存标识CPU当前状态的信息,如是否有进位、是否溢出等。通常,要对寄存器组中的寄存器进行编址,以标识访问哪个寄存器,编址一般从0开始,寄存器组中寄存器的数量是有限的。
数据和指令在CPU中的传送通道称为CPU内部总线,总线实际上是一组导线,是各种公共信号线的集合,用于作为CPU中所有各组成部分传输信息共同使用的“公路”。一般分为数据总线(Data Bus,DB)、地址总线(Address Bus,AB)、控制总线(Control Bus,CB)。其中,数据总线用来传输数据信息;地址总线用于传送CPU发出的地址信息;控制总线用来传送控制信号、时序信号和状态信息等。
指令是CPU执行的最小单位,由操作码和操作数两部分构成,如图56(a)所示。操作码表示指令的功能,即执行什么动作,操作数表示操作的对象是什么,例如寄存器中保存的数据、立即数等。计算机能识别的指令是由0和1构成的字串,称为机器指令。指令的长度通常是一个或几个字长,长度可以是固定的,也可是可变的。图56(b)给出了某款CPU的加法指令的示意图。该指令长度为16位(一个字长),从左至右标识各位为bit15~bit0。bit15~bit12代表的是操作码,为0001,在该CPU中表示加法操作。bit11~bit0对应操作数的表示,由于该指令需要3个操作数,bit11~bit0将会被拆分为3段,分别对应两个相加数(源操作数)和一个求和结果(目的操作数)。bit11~bit9对应保存目的操作数的寄存器地址,在该示例中为110,表示寄存器R6,bit8~bit6与bit2~bit0分别对应保存源操作数的寄存器地址,分别为R2和R6。则这条指令表示将寄存器R6和R2 中保存的数值进行加运算,结果保存回寄存器R6。bit5~bit3用于扩展加法指令的操作,此处不做解释。
图56指令
机器指令由0和1字符构成,计算机易于阅读和理解,但是,不适合人使用。所以,在指令中引入助记符表示操作码和操作数,以帮助人理解和使用指令。这样的指令称为汇编指令。如图56(c)所示,用ADD来标识该指令是加法指令,R6和R2标识用到的寄存器。计算机不能直接执行汇编指令,要由汇编器将其翻译成对应的机器指令才可执行。对图56(c)的ADD指令,汇编器会将其翻译成图56(b)的形式。
CPU的指令是由指令集体系结构(Instruction Set Architecture,ISA)规定的。每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。ISA是与程序设计有关的计算机结构的一部分,定义了指令类型、操作种类、操作数数目与类型,以及指令格式等,可用CPU指令集的指令来编写程序。程序就是用于控制计算机行为完成某项任务的指令序列。在指令集中,通常定义的指令类型有3种。
(1) 操作指令: 是处理数据的指令,例如算术运算和逻辑运算都是典型的操作指令。
(2) 数据移动指令: 它的任务是在通用寄存器组和主存之间、寄存器和输入输出设备之间移动数据。例如,将数据从主存移入寄存器的LOAD指令,和反方向移动数据的STORE指令等。
(3) 控制指令: 能改变指令执行顺序的指令。例如无条件跳转指令,将程序计数器的值更改为一个非顺序的值,使得下一条指令从新位置开始。
图57是一个程序示例,为了便于阅读,采用了汇编指令编写,分号后面是程序的注释,帮助人们阅读和理解程序,而计算机将忽略这些注释。
图57程序示例
这段程序用于计算1 2 … 1000的值。利用寄存器R1和R0,开始时将R0设为0,R1设为1。然后将R1的值加到R0上,同时R1增1。此后将R1的值与1000进行比较,如果R1比1000小,则重复执行将R1加到R0上以及R1增1的操作,然后再比较。这种重复执行将在R1大于1000时结束,同时将结束程序的运行。程序中,add是操作指令,ble是控制指令。ble与cmp一起使用,当cmp比较结果为小于等于1000时,该指令被执行,将执行顺序跳转到loop所标示的指令。
CPU的工作过程是循环执行指令的过程。指令的执行过程是在控制单元的控制下,精确地、一步一步地完成的。称这个执行的步骤顺序为指令周期,其中的每一步称为一个节拍。不同的CPU可能执行指令的节拍数不同,但是通常图58指令执行常见节拍划分
都可归为以下4个阶段(见图58)。
(1) 取指令: 指令通常存储在主存中,CPU通过程序计数器获得要执行的指令存储地址。根据这个地址,CPU将指令从主存中读入,并保存在指令寄存器中。
(2) 译码: 由指令译码器对指令进行解码,分析出指令的操作码,所需的操作数存放的位置。
(3) 执行: 将译码后的操作码分解成一组相关的控制信号序列,以完成指令动作,包括从寄存器读数据、输入到ALU进行算术或逻辑运算。
(4) 写结果: 将指令执行节拍产生的结果写回到寄存器,如果有必要,将产生的条件反馈给控制单元。
以上的节拍划分是粗粒度的,通常每个节拍所包含的动作很难在一个时钟周期内完成,因此,会进一步将每个节拍进行细化,细化后的每个动作可在一个时钟周期内完成,不可再细分。例如,取指令阶段可以再细分为如下。
(1) 将程序计数器的值装入到主存的地址寄存器。
(2) 将地址寄存器所对应的主存单元的内容装入主存数据寄存器。
(3) 控制单元将主存数据寄存器的内容装入指令寄存器,同时对程序计数器“增1”。
可见,取指令这个节拍要花费3个时钟周期。对现代计算机来说,每个时钟周期非常短。例如对主频为3.3GHz的CPU,每秒将完成33亿个时钟周期,每个时钟周期的时间长度为0.303ns,而取指令节拍将花费0.909ns。
在最后一个节拍完成后,控制单元复位指令周期,从取指令节拍重新开始运行,此时,程序计数器的内容已被自动修改,指向下一条指令所在的主存地址。操作指令和数据移动指令的执行不会主动修改程序计数器的值,程序计数器将会自动指向程序顺序上的下一条指令。而控制指令的执行将会主动改变程序计数器的值,使得程序的执行将不再是顺序的。
图59程序在主存中的存储形式以图57的程序为例来理解CPU的工作过程。假设这段程序存放在主存中的排列形式如图59所示。要开始执行这段代码时,将会由操作系统将程序计数器的值设为A0,在取指令阶段将该地址的指令“mov #0, R0”取出存入指令寄存器,同时程序计数器“增1”为A1。mov指令经译码后,在控制单元控制下将寄存器R0置为0。此时指令执行结束,控制单元复位,从取指令重新执行——根据程序计数器的值A1取下一条指令。该过程将一直执行到ble指令。该指令执行完后,将会对程序计数器进行覆盖,将loop对应的指令地址写入程序计数器,使得下一条指令将不再是顺序执行的,而是跳转到loop指令开始执行。当条件满足时,ble指令的执行不修改程序计数器的值,此时,将取halt指令开始执行。
5.2.2存储系统
计算机系统中的存储器一般分为主存(又称为内存)和辅存(又称为外存),主存可与CPU直接进行信息交换,其特点是运行速度快,容量相对较小,在系统断电后,其保存的内容会丢失。辅存属于外部设备的范畴,如硬盘、光盘等,它们通过各种专门接口与计算机通信。辅存与CPU之间不能直接交换数据,其特点是存储容量大,存取速度比主存慢,系统断电后其保存的信息不会丢失,存储的信息很稳定。
主存储器的一般结构如图510所示,包括用于存储数据的存储体和外围电路,外围电路用于数据交换和存储访问控制,与CPU或高速缓存连接。外围电路中有两个非常重要的寄存器——数据寄存器MDR(Memory Data Register)和地址寄存器MAR(Memory Address Register),前者是用于临时保存读出或写入的数据,后者用于临时保存访问地址。要访问主存时,首先将要访问的地址送入MAR,如果是读主存,则在控制电路控制下,将MAR指向的主存单元数据送入MDR,然后发送到CPU或高速缓存;如果是写主存,则首先要将需写入的数据送到MDR,在控制电路控制下,将MDR数据写入到MAR指向的主存单元。
图510主存储器的结构
主存中存储的最基本单元是一个01符号串,可以代表数字、字符等信息。存储器由很多可存放长度(位数)相同的01符号串的单元组成,称为主存单元,每个主存单元有一个编号,这个编号就是主存地址。主存地址用二进制数来表示,如果表示地址的二进制数有m位,则主存地址最大可编码到2m-1(从0开始编码),也就是说最多可以有2m个主存单元,称为存储容量。可以通过主存地址来对主存单元存放的01符号串进行读写,这种读写操作通常被称为访问主存。访问主存时可根据地址独立地对各单元数据进行读写,访问时间与被访问地址无关,因此,主存又称为随机访问存储器(Random Access Memory,RAM)。为了规整化,主存单元的长度一般标准化为8位,即一个字节(Byte),再由字节组合成字。
主存中存储电路的原理类似于电容,主存中通过对电路进行充电来存储信息,但是这很容易流失,因此,需要在很短的时间内不断地充电,称为刷新。采用这种技术的主存又称为动态存储器(Dynamic RAM)。
根据存储能力与电源的关系可将主存分为易失性存储器和非易失性存储器,计算机系统主存一般都包含这两类存储器。前者指的是当电源供应中断后,存储器所存储的数据便会消失的存储器,如RAM、DRAM等,断电后保存的信息将会丢失。后者指即使电源供应中断,存储器所存储的数据并不会消失,重新供电后,就能够读取其中数据的存储器,如只读存储器(ReadOnly Memory,ROM)等,断电后保存的信息不会丢失,ROM也可随机访问。在现代计算机系统的主存中,一般都包含这两种存储器。
除主存容量外,主存的另两个重要指标是存储器访问时间和存储周期。存储器访问时间指从启动一次存储器操作到完成该操作所经历的时间。具体讲,从一次读操作命令发出到该操作完成,将数据读入数据寄存器为止所经历的时间。存储周期指连续启动两次独立的存储器操作(如连续两次读操作)所需间隔的最小时间,通常,存储周期略大于存储时间。目前,主存访问速度总比CPU速度慢得多。一次访问时间大约为5~10ns,比CPU的速度慢很多。
由于电源线的尖峰电压或被高能粒子冲击等原因,主存中偶尔也会出错,即保存的信息在某个瞬间由0变为1或由1变成了0。主存中经常采用检错码或纠错码,即在存储的信息中附加一些位,用于检测主存是否出错,其中检错码能检测出1位或多位错,而纠错码能在检测出错误后将出错位改回其正确值。以最常用的奇偶校验码为例,它是在原数据基础上,附加上1位奇偶校验位。根据原数据中1的位数来确定校验位,使整个码字中1的位数为偶数(或奇数)。当某一位出错时,造成校验位将不正确,以此检测出发生了错误。例如,假设字节中保存的信息为11100101,该数有5个1,为奇数,如果采用偶校验,则校验位应为1;如果采用奇校验,校验位为0。当该字节被读出时,会再次对原有的8位进行判定,如果某1位由1变成0或由0变成1,则计算出的奇偶校验与原校验位不符,表示发生了错误。至于要进行纠错,则需要更复杂和强大的编码。
图511典型的高速缓存配置一直以来,CPU的速度总比主存访问速度快。虽然随着工艺水平的提高,主存的访问速度也在不断提高,但是仍然赶不上CPU速度的提高。CPU发出访问主存请求后,往往要等多个时钟周期后才能得到主存内容。存储器越慢,CPU等待的时间就越长。目前,技术上的解决办法是利用更小更快的存储设备与大容量低速的主存组合使用,以适中的价格得到速度和高速存储器差别不大的大容量存储器。
这种更小更快的存储设备称为高速缓存存储器(Cache),简称为高速缓存。高速缓存逻辑上介于CPU和主存之间,可以将其集成到CPU内部,也可置于CPU之外。图511给出了一种典型的高速缓存配置方式。位于CPU
书摘插画
评论
还没有评论。