kankankanfuke

7.计算机是输入输出设备(IO设备)--组成篇

常见的输入设备

1.字符输入设备

最常见的就是键盘。

键盘可以分三种:

  • 薄膜键盘:标配的主机一般都是薄膜键盘。键盘内部由有弹性的薄膜连接起来
  • 机械键盘:每一个键位都是由独立的轴连接起来的,敲击时,感觉会好很多。机械键盘根据段落感声音压力键程可以分为:黑轴,红轴,青轴,茶轴,樱桃轴。
  • 电容键盘:比较高档

2.图形输入设备

最常见的是鼠标数位板扫描仪

数位板:主要包括输入板和压感笔。常用于绘图创作

扫描仪:将图形信息转化为数字信号

3.图像输出设备

主要有显示器,打印机,投影仪

显示器有两种:CRT显示器、液晶显示器


输入输出接口的通用设计

如何设计输入输出接口?

首先要支持读取数据,其次要能向设备发送数据,然后处理设备是否被占用,最后判断设备是否已经连接,设备是否已经启动

接口主要有: 【作用是和外设连接,并操作外设】

1.数据线:I/O设备与主机之间进行数据交换的传输线

根据设备的区别,可以分为单向传输线、双向传输线

2.状态线:IO设备状态向主机报告的信号线

查询设备是否已经正常连接并就绪

查询设备是否已经被占用

3.命令线:CPU向设备发送命令的信号线

发送读写信号,发送启动停止信号。例如主机中的光驱,计算机就是通过命令线向光驱发动启动停止信号

4.设备选择线:主机选择I/O设备进行操作的信号线

对连在总线上的设备进行选择。例如在对多个U盘进行选择,然后再进行读写操作,就是通过设备选择线。


CPU与IO设备的通信

首先要了解:CPU速度与IO设备速度不一致

1.程序中断

当外围的IO设备准备就绪时,向CPU发送中断信号

CPU内部有专门的电路响应中断信号

这里需要注意的是CPU响应中断,不是立即响应的,可能会有一定的延时!

提供低速设备通知CPU的一种异步方式

因为有了程序中断CPU可以在高速运转同时兼顾低速设备的响应

【就像是通知CPU临时接个任务,任务资料准备就绪,CPU就停下手上的活,来完成这个临时任务。任务完成后又继续手上的工作】

缺陷:频繁的打断CPU会降低CPU的使用效率

2.DMA(直接存储器访问)

1.DMA直接连接主存和IO设备

2.DMA工作时不需要CPU的参与

当主存与IO设备交换信息时,不需要中断CPU

通过DMA直接存储器访问,可以大大提高CPU的效率

平时的硬盘和显卡中都有DMA设备*


8.计算机存储器的分类--组成篇

1.存储器的分类:

【按存储介质分类】

半导体存储器:内存,U盘,固态硬盘

磁性存储介质:磁带,磁盘

【按照存取方式分类】

随机存储器(RAM) :1.随机读取 2.与 位置无关

串行存储器:1.与位置有关,2.按顺序查找

只读不写存储器(ROM):只读不写


2.存储器的层次结构

购买存储器考虑的因素:

读写速度:5400转、7200转

存储容量:2T,4G

价格

为了量化存储器的性价比,有了位价

容量+价格=>位价 :每比特位价格

我们可以根据位价和读写速度将存储器划分为几个层次:

缓存,主存,辅存这3个层次

缓存:CPU中的高速缓存和寄存器 位价高 速度块 容量低

主存:计算机中的内存 位价中 速度中 容量中

辅存:外部辅存设备。例如磁盘,U盘,移动硬盘 位价低 速度慢 容量高

CPU和缓存、主存3者可以直接通信,我们把这个层次称为缓存-主存 层次。

原理:局部性原理

实现:在CPU与内存之间增加一层速度快(容量小)的Cache(也就是高速缓存)

目的:解决主存与CPU速度不匹配的问题

局部性原理:局部性原理是指CPU访问存储器时,无论是存取指令还是存取书,所访问的存储单元都趋近于聚集在一个较小的连续区域中。

访问高速缓存这个较小的连续区域,读写速度快速提高

辅存只能与主存直接通信,CPU不参与,这个层次被称为主存-辅存层次。

原理:局部性原理

实现:主存之外增加辅助存储器(磁盘、SD卡、U盘)

目的:解决主存容量不足的问题

电脑中有一个20G的游戏,但是电脑内存只有8G,那游戏是这么运行起来的?

根据局部性原理,对应一些要使用的数据放入主存中,对于一些当前不使用的数据,放入辅存中。



9.计算机的主存储器与辅助存储器--组成篇

思考:

计算机断电,内存数据丢失?

计算机断电,磁盘数据不会丢失?

主存储器:内存(内存条)

1.它是RAM(随机存取存储器)

2.RAM通过电容存储数据,每隔一端时间必须刷新一次

3.如果掉电,那么一段时间后将丢失所有数据

刷新必须要有电的存在,如果有一段时间不刷新则电容中的电子也会丢失,数据也就因此丢失了

内存的组成

地址总线:指定数据的位置

数据总线:传输数据

内存与操作系统的关系:

32位系统: 2^32 =4^30 =4GB

这是32位系统的所能支持的最大内存,加更多的内存条也没有用,因为它的地址总线只有32位,因此它的寻址范围只有4GB的大小

64位系统: 2^64 =234*230 =2^34GB

因为它的地址总线是32位,因此它的寻址范围有2^34GB


辅助存储器:磁盘

盘片:磁材料存储数据

磁道:盘片一周的内容

扇区:磁道中一部分的内容

磁头的方向:例如磁头是往里走,还是往外走

磁头的位置:关注磁头当前是位于哪一个方向的

磁盘的组成:

1.表面是可磁化的硬磁特性材料

2.移动磁头径向读取磁道信息

磁盘的调度算法:

举例:

这里我们把最外面的磁道称之为第1磁道,最里面的磁道称之为第5个磁道

1.先来先服务算法:【命令/需求的顺序】

按先后顺序访问的磁道读写的需求

磁头由磁道4,移向磁道1。每次读取时,都是磁头移动到 相应的磁道进行访问

2.最短寻道时间优先算法:【一直访问的都是离磁头最近的】

与磁头当前位置有关

优先访问离磁头最近的磁道

首先是读取第4个磁道,因为它是优先访问离磁头最近的磁道

然后既可以是读取第5个磁道,也可以是读取第3个磁道,两者距离第4个磁道 一样近

3.扫描算法(电梯算法):【先是单向查找,然后反向查找】

每次只往一个方向移动(就和电梯一样,一次只能往一个方向载人)

到达一个方向需要服务的尽头再反方向移动

这里它先读取当前磁头所在的磁道,也就是第4磁道

之后,因为磁头的方向向外,再去读取的就是4磁道外侧的磁道,也就是第3磁道,然后就是第2磁道,然后是第1磁道。第1磁道读取2次,外侧已经到需要服务的尽头了,然后反方向读取到第2个磁道。。。直到移动到第5个磁道,读取第5个磁道。

4.循环扫描算法:【永远单向查找,这个方向到头后,直接返回到初始方向进行查找】

因为扫描算法并不公平,因此在它的基础上提出了循环扫描算法

它和扫描算法最大的区别:只向一个方向读取。而扫描算法会出现 反方向方向读取

假设这里设定它由外向内读

首先读取第4个磁道,然后是第5个磁道。到尽头了,直接将磁头移动到第1个磁道,然后开始读第1个磁道两次。然后第2个磁道,第3个磁道....这里没有反向读取

10.计算机的高速缓存--组成篇

回顾一下前面的内容:

高速缓存位于主存-缓存层,在CPU和主存之间

解决的问题:CPU与主存的速度不匹配

高速缓存的工作原理

为了了解高速缓存的工作原理,需要先了解一下主存中的一些概念:

字:【内存中的最小单元】

是指存放在一个存储单位中的二进制代码的组合

一个字可以表示:一个数据,一条指令,一个字符串

字块:【多个字连续组成一个字块】

存储在连续的存储单元中而被看作是连续一个单元的一组字

总字数*单一字位数=总容量

假设:

一个字有32位 【这里是bit位,不是比特数!这里的32位是假设的,不代表实际 的,毕竟4GB一个字,太大了】

一个字块有B个字

主存共有M个字块

B*M =主存总字数

总字数*32=主存总容量(bits)

有了字和字块就可以理解寻址的过程:

字的地址包括2个部分:

前m指的是字块的地址

后b位指定字在字块中的地址

下面的例子可能好理解一点m和M的关系

所谓地址实际上是可以理解位序号:【字块数、块内字数都一一对应着序号,也就对应着地址】

字块数有1024个,这里的字块地址也就有1024个,也就是1024个序号。

字块地址m,实际上指的是代表地址的序号,出现的最大序号的位数。1个表示1024的数,在二进制中有多少位。正如4在二进制中是2位一样,1024在二进制中是2^10,也就是2的10位。

同理,块内地址b,指的也是代表块内地址的最大序号的位数。这里最大序号是1048576,它在二进制中是2^20,也就是2的20位

高速缓存的存储逻辑结构类似(字和字块,地址。且运算方式相同)

缓存的容量较小,速度较快

缓存中的数据都是复制主存得来

CPU有两种情况下需要高速缓存(工作原理):

CPU需要的数据在缓存里【直接拿】

CPU需要的速度不在缓存中:

不在缓存需要去主存拿


以下内容大致了解即可,因为没有涉及具体是如何访问的,如,访问主存的同时也在访问高速缓存?访问效率的公式并不易理解!掌握命中率(总次数中的xx),知道有访问效率(缓存时间内的xx)即可

我们需要尽可能在高速缓存中去取数据:*

因此我们需要量化CPU从高速缓存中取数据的成功率:【也就是命中率】

缓存命中率:理论上CPU每次都能从高速缓存中取数据,命中率为1

这个只是理论上的,因为高速缓存的容量不如主存,因此永远不能为1 (why???容量和命中率的关系?)

因为两者都会访问,加起来的才是访问总次数,而命中率=访问高速缓存的速度/访问的总次数 因此永远不会为1

还有一个量化的指标也可以衡量CPU从高速缓存中取数据的成功率:【访问效率】

访问缓存的平均时间:访问缓存的命中率*访问缓存的时间

访问主存的平均时间:访问主存的命中率*访问主存的时间

整个层次的平均时间:访问主存的平均时间+访问缓存的平均时间

访问效率:e=访问缓存的时间/访问的整个层次的平均时间

平均访问时间为:
$$
0.97*50+(1-0.97)200=54.5ns
$$
访问主存和访问缓存的速度是不一样的,可能访问了缓存几十次,才访问了主存一次。


我们想要命中率越高越好就需要一个良好的缓存替换策略

高速缓存的替换策略

替换的时机:【缓存中没有数据,需要从主存中载入所需的数据】

替换的算法:【这几种算法,在其他处理缓存的领域也是常用的】

1.随机算法:【每次随机选取一个高速缓存中的位置,然后把相关的内容替换掉】

2.先进先出算法(FIFO):【把高速缓存看做最先的算法】

*把高速缓存看做是一个先进先出的队列

*优先替换最先进入队列的字块

3.最不经常使用算法(LFU)**:【替换最不经常使用的字块。看标记的频率】

*优先淘汰最不经常使用的字块

*需要额外空间记录每个字块的使用频率

每个缓存中的字块都有一个对应的频率。每次使用频率加1

然后淘汰时选择最少频率的淘汰

4.最近最少使用算法(LRU):【每次使用,若是缓存中有该字块,则将字块放到最前面,表示它是最近使用的】

和LFU算法产生的结果是很类似的,但区别在:

1.如果一个子块,先使用很多次,例如1万次,然后连续10多次没有被使用到,那它就被替换了 。

这个叫卸磨杀驴算法???或者说是末位淘汰算法???

2.可以解决访问频率相同的问题

*优先淘汰一段时间内没有使用的算法

*有多种实现方式,一般使用双向链表来实现

把当前访问节点置于链表前面(保证链表头部节点是最近使用的)

这里的节点可以是字块。用字块来想这个逻辑会更好理解一点

每次都是淘汰末位的,只不过再次被使用的字块会放到前面去

面试会问替换策略?!



11.计算机的指令系统--组成篇

根据这一章的学习标明,毕竟简易的笔记,十分不易于复习

1.机器指令形式

2.机器指令的操作类型

3.机器指令的寻址方式


*机器指令的形式

操作码,地址码组成

指明指令要完成的 操作

操作码的位数反映了机器可以做出的操作种类,每一个操作都 对象做着一种操作。操作码的位数实际上只的是操作码总数的位数。只是在计算机领域习惯性的省略了"总数的"这3个字,一般位数都是值总数的位数

假如:一个8位的操作码,它可以做出的种类如下

2^8=256 种


地址码

地址码直接给出操作数或者操作数的地址

这里的操作数指的是操作的数据

分类:1,2,3地址码指令

3地址码指令,指的是地址码字段有3个地址

操作码 地址码1 地址码2 地址码3
操作码(OP) addr1 addr2 addr3

该条指令所执行的操作:(addr1)OP(addr2)→(addr3)

它表示地址1(对应的数据)和地址2(对应的数据)进行了OP操作,然后将值赋给了地址3

假设:OP是加法操作,那地址1对应的数据就是加数,而地址2对应的数据就是另一个加数,它们进行了加法操作,并用地址3来保存两者的和

在计算机领域中,只有复制和覆盖

底层比较简单,没有特殊的方法,这里的赋值就是覆盖

这里就是用和这个值覆盖了地址3原本对应的数据,那个数据可能对应的是0

2地址码指令,指的是地址码字段有2个地址

操作码 地址码 1 地址码2
操作码(OP) addr1 addr2

该条指令所执行的操作:(addr1)OP(addr2)→(addr1)或(addr2)

它表示地址1(对应的数据)和地址2(对应的数据)进行了OP操作,然后将值随机赋给了地址1或者是地址2

逻辑同上,地址1或者地址2对应的数据,被操作之后的数据所覆盖

1地址码指令,指的是地址码字段有1个地址

操作码(OP) 地址码
OP addr1

该条指令所执行的操作:(addr1)OP→(addr1) 或者是 (addr1)OP(ACC)→(addr1)

第一个,它表示地址1(对应的数据)对自身进行了OP操作,然后将得到的值赋给了地址1。也就是原来对应的数据被新的值所覆盖了

第2个,可以理解为1个操作数(数据)操作一个默认行为,例如:"自增",它不需要第2个操作数参与

零地址指令

1.在机器指令中无地址码

2.空操作、停机操作、中断返回操作等


机器指令的操作类型

数据据传输:

*寄存器之间,寄存器与存储单元,存储单元(主存,辅助,高速缓存等)之间传输

*数据读写、交换地址数据、清0置1等

算术逻辑操作:【算术/逻辑运算】

1.操作数之间的加减乘除运算

2.操作数的与、或、非等逻辑位运算

移位操作: 【×2,÷2】

1.数据左移(乘2)、数据右移(除2)

2.完成数据在算术逻辑单元的必要操作

控制指令

等待指令、停机指令、空操作指令、中断指令等


机器指令的寻址方式

主要的指令寻址方式:

顺序寻址:一般是

跳跃寻址:顺序的基础之上的

由指令地址101对应的指令MOV RO,R1所对应的指令开始,按照地址大小,由101→102,再由102→103,再用103→104.........直到执行到105地址对应的指令JMP 102,它又跳转到执行地址102对应的指令

前面101~105,属于顺序寻址,后面105跳转到102属于跳跃寻址

数据寻址方式:【分为三种】 寻址指的就是根据机器指令的中的地址找数据

立即寻址:包含操作数(据)

机器指令示例:

操作码(OP) 地址码1 操作(的)数(据)
OP addr1 6

直接在机器指令中获得了操作数(据)

1.指令直接获得操作数

2.无需访问存储器

直接寻址:操作数(据)在地址

还是上面那张表,操作系统读取地址码addr1时,会在主存中寻找addr1这个地址码所对应的数据

1.直接给出操作数(据)在主存的地址

2.寻找操作数(据)简单,无需计算数据地址(间接寻址需要)

间接寻址:操作数(据)在地址中的地址

机器指令示例:

操作码 地址码1 地址码2
OP R1 addr1

1.指令地址码给出的是操作数地址的地址

2.需要访问一次或者多次主存来获取操作数

这里addr1这个地址码对应的不是操作数(据),而是另一条在主存中的地址,根据这条地址,才能在主存中找到操作数(据)

**三种机器指令的寻址对比 **

寻址方式 优点 缺点
立即寻址 速度快 地址码位数限制操作数表示范围
直接寻址 寻找操作数简单 地址码位数限制操作数的寻址范围
间接寻址 寻址范围大 速度较慢


12.计算机的CPU之控制器--组成篇

程序计数器:存下一条指令的

时序发生器:电子工程领域,电子脉冲

指令译码器:翻译机器指令

指令寄存器:将指令读到寄存器中,和主存或者缓存进行通信

主存地址寄存器:存当前或者将要执行的指令在主存中所对应的地址

主存数据寄存器:存当前或者将要处理的数据

通用寄存器:比一般寄存器大,用于暂时存放数据或者指令(被当作备用的寄存器???),可以用来保存ALU运算的中间结果



13.计算机的CPU之运算器--组成篇

概念:运算器是用来进行数据进行数据运算加工的

组成:

数据缓冲器:【和外设做数据交互】

1.分为输入缓冲和输出缓冲

输入缓冲:暂时存放外设送过来的数据,然后将这些数据送往ALU

如果ALU正在运算,那么下一个需要运算的数据就保存在输入缓冲中

输出缓冲:暂时出存放ALU送来的数据,然后将这些数据送往外设

如果数据运算完,从ALU中出来,就先将其保存在ALU中,然后等待控制器的指令,输往相应的位置

ALU:算术逻辑单元,是运算器的主要组成

常见的位运算(左右移、与或非等)

算术运算(加减乘除)

ALU结构图:

通用寄存器

和控制器中通用寄存器类似

用于暂时存放或传送数据或指令

可保存ALU的运算中间结果

容量比一般专用寄存器要大

状态字寄存器

存放运算状态(条件码、进位、溢出、结果正负)

存放运算控制信息(调试跟踪标记位,允许 中断位)

最后是总线



14.计算机指令的执行过程

步骤:

取指令>>>分析指令>>>执行指令



15.进制基础--计算篇

二进制转十进制:按权展开法:

没有一个0就多一次方,1后面6个0就是2的6次方,1后面5个0就是2的5次方
$$
01100101=01000000+100000+100+1=26+25+2^2+1=101
$$
(整数)十进制转二进制:重复相除法

这里要注意的就是商为1后,还需要再除1次,知道商为0才算完结

重复除以2 得商 取余数
101/2 50 1
50/2 25 0
25/2 12 1
12/2 6 0
6/2 3 0
3/2 1 1
1/2 0 1

因此101=1010011

(小数)十制转二进制:重复相乘法

最后“提出的值”为0时代表结束

重复乘以2 得积 取1
25/32 50/32=1+9/16 1
9/16 18/16=1+1/8 1
1/8 1/4=0+1/4 0
1/4 1/2=0+1/2 0
1/2 1=1+0 1

分类:

技术点:

相关文章: