提供了对外连接的接口,也促使外部设备接口的统一。比如USB(Universal Serial Bus,通用串行总线)接口,使得 不同设备可以通过USB接口进行连接。
假设没有总线的计算机,当连接上外部设备时,如下图,线路会变得更加复杂。
可分为片内总线和系统总线。
2. 系统总线:是连接CPU、主内存、IO设备、各组件之间的信息传输线。
系统总线还可以分为三类:
假设主存要跟硬盘和IO设备交换数据,当硬盘和IO设备都处于就绪状态,此时的总线是要给硬盘使用呢?还是给IO设备使用?机器不知道,所以会造成冲突,类似线程中的死锁。所以需要仲裁器。
仲裁器:为了解决不同设备使用总线的优先顺序,或者说解决不同设备对总线使用权的问题。
一共有3种方法:链式查询、计时器定时查询、独立请求。
优点:电路复杂度低,仲裁方式简单。
缺点:优先级低的设备难以获得总线使用权,而且对电路故障敏感(一处坏了,其他设备都不能用了)。
好处:相比链式查询,计时器定时查询不会因为某故障导致其他设备不能用,即对电路不敏感,可靠性高。
坏处:电路也比较复杂了,速度也不快(因为计数器和设备数量的原因)。
好处:响应速度快,优先顺序可动态变动。
坏处:设备连接多,总线控制复杂。
可分为两种:字符输入设备和图形输入设备。
字符输入设备:键盘(薄膜键盘,机械键盘,电容键盘)
图形输入设备:鼠标,数位板,扫描仪。
比如显示器,打印机,投影仪。
额外的:硬盘即属于输入设备,又属于输出设备。
CPU的速度与IO设备的速度不一致,所以需要下面的方法。
当外部IO设备就绪时,向CPU发出中断信号,然后CPU就会停止当前执行的主程序,转去处理IO设备。待IO设备处理完,就会返回刚刚中断的位置,继续执行刚刚的主程序。
作用:提供低速设备通知CPU的一种异步方式,CPU可以高速运转同时兼顾低速设备的响应。
因为程序中断会降低CPU的使用效率,所以提供DMA设备,一般存在在硬盘、外置显卡中。
DMA直接连接主存与IO设备,当DMA工作时不需要CPU的参与。
如图:
也可以按下面的图来表示层次结构,其主要思想是:存储器层次结构的思想是上一层次的存储器是低一层次的高速缓存。 比如一级缓存是二级缓存的高速缓存,二级缓存是三级缓存的高速缓存,三级缓存是主存的高速缓存,主存是辅存的高速缓存。因为辅存的速度是最慢的,所以我们要避免CPU访问辅存取数据,所以交给主存利用DMA去跟辅存打交道(搬运数据到内存),需要什么数据还是得由CPU来控制。
局部性原理:可分为时间局部性、空间局部性、顺序(算法)局部性。百度百科
所以有了局部性原理,保证了CPU能高速工作,当我们第一次打开某个程序时,可能会比较慢,过一段时间第二次重新打开时(不是关机重启),发现变快了。因为第一次的时候,程序的相关链接库没有加载进内存,需要从磁盘读取,所以慢,第二次打开因为链接库在内存里面(内存也属于经常访问的),所以快。这里的打开慢,我们只考虑链接库,因为打开慢的原因可能有很多(比如CPU正在忙,内存不够等),而且对于一台牛逼的电脑(高级的CPU, 固态硬盘,内存条等)第一次打开可能感受不到慢。
主存储器也就是我们的内存条,英文名为:RAM(随机存取存储器,Random Access Memory),更准确的说应该称为:DRAM(动态随机存取存储器)。DRAM通过电容存储数据,必须隔一段时间刷新一次,所以一旦掉电(漏电),那么一段时间内后将丢失数据。
DRAM(动态随机存取存储器):每个存储单元所需的场效应管较少,常见的有4管,3管和单管型DRAM。因此它的集成度较高,功耗也较低,但缺点是保存在DRAM中的信息不是永久的,如果掉电,那么一段时间后将丢失数据。
SRAM(静态随机存取存储器):工作速度快,只要电源不撤除,写入SRAM的信息就不会消失,不需要刷新电路,同时在读出时不破坏原来存放的信息,一经写入可多次读出,但集成度较低,功耗较大。一般作为高速缓冲存储器(Cache)。
主要区别DRAM需要刷新地储存数据,SRAM不需要刷新地储存数据;相同的是一旦关机或断电,DRAM和SRAM数据都没有了。
对于不同位数的系统对内存容量的支持是不一样的:
小技巧:打开CMD,输入:wmic memphysical get maxcapacity
出现一个数字,该数字的单位为KB,需要除两次1024得出电脑可以支持的最大内存容量。
用其他软件也可以看。
这里只谈磁盘。断电后数据还会保持在磁盘中。
磁臂控制磁头在磁道上移动,磁头读写数据。
磁盘的调度算法:(操作系统的重要内容)
举个例子理解:假设现在磁头在磁道3,磁头方向向外,磁道有1到5。现在读取磁道的序列:1 4 2 3 1 5
理解完,来一道标准问题试试:因为typora的表格功能不能合并单元格所以截图吧。
思考再看答案:
先了解主存的一些概念:
那么如何寻址:通过字的地址。
字的地址包含两部分:
跟主存有这样的关系:
2 m = M 2^m=M 2m=M
2 b = B 2^b = B 2b=B
例子:
答案:
4 G = 4096 M 4G = 4096M 4G=4096M
字 块 数 : 4096 / 4 = 1024 字块数:4096 / 4 = 1024 字块数:4096/4=1024
字 块 地 址 m : l o g 2 1024 = 10 字块地址m:log_21024=10 字块地址m:log21024=10
块 内 字 数 : 4 M / 32 b i t = 1048576 块内字数:4M/32bit = 1048576 块内字数:4M/32bit=1048576
块 内 地 址 b : l o g 2 1048576 = 20 块内地址b:log_21048576 = 20 块内地址b:log21048576=20
结 果 : m > = 10 ; b > = 20 结果:m >= 10; b >= 20 结果:m>=10;b>=20
了解了主存的字和字块,来到高速缓存中也有跟上面一样的概念,运算都是一样的。但是主存的容量远大于高速缓存的容量,而且缓存中存储的数据其实来自于主存中的数据。
因为CPU需要的数据如果在缓存中那么工作效率高,如果需要的数据不在缓存中,则需要去主存拿,但我们不希望让CPU去主存拿,而是让缓存去拿,所以需要一个指标来表明CPU从高速缓存中取得需要的数据成功的几率,称为命中率。
高速缓存的工作原理:使用命中率来衡量缓存的性能指标。理论上CPU每次都能从高速缓存中存取数据的时候,命中率为1(100%)。但是我们知道高速缓存的容量远小于主存容量,所以永远不可能为1。因此使用两个参数:访问主存次数和访问Cache次数来计算命中率。
除了命中率,还有一个指标也可以来衡量缓存的性能:访问效率。以下是运算:
例子:
答:
命 中 率 : h = N c N c + N m = 2000 2000 + 50 = 0.97 命中率:h = \frac{N_c}{N_c + N_m} = \frac{2000}{2000 + 50} = 0.97 命中率:h=Nc+NmNc=2000+502000=0.97
访 问 效 率 : e = t c h ∗ t c + ( 1 − h ) ∗ t m = 50 0.97 ∗ 50 + ( 1 − 0.97 ) ∗ 200 = 0.917 = 91.7 % 访问效率:e = \frac{t_c}{h*t_c + (1-h)*t_m} = \frac{50}{0.97*50 + (1-0.97)*200} = 0.917 = 91.7\% 访问效率:e=h∗tc+(1−h)∗tmtc=0.97∗50+(1−0.97)∗20050=0.917=91.7%
平 均 访 问 时 间 : 平 均 访 问 时 间 : t a = h ∗ t c + ( 1 − h ) ∗ t m = 0.97 ∗ 50 + ( 1 − 0.97 ) ∗ 200 = 54.5 n s 平均访问时间:平均访问时间:t_a = h*t_c + (1-h)*t_m = 0.97*50 + (1-0.97)*200 = 54.5ns 平均访问时间:平均访问时间:ta=h∗tc+(1−h)∗tm=0.97∗50+(1−0.97)∗200=54.5ns
为了让命中率高些,也就是让CPU每次能在缓存中取得数据的成功率高点,所以需要性能良好的高速缓存替换策略,使得高速缓存中的数据都是CPU需要的数据。
高速缓存替换策略的触发时机:当CPU所需要的数据不在高速缓存中,此时就触发置换策略,这时高速缓存就会去主存把需要的数据加入道高速缓存中,可能也会把高速缓存不需要数据置换掉。
高速缓存替换策略有几种:(也就是算法)
图解算法:
机器指令主要由两个部分组成:操作码和地址码。
操作码:指明指令所需完成的操作,它的位数反映了机器的操作种类。比如操作码为8位时,可以完成2^8(256)种操作。
地址码:给出操作数(操作数:规定了指令中进行数字运算的量)或操作数的地址。地址码可分为三地址码指令、二地址码指令、一地址码指令,还有零地址指令。
零地址指令:在机器指令中无地址码,比如空操作,停机操作,中断返回操作等。
指令寻址:
数据寻址:
三种操作的对比:
控制器是协调和控制计算机运行的。
控制器的组成:
程序计数器(PC):
时序发生器:
指令译码器:
指令寄存器:
主存地址寄存器:
主存数据寄存器:
通用寄存器:
运算器是用来进行数据运算加工的。
运算器的组成:
数据缓冲器:
分为输入缓冲和输出缓冲。
输入缓冲暂时存放外设送过来的数据。
输出缓冲暂时存放送往外设的数据。
ALU:(重要)
ALU:算术逻辑单元,是运算器的主要组成。
常见的位运算(左右移、与或非等)。
算术运算(加减乘除等)。
状态字寄存器:
通用寄存器:
可以看出,如果按照上面的执行过程,可得控制器和运算器不能同时工作,这就导致了CPU的综合利用率不高,所以提出了CPU的流水线设计,直接看图: