一步步编写操作系统 22 硬盘操作方法
硬盤(pán)中的指令很多,各指令的用法也不同。有的指令直接往command寄存器中寫(xiě)就行了,有的還要在feature寄存器中寫(xiě)入?yún)?shù),最權(quán)威的方法還是要去參考ATA手冊(cè)。由于本書(shū)中用到的都是簡(jiǎn)單的指令,所以對(duì)此抽象出一些公共的步驟僅供參考之用。
不管是讀硬盤(pán)還是寫(xiě)硬盤(pán),都不是一個(gè)指令就完事的。相關(guān)寄存器都需要設(shè)置。要是讀硬盤(pán),得告訴讀哪個(gè)扇區(qū),讀幾個(gè)扇區(qū),用哪種模式對(duì)扇區(qū)尋址,LBA?CHS?寫(xiě)硬盤(pán)也一樣,寫(xiě)哪個(gè),寫(xiě)幾個(gè),還要設(shè)置操作的是哪個(gè)通道的哪個(gè)硬盤(pán)……講了這么多寄存器,有沒(méi)有心里發(fā)怵?心想,我到底先設(shè)置哪個(gè)寄存器呢?有沒(méi)有個(gè)一般硬盤(pán)操作的基本順序呢?還真有,小弟馬上給大家呈上大概步驟。最主要的順序就是command寄存器一定得是最后寫(xiě),因?yàn)橐坏ヽommand寄存器被寫(xiě)入后,硬盤(pán)就開(kāi)始干活啦,它才不管其它寄存器中的值對(duì)不對(duì),一律拿來(lái)就用,有問(wèn)題的話報(bào)錯(cuò)就好啦。其它寄存器順序不是很重要。
那咱們可以約定個(gè)操作順序,免得有選擇恐懼癥的同學(xué)感到無(wú)所適從,哈哈,抱歉,請(qǐng)?jiān)徫疫@么說(shuō),因?yàn)槲揖陀羞x擇恐懼癥,我很理解像我這樣的同學(xué)。咱們還是約定個(gè)步驟好:
硬盤(pán)工作完成后,它已經(jīng)準(zhǔn)備好了數(shù)據(jù),咱們?cè)撛趺传@取呢?一般常用的數(shù)據(jù)傳送方式有:
對(duì)于上面的第1種“無(wú)條件傳送方式”,應(yīng)用此方式的數(shù)據(jù)源設(shè)備一定是隨時(shí)準(zhǔn)備好了數(shù)據(jù),cpu隨時(shí)取隨時(shí)拿都沒(méi)問(wèn)題,如寄存器、內(nèi)存就是類似這樣的設(shè)備,cpu取數(shù)據(jù)時(shí)不用提前打招呼。
第2種“查詢傳送方式”,也稱為程序I/O、PIO(Programming Input/Output Model)。是指?jìng)鬏斨?#xff0c;由程序先去檢測(cè)設(shè)備的狀態(tài)。數(shù)據(jù)源設(shè)備在一定的條件下才能傳送數(shù)據(jù),這類設(shè)備通常是低速設(shè)備,比cpu慢很多。cpu需要數(shù)據(jù)時(shí),先檢查該設(shè)備的狀態(tài),如果狀態(tài)為“準(zhǔn)備好了可以發(fā)送”,cpu再去獲取數(shù)據(jù)。硬盤(pán)有status寄存器,里面保存了工作狀態(tài),所以對(duì)硬盤(pán)可以用此方式來(lái)獲取數(shù)據(jù)。
第3種“中斷傳送方式”,也稱為中斷驅(qū)動(dòng)I/O。上面提到的“查詢傳送方式”有這樣的缺陷,由于cpu需要不斷查詢?cè)O(shè)備狀態(tài),所以意味著只有最后一刻的查詢才是有意義的,之前的查詢都是發(fā)生在數(shù)據(jù)尚未沒(méi)準(zhǔn)備好的時(shí)間段里,所以說(shuō)效率不高,僅對(duì)于不要求速度的系統(tǒng)可以采用。可以改進(jìn)的地方是,如果數(shù)據(jù)源設(shè)備將數(shù)據(jù)準(zhǔn)備好后再通知cpu來(lái)取,這樣效率就高了。通知cpu可以采用中斷的方式,當(dāng)數(shù)據(jù)源設(shè)備準(zhǔn)備好數(shù)據(jù)后,它通過(guò)發(fā)中斷來(lái)通知cpu來(lái)拿數(shù)據(jù),這樣避免了cpu花在查詢上的時(shí)間,效率較高。
第4種“直接存儲(chǔ)器存取方式(DMA)”。在中斷傳送方式中,雖然極大地高高了cpu的利用率,但通過(guò)中斷方式來(lái)通知cpu,cpu就要通過(guò)壓棧來(lái)保護(hù)現(xiàn)場(chǎng),還要執(zhí)行傳輸指令,最后還要恢復(fù)現(xiàn)場(chǎng)。似乎有同學(xué)說(shuō)此方式已經(jīng)很爽了,你還想怎樣。哈哈,其實(shí)更爽的是一點(diǎn)都不要浪費(fèi)cpu資源,不讓cpu參與傳輸,完全由數(shù)據(jù)源設(shè)備和內(nèi)存直接傳輸。cpu直接到內(nèi)存中拿數(shù)據(jù)就好了。這就是此方式中“直接”的意思。不過(guò)DMA是由硬件實(shí)現(xiàn)的,不是軟件概念,所以需要DMA控制器才行。
第5種 “I/O處理機(jī)傳送方式”。不知大家發(fā)現(xiàn)了沒(méi)有,在說(shuō)上面每一種的時(shí)候都把它們各自說(shuō)的特別好,似乎完美不可替代了,就像電視上的廣告一樣,每次都把自己的產(chǎn)品描述的無(wú)與倫比甚至全宇宙第一,但該公司一出新產(chǎn)品,就開(kāi)始自暴曾經(jīng)無(wú)與倫比的老一代產(chǎn)品的問(wèn)題以突顯現(xiàn)在產(chǎn)品更勝一籌。DMA已經(jīng)是借助其它硬件了,cpu已經(jīng)很輕松了,難道還有更爽的方式?是啊,DMA方式中cpu還嫌爽的不夠,畢竟數(shù)據(jù)輸入之后或輸出之前還是有一部分工作要由cpu來(lái)完成的,如數(shù)據(jù)交換,組合,校驗(yàn)。如果DMA控制器再?gòu)?qiáng)大一點(diǎn),把這些工作幫cpu做了就好了。也是哦,既然為了解放cpu,都已經(jīng)引用一個(gè)硬件(DMA)了,干脆一不做二不休,再引入一個(gè)硬件吧。于是,I/O處理機(jī)誕生啦,聽(tīng)名字就知道它專門(mén)用于處理IO,并且它其實(shí)是一種處理器,只不過(guò)用的是另一套擅長(zhǎng)IO的指令系統(tǒng),隨時(shí)可以處理數(shù)據(jù)。有了I/O處理機(jī)的幫忙,cpu甚至可以不知道有傳輸這回事,這下cpu才真正爽到家啦。同樣,這也是需要單獨(dú)的硬件來(lái)支持。
綜上所述,硬盤(pán)不符合第1種方法,因?yàn)樗枰谀撤N條件下才能傳輸。第4種和第5種需要單獨(dú)的硬件支持,先不說(shuō)我們的bochs能否模擬這兩種硬件,單獨(dú)學(xué)習(xí)這兩類硬件的操作方法就很頭疼,大家有興趣的話還是先放一放,以后再琢磨吧。所以在我們的系統(tǒng)中,我們用了第2、3這兩種軟件傳輸方式。
關(guān)于硬盤(pán)的部分介紹完了,接下來(lái)的工作是實(shí)踐,我記得當(dāng)初自己做實(shí)驗(yàn)時(shí)的是心情是非常忐忑的,總是擔(dān)心有些東西不可控,有些東西自己左右不了。如果您此時(shí)的心情也是這樣,那我用“過(guò)來(lái)人”的經(jīng)驗(yàn)告訴您,想太多也沒(méi)有用,做就是了,只有做超出自己能力的事才能提高,總做自己能力內(nèi)的事,咱們大家連走路都不會(huì)呢。再說(shuō)啦,即使是惡夢(mèng)也會(huì)有醒來(lái)的一刻,煩事都會(huì)過(guò)去的,扛吧兄弟,我相信,艱辛過(guò)后,您會(huì)看到更加強(qiáng)大的自己(這是我說(shuō)的嗎,好感動(dòng))。
【再續(xù)】
本書(shū)內(nèi)容來(lái)自《操作系統(tǒng)真象還原》,請(qǐng)大家支持正版,多謝。
總結(jié)
以上是生活随笔為你收集整理的一步步编写操作系统 22 硬盘操作方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 粉丝突破1280万 新东方被看好:有望稳
- 下一篇: java信息管理系统总结_java实现科