1. 计算机发展简史
如下图所示,计算机发展经历了4个阶段
1.1 电子管(真空管)计算机
它不能像今天我们编写程序那样编程。只能执行预定的操作,操作信息通过硬连线发送到电路中。即使使用了接线电缆和开关,编程也只能通过重新连线完成。
1.2 晶体管计算机
1948年AT&T贝尔实验室的三个科学家发明了晶体管,之后发展出了半导体,它在功能上与真空管等效,但体积更小,功耗更低。晶体管的发明,使将多个晶体管放在一块硅片上构成一个完整的电路成为可能。
1.3 集成电路计算机
IBM推出了7094与1401,两者间主打功能不同,无法相互兼容。所以IBM推出了兼容的产System/360(也就是操作系统的雏形),导致了计算机体系结构这一概念的出现(即指令集体系结构)。
1.4 超大规模集成电路计算机
超标量处理和乱序执行的出现是计算机组成的另一个重要变化。超标量处理包括从存储器中读出几条指令且并行执行这些指令;乱序执行则是指以不同于程序中顺序的顺序执行指令,以避免等待某条指令的执行,从而加快指令的执行速度。乱序执行允许在当前指令等待正被使用的资源时执行程序中靠后的指令。用菜谱做类比,乱序执行就相当于在烹饪主菜的时候准备甜点。Intel在它的Pentum系列处理器中引入了乱序执行机制。
1.5 存储技术发展
20世纪30年代,约翰·文森特·阿塔纳索夫发明出一种最早的存储设备,这是一个覆盖着电容的旋转的磁鼓,能够充电并存储1和0。磁鼓旋转时,电容从一排触点下通过,它们的值会被读出。
20世纪40年代,汞超声延迟线被用来存放数据,就像一串超声脉冲沿着一条充满水银的细管传播一样。当脉冲信号从一端传递到另一端时,它会被放大并再次循环。这是真正的动态存储。第一个快速数据存储设备是由英国曼彻斯特大学的弗雷德里克·威廉姆斯(Frederick Williams)发明的。阴极射线管(最初用于雷达显示器,后来用于电视机)通过用电子束照射某个点进行充电,从而将数据存放在其表面(这是阿塔那索夫旋转磁鼓的电子版本)。第一代威廉姆斯管只能存储 1024 比特,后来翻倍为 2048 比特。
1949年,佛瑞斯特设计了铁氧体磁芯存储器。磁芯是一个很小的磁材料环,能够沿顺时针或逆时针方向磁化。到20世纪 70年代,铁氧体磁芯存储器已成为大型机的主流存储器。实际上,铁氧体磁芯存储器带给我们磁芯存储器(core store)这个名词,现在描述大容量外存储器时偶尔还会用到它。
20世纪 70年代,人们发明了半导体动态存储器用作磁芯存储器的替代品,现在已成为数据存储的标准手段。今天,我们可以很容易地用容量较小的DRAM模块(在一个小的电路板上集成几个存储芯片)实现8G字节的存储容量。
1956年IBM在它的统计控制随机存取方法(RAMAC)上引入了一种磁盘存储机制,将数据保存在一个旋转的磁盘的表面。RAMAC 305 磁盘能够存储大约SMB的数据,转速为1200 rpm。自那时起,磁盘性能开始提升。现在。磁盘的最大容量约为4T(2")字节。由于磁盘的机械特性,其典型转速为7200 rpm,仅有最初 RAMAC的6倍快。让我们再次说一次∶现代磁盘的容量是RAMAC的数百万倍,但其速度却仅是RAMAC 的6倍。这一细节指出了计算机发展过程中的瓶颈∶计算机各个组成部分的发展速度是不均衡的。不过。现在用来替代硬磁盘的固态盘技术具有非常快的、完全电子化的驱动器。
今天,个人计算机使用光存储器(DVD 或蓝光光盘)导入程序或存储数据。光存储技术将信息存放在透明聚碳酸酯盘上的螺旋轨道上。利用激光技术从可重写光盘上读出信息,或将信息写入可重写光盘。CD技术是在1958年(发明激光)~1978年(可用的光存储器)间发明的。DVD(1997年发明)是改进的CD,蓝光光盘(2006年)是改进的DVD。
2. 计算机的体系与结构
2.1 什么是计算机系统体系结构
媒体一直以来将一个微处理器(microprocessor)或者甚至是一块芯片(chip)称作计算机系统。实际上,计算机系统包括读取并执行程序的中央处理单元
(central processing unit,CPU),保存程序
和数据的存储器
,以及将芯片转换为实用系统的其他子系统
。这些子系统会使CPU与显示器、打印机。intermet等外部设备之间的通信变得更加容易。
计算机中实际执行程序的部分叫作 CPU,或者更简单地被称作处理器。微处理器则是在单个硅片上实现的CPU。围绕着微处理器构建的计算机被称作微机。
尽管CPU是计算机的核心,计算机的性能既取决于CPU,也取决于其他子系统的性能。如果不能高效地进行数据传输,仅仅提高CPU的性能是毫无意义的。计算机科学家曾开玩笑说,提高微处理器的性能只不过是让CPU更平地开始等待来自存储器或磁盘驱动器的数据
。计算机不同组成部分的性能提升速度是当前计算机系统设计者面临的主要问题,因为各个部分的性能提升速度并不一致。例如,过去几十年中,处理器的性能持续高速增长,而硬盘的性能(访问时间)在过去30年内几乎保持不变。不过随着固态盘(solidstatedisk,SSD)等半导体硬盘开始取代机械硬盘,这种窘境有可能结束。
下图描述了一个简单的通用计算机(如个人计算机或工作站)结构。除了CPU外,图中还有一些几乎所有计算机中都有的部件。信息(即程序和数据)保存在存储器中。为了实现不同的目标,真实的计算机会使用不同类型的存储器。下图就就有 Cache、主存、辅存等多个存储层次。注意的是,虽然图中的Cache位于CPU外,但目前绝大多数处理器都在CPU内集成了片上 Cache
。
2.2 冯诺伊曼体系
早期的数字计算机通过硬连线(hardwired)完成特定任务。硬连线是指计算机的功能(程序)只能通过重新布线来改变。
通用计算机
把硬件(即实际的数字电路)按照程序的指示完成范围相当广泛的工作。
上图详细地描述了数字计算机的结构,它可被分为两部分∶中央处理单元
和存储器
系统。CPU 读程序并完成程序指定的操作。存储器系统保存两类信息,程序、程序处理或产生的数据。
注意的是,很少有计算机像上图那样在CPU 和存储器之间设置两条独立的信息通路。大多数计算机在 CPU 和存储器系统之间仅有一条信息通路,数据和指令要轮流使用这条通路。之所以在上图中画出两条通路,是为了强调存储器中既保存了组成程序的指令,也保存了程序所用的数据。
冯诺依曼体系结构
• 必须有一个存储器
• 必须有一个控制器
• 必须有一个运算器
• 必须有输入设备
• 必须有输出设备
冯诺伊曼机特点:
- 能够把需要的程序和数据送至计算机中
- 能够长期记忆程序、数据、中间结果及最终运算结果的能力
- 能够具备算术、逻辑运算和数据传送等数据加工处理的能力
- 能够按照要求将处理结果输出给用户
现代计算机结构
2.3 指令执行过程
上图描述了一个执行z=x+y指令的过程。CPU必须首先从存储器中取出(fetch)一条货令。在CPU分析或解码这条指令之后。它会从存储器中读出这条指令所需的所有数据。第一条指令,LOAD x
,从存储器中读出变量X的值,并将它暂存在寄存器中。第二条指令从存储器中读出变量Y的值并保存在另一个寄存内。然后在 CPU 读出第三条指令时,它会将这两个寄存器的内容相加,并将结果保存在第三个寄存器中。第四条指令会将加法的结果写回存储单元 Z。
要说一台计算机所做的就是从存储器中读数据,对数据进行计算(加、乘等),然后将计算结果写回存储器,也有一定的道理。计算机能做的另外一件事情是测试数据(即判断一个数是否为0,它的符号是正还是负),然后根据测试结果从两个候选的指令流中选出一个来执行。
6条基本指令
2.4 计算机编程语言
计算机上执行的代码表示为二进制1和0组成的串,被称作机器码(machine code)。每种计算机都只能执行一种特定的机器码。人类可读的机器码(例如ADD R0,Time)叫作汇编语言。能够在类型完全不同的计算机上运行,与底层计算机体系结构几乎没有关系的代码叫作高级语言(比如C或 Java)。在执行之前,高级语言程序必须首先被编译为计算机的本地机器码。
程序翻译与程序解释
计算机最终执行的指令都是L0
- 翻译过程生成新的L0程序,解释过程不生成新的L0程序
- 解释过程由L0编写的解释器去解释L1程序
程序翻译型语言:c/c++、Object-c、Golang等
程序解释型语言:Python、php、JavaScript等
翻译+解释型:Java、C#
计算机层级
- 硬件逻辑层
- 门、触发器等逻辑电路组成
- 属于电子工程的领域
- 微程序机器层
- 编程语言是
微指令集
微指令
所组成的微程序
直接交由硬件执行
- 传统机器层
- 编程语言是
CPU指令集(机器指令)
- 编程语言和硬件是直接相关
- 不同架构的CPU使用不同的CPU指令集
- 微指令 < 微程序 = 机器指令
- 一条机器指令对应一个微程序
- 一个微程序对应一组微指令
- 操作系统层
- 向上提供了简易的操作界面
- 向下对接了指令系统,管理硬件资源
- 操作系统层是在软件和硬件之间的适配层
- 汇编语言层
- 编程语言是汇编语言
- 汇编语言可以翻译成可直接执行的机器语言
- 高级语言层
- 编程语言为广大程序员所接受的高级语言
- 高级语言的类别非常多,由几百种
- 常见的高级语言有:Python、Java、C/C++、Golang等
外体系结构是指计算机体系结构较高层次的方面,如数据结构和指令集。前缀exo意为外部的,表示汇编语言程序员看到的计算机抽象。
内体系结构则表示计算机的内部组成,包括计算机基本单元的性能,各个部件是如何连接的,信息流的控制方式。也就是说,内体系结构在寄存器、加法器和控制电路等功能部件一级描述了处理器。
微体系结构,它描述了执行机器指令时必须完成的一些动作(例如将数据从一个寄存器复制到另一个寄存器中)。内体系结构执行的操作是由微体系结构实现的。例如,内体系结构只会关注加法器的功能,而微体系结构则会关注ALU是如何实现这些功能的。因此,外体系结构是程序员看计算机的抽象视图,它是由内体系结构实现的,而内体系结构又是由微体系结构通过执行微程序实现的。
外体系结构为最高层,表示程序员所看到的计算机视图。内体系结构为中间层次,从计算机的组成模块和模块间的互连等方面描述计算机组成。微体系结构(最低层次)则描述了如何在门级实现计算机的组成模块。
3. 存储程序计算机
3.1 模拟计算机执行程序
找出最大游程,即同一个数字连续出现的最大次数。
我们用R表示在同一序列状态,NR表示不在,如下图
i 串的当前位置
New_Digit 刚从数串中读出的数字的值
Current_Run_value 当前序列数值
Current_Run_length 当前序列长度
Max_Run 目前为止的最大序列长度
根据以上定义数值,我们得出下图
以下是伪代码
1. 读出串的第一个数字,将其称为 New_Digit
2. 将 Current_Run_Value 的值置为 New_Digit
3. 将 Current_Run_Length 的值置为 1
4. 将 Max_Run 的值置为 1
5. REPEAT
6. 读出序列中的下一个数字(即 read New_Digit)
7. IF 它的值与 Currenz_Run_Value 相同
8. THEN Current Run Length = Crrent Run_Length+1
9. ELSE {Curxent_Run_Length = 1
10. Current_Run_Value = New_Digit}
11. IF Current_Run_Length > Max_Run
12. THEN Max_Run = Current_Run_Length
13. UNTIL 读出了最后一个数字
第1行从串中读出一个数,这个串必须保存在计算机存储器中的某处。符号名 New_Digit指明了这个数在存储器中的位置。计算机必须确保它在任何需要使用当前序列的当前值的时候,都能访问到存储器的这个位置。
第2行是一个赋值操作,它将一个值赋给一个变量。同样,第3行和第4行也是赋值操作,它们分别将变量current_Run_Length 和Max_Run的值置为1。计算机必须能够完成从存储器中读出一个数,修改这个数并且将修改后的数写回存储器等操作。
第 5行包含关键字REPEAT,它告诉我们这里是一组将被执行1次或多次的操作的起始位置。这组操作以第 13 行的关键字 UNTIL 结尾。
第7、8和10行说明了条件执行,即要执行的操作类型取决于测试结果。 第7行比较从串中读出的数值与当前序列的数值是否相同(即比较New_Digit与 Current_Run_value是否相同)。然后根据比较结果执行下面两个操作中的一个。一个操作由第8行关键字THEN后面的文字指定,另一个则由第9、10两行ELSE后的文字指定。第 9和10两行包含在一对花括号中,说明执行时它们将被视作ELSE路径上的一个整体。
根据以上各部分的命名我们介绍下一些简单的定义
3.2 存储器映射
存储器中的每个位置要么保存了指令要么保存了数据元素
我们模拟以下程序执行过程,为了简便起见,我们不得不省略了一些细节。例如,我们在地址10处放置了一条跳转指令,它告诉计算机忽略地址11 和12处的指令,直接执行地址 13的指令。这是必需的,因为如果执行了分支的THEN部分,那么必须忽略掉它的ELSE 部分。此处还说明了怎样用符号Memory(i)来访问每个数字,它表示存储器的第i个单元。i的值被初始化为21,并且循环在i等于 37时结束。
0 | i = 21 | 1 | New Digit = Memory(i) | 2 | 将变量 Current_Run_Value 的值置为变量 New_Digit的值 | 3 | 将变量 Current_Run_Value 的值置为1 | 4 | 将变量 Max_Run 的值置为1 | 5 | REPEAT | 6 | i = i + 1 | 7 | New Digit = Memory(i) | 8 | IF New Digit Current_Run_Value | 9 | THEN Current_Run_Length = Current_Run_Length + 1 | 10 | 跳转到13行 | 11 | ELSE Current_Run_Length = 1 | 12 | Current_Run_Value = New_Digit | 13 | IF Current_Run_Length > Max_Run | 14 | THEN Max_Run = Current_Run_Length | 15 | UNTIL i = 37 | 16 | Stop | 17 | New Digit | 18 | Current_Run_Value | 19 | Current_Run_Length | 20 | Max_Run | 21 | 2 串第一个数字 | 22 | 3 | 23 | 2 | 24 | 7 | ... | ... | 37 | 1 串最后一个数字 |
下图描述了存储系统的组成。处理器将一个放在地址总线上的地址以及一个用于选择读操作或写操作(它们有时也被称作读或写周期)的控制信号发送给存储器。在读周期中,存储器将数据放在数据总线上供CPU读取。在写周期中,放在数据总线上的数据被写人存储器。信息进入或离开存储器的位置(或计算机系统的其他功能部分)叫作端口。
虽然下图中的存储器是简化后的版本,它却准确地描述了将数据和指令连续存放的计算机存储器。一台真正的计算机会使用存储系统层次(每个层次都有可能采用不同的技术来实现)。这些层次包括保存频繁被访问数据的速度非常快的Cache、主存,以及速度非常慢的辅存,在这一层次中大量数据会一直保存在磁盘、光盘或DVD中,直到使用时才会被调入主存。
RTL 符号
从存储器中取出每条指令都需要进行一次访存操作(即读存储器) 在机器上执行一条指令需要至少两次访存。第一次访存是读取指令。第二次访存要么从存储器中读出指令需要的数据,要么将它之前的指令产生的或修改过的数据写回存储器.有时候也称存储程序计算机是按照读取/执行(fetch/execution)周期的两阶段模式工作的。
3.3 指令类型
- 三地址指令
[Address1] ← [Address2] operation [Address3]
它一共需要4次访存(即一次取指令,两次取两个源操作数,一次保存结果)。
下图描述了如何用操作码选择一个操作(四选一),用源地址选择两个存储单元、以及用目的地址选择写回操作数的存储单元。该图还说明了加法指令执行期间所产生的信息流。
- 两地址指令
operation Address1,Address2
这里Address2为源操作数,Address1既是源操作数也是目的操作数。这种指令格式意味着从存储器中读出源操作数,对其进行操作,并将结果写回存储器中第一个源操作数的位置。指令 ADD P,Q的 RTL定义为[P] ← [P] +[Q]
两地址指令会破坏它的一个操作数。也就是说,它会用结果替换源操作数P。
在实际的计算机中,一般都不会允许同一条指令中使用两个存储地址。绝大多数计算机(如 Pentium 或更现代一些的 Core i7处理器)都规定一个地址是存储器地址,另一个地址是寄存器。
- 单地址指令
由于指令中只提供了一个操作数地址而指令却需要至少两个地址,处理器不得不使用一个不需要显式地址的第二操作数。也就是说,第二个操作数来自 CPU 内一个叫作累加器(accumulator)的寄存器。
寻址方式是计算机指令集的一个重要特征,它是确定操作数位置的方法。例如,可以直接(即它的地址为1234)或间接(即寄存器5的内容是我们所需要的操作数的地址)给出操作数的位置
3.4 存储层次
计算机科学家将存储器视作一个巨大的通过地址访问的数组。
寄存器存放处理器的工作数据,Cache是缓存常用数据的快速存储器,DRAM存放工作数据块,硬盘则保存程序和数据。请注意,硬盘的容量是寄存器的 4000万倍,但其速度却比寄存器慢2000万倍。
处理器会访问快速的L1(一级)Cache,它是 CPU的一部分,并希望 92%的信息都会在那里找到。如果数据不在L1 Cache 中,则会去访问容量更大但速度更慢的L2(二级)Cache。也许在那里找到数据的概率为98%。如果这次访问也失败了,计算机也许还会去另外一个 Cache 中查找——三级 Cache。如果那里也没有,就只能从主存中取出这个数据了。
如何保持 Cache 存储器和磁盘中的数据一致,是计算机设计者所关注的主要问题。
3.5 总线
总线将计算机的两个或多个功能单元连接在一起并允许它们相互交换数据(例如CPU与显卡之问的总线)。总线还将计策机与外设迮接在一起(例如将打印机接入计机的USB总线)。
总线结构的问题在于,每次只有唯一一个设备能够与其他设备通信,因为这里只有一条信息通路。如果两个设备同时请求使用总线,它们不得不去竞争遂线的控制权。一些系统使用一个名为仲裁器的专用部件来决定允许哪个设备继续工作,而其他竞争者只能等待轮到自己。
多总线系统
为什么要使用两条总线?首先,多条总线允许并发操作。例如,两个设备可以通过总线A相互通信,与此同时另一对设备可以通过总线 B相互通信。一个更重要的原因在于这些总线可能具有完全不同的特点和操作速度。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!