專利名稱:一種i/o監(jiān)控方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機技術(shù)領(lǐng)域,尤其涉及一種I/O監(jiān)控方法。
背景技術(shù):
計算機硬件I/O設(shè)備包括端口 I/O和內(nèi)存1/0,其中,端口 I/O主要監(jiān)控IN和OUT, 對端口 I/O操作的監(jiān)控。硬盤是計算機主要的存儲媒介,硬盤設(shè)備通過并行ATA(PATA/IDE)接口或串行 ATA接口(SATA)與主機中PCI總線上硬盤控制器連接,如圖1所示,硬盤控制器連接作為橋設(shè)備實現(xiàn)ATA總線到PCI總線的轉(zhuǎn)換。每個硬盤控制器一般提供兩個ATA通道,每個通道可以連接兩個ATA設(shè)備。處理器通過訪問三組寄存器對硬盤設(shè)備進行控制,這三組寄存器分別為命令塊寄存器組、控制塊寄存器組和ATA總線控制寄存器組。三組寄存器的I/O 基地址由硬盤的PCI配置空間來確定,命令塊寄存器組用于傳輸命令和參數(shù),占用8個PIO 端口,共10個可訪問寄存器;控制塊寄存器組占用一個PIO端口,讀端口時訪問的是命令塊寄存器組中的狀態(tài)寄存器,寫端口時訪問的是設(shè)備控制寄存器。但是,現(xiàn)有的硬盤數(shù)據(jù)的訪問存在一定的弊端,現(xiàn)有的監(jiān)控系統(tǒng)設(shè)置在操作系統(tǒng), 由于操作系統(tǒng)本身的安全性不高,因此,導(dǎo)致對硬盤的數(shù)據(jù)讀取訪問也存在不安全性。
發(fā)明內(nèi)容
本發(fā)明實施例的目的在于提供一種I/O監(jiān)控方法,旨在解決現(xiàn)有的監(jiān)控系統(tǒng)設(shè)置在操作系統(tǒng)之上,由于操作系統(tǒng)本身的安全性不高導(dǎo)致對硬盤數(shù)據(jù)的讀取訪問也存在不安全性的問題。本發(fā)明實施例的另一目的在于提供一種I/O監(jiān)控方法,所述方法包括下述步驟1. 1檢測對虛擬硬件設(shè)備的端口訪問的類型,所述對虛擬硬件設(shè)備的端口訪問的類型包括通過客戶軟件模塊對虛擬硬件設(shè)備PIO端口的訪問和通過指令模擬模塊對虛擬硬件設(shè)備的匪IO端口的訪問;1. 2當(dāng)所述對虛擬硬件設(shè)備的端口訪問的類型為通過客戶軟件模塊對虛擬硬件設(shè)備PIO端口的訪問時,控制虛擬機監(jiān)控器截獲用戶操作系統(tǒng)向CMD寄存器讀寫指令,并監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)操作狀態(tài),當(dāng)監(jiān)控到從所述數(shù)據(jù)寄存器讀數(shù)據(jù)時,將所述數(shù)據(jù)返回給所述操作系統(tǒng);1. 3當(dāng)所述對虛擬硬件設(shè)備的端口訪問的類型為通過指令模擬模塊對虛擬硬件設(shè)備的MMIO端口的訪問時,控制虛擬機監(jiān)控器將物理地址空間轉(zhuǎn)換為真實物理地址空間,在所述虛擬硬件設(shè)備與PRD表中指定的內(nèi)存之間進行DMA數(shù)據(jù)傳輸。在本發(fā)明實施例中,檢測對虛擬硬件設(shè)備的端口訪問的類型;當(dāng)通過客戶軟件模塊對虛擬硬件設(shè)備Pio端口的訪問時,控制虛擬機監(jiān)控器截獲用戶操作系統(tǒng)向CMD寄存器讀寫指令,并監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)操作狀態(tài),當(dāng)監(jiān)控到從數(shù)據(jù)寄存器讀數(shù)據(jù)時,將數(shù)據(jù)返回給所述操作系統(tǒng);當(dāng)通過指令模擬模塊對虛擬硬件設(shè)備的MMIO端口的訪問時,控制虛擬機監(jiān)控器將物理地址空間轉(zhuǎn)換為真實物理地址空間,在虛擬硬件設(shè)備與PRD表中指定的內(nèi)存之間進行DMA數(shù)據(jù)傳輸,在底層實現(xiàn)對硬盤端口的監(jiān)控,保證硬盤數(shù)據(jù)的讀取的安全性。
圖1是本發(fā)明實施例提供的I/O監(jiān)控系統(tǒng)的結(jié)構(gòu)框圖;圖2是本發(fā)明實施例提供的I/O監(jiān)控方法的實現(xiàn)流程圖;圖3是本發(fā)明實施例提供的通過PIO方式讀取硬盤數(shù)據(jù)的實現(xiàn)流程圖;圖4是本發(fā)明實施例提供的通過DMA方式訪問硬盤數(shù)據(jù)的實現(xiàn)流程圖。
具體實施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。在本發(fā)明實施例中,檢測對虛擬硬件設(shè)備的端口訪問的類型;當(dāng)通過客戶軟件模塊對虛擬硬件設(shè)備PIO端口的訪問時,控制虛擬機監(jiān)控器截獲用戶操作系統(tǒng)向CMD寄存器讀寫指令,并監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)操作狀態(tài),當(dāng)監(jiān)控到從數(shù)據(jù)寄存器讀數(shù)據(jù)時,將數(shù)據(jù)返回給所述操作系統(tǒng);當(dāng)通過指令模擬模塊對虛擬硬件設(shè)備的MMIO端口的訪問時,控制虛擬機監(jiān)控器將物理地址空間轉(zhuǎn)換為真實物理地址空間,在虛擬硬件設(shè)備與PRD表中指定的內(nèi)存之間進行DMA數(shù)據(jù)傳輸。圖1示出了本發(fā)明實施例提供的I/O監(jiān)控系統(tǒng)的結(jié)構(gòu)框圖,為了便于說明,圖中僅給出了與本發(fā)明實施例相關(guān)的部分。系統(tǒng)包括虛擬硬件設(shè)備、客戶軟件模塊、內(nèi)存虛擬管理模塊、指令模擬模塊和虛擬中斷控制器,其中客戶軟件模塊接收客戶軟件對虛擬硬件設(shè)備PIO端口的訪問,控制實現(xiàn)虛擬處理器與運行的客戶軟件進行數(shù)據(jù)交互;內(nèi)存虛擬管理模塊控制管理與內(nèi)存訪問相關(guān)的操作, 將客戶內(nèi)存物理地址空間轉(zhuǎn)換為真實物理地址空間;指令模擬模塊接收客戶軟件對虛擬硬件設(shè)備的MMIO端口的訪問,解析客戶軟件當(dāng)前運行的指令,把客戶軟件操作請求轉(zhuǎn)發(fā)給所述虛擬硬件設(shè)備進行處理;虛擬中斷控制器處理客戶軟件對中斷控制器的訪問,向客戶軟件注入中斷請求。在本發(fā)明實施例中,虛擬硬件設(shè)備通過客戶軟件模塊接收客戶軟件對虛擬設(shè)備 PIO端口的訪問,通過所述指令模擬模塊接收客戶軟件對虛擬設(shè)備MMIO端口的訪問,通過內(nèi)存虛擬管理模塊訪問客戶端內(nèi)存,通過虛擬中斷控制器向客戶注入中斷請求,實現(xiàn)硬件設(shè)備的虛擬化。在本發(fā)明實施例中,硬盤數(shù)據(jù)的訪問方式包括兩種方式,一種是PIO方式,另一種是DMA方式。對于允許客戶軟件直接訪問的硬件設(shè)備,客戶軟件可以直接訪問硬件設(shè)備的資源數(shù)據(jù)。圖2示出了本發(fā)明實施例提供的I/O監(jiān)控方法的實現(xiàn)流程,其具體的步驟如下所述
在步驟S201中,檢測對虛擬硬件設(shè)備的端口訪問的類型,所述對虛擬硬件設(shè)備的端口訪問的類型包括通過客戶軟件模塊對虛擬硬件設(shè)備PIO端口的訪問和通過指令模擬模塊對虛擬硬件設(shè)備的MMio端口的訪問。在步驟S202中,當(dāng)所述對虛擬硬件設(shè)備的端口訪問的類型為通過客戶軟件模塊對虛擬硬件設(shè)備PIO端口的訪問時,控制虛擬機監(jiān)控器截獲用戶操作系統(tǒng)向CMD寄存器讀寫指令,并監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)操作狀態(tài),當(dāng)監(jiān)控到從所述數(shù)據(jù)寄存器讀數(shù)據(jù)時,將所述數(shù)據(jù)返回給所述操作系統(tǒng)。在步驟S203中,當(dāng)所述對虛擬硬件設(shè)備的端口訪問的類型為通過指令模擬模塊對虛擬硬件設(shè)備的MMIO端口的訪問時,控制虛擬機監(jiān)控器將物理地址空間轉(zhuǎn)換為真實物理地址空間,在所述虛擬硬件設(shè)備與PRD表中指定的內(nèi)存之間進行DMA數(shù)據(jù)傳輸。圖3示出了本發(fā)明實施例提供的通過PIO方式讀取硬盤數(shù)據(jù)的實現(xiàn)流程,其具體的步驟如下所述在步驟S301中,控制虛擬機監(jiān)控器截獲用戶操作系統(tǒng)向CMD寄存器讀寫指令。在本發(fā)明實施例中,設(shè)備上電初始化,設(shè)置命令塊寄存器組中狀態(tài)寄存器的設(shè)備準(zhǔn)備好位為1,表示設(shè)備可以工作,并向LBA-low\LBA-mid\LBA-high\Def-sel register設(shè)定要讀寫的硬盤、LBA和扇區(qū)數(shù)。當(dāng)用戶操作系統(tǒng)有向硬盤讀取數(shù)據(jù)要求時,用戶操作系統(tǒng)向硬盤控制器的CMD寄存器發(fā)送讀寫操作指令,虛擬機監(jiān)控器通過硬盤讀寫監(jiān)控模塊監(jiān)控到硬盤控制器接收到命令塊寄存器組中命令寄存器的寫入指令,則讀取數(shù)據(jù)。在步驟S302中,虛擬機控制器讀出真實數(shù)據(jù),對讀出的數(shù)據(jù)進行解密并設(shè)置狀態(tài)寄存器。在步驟S303中,通過硬件中斷方式等待中斷,并監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)操作狀態(tài)。在本發(fā)明實施例中,通過硬件中斷方式等待硬件中斷,當(dāng)然也可以不通過中斷通知方式,設(shè)置命令塊寄存器組中狀態(tài)寄存器的BSY位為1,表示設(shè)備忙,進行讀寫數(shù)據(jù);當(dāng)數(shù)據(jù)有效時,設(shè)置狀態(tài)寄存器的DRQ位,表示命令塊寄存器組中的數(shù)據(jù)寄存器中存在有效數(shù)據(jù)。在步驟S304中,當(dāng)監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)時,將所述數(shù)據(jù)返回給所述操作系統(tǒng)。在本發(fā)明實施例中,當(dāng)數(shù)據(jù)傳輸錯誤時,設(shè)置命令塊寄存器組中狀態(tài)寄存器的 ERQ/CHK位,表示數(shù)據(jù)訪問錯誤。在本發(fā)明實施例中,虛擬機監(jiān)控器監(jiān)控到從數(shù)據(jù)寄存器讀數(shù)據(jù),則把數(shù)據(jù)返回給用戶操作系統(tǒng)。當(dāng)數(shù)據(jù)訪問完成,設(shè)置命令塊寄存器組中的狀態(tài)寄存器BSY位為0,表示設(shè)備空閑,發(fā)送中斷請求。當(dāng)讀取命令塊寄存器組中狀態(tài)寄存器,設(shè)備清除中斷請求。當(dāng)數(shù)據(jù)從命令塊寄存器組中讀寫完成,設(shè)備清除命令塊寄存器組中狀態(tài)寄存器的DRQ位。圖4示出了本發(fā)明實施例提供的通過DMA方式訪問硬盤數(shù)據(jù)的實現(xiàn)流程,其具體的步驟如下所述在步驟S401中,讀取命令塊寄存器組中狀態(tài)寄存器位。在本發(fā)明實施例中,讀取狀態(tài)寄存器中的BSY位,直到為0,以DMA訪問方式為實施例進行說明寫ATA總線控制寄存器組中的命令寄存器1.設(shè)置命令寄存器的Mart/Mop位為0,停止DMA傳輸;2.設(shè)置命令寄存器的Read/Write位,控制DMA數(shù)據(jù)傳輸?shù)姆较颍?.寫清除狀態(tài)寄存器的Error位和hterrup位;4.設(shè)置PRD表地址為虛擬機監(jiān)控器定義的地址,即指定的DMA數(shù)據(jù)傳輸?shù)膬?nèi)存區(qū)域。在步驟S402中,當(dāng)所述狀態(tài)寄存器中的BSY位為0且DRDY位為1時,設(shè)置命令塊寄存器組中的扇區(qū)數(shù)、扇區(qū)位置寄存器、指定要訪問設(shè)備的數(shù)據(jù)位置與大小。在本發(fā)明實施例中,設(shè)置命令塊寄存器組中的設(shè)備寄存器,指定訪問的設(shè)備。在步驟S403中,虛擬機監(jiān)控器將將指定要訪問設(shè)備的數(shù)據(jù)位置的物理地址空間轉(zhuǎn)換為真實物理地址空間。在步驟S404中,寫命令塊寄存器組中的命令寄存器,控制開始外部設(shè)備的數(shù)據(jù)訪問。在步驟S405中,對所述數(shù)據(jù)進行加密,并控制在所述虛擬硬件設(shè)備與PRD表中指定的內(nèi)存之間進行DMA數(shù)據(jù)傳輸。在步驟S406中,等待設(shè)備硬件中斷的產(chǎn)生,讀取命令塊寄存器組中狀態(tài)寄存器的 BSY位,直到所述BSY位為0。在步驟S407中,解密所述數(shù)據(jù),檢查命令塊寄存器組中狀態(tài)寄存器的ERR/CHK位, 確定設(shè)置訪問操作是否有錯誤。在步驟S408中,寫ATA總線控制寄存器組中的命令寄存器,停止ATA總線控制器 DMA。在步驟S409中,寫ATA總線控制寄存器組中的狀態(tài)寄存器,清除hterrup位。上述僅為本發(fā)明的一個實施例,在此不用以限制本發(fā)明。在本發(fā)明實施例中,檢測對虛擬硬件設(shè)備的端口訪問的類型;當(dāng)通過客戶軟件模塊對虛擬硬件設(shè)備PIO端口的訪問時,控制虛擬機監(jiān)控器截獲用戶操作系統(tǒng)向CMD寄存器讀寫指令,并監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)操作狀態(tài),當(dāng)監(jiān)控到從數(shù)據(jù)寄存器讀數(shù)據(jù)時,將數(shù)據(jù)返回給所述操作系統(tǒng);當(dāng)通過指令模擬模塊對虛擬硬件設(shè)備的MMIO端口的訪問時,控制虛擬機監(jiān)控器將物理地址空間轉(zhuǎn)換為真實物理地址空間,在虛擬硬件設(shè)備與PRD表中指定的內(nèi)存之間進行DMA數(shù)據(jù)傳輸,在底層實現(xiàn)對硬盤端口的監(jiān)控,保證硬盤數(shù)據(jù)的讀取的安全性。以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1. 一種I/O監(jiān)控方法,其特征在于,所述方法包括下述步驟1.1檢測對虛擬硬件設(shè)備的端口訪問的類型,所述對虛擬硬件設(shè)備的端口訪問的類型包括通過客戶軟件模塊對虛擬硬件設(shè)備Pio端口的訪問和通過指令模擬模塊對虛擬硬件設(shè)備的匪IO端口的訪問;1. 2當(dāng)所述對虛擬硬件設(shè)備的端口訪問的類型為通過客戶軟件模塊對虛擬硬件設(shè)備 PIO端口的訪問時,控制虛擬機監(jiān)控器截獲用戶操作系統(tǒng)向CMD寄存器讀寫指令,并監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)操作狀態(tài),當(dāng)監(jiān)控到從所述數(shù)據(jù)寄存器讀數(shù)據(jù)時,將所述數(shù)據(jù)返回給所述操作系統(tǒng);1.3當(dāng)所述對虛擬硬件設(shè)備的端口訪問的類型為通過指令模擬模塊對虛擬硬件設(shè)備的MMIO端口的訪問時,控制虛擬機監(jiān)控器將物理地址空間轉(zhuǎn)換為真實物理地址空間,在所述虛擬硬件設(shè)備與PRD表中指定的內(nèi)存之間進行DMA數(shù)據(jù)傳輸。
2.如權(quán)利要求1所述的方法,其特征在于,所述步驟1.2具體包括下述步驟 控制虛擬機監(jiān)控器截獲用戶操作系統(tǒng)向CMD寄存器讀寫指令;虛擬機控制器讀出真實數(shù)據(jù),對讀出的數(shù)據(jù)進行解密并設(shè)置狀態(tài)寄存器; 通過硬件中斷方式等待中斷,并監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)操作狀態(tài); 當(dāng)監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)時,將所述數(shù)據(jù)返回給所述操作系統(tǒng)。
3.如權(quán)利要求1所述的方法,其特征在于,所述步驟1.3具體包括下述步驟 讀取命令塊寄存器組中狀態(tài)寄存器位;當(dāng)所述狀態(tài)寄存器中的BSY位為0且DRDY位為1時,設(shè)置命令塊寄存器組中的扇區(qū)數(shù)、 扇區(qū)位置寄存器、指定要訪問設(shè)備的數(shù)據(jù)位置與大?。惶摂M機監(jiān)控器將將指定要訪問設(shè)備的數(shù)據(jù)位置的物理地址空間轉(zhuǎn)換為真實物理地址空間;寫命令塊寄存器組中的命令寄存器,控制開始外部設(shè)備的數(shù)據(jù)訪問; 對所述數(shù)據(jù)進行加密,并控制在所述虛擬硬件設(shè)備與PRD表中指定的內(nèi)存之間進行 DMA數(shù)據(jù)傳輸;等待設(shè)備硬件中斷的產(chǎn)生,讀取命令塊寄存器組中狀態(tài)寄存器的BSY位,直到所述BSY 位為0;解密所述數(shù)據(jù),檢查命令塊寄存器組中狀態(tài)寄存器的ERR/CHK位,確定設(shè)置訪問操作是否有錯誤。
全文摘要
本發(fā)明適用于計算機技術(shù)領(lǐng)域,提供了一種I/O監(jiān)控方法,所述方法包括1.1檢測對虛擬硬件設(shè)備的端口訪問的類型;1.2當(dāng)通過客戶軟件模塊對虛擬硬件設(shè)備PIO端口的訪問時,控制虛擬機監(jiān)控器截獲用戶操作系統(tǒng)向CMD寄存器讀寫指令,并監(jiān)控從數(shù)據(jù)寄存器讀數(shù)據(jù)操作狀態(tài),當(dāng)監(jiān)控到從數(shù)據(jù)寄存器讀數(shù)據(jù)時,將數(shù)據(jù)返回給所述操作系統(tǒng);1.3當(dāng)通過指令模擬模塊對虛擬硬件設(shè)備的MMIO端口的訪問時,控制虛擬機監(jiān)控器將物理地址空間轉(zhuǎn)換為真實物理地址空間,在虛擬硬件設(shè)備與PRD表中指定的內(nèi)存之間進行DMA數(shù)據(jù)傳輸,實現(xiàn)在設(shè)備底層對端口的監(jiān)控。
文檔編號G06F21/00GK102194064SQ201010123369
公開日2011年9月21日 申請日期2010年3月12日 優(yōu)先權(quán)日2010年3月12日
發(fā)明者劉欣房, 宋靖, 林詩達, 王淼, 賈兵, 顧文錦 申請人:中國長城計算機深圳股份有限公司