由于博主并不是科班出生,计算机方面的只是有所欠缺,所以写几篇博客记录下我所学的知识,希望能对各位像我一样非科班的同学有所帮助.如有错误的地方,望指正,谢谢各位大佬了!!!
计算机总线
总线的概述
- 总线的概述
- 提供对外连接接口
- 不同设备通过USB连接
- 使外围设备接口统一
输入输出等设备只需要通过IO总线连接带存储器,运算器等设备上,无需一个一个连接.
- 总线的分类
- 片内总线(CPU内部的总线,是高集成度芯片内部的信息传输线)
- 系统总线
连接硬盘,IO设备,USB等设备的总线.
系统总线总线可分为三类:
- 数据总线:一般与CPU位数相同,双向传输数据信息,数据总线的位数是数据总线的总要参数.
- 地址总线: 源数据在内存中的地址,地址总线的位数与存储单元有关,地址总线位数=n,寻址范围0 ~ 2^n.
- 控制总线:是发出各种信号的传输线,由控制总线从一个组件发给另一个组件.可以监视各个组件的状态.
总线的仲裁
如下图,当硬盘和IO设备,都需要使用总线的时候,总线应该让给硬盘还是让给IO设备使用呢,这是后就需要总线的仲裁.总线的仲裁就是为了解决总线使用权的冲突问题.
总线仲裁的方法:
-
链式查询
当设备1和设备2同事需要总线的时候回发送信号给仲裁控制器,仲裁控制器回发送信号允许设备1先使用,然后才轮到设备2使用.
好处: 电路复杂度低,仲裁方式简单
坏处:优先级低的设备难以获得使用权.对电路故障敏感. -
计时器定时查询
仲裁控制器对设备编号使用计数器累计计数,接收到信号后,往所有设备发出计数值,计数值与设备编号一致则获得使用权.如下图,若设备3请求总线使用权的时候,会发送信号给仲裁控制器,仲裁控制器会将计数器置为3,会发送信号给所有的设备,当计数器值与设备编号一致的时候,将获取使用权.
-
独立请求
独立请求每个设备均有总线独立的仲裁器,设备可以单独向仲裁器发送或接受请求,当同时收到信号,仲裁器有权按优先级分配使用权.
优点:响应快
缺点:线路复杂
计算机的输入输出设备
- 常见的输入输出设备
字符输入设备:键盘,鼠标等
图像输出设备:显示器,投影仪等 - 输入输出接口的通用设计
需求: 想设备发送数据?读取数据?设备是否启动成功?设备有没有被占用.
数据线: I/O设备与主机数据交换的线,风单向传输和双向传输,
状态线: I/O设备状态向主报告的信号线,查询设备是否练级正常,查询设备是否被占用.
命令线: CPU向设备发送命令的信号信号线,读写启停信号等.
设备选择线: 主机选择I/O设备进行操作,对总线上的设备进行选择. - CPU与IO设备通信(CPU速度与IO设备速度是不一致的)
- 程序中断
当外围I/O设备准备就绪的时候,向CPU发出中断信号,CPU有专门的电路相应中断信号.
如下图,cpu值执行主程序,打印机出于待机状态的,此时CPU发送了一个信号,启动打印机的信号,启动之后CPU继续执行主程序,打印机接收到启动信号之后就会进行准备的工作,准备完成之后打印机回向CPU发出中断信号,其后,CPU回响应这个中断信号,之后CPU会进行发送数据的操作,打印机也会同时接收数据,在某一时刻,CPU发送完成,会中断返回,回到原来的主程序中,打印机开始打印数据.
提供低速设备通知CPU的一种异步方式,cpu也可以高速运转时兼顾低速设备的响应.但是,如果频繁的打断CPU并不是一个很好的方法,这样会减缓CPU的工作效率,所以出现了DMA方法. - DMA(直接存储器访问)
DMA不需要通过CPU访问主存,可以之间访问主存,这样不需要打断CPU,提高了效率.硬盘和显卡中都有DMA的设备.
- 程序中断
计算机存储器的概述
-
存储器的分类
按存储介质分类,分为:
半导体存储器: 内存,U盘,固态硬盘等
磁存储器: 磁带,磁盘等
按存储方式分类,分为:
随机存储器:随机读取,与位置无关.
串行存储器:与位置无关,按顺序查找.
只读存储器(ROM):只读不写 -
存储器的层次结构
按读写速度,存储容量,价格等分不同的存储器.
结构图(存储器的层次结构):
分缓存,主存,辅存.
CPU,高速缓存,主存三者之间都是可以相互通信,为缓存-主存层次,主存与辅存之间是可以通信的,称为主存-辅存层次.
缓存-主存层次:
原理:局部性原理.
实现:在CPU与主存之间添加一层速度快的Cache.
目的:解决主存速度不足问题.
注:关于局部性原理,是指CPU访问存储器时,无论是存取还是读取,所访问的存储单元都聚集在一个较小的区域中.
如图所示,当程序经常访问某片内存时,把这段内存置换到缓存.
主存-辅存层次
原理:局部性原理.
实现:主存之外增加辅助存储器.
目的:解决主存容量不足问题.
计算机主存储器与辅助存储器
为什么计算机断电,内存中的内容会丢失,磁盘中的内容不会丢失?
主存储器-内存
- 随机存储器(RAM).
- RAM通过电容存储数据,必须隔一段时间刷新一次.
- 如果掉电,那么一段时间之后将丢失所有数据.
cpu通过数据总线读写数据,通过地址总线获取数据地址.
32位系统: 最多只支持4GB内存
因为232 = 4 * 230 = 4G.
64位系统:可支持334 GB的内存
因为264 = 234 * 230 = 234.
注: 230 = 1GB.
辅助存储器-磁盘
- 表面是可磁化的硬磁特性材料.
- 移动刺头径向运动读取信息.
磁盘所运用的算法:
- 先来先服务算法
- 最短询道时间优先算法
- 扫描算法(电梯算法)
- 循环扫描算法
下面举一个栗子解释下各个算法怎么读取磁道的.
先来先服务算法: 按顺序访问进程的磁道读写需求.读取的顺序为: 1 > 4 > 2 > 3 > 1 > 5;
最短询道时间优先算法:与磁头当前位置有关,优先访问离磁头最近的磁道.读取顺序为:4 > 5 > 3 > 2 > 1 > 1
扫描算法(电梯算法):每次只往一个方向移动,到达一个方向需要服务的尽头在反方向移动,是双向的. 顺序为 4 > 3 > 2 > 1 > 1 > 5.但是存在这样的问题:当磁头刚从里向外移动而超越了某一磁道时,恰好又有一进程请求访问此磁道,这时该进程必须等待。将磁头继续从里向外,然后再从外向里扫描完处于外面的所有要访问的磁道后,才处理该进程的请求,致使该请求的请求被大大的推迟。
循环扫描算法: 只往一个方向读取, 现假设由内往外读取,是单向移动, 顺序为4 > 5 > 1 > 1 > 2 > 3.
计算机存储器的高速缓存
-
高速缓存的工作原理
字: 存放在一个存储单元中二进制代码组合.
字块: 存储在连续存储单元中被看作一个单元的字组.包含多个字.
注:一个字有32位,一个字块有B个字,主存共有M个字块.主内存总字数=B * M;主内存总容量 = 32 * B * M;
字的地址包含两个部分,前m位指定字块的地址,后b位指定在字块中的地址2m = M,2b = B,如下图:
下面举一个题目来算下m和b:
-
计算机的高速缓存
缓存和主存逻辑结构类似,缓存容量小,速度更快,缓存也有字和字块的概念,一个字有32位,一个字块有B个字,缓存共有C个字块,字的地址包含两个部分,前c位指定字块的地址,后b位指定在字块中的地址2c = C,2b = B;
高速缓存的工作原理:为了让CPU尽量从缓存中拿数据,这里就不得不提一下命中率,命中率是衡量缓存的重要指标,理论上CPU每次都能从高速缓存中取数据的时候,命中率为1;但实际上不可能每次都能访问到缓存,所以不可能为1.假设访问主存次数Nm,访问缓存次数Nc,那么命中率为h = Nc / (Nm + Nc);
访问效率的计算方式:
下面做一个练习题计算命中率和访问效率,平均访问时间:
命中率:
访问效率:
平均访问时间:
-
高速缓存的替换策略
-
随机算法
-
先进先出算法(FIFO)
把高速缓存看做一个先进先出的队列,优先替换最先进入队列的字块.如图:
现在如果一个编号为9的字块要进来,那么就会淘汰掉编号为1的字块,让编号的为9的字块进来.
-
最不经常使用算法(LFU)
此方式是优先淘汰最不;经常使用的字块,但是需要额外的空间记录自举哀的使用频率.如图:
每次使用相对字块的时候,相对应的评率就会加1,一旦有新的字块要进来的时候,变会把使用评率最低的字块淘汰掉.
-
最近最少使用算法(LRU)
优先淘汰一段时间内没有使用的字块,有多种实现方法,一般使用双向链表.把当前访问的节点置于链表前面,保证;链表头部是最近使用的.淘汰的时候淘汰链表的尾部就可以了.如图:
每次要添加新的字块的时候,新的字块将会添加到字块的头部,尾部多余的字块将会被淘汰.
计算机的指令系统
-
机器指令的形式
主要有:操作码和地址码.
操作码:明确指令要完成的操作,反应机器操作的种类.比如操作码有8位,那它就有28=256种操作.地址码:给出的是操作数的地址,分三地址指令/二地址指令/一地址指令.
三地址指令:(c奥做1地址和2地址放到3地址中)
二地址指令:(操作1地址和2地址放到1地址或者2地址中)
一地址指令:可以是自己对自己的操作,也可以ACC(自增)
零地址指令:
在机器指令中无地址码,一般是执行空操作,停机操作,中断返回操作.
-
机器指令的操作类型
机器指令的操作类型有操作数之间的加减乘除运算,操作数之间的非等逻辑位运算,移位操作,以及控制指令,包括等待指令/停机指令,空操作指令,中断指令等. -
机器指令的寻址方式
- 指令寻址
顺序寻址是从101 => 102 => 103 => 104 => 105,然后105执行JMP 102指令,又调到102,此为跳跃寻址.
- 数据寻址
立即寻址:
直接寻址:
间接寻址:
三种寻址方式优缺点:
计算机的控制器(x协调控制计算机运行的)
控制器的组成:
- 程序控制器
用来存储下一条指令地址,循环从程序计数器中拿出指令,当指令被拿出,指向下一条指令. - 时序发生器
电气工程领域的,用于发送时序脉冲,cpu依据不同的时序脉冲由节奏的进行工作. - 指令译码器
由操作码和地址码组成.用于翻译操作码对应的操作以及控制传输地址码对应的数据. - 指令寄存器
从主存或高速缓存存取计算机指令. - 主存地址寄存器
保存当前CPU要访问的内存单元的地址. - 主存数据寄存器
保存当前CPU正要读写的主存数据 - 通用寄存器
用于暂时存放或传送数据或指令,保存ALU的运算中间结果.容量比一般寄存器大.
计算机的运算器
- 数据缓冲器
分为输入缓冲和输出缓冲,输入缓冲暂时存放外设送来的数据,输出缓冲暂时存放送往外设的数据. - ALU
是算术逻辑单元,主要完成常见的位运算,以及算术运算.
如下图即ALU的图解,A和B为输入,F为输出,K为各种运算线路. - 状态寄存器
可以存放运算状态(溢出,结果正负等),存放运算控制信息(调试跟踪标记位,允许中断等). - 通用寄存器
用于暂时存放或传送数据或指令,保存ALU的中间结果,容量比一般寄存器大.
计算机指令的执行过程
-
指令的执行过程
执行时序图:
-
指令执行的问题
运算器和控制器不能同时工作.(CPU的综合利用率不高).
CPU的流水线设计:
CPU流水线设计是串行执行效率的3倍,公式如下: