一、计算机的基本结构
一个冯·诺伊曼计算机被抽象成5大组成部分: 控制器、运算器、存储器、输入设备、输出设备。
在这个结构中一个程序由若干指令组成, 在运行之前, 要被“放到“某个地方, 你把这个地方称为存储器(内存), 可以把内存比喻成包含一个个格子的东西, 每个格子里放一条指令。
一个叫控制器的东西去读取“格子“中这个程序的第一条指令,分析指令到底要做什么事情, 然后运算器去执行这个指令, 执行完第一条就接着执行第二条, 如此一直运行下去……
控制器和运算器是如此紧密的在一起工作,你决定把它叫做处理器。
很多程序不仅仅是简单的运算,大部分情况下还要把运算的结果放回到内存的“格子”中, 现在有个问题困扰着你, 内存中已经有指令了, 也要把数据放到这里吗?
经过谨慎的思考,你们做了一个艰难的决定:把指令和数据放到同一个内存中! 这样一来处理器在同一时刻,要么是在读取指令, 要么是在存取数据, 两件事不可能同时进行, 这自然带来了一些性能的问题。
但是你坚信这样的设计结构简单,成本低,容易实现,一定要坚持。
为了做人机交互, 还得有输入设备和输出设备来做辅助。
你们根据电子元件的特点, 抛弃了ENIAC所使用的10进制, 转而使用二进制, 采用布尔代数的逻辑运算, 这极大的简化了电路的设计。
(以上内容节选自码农翻身)
总结一下:计算机在运行时,先从内存中取出第一条指令,通过控制器的译码,按指令的要求,从存储器中取出数据进行指定的运算和逻辑操作等加工,然后再按地址把结果送到内存中去。接下来,再取出第二条指令,在控制器的指挥下完成规定操作。依此进行下去。直至遇到停止指令。
二、存储器
计算机中的存储器按用途存储器可分为主存储器(内存)和辅助存储器(外存),也有分为外部存储器和内部存储器的分类方法。外存通常是磁性介质或光盘等,能长期保存信息。内存指主板上的存储部件,用来存放当前正在执行的数据和程序,但仅用于暂时存放程序和数据,关闭电源或断电,数据会丢失。存储器分类如下:
1、按存储介质
半导体存储器:用半导体器件组成的存储器。
磁表面存储器:用磁性材料做成的存储器。
2、按存储方式
随机存储器:任何存储单元的内容都能被随机存取,且存取时间和存储单元的物理位置无关。
顺序存储器:只能按某种顺序来存取,存取时间和存储单元的物理位置有关。
3、按读写功能
只读存储器(ROM):存储的内容是固定不变的,只能读出而不能写入的半导体存储器。
随机读写存储器(RAM):既能读出又能写入的
4、按信息保存性
非永久记忆的存储器:断电后信息即消失的存储器。
永久记忆性存储器:断电后仍能保存信息的存储器。
5、按用途
根据存储器在计算机系统中所起的作用,可分为主存储器、辅助存储器、高速缓冲存储器、控制存储器等。
各存储器关系如下图:
三、处理器
CPU包括运算逻辑部件、寄存器部件和控制部件等。
CPU主要功能如下
1、处理指令:指控制程序中指令的执行顺序。
2、执行操作:一条指令的功能往往是由计算机中的部件执行一系列的操作来实现的。CPU要根据指令的功能,产生相应的操作控制信号,发给相应的部件,从而控制这些部件按指令的要求进行动作。
3、控制时间:时间控制就是对各种操作实施时间上的定时。在一条指令的执行过程中,在什么时间做什么操作均应受到严格的控制。只有这样,计算机才能有条不紊地工作。
4、处理数据:即对数据进行算术运算和逻辑运算,或进行其他的信息处理。其功能主要是解释计算机指令以及处理计算机软件中的数据, 并执行指令。
四、重要概念
1、局部性
局部性原理: CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
时间局部性:如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。程序循环、堆栈等是产生时间局部性的原因。
空间局部性:在最近的将来将用到的信息很可能与现在正在使用的信息在空间地址上是临近的。
顺序局部性:在典型程序中,除转移类指令外,大部分指令是顺序进行的。顺序执行和非顺序执行的比例大致是5:1。此外,对大型数组访问也是顺序的。指令的顺序执行、数组的连续存放等是产生顺序局部性的原因。
2、流水线技术
流水线技术是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。流水线的工作方式就像工业生产上的装配流水线。在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。
3、虚拟存储器
当代计算机系统由于工艺和成本的原因,主存的容量受到限制。为了给大的程序提供方便,使它们摆脱主存容量的限制,可以由操作系统把主存和辅存这两级存储系统管理起来,实现自动覆盖。也就是说,一个大作业在执行时,其一部分地址空间在主存,另一部分在辅存,当所访问的信息不在主存时,则由操作系统而不是程序员来安排I/O指令,把信息从辅存调入主存。从效果上来看,好像为用户提供了一个存储容量比实际主存大得多的存储器,用户无需考虑所编程序在主存中是否放得下或放在什么位置等问题。我们称这种存储器为虚拟存储器。
虚拟存储器只是一个容量非常大的存储器的逻辑模型,不是任何实际的物理存储器。它借助于磁盘等辅助存储器来扩大主存容量,使之为更大或更多的程序所使用。虚拟存储器指的是主存-外存层次,它以透明的方式为用户提供了一个比实际主存空间大得多的程序地址空间。