PCI设备的I/O空间请求抑制方法 【技术领域】
本发明涉及抑制PCI设备的I/O空间请求的方法。
背景技术
当前,在很多信息处理装置中采用了由PCI SIG(PeripheralComponent Interconnect Special Interest Group:外围组件互连特殊兴趣组织)制定的CPU-外围设备之间的接口标准。
例如,存在“PCI Local Bus Specification”、“PCI-XSpecification”、“PCI-Express Specification”等。在专利文献1中公开了关于PCI桥的技术。另外,在专利文献2中公开了关于PCI总线系统的技术。
在这些规格中,例如,可向I/O空间和存储器空间分配用于由CPU对PCI设备进行控制的寄存器。
这里,由于确保PC/AT(Personal Computer/Advanced Technology,个人计算机/先进技术)兼容机之间的兼容性等原因,I/O空间是继承了PC/AT兼容机的架构规格的旧规格。因此,可分配I/O空间的容量的上限被限制为64KB。
例如,当存在PCI桥时,针对PCI桥的I/O空间的最小分配单位为4KB,因此可分配I/O空间的PCI桥的数量上限被限制为16台(=64KB/4KB)。
这些是由于“PCI Local Bus Specification,Revision 2.3”的规格导致的限制。
现有的规格是最多有32台PCI设备可连接到1个总线属下。但是,近年来,为了应对PCI设备传输速度的高速化,可连接到PCI桥属下的PCI设备的数量正在减少。
例如,在PCI-X 100MHz的总线中,可连接的设备的数量为2台,在PCI-X 133MHz的总线中,1台为极限。另外,在PCI-Express的规格中,根据规格,桥与设备的对应被规定为1对1。在该情况下,可分配I/O空间的桥的台数的上限(16台)直接成为可连接的设备的上限。
在大规模的服务器系统中,很多系统具有最多128台PCI插槽,但如果直接应用上述限制,则只能安装16台PCI插槽。
因此,在现有的系统中,必须只安装不请求I/O空间的PCI设备、或者只限定为即使是请求I/O空间的PCI设备但实际上不使用I/O空间而仅使用存储器空间就能工作的PCI设备工作等来应对。另外,实际上,不请求I/O空间的PCI设备的种类较少,只由不请求I/O空间的PCI设备来构建系统是很困难的。
因此,各种PCI设备厂商提出了虽然请求了I/O空间但实际上即使不使用I/O空间也能工作的PCI设备,即无论通过I/O空间和存储器空间中的哪一个空间都能工作的PCI设备(以下将该PCI设备简称为“PCI设备”)。
但是,在这种PCI设备中也存在下述问题。
例如,操作系统根据是否存在储存在PCI设备具有的PCI配置寄存器中的、请求I/O空间的基地址寄存器,来判断PCI设备是否请求I/O空间的分配。
因此,存在请求I/O空间的基地址寄存器的PCI设备请求所有的I/O空间。
其结果是,当可分配的I/O空间出现不足从而不能向新的PCI设备分配I/O空间时,除了执行错误处理来禁用该PCI设备以外,没有其他方法,因此对于操作系统而言,需要使得不使用I/O空间的特殊机制。
在Windows(注册商标)的情况下,利用了作为系统定义文件的inf文件。可通过该inf文件,向操作系统通知PCI设备不使用I/O空间。当判断为该PCI设备不使用I/O空间时,即使存在请求I/O空间的基地址寄存器,操作系统也忽略其存在,不向该PCI设备分配I/O空间,而只分配存储器空间来进行工作。
另外,在Linux的情况下,可通过为该PCI设备准备不请求I/O空间的驱动程序来应对。
但是,例如,在安装Windows(注册商标)时,由于在安装用CD-ROM等中不包含上述inf文件,因此不能通过inf文件向操作系统通知PCI设备不使用I/O空间。
同样,在安装Linux时,由于在安装用CD-ROM等中不包含使得不使用I/O空间的驱动程序,因此在安装时需要向PCI设备分配I/O空间。
结果,由于inf文件和不请求I/O空间的特殊驱动程序在其使用上存在限制,因此依然留下下述问题,即:尚未能有效地使用无论使用I/O空间和存储器空间中的哪一个空间都能进行访问的PCI设备。
专利文献1:日本特开平11-288400号公报
专利文献2:日本特开2002-032324号公报
【发明内容】
本发明正是鉴于上述问题而完成的,其欲解决的课题在于,提供即使可分配I/O空间地容量存在限制,也将可使用的PCI设备的台数限制降至最低的方法。
为了解决上述课题,本发明的运算装置可与多个PCI设备连接,该运算装置能够按照在该运算装置上工作的操作系统通过I/O空间或存储器空间对所述PCI设备进行操作,该运算装置具有:结构信息取得单元,其根据来自所述操作系统的请求,参照所述PCI设备所具有的存储结构信息的结构信息存储单元,来取得该结构信息;可使用空间判断单元,其根据该结构信息,判断所述PCI设备是否是能够使用I/O空间或存储器空间或这两个空间的PCI设备;以及结构信息通知单元,其向所述操作系统通知所述结构信息,当所述可使用空间判断单元的判断结果为所述PCI设备能够使用I/O空间和存储器空间这两个空间时,进行表示所述PCI设备是只能使用存储器空间的PCI设备的通知。
根据本发明,当PCI设备可使用I/O空间和存储器空间这两个空间时,结构信息通知单元对操作系统进行表示该PCI设备是只能使用存储器空间的PCI设备的通知。
其结果,操作系统无需向除了只使用I/O空间的PCI设备以外的PCI设备分配I/O空间,因此可尽量抑制I/O空间的使用。
因此,根据本发明,可提供即使可分配I/O空间的容量存在限制,也将可使用的PCI设备的台数限制降至最低的方法。
【附图说明】
图1是说明本发明的实施例的运算装置的动作原理的图。
图2是示出本发明的实施例的运算装置的结构示例的图。
图3是示出本发明的实施例的PCI设备具有的PCI配置寄存器的结构示例的图。
图4是说明本发明的实施例的PCI设备具有的PCI配置寄存器的基地址寄存器的图。
图5是示出本发明的实施例的PCI设备的结构示例的图。
图6是示出本发明的实施例的运算装置的处理的流程图。
图7是说明本发明的实施例的运算装置使用的I/O空间的图。
【具体实施方式】
下面,根据图1~图7对本发明的实施方式进行说明。
图1是说明本发明的实施例的运算装置100的动作原理的图。
如图1所示,运算装置100具有:结构信息取得单元101,其取得PCI设备106-1、106-2、…的结构信息;可使用空间判断单元102,其判断各PCI设备可使用的空间;以及结构信息通知单元103,其向操作系统通知结构信息。
运算装置100是随着操作系统105而进行动作的运算装置。例如,通过CPU(Central Processing Unit,中央处理单元)、包含CPU的芯片组、包含CPU的主板(系统板)等来实现。
但是,在上述CPU、芯片组和主板中,不仅包含硬件,还包含在该硬件上工作的程序(例如,固件、微程序等)。
另外,运算装置100是可与多个PCI设备106-1、106-2、…以可操作的方式连接的运算装置。当PCI设备请求I/O空间时,向该PCI设备分配I/O空间。另外,当PCI设备请求存储器空间时,向该PCI设备分配存储器空间。当PCI设备请求I/O空间和存储器空间这两个空间时,向该PCI设备分配这两个空间。然后,运算装置100通过所分配的I/O空间或存储器空间访问该PCI设备。
结构信息取得单元101例如根据来自操作系统105的请求,从各PCI设备106-1、106-2、…具有的结构信息存储单元106-1a、106-2a、…取得各结构信息。然后,结构信息通知单元103向可使用空间判断单元102通知该结构信息。
这里,结构信息是指例如PCI配置寄存器的一部分或全部。
当从结构信息取得单元101接收到结构信息的通知时,可使用空间判断单元102参照该结构信息,判断该PCI设备是否是可使用I/O空间和存储器空间这两个空间的PCI设备。然后,可使用空间判断单元102向结构信息通知单元103通知该判断结果。
当PCI设备可使用I/O空间和存储器空间这两个空间时,结构信息通知单元103进行表示PCI设备只能使用存储器空间的通知。在本实施例中,将结构信息变更成表示PCI设备只能使用存储器空间的数据后将其通知给操作系统105。
当通过以上处理从各PCI设备取得了结构信息时,操作系统105根据各结构信息进行I/O空间的资源分配或进行存储器空间的资源分配,并且加载所需的驱动程序。
这里,请求I/O空间和存储器空间这两个空间的PCI设备作为只请求存储器空间的PCI装置被通知给操作系统105,因此操作系统105不进行I/O空间的资源分配处理(只进行存储器空间的资源分配处理)。
结果,由于除了只能使用I/O空间的PCI设备以外的PCI设备不再使用I/O空间,因此,可通过限制可分配I/O空间的容量,将对可使用的PCI设备的台数的限制降低至最低程度。
图2是示出本发明的实施例的运算装置100的结构示例的图。
如图2所示,运算装置100具有CPU 201a以及201b、由易失性存储器(例如,RAM:Random Access Memory,随机存取存储器)构成的存储器202、由储存固件等的非易失性存储器构成的ROM(Read Only Memory,只读存储器)203、PCI桥1a~34a、PCI桥1a~34a属下的PCI桥1b~64b、PCI桥1b~64b属下的安装PCI设备的PCI插槽1~128、以及控制各结构要素之间的数据交换的芯片组204。
并且,CPU、PCI桥以及PCI插槽的台数只是例示,并不限于图2所示的结构。
CPU 201a以及201b(以下,2个CPU总称为“CPU 201”)从ROM 203读出固件,在CPU 201或芯片组204内具有的未图示的存储部中将其展开。然后,执行该固件(以下,称为“CPU固件”)。
另外,CPU 201从未图示的外部存储装置(例如,磁盘装置)读出操作系统105,在存储器202中展开其一部分或全部,根据该操作系统105的指令进行处理。
例如,当操作系统105的启动结束时,操作系统105指示CPU固件从安装在各PCI插槽1~128的PCI设备读出PCI配置寄存器的基地址寄存器。
CPU固件根据操作系统105的指示,从安装在各PCI插槽1~128的PCI设备读出基地址寄存器,将其通知给操作系统105。
此时,当该PCI设备请求I/O空间和存储器空间这两个空间时,将基地址寄存器变更成表示该PCI设备只请求存储器空间的值,并将其通知给操作系统105。
操作系统105参照所通知的基地址寄存器、当该PCI设备请求I/O空间时,对该PCI设备进行I/O空间的资源分配,当该PCI设备请求存储器空间时,对该PCI设备进行存储器空间的资源分配。
图3是示出本发明的实施例的PCI设备具有的PCI配置寄存器的结构示例的图。
如图3所示,PCI配置寄存器300至少具有厂商ID(0×00~0×15)、设备ID(0×16~0×31)以及基地址寄存器(0×10~0×27)。
厂商ID是PCI SIG向每个厂商分配的ID。另外,设备ID是制造商为了唯一地确定设备而自由分配的ID。
在基地址寄存器中储存有表示存储器空间的基地址寄存器(32位或64位)、表示I/O空间的基地址寄存器(32位或64位)。
并且,其它数据是例如基于“PCI Local Bus Specification,Revision2.3”的数据结构,因此省略说明。
图4是说明本发明的实施例的PCI设备具有的PCI配置寄存器的基地址寄存器的图。
图4所示的基地址寄存器401是表示存储器空间的基地址寄存器(32位的情况)。
基地址寄存器401由存储器空间指针(位0)、类型(位1~2)、“可预取”(位3)、以及基地址(位4~31)构成。
存储器空间指针表示该寄存器是存储器空间用的寄存器,始终存储有0。类型表示可配置存储器块的地址范围。“可预取”对预取的允许/禁止进行控制。
图4所示的基地址寄存器402是表示I/O空间的基地址寄存器(32位的情况)。
基地址寄存器402由I/O空间指针(位0)、以及基地址(位2~31)构成。
I/O空间指针表示该寄存器是I/O空间用的寄存器,存储有1。
图5是示出本发明的实施例的PCI设备的结构示例的图。
图5所示的PCI设备500具有由图3所示的PCI配置寄存器300构成的PCI配置寄存器部501、由分配给存储器空间的各种寄存器构成的MMIO(Memory MappingI/O,存储器映射I/O)寄存器部502、由分配给I/O空间的各种寄存器构成的IO寄存器部503、以及实现NIC(NetworkInterface Card,网络接口卡)或SCSI(Small Computer SystemInterface,小型计算机系统接口)等预定功能的控制部504。
从CPU固件对PCI配置寄存器部501、MMIO寄存器部502以及IO寄存器部503的访问是通过PCI总线来进行的。
由操作系统105将构成MMIO寄存器部502的各种寄存器(例如,R/W指令用寄存器等)分配给存储器空间的预定地址。另外,由操作系统105将构成IO寄存器部503的各种寄存器(例如,I/O R/W指令用寄存器等)分配给I/O空间的预定地址。
通过上述结构,图5所示的PCI设备500将基地址寄存器401以及402储存在PCI配置寄存器部501的基地址寄存器中,由此可使用I/O空间和存储器空间这两个空间。
图6是示出本发明的实施例的运算装置100的处理的流程图。
在步骤S601a中,例如,当安装有本实施方式的运算装置100的信息处理装置接通电源时,由运算装置100从未图示的外部存储装置读出操作系统105,进行在存储器202中将操作系统105展开成可执行的状态的OS引导处理。
当OS引导处理结束时,操作系统105在运算装置100上工作。然后,针对安装在信息处理装置中的全部设备,进行下面说明的PCI设备的查找处理。
在步骤S602a中,操作系统105向CPU固件进行安装在信息处理装置中的任意设备的厂商ID和设备ID的读请求。
另一方面,在步骤S601b中,当从操作系统105接收到读请求时,CPU固件从所指定的PCI配置地址取得厂商ID和设备ID。然后,CPU固件向操作系统105通知所取得的厂商ID和设备ID。
在步骤S603a中,操作系统105根据所通知的厂商ID和设备ID,判断在所指定的PCI配置地址中是否安装有PCI设备。在本实施例中,当由CPU固件读出的厂商ID和设备ID的值不是全0或不是全F时,判断为安装有PCI设备。
并且,当在步骤S603a中判断为在所指定的PCI配置地址中安装有PCI设备时,操作系统105向CPU固件针对每个基寄存器依次进行该PCI设备的基地址寄存器的读请求。
另一方面,当在步骤S602b中从操作系统105接收到读请求时,CPU固件从该PCI设备的PCI配置寄存器中读出基地址寄存器。
在步骤S603b中,CPU固件参照所读出的各基地址寄存器的位0的值。然后,当所读出的基地址寄存器的位0的值为“1”时,CPU固件将处理转移至步骤S604b。
另外,当所读出的基地址寄存器的位0的值为“0”时,CPU固件将处理转移至步骤S605b。
在步骤S604b中,CPU固件将相应的基地址寄存器的值变更成“0(全0)”。然后,CPU固件将处理转移至步骤S605b。
在步骤S605b中,CPU固件向操作系统105通知基地址寄存器。
当在步骤S604b中从CPU固件接收到基地址寄存器的通知时,操作系统105参照该基地址寄存器的位0。
然后,当位0的值为“0”时,操作系统105判断为该PCI设备请求了存储器空间。另外,当位0的值为“1”时,操作系统105判断为该PCI设备请求了I/O空间。
并且,当基地址寄存器的值为“0(全0)”时(例如,在步骤S604b中变更成“0(全0)”时),操作系统105判断为该寄存器既没请求I/O空间也没请求存储器空间,忽略该寄存器。
当针对安装在信息处理装置中的全部设备进行了上述查找处理时,操作系统105将处理转移至步骤S605b。
在步骤S605b中,操作系统105根据步骤S602a~S604a的查找处理结果,对各PCI设备进行I/O空间的资源分配或存储器空间的资源分配(在步骤S604a中,对判断为请求I/O空间的PCI设备进行I/O空间的资源分配,对判断为请求存储器空间的PCI设备进行存储器空间的资源分配)。
在步骤S606a中,操作系统105从外部存储装置等中读出与每个PCI设备对应的驱动程序后在存储器202中展开成可执行的状态(加载驱动程序)。
当对通过步骤S602a~S604a的查找处理而检测出的安装PCI设备结束了步骤S605a以及606a的处理时,操作系统105转移至步骤S607,结束I/O空间或存储器空间的资源分配处理。
在以上处理中,步骤S603b的处理也可以是以下所示的(1)或(2)或(3)的处理。
(1)预先将特定的厂商ID和/或设备ID登记在存储装置等中,当与在步骤S601b中读出的厂商ID或设备ID的一部分或全部一致时,执行步骤S603b的处理。
(2)参照该PCI设备的上级的PCI桥(所关联的I/O空间),检查该PCI桥是否向该PCI设备分配了I/O空间,当未分配I/O空间时(或分配I/O空间的区域不足时),执行步骤S603b的处理。
(3)参照该PCI设备具有的全部基地址寄存器,当具有请求I/O空间以及存储器空间的基地址寄存器时,执行步骤S603b的处理。
图7是说明图2所示的结构示例的运算装置100的情况下的I/O空间的图。
为了简化说明,图7示出了在图2所示的全部PCI插槽中安装有图5所示的PCI设备500(即,可使用I/O空间和存储器空间这两个空间的PCI设备)时的I/O空间。
I/O空间701示出了未应用本实施例的现有示例,I/O空间702示出了应用了本实施例时的I/O空间。
这里,图2示出了具有64台PCI桥时的结构示例。当在各PCI桥1~64属下的PCI插槽中安装图5所示的PCI设备500时,在不应用本实施例的情况下各PCI桥将请求I/O空间。
例如,从PCI桥1开始依次分配4KB的I/O空间,由于可分配的I/O空间的容量为64KB,因此成为只向PCI桥1~16分配了I/O空间的状态。此时的I/O空间为I/O空间701。
另一方面,在应用了本实施例的情况下,通过步骤S603b的处理,从CPU固件向操作系统105通知图5所示的PCI设备500只请求了存储器空间。
因此,当PCI桥1~64属下的全部PCI插槽中安装有PCI设备500时,操作系统105对各PCI桥(PCI设备)只进行存储器空间的资源分配,不进行I/O空间的资源分配。此时的I/O空间为I/O空间702。
并且,为了容易理解,图7以极端的情况为例进行了说明,当然主旨并不是将本发明仅限于图7所示的情况。当在PCI桥1~64属下的任一插槽中安装有只请求I/O空间的PCI桥时,向该PCI桥(PCI设备)分配I/O空间。
如上所述,在本实施例的运算装置100上工作的操作系统105通过图6所示的CPU固件进行的步骤S603b的处理,识别为只请求存储器空间。因此,不向该PCI桥分配I/O空间,而是只分配存储器空间。
因此,PCI设备只被分配存储器空间。其结果,可尽量抑制I/O空间的使用,因此即使在I/O空间的可分配容量存在限制时,也能将对可使用的PCI设备台数的限制降至最低程度。
另外,在安装操作系统105时,能够使用图5所示的PCI设备500(可使用I/O空间和存储器空间这两个空间的PCI设备),而无需使用特殊处理和驱动程序等。结果,起到了提高用户的便利性的效果。