一种 PCI 设备与系统内存的通讯方法和装置 【技术领域】
本发明属于计算机技术领域, 具体涉及一种 PCI 设备与系统内存的通讯方法和装置。 背景技术
PCI 插 槽 是 基 于 PCI 局 部 总 线 的 扩 展 插 槽, 位于主板上加速图形接口 (Accelerate Graphical Port, AGP) 插槽的下方, 工业标准结构总线 (IndustrialStandard Architecture, ISA) 插槽的上方。其位宽为 32 位或 64 位, 工作频率一般为 33MHz, 一般最 大数据传输率为 133MB/sec(32 位 ) 和 266MB/sec(64 位 )。PCI 插槽可插接显卡、 声卡、 网 卡、 内置 Modem、 内置 ADSL Modem、 USB2.0 卡、 IEEE1394 卡、 IDE 接口卡、 RAID 卡、 电视卡、 视 频采集卡以及其它种类繁多的扩展卡。 PCI 插槽是主板的主要扩展插槽, 通过插接不同的扩 展卡可以获得目前电脑能实现的几乎所有功能, 是名副其实的 “万用” 扩展插槽。 在具体实施过程中, 计算机的 CPU 和 PCI 设备之间设置有两者共享的内存空间, 设 备驱动通过在两者共享的内存空间控制 PCI 设备, 同时在 CPU 与 PCI 设备之间传递数据。
譬如, 以共享内存空间为控制与状态寄存器为例, 设备的控制与状态寄存器用来 控制设备并读取设备的信息 : 例如 PCI SCSI 设备驱动可以通过读取其控制器与状态寄存 器, 获取一 SCSI 设备, 该 SCSI 设备已准备好将一块数据写入 SCSI 磁盘。同时, 还可以在设 备加电后, 通过对控制器与状态寄存器写入信息来启动设备。
其中, 在 CPU 和 PCI 设备的共享内存空间, 是靠内存地址的映射关系来实现数据的 通讯, 如果 CPU 的内存地址处于 PCI 的寻址范围以内, 则可以建立映射关系, 进行 CPU 与 PCI 设备之间的数据通讯, 但是如果内存地址大于 PCI 的寻址范围, 且 CPU 使用的内存范围超出 PCI 寻址范围, 则会导致 CPU 与 PCI 设备之间无法建立正常的数据通讯。
如何解决由于系统内存地址范围大于 PCI 的寻址范围, 导致 CPU 与 PCI 设备之间 无法进行通讯的问题, 是计算机技术领域研究的方向之一。
发明内容 本发明的目的在于提供一种 PCI 设备与系统内存的通讯方法, 旨在解决由于系统 内存地址范围大于 PCI 的寻址范围, 导致 CPU 与 PCI 设备之间无法进行通讯的问题。
本发明实施例是这样实现的, 一种 PCI 设备与系统内存的通讯方法, 所述方法包 括以下步骤 :
获取系统内存地址范围以及 PCI 设备的寻址范围 ;
判断所述系统内存地址范围是否全部在所述 PCI 设备的寻址范围之内 ;
当所述系统内存地址范围的一部分在所述 PCI 设备的寻址范围之外时, 则进行如 下步骤 :
将所述 PCI 设备与在其寻址范围内的系统内存地址建立映射关系, 进行通讯 ;
设置一内存转址区 ; 控制所述 PCI 设备寻址范围之外的系统内存地址通过所述内
存转址区进行与所述 PCI 设备的通讯。
本发明实施例的还一目的在于提供一种 PCI 设备与系统内存的通讯装置, 所述装 置包括 :
信息获取模块, 用于获取系统内存地址范围以及 PCI 设备的寻址范围 ;
信息比较模块, 用于判断所述系统内存地址范围是否全部在所述 PCI 设备的寻址 范围之内 ;
通讯模块, 用于进行通讯 ; 以及,
内存转址区设置模块, 用于设置一内存转址区, 所述通讯模块控制所述 PCI 设备 寻址范围之外的系统内存地址通过所述内存转址区进行与所述 PCI 设备的通讯。
本发明实施例通过在 PCI 设备和系统内存的共享空间设置一内存转址区, 超出 PCI 设备寻址范围的系统内存地址, 能够通过该内存转址区实现与 PCI 设备的通讯, 解决了 由于系统内存地址范围大于 PCI 的寻址范围, 导致 CPU 与 PCI 设备之间无法进行通讯的问 题, 给用户的使用带来极大的便利。 附图说明
图 1 示出了本发明实施例提供的 PCI 设备与系统内存的通讯方法的流程图 ; 图 2 示出了本发明实施例提供的 PCI 设备与系统内存的通讯装置的结构图。具体实施方式
为了使本发明的目的、 技术方案及优点更加清楚明白, 以下结合附图及实施例, 对 本发明进行进一步详细说明。 应当理解, 此处所描述的具体实施例仅用以解释本发明, 并不 用于限定本发明。
本发明实施例通过在 PCI 设备和系统内存的共享空间设置一内存转址区, 超出 PCI 设备寻址范围的系统内存地址能够通过该内存转址区实现与 PCI 设备的通讯。
图 1 示出了本发明实施例提供的 PCI 设备与系统内存的通讯方法的流程。
在步骤 S101 中, 在有 PCI 设备连接计算机系统时, 获取系统内存地址范围以及 PCI 设备的寻址范围 ;
在步骤 S102 中, 判断所述系统内存地址范围是否全部在所述 PCI 设备的寻址范围 之内 ; 若是, 则进行步骤 S103, 否则进行步骤 S105 ;
在 步 骤 S103 中, 建 立 所 述 PCI 设 备 与 所 述 系 统 内 存 地 址 的 直 接 存 储 器 存 取 (Direct Memory Access, DMA) 映射关系, 根据建立的 DMA 映射关系进行数据的通讯 ;
当然, DMA 映射关系是在两者共享的内存空间内建立的。
在步骤 S104 中, 将所述 PCI 设备与在其寻址范围内的系统内存地址建立 DMA 映射 关系 ;
在步骤 S105 中, 设置一内存转址区 ; 其中, 该内存转址区设置在 PCI 设备和系统内 存 DMA 映射的内存空间内。
在具体实施过程中, 根据所述 PCI 设备以及所述系统内存地址一次性最大传递数 据的大小确定所述内存转址区的大小。
在步骤 S106 中, 判断需进行数据通讯的系统内存地址是否为 PCI 设备的寻址范围之内的地址, 若是, 则按照步骤 S104 建立的 DMA 映射关系进行通讯, 否则进行步骤 S107 ;
在步骤 S107 中, 所述 PCI 设备寻址范围之外的系统内存地址通过所述内存转址区 进行与所述 PCI 设备的通讯。
该步骤 S107 具体包括 :
(1)、 所述 PCI 设备寻址范围之外的系统内存地址向 PCI 设备发送数据时, 将所发 送数据复制到内存转址区, 所述内存转址区将所述数据发送至相应的 PCI 设备 ;
(2)、 PCI 设备向所述 PCI 设备寻址范围之外的系统内存地址发送数据时, 将所发 送数据发送至到所述内存转址区, 所述内存转址区将所述数据复制到相应的系统内存地 址。
在步骤 S108 中, 判断所述系统是否停止运行, 若是, 则进行步骤 S109, 否则继续进 行 S106 ;
在步骤 S109 中, 释放所述内存转址区的内存。
图 2 示出了本发明实施例提供的 PCI 设备与系统内存的通讯装置的结构。所述装 置包括信息获取模块 21、 信息比较模块 22、 内存转址区设置模块 23、 通讯模块 24、 系统运行 判断模块 25 以及内存转址区控制模块 26。 其中, 信息获取模块 21 获取系统内存地址范围以及 PCI 设备的寻址范围 ;
信息比较模块 22 判断所述系统内存地址范围是否全部在所述 PCI 设备的寻址范 围之内 :
当所述信息比较模块 22 判断所述系统内存地址范围全部在所述 PCI 设备的寻址 范围之内时, 通讯模块 24 将所述 PCI 设备与系统内存地址建立映射关系后进行通讯 ;
当所述信息比较模块 22 判断所述系统内存地址范围没有全部在所述 PCI 设备的 寻址范围之内时, 内存转址区设置模块 23 设置一内存转址区 ;
在具体实施过程中, 所述内存转址区设置模块 23 判断所述 PCI 设备以及所述系统 内存地址一次性最大传递数据的大小, 并根据所述 PCI 设备以及所述系统内存地址一次性 最大传递数据的大小确定所述内存转址区的大小。
在具体实施过程中, 内存转址区设置模块 23 在所述 PCI 设备和所述系统内存的 DMA 映射内设置内存转址区。
通讯模块 24 将所述 PCI 设备与在其寻址范围内的系统内存地址建立映射关系进 行通讯 ; 同时通讯模块 24 控制所述 PCI 设备寻址范围之外的系统内存地址通过所述内存转 址区进行与所述 PCI 设备的通讯。
在具体实施过程中, 所述通讯模块 24 包括转发模块 241 :
其中, 系统内存将所述 PCI 设备寻址范围之外的系统内存地址数据复制到内存转 址区 ; 或者, PCI 设备发送数据发送至所述内存转址区 ;
转发模块 241 将接收到的数据发送至相应的 PCI 设备或者 PCI 设备寻址范围之外 的系统内存地址。
系统运行判断模块 25 判断所述系统是否停止运行 ; 若系统运行判断模块 25 判断 所述系统没有停止运行, 则内存转址区控制模块 26 占有所述内存转址区, 若系统运行判断 模块 25 判断所述系统停止运行, 内存转址区控制模块 26 释放所述内存转址区。
本发明实施例通过设置一内存转址区, 超出 PCI 设备寻址范围的系统内存地址能
够通过该内存转址区实现与 PCI 设备的通讯, 解决了由于系统内存地址大于 PCI 的寻址范 围, 导致 CPU 与 PCI 设备之间无法进行通讯的问题, 给用户的使用带来极大的便利。
应当理解的是, 对本领域普通技术人员来说, 可以根据上述说明加以改进或变换, 而这些改进和变换都应属于本发明所附权利要求的保护范围。