1.爱情之路
我们要了解存储的工作原理,最开始的基础一定是了解计算机内部是如何交流的。
每个人都知道,计算机组成的三大件是CPU、内存和硬盘。那他们之间是如何建立联系的,他们之间是如何传递IO的,了解清楚了就知道他们的爱情之路是如何建立的。CPU需要从内存中提取数据来运算,运算完成之后再存入内存中,对于CPU而言,从内存中提取的数据是IN,运算完成了,再通过CPU脚针通过计算机总线传递给内存,这个就是OUT。对于硬盘,读硬盘数据,例如你在打开word文档,这个过程就是OUT,修改了word文档中的某个字,进行保存就是IN。
IO(IN OUT)只是一个过程,每个部件都在不停的IO,传递给CPU由其进行运算,经过各部件IO,最终到达输出设备。
2.总线传递爱的讯号
图3-1
IO是通过共享的总线来实现,看起来是一条线,其实就是条物理的导线,跟每个家里用的电线是一个道理。
导线在某一时刻,电位都是相等的,这样总线上所有的部件都会收到相同的信号。这就是说,总线是共享的,同一时刻一个部件只能接收或者发送,我们称为这种工作模式是半双工。
那么在这一时刻到底是谁在用总线呢,在上图可以看到,我们会有一类总线叫做控制总线,控制总线是用来仲裁的。如果某个设备要想给CPU发送信息,那么就要申请控制总线进行仲裁,如果这时候有部件在传递信号,那么则要等待,如果没有人在使用,这时候控制总线就会把使用权给“你”来使用。
图3-2
图3-2所示,主板上的每个部件就是通过总线连接起来,你如果数一数,这里画了8条,但实际中,不止8条,可能是16、32、64、128。这些导线像毛细血管印刷在电路板上,根据物理学中大家都知道,高频振荡会导致线路传输的数据出现错误,那如何解决这问题呢?答案是,在印刷的时候排列在不同的电路板(PCB)层,那么每层的导线数量就少了,再加上每层电路板的屏蔽性能好,所以就不会相互干扰。
在这些总线中有数据总线,控制总线,地址总线,分别使用来传输数据,控制部件数据的传递,寻找部件。比如有32位PCI总线,就表示用32根导线来传递信息。
下表就是不同的PCI总线传输数据。
连接带宽
X1
X2
X4
X8
X16
X32
PCIe 1.0 (双向) (GB/s)
0.5
1
2
4
8
16
PCIe 2.0 (双向) (GB/s)
1
2
4
8
16
32
PCIe 3.0 (双向) (GB/s)
2
4
8
16
32
64
表3-1
2.1PCI总线
图3-3
图3-3就是多层电路板,这个多层电路板就是用单层电路板组成,上面在插上CPU,内存,硬盘,显卡等。
PCI总线是PC机和服务器普遍的连接技术,北桥一般连接CPU和内存,南桥连接外设(键盘,鼠标,硬盘等)。
为了解决总线数量少,和提高总线传输速度,PCI总线中会将地址总线和数据总线进行分时公用(一个时刻只能变成一种总线)。
在数据传输时主要由三个角色组成,发起者(Initiator或Master),目标设备(Target或Slave),仲裁设备(Arbiter)。总线上所有控制都有Master发起,PCI总线同一时刻只能有一对设备进行传输数据,这是就需要仲裁设备来决定谁拿到总线的控制权。
接下来我们用一个例子来看下总线的工作。
现在你(Master)最近很想找一个女朋友(Slave),你不认识她,但看到照片就心动了,可你认识她妈妈(Arbiter)。你就动身买好了礼品,准备去未来丈母娘家,灿烂的阳光洒在你的脸上,此时你觉得你的世界是如此的温暖,到了未来丈母娘家,一番嘘寒问暖,终于把最心底的方法告诉了丈母娘,丈母娘的脸上流露出了我们家的白菜终于有猪看中的微笑,则把女孩的电话号码告诉了你,并等你走后,跟女儿说:“给你介绍一个男朋友,其他人都不要再带回来了”。
在计算机的角度看待就是,Master先置REQ#信号,用来请求总线的控制权,当仲裁器给你许可(GNT#信号)时,会将FRAME#信号置于低电位,并在地址总线上放Slave的地址。Slave设备置DEVSEL#信号,以声明自己被选中了。
回到生活中,去拜访丈母家之后已经很晚了,回到家躺倒床上,准备给未来的女朋友发短信,聊了一段时间之后,兄弟叫你去玩LOL了,你经过深思熟虑之后准备给他发我要睡觉了,结束今天的话题。
在穿越到计算机中,Master置IRDY#为低电位,代表自己准备传输数据,Slave置TRDY#为低电位,代表自己准备接受数据。当Master数据准备传最后一组数据时,将FRAME#信号置为高,并在传输完成后放开IDRY#信号以释放总线控制权,接下来就是重复的过程。
2.2中断共享 中断指的是,有些设备突然需要使用总线的时候出现的,比如你在打游戏时候,正准备上高地,女朋友给你弹QQ视频,你被弹出了桌面,这时候中断就产生了。
原来对于计算机设备比较少的时候,可能一个中断线好可以对应一个中断处理程序(非共享中断线),没有任何用,但随着计算机设备的增加,一个中断线号对应一个中断处理程序已经不太现实,这个时候就使用了共享的中断线号,多个设备使用同一个中断线号,同一个中断设备线号的所有处理程序链接成一个链表,这样当在共享中断线号的方式下一个中断产生的时候,就要遍历其对应的处理程序链表,但这个中断是由使用同一个中断线号的多个设备中间的一个产生的,不可能链表里面的所有处理程序都调用一遍吧。
那中断是分成两种方法,硬件方法和软件方法。
硬件方法:
中断信号一侧的设备电阻接高,在要产生中断的设备上利用三极管将信号拉低。当所有设备的终端都得到处理后,中断信号才会恢复高电位,中断就停止了。
软件方法
在linux内核中,发现设备A使用了中断7,就会将中断7对应的内存区指向北厍A对应中断服务程序入口ISR_A;然后系统发现设备B也使用中断7,这时候就会将中断7对应的内存指向ISR_B,同时将ISR_B的结束指向ISR_A。依次类推,就会形成一个中断链。而当有中断发生时,系统跳转到中断7对应的内存,就是ISR_B。ISR_B就要检查是不是B设备的终端,如果是则处理,并将设备上的拉低电路开发;如果不是则呼叫ISR_A。这样就完成了中断共享。
存储的开天辟地(上)
存储的开天辟地(下)
誉天教育誉天教育出品 | 全国100万ICT粉丝之选微信号:15549474558合作QQ:3514226683