《一种I/O监控方法.pdf》由会员分享,可在线阅读,更多相关《一种I/O监控方法.pdf(9页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102194064 A (43)申请公布日 2011.09.21 CN 102194064 A *CN102194064A* (21)申请号 201010123369.3 (22)申请日 2010.03.12 G06F 21/00(2006.01) (71)申请人 中国长城计算机深圳股份有限公司 地址 518057 广东省深圳市南山区科技园长 城计算机大厦 (72)发明人 宋靖 贾兵 林诗达 王淼 刘欣房 顾文锦 (74)专利代理机构 深圳中一专利商标事务所 44237 代理人 张全文 (54) 发明名称 一种 I/O 监控方法 (57) 摘要 本发明适用于计算机技术。
2、领域, 提供了一种 I/O 监控方法, 所述方法包括 : 1.1 检测对虚拟硬 件设备的端口访问的类型 ; 1.2 当通过客户软件 模块对虚拟硬件设备 PIO 端口的访问时, 控制虚 拟机监控器截获用户操作系统向 CMD 寄存器读写 指令, 并监控从数据寄存器读数据操作状态, 当监 控到从数据寄存器读数据时, 将数据返回给所述 操作系统 ; 1.3 当通过指令模拟模块对虚拟硬件 设备的 MMIO 端口的访问时, 控制虚拟机监控器将 物理地址空间转换为真实物理地址空间, 在虚拟 硬件设备与 PRD 表中指定的内存之间进行 DMA 数 据传输, 实现在设备底层对端口的监控。 (51)Int.Cl.。
3、 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 1 页 说明书 4 页 附图 3 页 CN 102194071 A1/1 页 2 1. 一种 I/O 监控方法, 其特征在于, 所述方法包括下述步骤 : 1.1 检测对虚拟硬件设备的端口访问的类型, 所述对虚拟硬件设备的端口访问的类型 包括通过客户软件模块对虚拟硬件设备 PIO 端口的访问和通过指令模拟模块对虚拟硬件 设备的 MMIO 端口的访问 ; 1.2 当所述对虚拟硬件设备的端口访问的类型为通过客户软件模块对虚拟硬件设备 PIO 端口的访问时, 控制虚拟机监控器截获用户操作系统向 CMD 寄存器读写指令, 并监控从。
4、 数据寄存器读数据操作状态, 当监控到从所述数据寄存器读数据时, 将所述数据返回给所 述操作系统 ; 1.3 当所述对虚拟硬件设备的端口访问的类型为通过指令模拟模块对虚拟硬件设备 的 MMIO 端口的访问时, 控制虚拟机监控器将物理地址空间转换为真实物理地址空间, 在所 述虚拟硬件设备与 PRD 表中指定的内存之间进行 DMA 数据传输。 2. 如权利要求 1 所述的方法, 其特征在于, 所述步骤 1.2 具体包括下述步骤 : 控制虚拟机监控器截获用户操作系统向 CMD 寄存器读写指令 ; 虚拟机控制器读出真实数据, 对读出的数据进行解密并设置状态寄存器 ; 通过硬件中断方式等待中断, 并监控。
5、从数据寄存器读数据操作状态 ; 当监控从数据寄存器读数据时, 将所述数据返回给所述操作系统。 3. 如权利要求 1 所述的方法, 其特征在于, 所述步骤 1.3 具体包括下述步骤 : 读取命令块寄存器组中状态寄存器位 ; 当所述状态寄存器中的BSY位为0且DRDY位为1时, 设置命令块寄存器组中的扇区数、 扇区位置寄存器、 指定要访问设备的数据位置与大小 ; 虚拟机监控器将将指定要访问设备的数据位置的物理地址空间转换为真实物理地址 空间 ; 写命令块寄存器组中的命令寄存器, 控制开始外部设备的数据访问 ; 对所述数据进行加密, 并控制在所述虚拟硬件设备与 PRD 表中指定的内存之间进行 DMA。
6、 数据传输 ; 等待设备硬件中断的产生, 读取命令块寄存器组中状态寄存器的 BSY 位, 直到所述 BSY 位为 0 ; 解密所述数据, 检查命令块寄存器组中状态寄存器的 ERR/CHK 位, 确定设置访问操作 是否有错误。 权 利 要 求 书 CN 102194064 A CN 102194071 A1/4 页 3 一种 I/O 监控方法 技术领域 0001 本发明属于计算机技术领域, 尤其涉及一种 I/O 监控方法。 背景技术 0002 计算机硬件I/O设备包括端口I/O和内存I/O, 其中, 端口I/O主要监控IN和OUT, 对端口 I/O 操作的监控。 0003 硬盘是计算机主要的存储。
7、媒介, 硬盘设备通过并行 ATA(PATA/IDE) 接口或串行 ATA 接口 (SATA) 与主机中 PCI 总线上硬盘控制器连接, 如图 1 所示, 硬盘控制器连接作为 桥设备实现 ATA 总线到 PCI 总线的转换。每个硬盘控制器一般提供两个 ATA 通道, 每个通 道可以连接两个 ATA 设备。处理器通过访问三组寄存器对硬盘设备进行控制, 这三组寄存 器分别为 : 命令块寄存器组、 控制块寄存器组和 ATA 总线控制寄存器组。三组寄存器的 I/O 基地址由硬盘的 PCI 配置空间来确定, 命令块寄存器组用于传输命令和参数, 占用 8 个 PIO 端口, 共10个可访问寄存器 ; 控制块。
8、寄存器组占用一个PIO端口, 读端口时访问的是命令块 寄存器组中的状态寄存器, 写端口时访问的是设备控制寄存器。 0004 但是, 现有的硬盘数据的访问存在一定的弊端, 现有的监控系统设置在操作系统, 由于操作系统本身的安全性不高, 因此, 导致对硬盘的数据读取访问也存在不安全性。 发明内容 0005 本发明实施例的目的在于提供一种 I/O 监控方法, 旨在解决现有的监控系统设置 在操作系统之上, 由于操作系统本身的安全性不高导致对硬盘数据的读取访问也存在不安 全性的问题。 0006 本发明实施例的另一目的在于提供一种 I/O 监控方法, 所述方法包括下述步骤 : 0007 1.1 检测对虚拟。
9、硬件设备的端口访问的类型, 所述对虚拟硬件设备的端口访问的 类型包括通过客户软件模块对虚拟硬件设备 PIO 端口的访问和通过指令模拟模块对虚拟 硬件设备的 MMIO 端口的访问 ; 0008 1.2 当所述对虚拟硬件设备的端口访问的类型为通过客户软件模块对虚拟硬件设 备PIO端口的访问时, 控制虚拟机监控器截获用户操作系统向CMD寄存器读写指令, 并监控 从数据寄存器读数据操作状态, 当监控到从所述数据寄存器读数据时, 将所述数据返回给 所述操作系统 ; 0009 1.3 当所述对虚拟硬件设备的端口访问的类型为通过指令模拟模块对虚拟硬件设 备的 MMIO 端口的访问时, 控制虚拟机监控器将物理。
10、地址空间转换为真实物理地址空间, 在 所述虚拟硬件设备与 PRD 表中指定的内存之间进行 DMA 数据传输。 0010 在本发明实施例中, 检测对虚拟硬件设备的端口访问的类型 ; 当通过客户软件模 块对虚拟硬件设备 PIO 端口的访问时, 控制虚拟机监控器截获用户操作系统向 CMD 寄存器 读写指令, 并监控从数据寄存器读数据操作状态, 当监控到从数据寄存器读数据时, 将数据 返回给所述操作系统 ; 当通过指令模拟模块对虚拟硬件设备的 MMIO 端口的访问时, 控制虚 说 明 书 CN 102194064 A CN 102194071 A2/4 页 4 拟机监控器将物理地址空间转换为真实物理地。
11、址空间, 在虚拟硬件设备与 PRD 表中指定的 内存之间进行 DMA 数据传输, 在底层实现对硬盘端口的监控, 保证硬盘数据的读取的安全 性。 附图说明 0011 图 1 是本发明实施例提供的 I/O 监控系统的结构框图 ; 0012 图 2 是本发明实施例提供的 I/O 监控方法的实现流程图 ; 0013 图 3 是本发明实施例提供的通过 PIO 方式读取硬盘数据的实现流程图 ; 0014 图 4 是本发明实施例提供的通过 DMA 方式访问硬盘数据的实现流程图。 具体实施方式 0015 为了使本发明的目的、 技术方案及优点更加清楚明白, 以下结合附图及实施例, 对 本发明进行进一步详细说明。。
12、 应当理解, 此处所描述的具体实施例仅仅用以解释本发明, 并 不用于限定本发明。 0016 在本发明实施例中, 检测对虚拟硬件设备的端口访问的类型 ; 当通过客户软件模 块对虚拟硬件设备 PIO 端口的访问时, 控制虚拟机监控器截获用户操作系统向 CMD 寄存器 读写指令, 并监控从数据寄存器读数据操作状态, 当监控到从数据寄存器读数据时, 将数据 返回给所述操作系统 ; 当通过指令模拟模块对虚拟硬件设备的 MMIO 端口的访问时, 控制虚 拟机监控器将物理地址空间转换为真实物理地址空间, 在虚拟硬件设备与 PRD 表中指定的 内存之间进行 DMA 数据传输。 0017 图1示出了本发明实施例。
13、提供的I/O监控系统的结构框图, 为了便于说明, 图中仅 给出了与本发明实施例相关的部分。 0018 系统包括虚拟硬件设备、 客户软件模块、 内存虚拟管理模块、 指令模拟模块和虚拟 中断控制器, 其中 : 0019 客户软件模块接收客户软件对虚拟硬件设备 PIO 端口的访问, 控制实现虚拟处理 器与运行的客户软件进行数据交互 ; 内存虚拟管理模块控制管理与内存访问相关的操作, 将客户内存物理地址空间转换为真实物理地址空间 ; 指令模拟模块接收客户软件对虚拟硬 件设备的 MMIO 端口的访问, 解析客户软件当前运行的指令, 把客户软件操作请求转发给所 述虚拟硬件设备进行处理 ; 虚拟中断控制器处。
14、理客户软件对中断控制器的访问, 向客户软 件注入中断请求。 0020 在本发明实施例中, 虚拟硬件设备通过客户软件模块接收客户软件对虚拟设备 PIO 端口的访问, 通过所述指令模拟模块接收客户软件对虚拟设备 MMIO 端口的访问, 通过 内存虚拟管理模块访问客户端内存, 通过虚拟中断控制器向客户注入中断请求, 实现硬件 设备的虚拟化。 0021 在本发明实施例中, 硬盘数据的访问方式包括两种方式, 一种是 PIO 方式, 另一种 是 DMA 方式。对于允许客户软件直接访问的硬件设备, 客户软件可以直接访问硬件设备的 资源数据。 0022 图 2 示出了本发明实施例提供的 I/O 监控方法的实现。
15、流程, 其具体的步骤如下所 述 : 说 明 书 CN 102194064 A CN 102194071 A3/4 页 5 0023 在步骤 S201 中, 检测对虚拟硬件设备的端口访问的类型, 所述对虚拟硬件设备的 端口访问的类型包括通过客户软件模块对虚拟硬件设备 PIO 端口的访问和通过指令模拟 模块对虚拟硬件设备的 MMIO 端口的访问。 0024 在步骤 S202 中, 当所述对虚拟硬件设备的端口访问的类型为通过客户软件模块 对虚拟硬件设备 PIO 端口的访问时, 控制虚拟机监控器截获用户操作系统向 CMD 寄存器读 写指令, 并监控从数据寄存器读数据操作状态, 当监控到从所述数据寄存器。
16、读数据时, 将所 述数据返回给所述操作系统。 0025 在步骤 S203 中, 当所述对虚拟硬件设备的端口访问的类型为通过指令模拟模块 对虚拟硬件设备的 MMIO 端口的访问时, 控制虚拟机监控器将物理地址空间转换为真实物 理地址空间, 在所述虚拟硬件设备与 PRD 表中指定的内存之间进行 DMA 数据传输。 0026 图 3 示出了本发明实施例提供的通过 PIO 方式读取硬盘数据的实现流程, 其具体 的步骤如下所述 : 0027 在步骤 S301 中, 控制虚拟机监控器截获用户操作系统向 CMD 寄存器读写指令。 0028 在本发明实施例中, 设备上电初始化, 设置命令块寄存器组中状态寄存器。
17、的设备 准备好位为 1, 表示设备可以工作, 并向 LBA-lowLBA-midLBA-highDef-sel register 设 定要读写的硬盘、 LBA 和扇区数。 0029 当用户操作系统有向硬盘读取数据要求时, 用户操作系统向硬盘控制器的 CMD 寄 存器发送读写操作指令, 虚拟机监控器通过硬盘读写监控模块监控到硬盘控制器接收到命 令块寄存器组中命令寄存器的写入指令, 则读取数据。 0030 在步骤 S302 中, 虚拟机控制器读出真实数据, 对读出的数据进行解密并设置状态 寄存器。 0031 在步骤 S303 中, 通过硬件中断方式等待中断, 并监控从数据寄存器读数据操作状 态。 。
18、0032 在本发明实施例中, 通过硬件中断方式等待硬件中断, 当然也可以不通过中断通 知方式, 设置命令块寄存器组中状态寄存器的 BSY 位为 1, 表示设备忙, 进行读写数据 ; 当数 据有效时, 设置状态寄存器的 DRQ 位, 表示命令块寄存器组中的数据寄存器中存在有效数 据。 0033 在步骤 S304 中, 当监控从数据寄存器读数据时, 将所述数据返回给所述操作系 统。 0034 在本发明实施例中, 当数据传输错误时, 设置命令块寄存器组中状态寄存器的 ERQ/CHK 位, 表示数据访问错误。 0035 在本发明实施例中, 虚拟机监控器监控到从数据寄存器读数据, 则把数据返回给 用户操。
19、作系统。当数据访问完成, 设置命令块寄存器组中的状态寄存器 BSY 位为 0, 表示设 备空闲, 发送中断请求。当读取命令块寄存器组中状态寄存器, 设备清除中断请求。当数据 从命令块寄存器组中读写完成, 设备清除命令块寄存器组中状态寄存器的 DRQ 位。 0036 图 4 示出了本发明实施例提供的通过 DMA 方式访问硬盘数据的实现流程, 其具体 的步骤如下所述 : 0037 在步骤 S401 中, 读取命令块寄存器组中状态寄存器位。 0038 在本发明实施例中, 读取状态寄存器中的BSY位, 直到为0, 以DMA访问方式为实施 说 明 书 CN 102194064 A CN 10219407。
20、1 A4/4 页 6 例进行说明 : 0039 写 ATA 总线控制寄存器组中的命令寄存器 : 0040 1. 设置命令寄存器的 Start/Stop 位为 0, 停止 DMA 传输 ; 0041 2. 设置命令寄存器的 Read/Write 位, 控制 DMA 数据传输的方向 ; 0042 3. 写清除状态寄存器的 Error 位和 Interrup 位 ; 0043 4. 设置 PRD 表地址为虚拟机监控器定义的地址, 即指定的 DMA 数据传输的内存区 域。 0044 在步骤 S402 中, 当所述状态寄存器中的 BSY 位为 0 且 DRDY 位为 1 时, 设置命令块 寄存器组中的扇。
21、区数、 扇区位置寄存器、 指定要访问设备的数据位置与大小。 0045 在本发明实施例中, 设置命令块寄存器组中的设备寄存器, 指定访问的设备。 0046 在步骤 S403 中, 虚拟机监控器将将指定要访问设备的数据位置的物理地址空间 转换为真实物理地址空间。 0047 在步骤 S404 中, 写命令块寄存器组中的命令寄存器, 控制开始外部设备的数据访 问。 0048 在步骤 S405 中, 对所述数据进行加密, 并控制在所述虚拟硬件设备与 PRD 表中指 定的内存之间进行 DMA 数据传输。 0049 在步骤 S406 中, 等待设备硬件中断的产生, 读取命令块寄存器组中状态寄存器的 BSY 。
22、位, 直到所述 BSY 位为 0。 0050 在步骤S407中, 解密所述数据, 检查命令块寄存器组中状态寄存器的ERR/CHK位, 确定设置访问操作是否有错误。 0051 在步骤 S408 中, 写 ATA 总线控制寄存器组中的命令寄存器, 停止 ATA 总线控制器 DMA。 0052 在步骤 S409 中, 写 ATA 总线控制寄存器组中的状态寄存器, 清除 Interrup 位。 0053 上述仅为本发明的一个实施例, 在此不用以限制本发明。 0054 在本发明实施例中, 检测对虚拟硬件设备的端口访问的类型 ; 当通过客户软件模 块对虚拟硬件设备 PIO 端口的访问时, 控制虚拟机监控器。
23、截获用户操作系统向 CMD 寄存器 读写指令, 并监控从数据寄存器读数据操作状态, 当监控到从数据寄存器读数据时, 将数据 返回给所述操作系统 ; 当通过指令模拟模块对虚拟硬件设备的 MMIO 端口的访问时, 控制虚 拟机监控器将物理地址空间转换为真实物理地址空间, 在虚拟硬件设备与 PRD 表中指定的 内存之间进行 DMA 数据传输, 在底层实现对硬盘端口的监控, 保证硬盘数据的读取的安全 性。 0055 以上所述仅为本发明的较佳实施例而已, 并不用以限制本发明, 凡在本发明的精 神和原则之内所作的任何修改、 等同替换和改进等, 均应包含在本发明的保护范围之内。 说 明 书 CN 102194064 A CN 102194071 A1/3 页 7 图 1 图 2 说 明 书 附 图 CN 102194064 A CN 102194071 A2/3 页 8 图 3 说 明 书 附 图 CN 102194064 A CN 102194071 A3/3 页 9 图 4 说 明 书 附 图 CN 102194064 A 。