内容主要关于计算机总线与IO设备、计算机储存器、计算机的CPU;
计算机的总线
概述
平常我们日常所见的USB,既是通用串行总线(Universal Serial Bus),它提供了提供了对外连接的接口,且不同设备可以通过USB接口进行连接;是一种连接的标准,可以解决不同设备之间的通
信问题,也能够促使外围设备接口的统一。
总线(Bus)也是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束,按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传
输数据、数据地址和控制信号。
在不使用总线进行传输的时候,一般采用分散连接的方式,既输入设备同时与存储器、运算器、控制器连接,这样做会使得线路过于复杂。总线可以用来替代原来的基于运算器为主的分散式连接,通过总
线将多个部件连接在一起,使得运算器只需要与总线打交道,实现了存储器为主的计算机并且方便了硬件的扩展。
总线的分类
总线分为片内总线和系统总线。
片内总线
片内总线,既是高集成度芯片内部的信息传输线。如:寄存器与寄存器之间或寄存器与控制器、运算器之间。
系统总线
系统总线分为数据总线、地址总线、控制总线。是CPU、主内存、IO设备、各组件之间的信息传输线。
数据总线,可以双向传输各个部件的数据信息,数据总线的位数(宽度),一般与CPU位数(CPU一次能够并行处理的数据宽度),一般CPU位数与数据总线宽度相同(32位、64位)。字长为32(指
计算机内部参与运算的数的位数,是指一次能传输的数据的位数),既数据总线的宽度也为32位,因为计算机的字长取决于数据总线的宽度。CPU位数 --> 数据总线宽度 --> 字长。
地址总线,2^n / 2^30 = 16G,n为地址总线位数。CPU是通过地址总线来指定存储单元的,是指定源数据或目的数据在内存中的地址,地址总线的位数与存储单元有关,地址总线位数=n,寻址范
围(存储单元大小):0~2^n,如寻址空间(寻址空间是地址总线决定的)为4G((2^32种地址情况)/2^30得到4G,既需要4G的内存才可以存储那么多个数据地址),则最多可以储存2^32个地址。操作系统
的位数是说其所依赖的指令集的位数。地址总线决定的是存储器的容量,实际生活中就是主板对内存的支持容量是有限制的。系统寻址空间的大小由操作系统位数和地址总线位数共同决定。一般地址总线的位
数指的是当前所使用的那部分的位数。
控制总线,是用来发出各种控制信号的传输线,控制信号经由控制总线从一个组件发给另外一个组件,控制总线可以监视不同组件之间的状态(就绪/未就绪)。
例题:已知,计算机内存容量为4GB,字长为32,则______。
A.地址总线和数据总线的宽度都为32
B.地址总线的宽度为30,数据总线的宽度为32
C.地址总线的宽度为30,数据总线的宽度为8
D.地址总线的宽度为32,数据总线的宽度为8
答案:A
内存容量为4GB,∵ 4G=2^32 ,即内存单元的地址宽度为32位。字长为32位即要求数据总线的宽度为32位,因此地址总线和数据总线的宽度都为32。
总线的仲裁
系统中多个设备或模块可能同时申请对总线的使用权,为避免产生总线冲突,需由总线仲裁机构合理地控制和管理系统中需要占用总线的申请者,在多个申请者同时提出总线请求时,以一定的优先算法仲
裁哪个应获得对总线的使用权。为了解决总线使用权的冲突问题,一般使用仲裁器。
总线的仲裁方法
仲裁方法主要有链式查询、计时器定时查询、独立请求。
(1)链式查询,假设有设备1、设备2、设备3,这三个设备都与系统总线进行连接,除此以外还有一个仲裁控制器,并通过仲裁控制线分别与3个设备相连。
在设备2需要使用系统总线时,会通过控制线发出信号,仲裁控制器收到信号后,发出允许使用的信号,这个信号首先会通过链式进入设备1,若1不需要使用,
则信号会被设备2接收,此时,设备2就可以使用系统总线了。这种方法可以让设备1获得持续的优先权,而且电路的复杂度较低,仲裁的方式也简单,缺点也很明显,
优先权低的设备很可能难以获得设备的使用权,且设备使用串联电路,对电路的故障十分的敏感。
(2)计时器定时查询,仲裁控制器对设备编号并使用计数器累计计数,接收到仲裁信号后,往所有设备发出计数值,计数值与设备编号一致则获得总线使用权。
仲裁控制器分别与设备1,设备2,设备3连接,仲裁控制线也分别连接3个设备,仲裁控制器中还会有一个计数器,假设当前计数器中的值为1,收到设备2的请求后,
仲裁器会将1发送给所有的设备,因为设备1并没有发出过请求,1与设备3的编号不符合,且1余设备2的编号也不符合,所以不会有设备去执行这个允许使用的信息,
此时仲裁器会给每一个设备都发出2信号,这时,设备2收到2信息,就获得了总线的使用权。
(3)独立请求,每个设备均有总线独立连接仲裁器,设备可单独向仲裁器发送请求和接收请求,当同时收到多个请求信号,仲裁器有权按优先级分配使用权。
这种方法,响应速度快,优先顺序可动态改变,可以实现在不同的情况下有不同的优先级方案,缺点也十分明显,设备的连线会十分的多,总线的控制也会复杂。
串联优先级,并联优先级,循环优先级判别。分别对应三种总线仲裁方法。
计算机的输入输出设备
常见的输入设备一般分为字符输入设备和图像输入设备。
字符输入设备一般多见的为键盘。
图像输入设备一般多见为鼠标、数位板、扫描仪
图像输出设备,显示器、打印机、投影仪
输入输出接口的通用设计
接口的设计必须实现允许读取数据和向设备发送数据(写数据)、判断设备有无被占用、判断设备是否已经连接和判断设备已经正常启动。这些都是设计的需求。
接口主要有数据线、状态线、命令线、设备选择线。
数据线,是I/O设备与主机之间进行数据交换的传送线,根据I/O设备的不同,又可以分为单向传输数据线和双向传输数据线。
状态线,IO设备状态向主机报告的信号线,主机可以通过状态线查询设备是否已经正常连接并就绪以及查询设备是否已经被占用。
命令线,CPU向设备发送命令的信号线,比如,发送读写信号和发送启动停止信号。
设备选择线,主机选择I/O设备进行操作的信号线。可以对连在总线上的设备进行选择。比如多个U盘同时连接计算机,CPU通过设备选择线来选择对哪个U盘进行读写操作。
CPU与IO设备的通信
这个问题主要是因为CPU的速度与I/O设备速度不一致,前者速度会快很多。
所以主要有两个方法来适应此问题,分别是程序中断和DMA(直接存储器访问)。
程序中断
当外围IO设备就绪时,向CPU发出中断信号,CPU中有专门的电路响应中断信号。当CPU收到中断信号的时候就会暂停所做的工作转为处理外围I/O设备的工作,等外围I/O设备的事件处理完成后,
CPU才会重新加载之前的工作并继续进行。
程序中断可以提供低速设备通知CPU的一种异步的方式,CPU可以高速运转同时兼顾低速设备的响应。缺点就是如果频繁的打断CPU会降低CPU的使用效率。
以下为程序中断简化的流程:
注:CPU响应中断并不会总是立即响应,会存在延迟。
DMA(直接存储器访问Direct Memory Access)
DMA直接连接主存与IO设备,DMA工作时不需要CPU的参与。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,既不通过CPU,也不需要CPU干预。整个数据传输操作在一
个称为"DMA控制器"的控制下进行的。当主存与IO设备交换信息时,不需要中断CPU,可以提高CPU的效率,DMA设备常见于硬盘和外置显卡。
一次完整的DMA传送过程:
DMA 预处理,CPU向DMA送命令,如DMA方式,主存地址,传送的字数等,之后CPU执行原来的程序
DMA 控制在 I/O 设备与主存间交换数据:
准备一个数据,向CPU发DMA请求,取得总线控制权,进行数据传送,修改卡上主存地址,修改字数计数器内且检查其值是否为零,不为零则继续传送,若已为零,则向 CPU发中断请求。
计算机存储器
存储器的分类
按存储介质分类:
半导体存储器:内存、U盘、固态SSD
磁存储器:磁盘、磁带
按存取方式分类:
随机存储器(RAM),是一种可读可写的存储器,这种存储器的任意一个单元,都可以随机的读取,存取的时间和位置是没有关系的。
串行存储器,存取的时间与位置有关系,因为在读取的时候需要按在存储的先后顺序去查找对应的内容。
只读存储器(ROM),是一种只读不写的存储器,BIOS(基本输入输出系统)以及手机的固件都是存储在ROM里面的,是一些很少进行更改的内容。
存储器的层次结构
在挑选存储器时,读写速度,存储容量,价格都是我们较为关注的,可以使用位价(每比特位价格)来衡量。位价越高,速度越快,容量越小;位价越低,速度越慢,容量越大。
按照他们的读写速度可以分为:
缓存-主存层次
原理:局部性原理:
局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个
较小的连续区域中
实现:在CPU与主存之间增加一层速度快(容量小)的Cache
目的:解决主存速度不足的问题
主存-辅存层次
原理:局部性原理
实现:主存之外增加辅助存储器(磁盘、SD卡、U盘等)
目的:解决主存容量不足的问题
主存储器与辅助存储器
主存储器——内存
RAM(随机存取存储器:Random Access Memory)
RAM通过电容存储数据,必须隔一段时间刷新一次,如果掉电,那么一段时间后将丢失所有数据。
主存储器由以下的部分组成:
与CPU进行交互,CPU中的MDR通过数据总线与读写电路进行连接,
CPU中的MAR通过地址总线与内存进行连接,CPU可以通过地址总线来指定数据的位置,通过数据总线来传输某个位置的数据
辅助存储器——磁盘
磁盘表面是可磁化的硬磁特性材料
读取数据的方法是移动磁头径向运动读取磁道信息
磁头位置:磁头当前所在的磁道
磁头方向:磁头是由外向内运动或由内向外运动
磁盘的调度算法
假设磁道在磁道4,磁头方向由里向外,现在需要读取磁道1 4 2 3 1 5 。
先来先服务算法:
磁头会先从第四个磁道移动到第一个磁道再到第四个磁道,再到第二个磁道、第三磁道、第一磁道,最后读取第五磁道.
最短寻道时间优先:
与磁头当前位置有关,优先访问离磁头最近的磁道;
优先读取第四个磁道,接着有可能读取第三个或者第五个磁道,这里假设读取的是第五个磁道,之后读取第三个,第二个、连续
读取两次第一个磁道。
扫描算法(电梯算法):
每次只往一个方向移动,到达一个方向需要服务的尽头再反方向移动。
由于磁头方向向外,所以优先向磁道1的方向读取,到达尽头后再由外向内读取至最里面的第五磁道。
循环扫描算法:
读取时只会往一个方向读取,由内往外或者由外往内
假设由外往内读取,先读取第四个磁道,读取第五个磁道,到达尽头,直接把磁头位置移动到最外层的第一个磁道,
接着读取第一个磁道、第二个磁道、第三个磁道。
高速缓存
缓存位于存储器层次结构中的缓存主存层次,可以直接与CPU进行交换数据,主要是为了解决CPU与主存的速度不匹配的问题
高速缓存的工作原理
字: 是指存放在一个存储单元中的二进制代码组合
字块: 存储在连续的存储单元中而被看作是一个单元的一组字
假设一个字有32位(字长32位),一个字块有B个字,主存共有M个字块,则:
B * M = 主存总字数
B * M * 32 = 主存总容量(bits)
字的地址:
字的地址包含两个部分,
前m位指定字块的地址,后b位指定字在字块中的地址(偏移量)。
可用以下公式求出地址至少所需要的位数:
2 ^ 𝑚(位数) = 𝑀(总共字块数)
2 ^ 𝒃(位数) = B(一个字块中的字数,块内字数)
求地址的位数主要是需要总共的块数和块中字数,就可以求得前m位和后b位地址的位数。
缓存命中率 :
CPU直接从缓存中取出所需数据的成功率成为缓存命中率
命中率是衡量缓存的重要性能指标,理论上CPU每次都能从高速缓存取数据的时候,命中率为1。
命中率的运算:
缓存访问效率:
也可以用来衡量缓存的性能,在命中率的基础上去计算,这里面的平均时间是在命中率意义上的平均,并非平分。
缓存替换策略
主要解决,要把哪些数据从主存中放到缓存中
我们需要良好的替换策略来提高缓存的访问效率和命中率。
高速缓存的替换时机:
当CPU所需要的数据不在告诉缓存中时
替换策略
随机算法:
每次需要替换时,随机替换一个高速缓存中的位置。
先进先出算法(FIFO)
把高速缓存看做是一个先进先出的队列,优先替换最先进入队列的字块。
最不经常使用算法(LFU)
优先淘汰最不经常使用的字块,需要额外的空间记录字块的使用频率。
若频率相同则按照FIFO算法来淘汰,把最先加入的字块给淘汰。
此算法若使用双向链表来实现,将会有多条双向链表来表示不同的频率。
最近最少使用算法(LRU)
优先淘汰一段时间内没有使用的字块,有多种实现方法,一般使用双向链表
把当前使用的访问节点置于链表前面(保证链表头部节点是最近使用的),当要淘汰时,淘汰最末尾的节点。
与FIFO的不同点在于,FIFO中使用了已经存在的字块时,是不会把字块置于链表的最前面的。
也与LFU算法不同,在于此算法仅需要一条双向链表即可实现,且不会去计算使用频率
未完...