国外视觉设计网站,中国建筑人才证书查询官网,开发网站私活,创意设计网硬盘中的指令很多#xff0c;各指令的用法也不同。有的指令直接往command寄存器中写就行了#xff0c;有的还要在feature寄存器中写入参数#xff0c;最权威的方法还是要去参考ATA手册。由于本书中用到的都是简单的指令#xff0c;所以对此抽象出一些公共的步骤仅供参考之用…硬盘中的指令很多各指令的用法也不同。有的指令直接往command寄存器中写就行了有的还要在feature寄存器中写入参数最权威的方法还是要去参考ATA手册。由于本书中用到的都是简单的指令所以对此抽象出一些公共的步骤仅供参考之用。
不管是读硬盘还是写硬盘都不是一个指令就完事的。相关寄存器都需要设置。要是读硬盘得告诉读哪个扇区读几个扇区用哪种模式对扇区寻址LBACHS写硬盘也一样写哪个写几个还要设置操作的是哪个通道的哪个硬盘……讲了这么多寄存器有没有心里发怵心想我到底先设置哪个寄存器呢有没有个一般硬盘操作的基本顺序呢还真有小弟马上给大家呈上大概步骤。最主要的顺序就是command寄存器一定得是最后写因为一旦command寄存器被写入后硬盘就开始干活啦它才不管其它寄存器中的值对不对一律拿来就用有问题的话报错就好啦。其它寄存器顺序不是很重要。
那咱们可以约定个操作顺序免得有选择恐惧症的同学感到无所适从哈哈抱歉请原谅我这么说因为我就有选择恐惧症我很理解像我这样的同学。咱们还是约定个步骤好
1.先选择通道往该通道的sector count寄存器中写入待操作的扇区数。2.往该通道上的三个LBA寄存器写入扇区起始地址的低24位。3.往device寄存器中写入LBA地址的24~27位并置第6位为1使其为LBA模式设置第4位选择操作的硬盘master硬盘或slave硬盘。4.往该通道上的command寄存器写入操作命令。5.读取该通道上的status寄存器判断硬盘工作是否完成。6.如果以上步骤是读硬盘进入下一个步骤。否则完工。7.将硬盘数据读出。
硬盘工作完成后它已经准备好了数据咱们该怎么获取呢一般常用的数据传送方式有
1.无条件传送方式2.查询传送方式3.中断传送方式4.直接存储器存取方式DMA5.I/O处理机传送方式
对于上面的第1种“无条件传送方式”应用此方式的数据源设备一定是随时准备好了数据cpu随时取随时拿都没问题如寄存器、内存就是类似这样的设备cpu取数据时不用提前打招呼。
第2种“查询传送方式”也称为程序I/O、PIOProgramming Input/Output Model。是指传输之前由程序先去检测设备的状态。数据源设备在一定的条件下才能传送数据这类设备通常是低速设备比cpu慢很多。cpu需要数据时先检查该设备的状态如果状态为“准备好了可以发送”cpu再去获取数据。硬盘有status寄存器里面保存了工作状态所以对硬盘可以用此方式来获取数据。
第3种“中断传送方式”也称为中断驱动I/O。上面提到的“查询传送方式”有这样的缺陷由于cpu需要不断查询设备状态所以意味着只有最后一刻的查询才是有意义的之前的查询都是发生在数据尚未没准备好的时间段里所以说效率不高仅对于不要求速度的系统可以采用。可以改进的地方是如果数据源设备将数据准备好后再通知cpu来取这样效率就高了。通知cpu可以采用中断的方式当数据源设备准备好数据后它通过发中断来通知cpu来拿数据这样避免了cpu花在查询上的时间效率较高。
第4种“直接存储器存取方式DMA”。在中断传送方式中虽然极大地高高了cpu的利用率但通过中断方式来通知cpucpu就要通过压栈来保护现场还要执行传输指令最后还要恢复现场。似乎有同学说此方式已经很爽了你还想怎样。哈哈其实更爽的是一点都不要浪费cpu资源不让cpu参与传输完全由数据源设备和内存直接传输。cpu直接到内存中拿数据就好了。这就是此方式中“直接”的意思。不过DMA是由硬件实现的不是软件概念所以需要DMA控制器才行。
第5种 “I/O处理机传送方式”。不知大家发现了没有在说上面每一种的时候都把它们各自说的特别好似乎完美不可替代了就像电视上的广告一样每次都把自己的产品描述的无与伦比甚至全宇宙第一但该公司一出新产品就开始自暴曾经无与伦比的老一代产品的问题以突显现在产品更胜一筹。DMA已经是借助其它硬件了cpu已经很轻松了难道还有更爽的方式是啊DMA方式中cpu还嫌爽的不够毕竟数据输入之后或输出之前还是有一部分工作要由cpu来完成的如数据交换组合校验。如果DMA控制器再强大一点把这些工作帮cpu做了就好了。也是哦既然为了解放cpu都已经引用一个硬件(DMA)了干脆一不做二不休再引入一个硬件吧。于是I/O处理机诞生啦听名字就知道它专门用于处理IO并且它其实是一种处理器只不过用的是另一套擅长IO的指令系统随时可以处理数据。有了I/O处理机的帮忙cpu甚至可以不知道有传输这回事这下cpu才真正爽到家啦。同样这也是需要单独的硬件来支持。
综上所述硬盘不符合第1种方法因为它需要在某种条件下才能传输。第4种和第5种需要单独的硬件支持先不说我们的bochs能否模拟这两种硬件单独学习这两类硬件的操作方法就很头疼大家有兴趣的话还是先放一放以后再琢磨吧。所以在我们的系统中我们用了第2、3这两种软件传输方式。
关于硬盘的部分介绍完了接下来的工作是实践我记得当初自己做实验时的是心情是非常忐忑的总是担心有些东西不可控有些东西自己左右不了。如果您此时的心情也是这样那我用“过来人”的经验告诉您想太多也没有用做就是了只有做超出自己能力的事才能提高总做自己能力内的事咱们大家连走路都不会呢。再说啦即使是恶梦也会有醒来的一刻烦事都会过去的扛吧兄弟我相信艰辛过后您会看到更加强大的自己这是我说的吗好感动。
【再续】
本书内容来自《操作系统真象还原》请大家支持正版多谢。