日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

《自己动手写操作系统 》第九章 一 简易硬盘驱动的实现

發(fā)布時(shí)間:2023/12/9 windows 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《自己动手写操作系统 》第九章 一 简易硬盘驱动的实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要:我們都知道磁盤由控制器、磁頭等組件組成。我們?cè)诮K端編輯文件的時(shí)候,文件內(nèi)容是如何從內(nèi)存到達(dá)磁盤的呢?磁盤驅(qū)動(dòng)主要完成哪些工作?硬盤中斷是如何觸發(fā)的?等等,這些都是硬盤工作的基本原理。本文主要從“自己動(dòng)手寫操作系統(tǒng)” 出發(fā),通過實(shí)現(xiàn)一個(gè)簡(jiǎn)單的硬盤驅(qū)動(dòng),來解釋硬盤工作的基本原理。


1.程序執(zhí)行流程:

1)task_hd()作為一個(gè)守護(hù)進(jìn)程,初始化硬盤,然后一直運(yùn)行,等待接收來自其他進(jìn)程的消息
2)如果收到打開設(shè)備的消息,那么將執(zhí)行identify(0);否則,出錯(cuò)信息提示
3)identify(0):想硬盤發(fā)送IDENTIFY命令,等待中斷的到來,中斷到來后,從數(shù)據(jù)寄存器中讀取硬盤的信息
4)打印步驟3)中得到的硬盤信息

5)中斷處理程序的內(nèi)容:讀取硬盤忙的狀態(tài);通知驅(qū)動(dòng)程序

*6)文件系統(tǒng)向驅(qū)動(dòng)程序發(fā)送“打開設(shè)備”的命令


2.疑問解答

2.1.硬盤能夠接收哪些命令?有什么樣的處理結(jié)果?

硬盤能夠接受很多命令(都是硬件定義的,和系統(tǒng)無關(guān))。這里,我們用到了IDENTIFY DEVICE 命令,下面解釋一下:參考手冊(cè):AT Attachment with packet Interface 文檔P113:

The IDENTIFY DEVICE command enables the host to receive parameter information from the device.

Some devices may have to read the media in order to complete this command.

When the command is issued, the device sets the BSY bit to one, prepares to transfer the 256 words of device
identification data to the host, sets the DRQ bit to one, clears the BSY bit to zero, and asserts INTRQ if nIEN
is cleared to zero. The host may then transfer the data by reading the Data register. Table 27 defines the
arrangement and meaning of the parameter words in the buffer. All reserved bits or words shall be zero.

Some parameters are defined as a 16-bit value. A word that is defined as a 16-bit value places the most
significant bit of the value on signal line DD15 and the least significant bit on signal line DD0 (see 3.2.9).

Some parameters are defined as 32-bit values (e.g., words (61:60)). Such fields are transferred using two
successive word transfers. The device shall first transfer the least significant bits, bits (15:0) of the value, on
signal lines DD(15:0) respectively. After the least significant bits have been transferred, the most significant
bits, bits (31:16) of the value, shall be transferred on DD(15:0) respectively (see 3.2.9).

Some parameters are defined as a string of ACSII characters. Such fields are transferred as defined in 3.2.9.

2.2.如何通知驅(qū)動(dòng)程序?
參見inform_int()相關(guān)代碼

3.其他要注意的事項(xiàng)

一個(gè)進(jìn)程擁有哪些資源?需要到哪里注冊(cè)?
PCB中的相關(guān)信息!我們添加一個(gè)任務(wù)之后,需要到task_table或者其他地方進(jìn)行注冊(cè)。
3.1不要忘記在proc_tabel等的相關(guān)更新

4.關(guān)于port_read:不可預(yù)取類型

? ? IO操作有兩種類型,可預(yù)取類型和不可預(yù)取類型,前者主要是RAM,后者主要是設(shè)備寄存器。你有沒有對(duì)這個(gè)port_read函數(shù)感到奇怪呢?為什么連續(xù)讀取多次,就能讀取到不同的信息?——這是因?yàn)樵O(shè)備寄存器本身就是FIFO隊(duì)列的接口,是一種不可預(yù)取類型。
其中,insw指令的用法如下:
INS m8, DX
從 DX 指定的 I/O 端口將字節(jié)輸入 ES:(E)DI 指定的內(nèi)存位置
INS m16, DX
從 DX 指定的 I/O 端口將字輸入 ES:(E)DI 指定的內(nèi)存位置
INS m32, DX
從 DX 指定的 I/O 端口將雙字輸入 ES:(E)DI 指定的內(nèi)存位置
INSB
從 DX 指定的 I/O 端口將字節(jié)輸入 ES:(E)DI 指定的內(nèi)存位置
INSW
從 DX 指定的 I/O 端口將字輸入 ES:(E)DI 指定的內(nèi)存位置
INSD
從 DX 指定的 I/O 端口將雙字輸入 ES:(E)DI 指定的內(nèi)存位置
?

?這里,如果我們一定要記得導(dǎo)出port_read函數(shù),不然這個(gè)函數(shù)無法被外部模塊使用。


5.硬盤中斷是如何同驅(qū)動(dòng)程序交互的呢?

這里有一個(gè)非常重要的函數(shù):hd_identify(),里面的關(guān)鍵過程如下:
hd_cmd_out();
interrup_wait();
port_read();

向硬盤發(fā)送命令——等待中斷到來——讀取數(shù)據(jù)端口

6.硬盤的構(gòu)造和工作原理

硬盤內(nèi)部結(jié)構(gòu)由固定面板、控制電路和板、磁頭、盤片、主軸、電機(jī)、接口及其它附件組成,其中磁頭盤片組件是構(gòu)成硬盤的核心,它封裝在硬盤的凈化腔體內(nèi),包括有浮動(dòng)磁頭組件、磁頭驅(qū)動(dòng)機(jī)構(gòu)、盤片、主軸驅(qū)動(dòng)裝置及前置讀寫控制電路這幾個(gè)部份。
我們向硬盤發(fā)送一個(gè)命令之后,硬盤控制器接受到命令,然后開始執(zhí)行,命令執(zhí)行完畢之后,將觸發(fā)硬盤中斷,通知驅(qū)動(dòng)程序,數(shù)據(jù)已經(jīng)準(zhǔn)備完畢。

7.總結(jié)

? ? ? ? 現(xiàn)在,你腦海里有沒有硬盤工作的清晰圖景呢?BIOS開機(jī)檢測(cè)到硬盤,將硬盤的基本信息讀取到內(nèi)存的特定位置,通過PCIE配置,給硬盤寄存器分配對(duì)應(yīng)的端口號(hào)碼;操作系統(tǒng)將硬盤中斷綁定特定的中斷處理程序(主要是驅(qū)動(dòng)程序);驅(qū)動(dòng)程序運(yùn)行,文件系統(tǒng)運(yùn)行,文件系統(tǒng)向驅(qū)動(dòng)程序發(fā)送讀取硬盤信息的請(qǐng)求,硬盤驅(qū)動(dòng)向硬盤發(fā)送相應(yīng)操作命令并等待硬盤中斷的回應(yīng);收到硬盤中斷回應(yīng)之后,驅(qū)動(dòng)程序讀取端口數(shù)據(jù)到緩沖區(qū),交給文件系統(tǒng)進(jìn)行處理。

總結(jié)

以上是生活随笔為你收集整理的《自己动手写操作系统 》第九章 一 简易硬盘驱动的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。