説明

コンピュータシステムおよびそのI/O空間リソース割り当て方法

【課題】周辺デバイスに効率的かつ容易にI/O空間リソースを割り当てることのできるコンピュータシステムを提供する。
【解決手段】システム管理コントローラ14は周辺デバイス161〜164毎にデバイスドライバがI/O空間リソースを必要とするか否かを記述したI/Oリソースファイルを格納した不揮発性メモリ15を備えている。そして、システム管理コントローラ14は起動時に不揮発性メモリ15からI/Oリソースファイルを読み出してメインメモリ12に展開する。プロセッサは、システム管理コントローラ14によってメインメモリ12に展開されたI/Oリソースファイルを参照することによって周辺デバイス161〜164のデバイスドライバがI/O空間リソースを必要とするか否かを調べる。そして、プロセッサは、I/O空間リソースが必要な周辺デバイスに対してだけI/O空間リソースを割り当てる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、周辺デバイスを接続することができるコンピュータシステムに関する。
【背景技術】
【0002】
現在、コンピュータシステムの内部バスとしてPCIバスが業界標準となっている。PCIバスには様々な周辺デバイス(PCIデバイス)が接続されうる。PCIデバイスは、デバイスドライバと呼ばれるソフトウェアによって制御される。PCIデバイス毎にデバイスドライバは異なる。デバイスドライバの中には、動作のためにI/O空間リソースを必要とするものと、必要としないものとがある。I/O空間とは、デバイスドライバがPCIデバイスを制御するために使う空間のことである。
【0003】
『PCI Local Bus Specification』によれば、1つのコンピュータシステムにおけるI/O空間リソースの最大サイズは64Kbyteと規定されている。このI/O空間リソースが必要に応じて各PCIデバイスに割り当てられることとなる。
【0004】
この種のコンピュータシステムには様々な規模のものがある。大規模なコンピュータシステムでは多数のPCIデバイスを接続するためにPCI−to−PCIバスブリッジが採用されることがある。その場合、PCI−to−PCIバスブリッジ配下に接続されたPCIデバイスに対して必要に応じてI/O空間リソースが割り当てられる。
【0005】
『PCI to PCI Bridge Architecture Specification』によれば、PCI−to−PCIバスブリッジ配下に接続されたPCIデバイスにI/O空間リソースを割り当てる場合、PCI−to−PCIバスブリッジには4Kbyte単位でI/O空間リソースを割り当てることが規定されている。
【0006】
上述したようにコンピュータシステム内のI/O空間リソースには上限があるので、PCIデバイスが多数接続される大規模なコンピュータシステムではI/O空間リソースの枯渇が起きやすい傾向となる。そこでI/O空間リソースの枯渇をできるだけ防ぐために効率の良い割り当て方法の確立が望まれる。
【0007】
PCIデバイスへのI/O空間リソースの割り当てはBIOS(Basic Input/Output System)によって行われる。BIOSは、OS(Operating System)とハードウェアとの仲介役になってコンピュータシステムの初期化などを司るファームウェアである。BIOSは、PCIデバイスへのI/O空間リソースの割り当てに際して、各PCIデバイスがI/O空間リソースを必要とするか否かを識別し、I/O空間リソースを必要とするPCIデバイスにI/O空間リソースを割り当てる。
【0008】
PCIデバイスに対するI/O空間リソースの割り当て方法としては3通りの方法が知られている。
【0009】
第1の方法は、I/O空間リソースを必要とするか否かに関わらず、コンピュータシステム内の全てのPCIデバイスにI/O空間リソースを割り当てるという方法である。この方法ではI/O空間リソースを必要としないPCIデバイスに対してもI/O空間リソースが割り当てられる。I/O空間リソースの無駄な割り当てによって大規模なコンピュータシステムではI/O空間リソースの枯渇が起きやすくなる。
【0010】
第2の方法は、PCIデバイス内ベースアドレスレジスタの内容からI/O空間リソースが必要か否か判断し、I/O空間リソースが必要と判断されたPCIデバイスにだけI/O空間リソースを割り当てるという方法である。
【0011】
PCIデバイス内のベースアドレスレジスタによってI/O空間リソースの要否が判断できるが、実はその判断が常に正しいとは限らないという問題がある。つまり、PCIデバイス内ベースアドレスレジスタからI/O空間リソースが必要と判断されたにも関わらず、そのPCIデバイスを制御するデバイスドライバがI/O空間リソースを全く使わないということがあり得る。これは、元々は必要であったI/O空間リソースがデバイスドライバの改造によって不要になることがあり、その改造はPCIデバイス内ベースアドレスレジスタには反映されないからである。その結果、第2の方法でも、やはりI/O空間リソースが無駄に割り当てられる可能性がある。
【0012】
第3の方法は、PCIデバイス毎にI/O空間リソースを割り当てるか否かをユーザによる人手で設定する方法である(例えば特許文献1参照)。例えばSystem BIOS SetupメニューでユーザにI/O空間リソースの要否を設定させる方法がある。第3の方法を確実に行えばI/O空間リソースの無駄な割り当てを防止することができる。
【特許文献1】特開2002−288104号公報
【発明の開示】
【発明が解決しようとする課題】
【0013】
しかしながら、上述した第3の方法はユーザに設定の作業を強いるものであり利便性の面で好ましいものではなかった。また、ユーザがPCIデバイス毎のI/O空間リソースの要否を把握している必要があり、だれもが容易に行える方法ではなかった。
【0014】
本発明の目的は、周辺デバイスに効率的かつ容易にI/O空間リソースを割り当てることのできるコンピュータシステムを提供することである。
【課題を解決するための手段】
【0015】
上記目的を達成するために、本発明のコンピュータシステムは、周辺デバイスを接続することのできるコンピュータシステムであって、
周辺デバイス毎にデバイスドライバがI/O空間リソースを必要とするか否かを記述したI/Oリソースファイルを格納した不揮発性メモリを備え、起動時に該不揮発性メモリから該I/Oリソースファイルを読み出してメインメモリに展開するシステム管理コントローラと、
前記システム管理コントローラによって前記メインメモリに展開された前記I/Oリソースファイルを参照することによって前記周辺デバイスのデバイスドライバがI/O空間リソースを必要とするか否かを調べ、I/O空間リソースが必要な周辺デバイスに対してだけI/O空間リソースを割り当てるプロセッサと、を有している。
【0016】
したがって、コンピュータシステムに予め記録したI/O空間リソースファイルにI/O空間リソースが必要と記載されているPCIデバイスにだけI/O空間リソースを割り当てることができる。
【0017】
また、前記プロセッサは、周辺デバイスへのアクセスを試みることによって周辺デバイスが存在するか否か判定し、周辺デバイスが存在すれば該周辺デバイスのデバイスドライバがI/O空間リソースを必要とするか否かを調べることにしてもよい。
【0018】
また、前記プロセッサは、存在することが分かった周辺デバイスの内部レジスタにアクセスすることによって該周辺デバイスの制御に必要なI/O空間リソースの容量を取得することにしてもよい。
【0019】
また、起動時、前記プロセッサはリセットされている状態であり、
前記システム管理コントローラは、前記不揮発性メモリから前記メインメモリに前記I/Oリソースファイルを展開した後に前記プロセッサのリセットを解除することにしてもよい。
【0020】
また、前記周辺デバイスはPCIデバイスであるとしてもよい。
【発明の効果】
【0021】
本発明によれば、コンピュータシステムに予め記録されたI/O空間リソースファイルにI/O空間リソースが必要と記載されているPCIデバイスにだけI/O空間リソースを割り当てるので、周辺デバイスに効率的かつ容易にI/O空間リソースを割り当てることができる。
【発明を実施するための最良の形態】
【0022】
本発明を実施するための形態について図面を参照して詳細に説明する。
【0023】
図1は、本実施形態によるコンピュータシステムの構成を示すブロック図である。ここでは基本的な構成のコンピュータシステムを例示する。図1を参照すると、コンピュータシステム10はCPU(Central Processing Unit)11、メインメモリ12、SMC(System Management Controller)13、NvRAM(Non−Volatile Random Access Memory)14、HOST−to−PCIブリッジ15、PCIデバイス161〜164を有している。
【0024】
CPU11、メインメモリ12、およびHOST−to−PCIブリッジ13はHostバス17で相互に接続されている。SMC14はHOST−to−PCIブリッジ13に接続されている。PCIデバイス161、162はPCIバス181でHOST−to−PCIブリッジ13に接続されており、PCIデバイス163、164はPCIバス182でHOST−to−PCIブリッジ13に接続されている。
【0025】
CPU11は、メインメモリ12に格納されているBIOSコード、OSコード、デバイスドライバコード、アプリケーションコード等の各種コード(命令列)の命令を読み出して実行する。
【0026】
メインメモリ12は、各種コードや演算データ等を記憶する。
【0027】
HOST−to−PCIブリッジ13は、HOSTバス17とPCIバス181,182との間のトランザクション転送を制御する。また、HOST−to−PCIブリッジ13は、コンピュータシステム10内のハードウェアに対するSMC110による制御を可能にする。
【0028】
SMC14は、コンピュータシステム10のハードウェアに対する制御を行う。SMC14による制御の例として電源制御や初期化などがある。
【0029】
NvRAM15は、SMC14からアクセスが可能な不揮発性RAMであり、SMC14がコンピュータシステム10内のハードウェアを制御するために必要な情報を格納している。NvRAM15に格納されている情報の例としてBIOSコードやシステム構成情報がある。
【0030】
PCIデバイス161〜164はPCIバス181,182に接続することのできる周辺デバイスであり各種機能のものがある。PCIデバイス161〜164は『PCI Local Bus Specification』の規定に準拠している。PCIデバイス161〜164の例として、ネットワーク接続用のデバイス、外付けディスク接続用のデバイスなどがある。
【0031】
図2は、本実施形態のコンンピュータシステム10に用いられるファームウェアおよびソフトウェアの関係を示す図である。図2を参照すると、ハードウェア20に近い方から順にSMC21、BIOS22、OS23が階層化されている。また、それ以外にOS23とハードウェア20の間にデバイスドライバ24が存在する。
【0032】
ハードウェア20はコンピュータシステム10のハードウェアそのものであり、CPU11、メインメモリ12、PCIデバイス161〜164を含む。
【0033】
SMC21は、図1に示したSMC14の機能を実現するファームウェアであり、ハードウェア20の電源制御や初期化を行う。SMC21は、その他のファームウェアやソフトウェアと比べて最もハードウェア20に近い位置付けにある。
【0034】
BIOS22は、ハードウェア20に含まれる周辺デバイスを制御するファームウェアである。BIOS22の主な機能として、周辺デバイスの初期化、およびOS23とハードウェア20の仲介役がある。BIOS22はOS403とハードウェア400の仲介役としてハードウェア20を抽象化(仮想化)してOS23に見せる。これによりOS23は様々なコンピュータシステムのハードウェア構成の差異を意識する必要がなくなる。
【0035】
OS23は、コンピュータシステム10の全体を管理する基本ソフトウェアである。OS23は、BIOS22によって抽象化されたハードウェアモデルから、コンピュータシステム10の有するハードウェア機能を知ることができる。
【0036】
デバイスドライバ24は、PCIデバイス161〜164などの周辺デバイスを制御するソフトウェアである。例えば、ネットワークに接続するためにコンピュータシステム10にLANカードを追加したとする。その場合、LANカードを動作させるためには専用のデバイスドライバが必要となる。
【0037】
コンピュータシステム10では、図2に示した様なファームウェアおよびソフトウェアが相互に関連して動作する。
【0038】
図3は、本実施形態のコンピュータシステムにおいてPCIデバイスへI/O空間リソースを割り当てる方法を示すフローチャートである。PCIデバイスに対するI/O空間リソースの割り当ては、SMC14による処理(SMC処理)と、CPU11によるBIOS22の処理(BIOS処理)とからなる。
【0039】
本実施形態によるI/O空間リソース割り当て方法ではNvRAM15に格納されているI/Oリソースファイルが利用される。コンピュータシステム10はNvRAM15にBIOSコード情報とI/Oリソースファイルとが格納された状態で出荷される。I/Oリソースファイルは本実施形態のI/O空間リソース割り当て方法を実現するための特有のものである。
【0040】
図4は、本実施形態のコンピュータシステムにおけるI/Oリソースファイルの内容の一例を示す図である。図4を参照すると、本実施形態のI/Oリソースファイルには、各PCIデバイスのVID、DID、SVID、およびSIDと、そのPCIデバイスのI/Oリソース要否情報とが記録されている。
【0041】
VID、DID、SVID、およびSIDはPCIデバイスを識別するための識別情報であり、『PCI Local Bus Specification』に規定された値である。VID、DID、SVID、およびSIDはPCIデバイス161〜164の内部にあるレジスタに格納されており、そこを参照することで各PCIデバイス161〜164の識別が可能である。VID、DID、SVID、およびSIDのレジスタはそれぞれが2Byteである。
【0042】
VIDとSVIDは、PCISIGと呼ばれるPCI規格に関する業界団体で管理されており、ベンダー毎に異なる値が配布される。また、DIDとSIDは、各ベンダーで管理されており、PCIデバイス毎に異なる値が格納されている。したがって、VID、DID、SVID、およびSIDを連結した8Byteの値は世界中においてユニークな値となる。
【0043】
I/Oリソースファイルにおいては、これらVID、DID、SVID、およびSIDによってPCIデバイスが識別される。
【0044】
I/Oリソース要否情報は、デバイスドライバがPCIデバイスを制御するときにI/O空間リソースを必要とするか否かを示す情報である。この例では、“1”はI/O空間リソースが必要なことを示し、“0”はI/O空間リソースが不要なことを示すものとする。
【0045】
I/Oリソースファイルにおいては、VID、DID、SVID、およびSIDからなる識別情報とそれに対応するI/Oリソース要否情報とによって各PCIデバイスのI/O空間リソースの要否が分かるようになっている。
【0046】
I/Oリソースファイルは、コンピュータシステム10の製造元で作成され、NvRAM15に格納されるものとする。製造元ではコンピュータシステムはPCIデバイスを搭載して正常に動作するか否か評価される。この評価時に、PCIデバイスを制御するデバイスドライバがI/O空間リソースを必要とするか否かが分る。そこで製造元は各PCIデバイスのリソース要否をI/Oリソースファイルに記録してコンピュータシステム10を出荷する。
【0047】
図3を参照すると、オペレータがコンピュータシステム10の電源を投入する。電源が投入されるとまずSMC14に電源が供給され、そしてSMC14によってSMC処理が順次実行される。
【0048】
まず最初に、SMC14はSystem Power ON処理を実行する(ステップ101)。この処理においてSMC14はコンピュータシステム10内のCPU11やメインメモリ12等に電源やクロックを供給する。
【0049】
続いて、SMC14はハードウェア初期化処理を実行する(ステップ102)。この処理でSMC14はCPU11、メインメモリ12、およびHOST−to−PCIブリッジ13を初期化し、これらの部品が正常に動作できる状態にする。
【0050】
続いて、SMC14はBIOS展開処理を実行する(ステップ103)。この処理でSMC14はNvRAM15に格納されているBIOS22のBIOSコードを読み出し、HOST−to−PCIブリッジ13を経由してメインメモリ12の特定領域に展開する。
【0051】
続いて、SMC14はI/Oリソースファイル展開処理を実行する(ステップ104)。この処理は本実施形態によるI/O空間リソース割り当て方法に特有な処理である。SMC14はステップ103のBIOS展開処理と同様に、NvRAM15に格納されているI/Oリソースファイルを読み出し、HOST−to−PCIブリッジ13を経由してメインメモリ12の特定領域に展開する。
【0052】
続いて、SMC14はCPU起動処理を実行する(ステップ105)。この処理においてSMC14はCPU11のリセットを解除する。リセットが解除されたCPU11はBIOS展開処理でメインメモリ12に展開されたBIOSコードを読み出し、その実行を開始する。BIOSコードは以下に説明するBIOS処理を順次実行する様に記述されている。
【0053】
BIOS処理において、CPU11はまずPCIデバイス検索処理を実行する(ステップ201)。この処理においてCPU11はHOST−to−PCIブリッジ13を介して各PCIデバイス161〜164内のVIDレジスタにアクセスを試みることによって、PCIデバイスが存在するか否か調べる。
【0054】
仮にPCIデバイスが存在しなければ、HOST−to−PCIブリッジ13がCPU11にFFFFh値(16進数表現2Byte値)を返す。PCISIGでは、VIDとしてFFFFh値という値を配布していないので、VIDがFFFFh値であれば、PCIデバイスが存在しないと分かる。
【0055】
PCIデバイスが存在した場合、CPU11は続いてPCIデバイスリソース情報取得処理を実行する(ステップ202)。この処理においてCPU11はHOST−to−PCIブリッジ102を介して各PCIデバイス161〜164内の特定レジスタにアクセスし、PCIデバイスの制御に必要なリソースの種類および容量を取得する。このときCPU11はI/O空間リソースについては必要な容量の情報だけを取得する。PCIデバイスにI/O空間リソースが必要か否かは別途判断される。
【0056】
続いて、CPU11はPCIデバイス識別情報取得処理を実行する(ステップ203)。この処理においてCPU100はHOST−to−PCIブリッジ13を介して各PCIデバイス161〜164内のVID、DID、SVID、SIDのレジスタにアクセスし、それらの値を取得する。なお、VIDはステップ201のPCIデバイス検索処理で既に取得されているので、CPU11はVIDを再び取得しなくてもよい。
【0057】
続いて、CPU11はI/Oリソースファイル検索処理を実行する(ステップ204)。この処理は本実施形態によるI/O空間リソース割り当て方法に特有な処理である。この処理においてCPU11は、PCIデバイス識別情報取得処理にてPCIデバイス161〜164の内部から取得した各PCIデバイスのVID、DID、SVID、SIDをキーとして、メインメモリ12に展開されているI/Oリソースファイル内を検索する。CPU11は、検索でVID、DID、SVID、およびSIDが一致したPCIデバイスのI/Oリソース要否情報から、各PCIデバイスについてI/O空間リソースの割り当てが必要か否か判断する。
【0058】
続いて、CPU11はI/O空間リソース割り当て処理を実行する(ステップ205)。この処理は本実施形態によるI/O空間リソース割り当て方法に特有な処理である。この処理においてCPU11は、I/Oリソースファイル検索処理204でI/O空間リソースが必要と判断されたPCIデバイスに対してのみI/O空間リソースを割り当て、I/O空間リソースが不要と判断されたPCIデバイスに対してはI/O空間リソースを割り当てない。
【0059】
ここでI/O空間リソースの割り当てとは、PCIデバイス161〜164の内部の特定レジスタに使用してよいI/O空間アドレスの範囲を設定すると共に、HOST−to−PCIブリッジ13内に各PCIバス181〜182のI/O空間アドレスの範囲を設定することである。PCIデバイス161〜164の特定レジスタにI/O空間アドレスの範囲を設定する処理はCPU11からHOST−to−PCIブリッジ13を介して行われる。HOST−to−PCIブリッジ13内に各PCIバス181〜182のI/O空間アドレスの範囲を設定することにより、CPU11からI/O空間へのアクセスが適切なPCIデバイスに転送される様になる。
【0060】
以上説明したとおり、本実施形態によれば、NvRAM15にPCIデバイス毎にデバイスドライバがI/O空間リソースを必要とするか否かを記述したI/Oリソースファイルを格納しておき、SMC14がNvRAM15からI/Oリソースファイルを読み出してメインメモリ12に展開し、CPU11が、メインメモリ12に展開されたI/Oリソースファイルを参照することによって、各PCIデバイスのデバイスドライバがI/O空間リソースを必要とするか否かを調べ、I/O空間リソースが必要なPCIデバイスに対してだけI/O空間リソースを割り当てる。したがって、コンピュータシステム10の製造元で作成されたI/O空間リソースファイルにI/O空間リソースが必要と記載されているPCIデバイスにだけI/O空間リソースを割り当てるので、周辺デバイスに効率的かつ容易にI/O空間リソースを割り当てることができる。
【図面の簡単な説明】
【0061】
【図1】本実施形態によるコンピュータシステムの構成を示すブロック図である。
【図2】本実施形態のコンンピュータシステムに用いられるファームウェアおよびソフトウェアの関係を示す図である。
【図3】本実施形態のコンピュータシステムにおいてPCIデバイスへI/O空間リソースを割り当てる方法を示すフローチャートである。
【図4】本実施形態のコンピュータシステムにおけるI/Oリソースファイルの内容の一例を示す図である。
【符号の説明】
【0062】
10 コンピュータシステム
11 CPU(Central Processing Unit)
12 メインメモリ
13 SMC(System Management Controller)
14 NvRAM(Non−Volatile Random Access Memory)
15 HOST−to−PCIブリッジ
161〜164 PCIデバイス
17 Hostバス
181,182 PCIバス
20 ハードウェア
21 SMC
22 BIOS
23 OS
24 デバイスドライバ
101〜105,201〜205 ステップ

【特許請求の範囲】
【請求項1】
周辺デバイスを接続することのできるコンピュータシステムであって、
周辺デバイス毎にデバイスドライバがI/O空間リソースを必要とするか否かを記述したI/Oリソースファイルを格納した不揮発性メモリを備え、起動時に該不揮発性メモリから該I/Oリソースファイルを読み出してメインメモリに展開するシステム管理コントローラと、
前記システム管理コントローラによって前記メインメモリに展開された前記I/Oリソースファイルを参照することによって前記周辺デバイスのデバイスドライバがI/O空間リソースを必要とするか否かを調べ、I/O空間リソースが必要な周辺デバイスに対してだけI/O空間リソースを割り当てるプロセッサと、を有するコンピュータシステム。
【請求項2】
前記プロセッサは、周辺デバイスへのアクセスを試みることによって周辺デバイスが存在するか否か判定し、周辺デバイスが存在すれば該周辺デバイスのデバイスドライバがI/O空間リソースを必要とするか否かを調べる、請求項1に記載のコンピュータシステム。
【請求項3】
前記プロセッサは、存在することが分かった周辺デバイスの内部レジスタにアクセスすることによって該周辺デバイスの制御に必要なI/O空間リソースの容量を取得する、請求項2に記載のコンピュータシステム。
【請求項4】
起動時、前記プロセッサはリセットされている状態であり、
前記システム管理コントローラは、前記不揮発性メモリから前記メインメモリに前記I/Oリソースファイルを展開した後に前記プロセッサのリセットを解除する、請求項1から3のいずれか1項に記載のコンピュータシステム。
【請求項5】
前記周辺デバイスはPCIデバイスである、請求項1から4のいずれか1項に記載のコンピュータシステム。
【請求項6】
コンピュータシステムに接続された周辺デバイスに対してI/O空間リソースを割り当てるためのI/O空間リソース割り当て方法であって、
周辺デバイス毎にデバイスドライバがI/O空間リソースを必要とするか否かを記述したI/Oリソースファイルを不揮発性メモリが予め格納しており、
システム管理コントローラが起動時に前記不揮発性メモリから前記I/Oリソースファイルを読み出してメインメモリに展開し、
プロセッサが、前記システム管理コントローラによって前記メインメモリに展開された前記I/Oリソースファイルを参照することによって前記周辺デバイスのデバイスドライバがI/O空間リソースを必要とするか否かを調べ、I/O空間リソースが必要な周辺デバイスに対してだけI/O空間リソースを割り当てる、I/O空間リソース割り当て方法。
【請求項7】
前記プロセッサが、周辺デバイスへのアクセスを試みることによって周辺デバイスが存在するか否か判定し、周辺デバイスが存在すれば該周辺デバイスのデバイスドライバがI/O空間リソースを必要とするか否かを調べる、請求項6に記載のI/O空間リソース割り当て方法。
【請求項8】
前記プロセッサが、存在することが分かった周辺デバイスの内部レジスタにアクセスすることによって該周辺デバイスの制御に必要なI/O空間リソースの容量を取得する、請求項7に記載のI/O空間リソース割り当て方法。
【請求項9】
起動時、前記プロセッサはリセットされている状態であり、
前記システム管理コントローラは、前記不揮発性メモリから前記メインメモリに前記I/Oリソースファイルを展開した後に前記プロセッサのリセットを解除する、請求項6から8のいずれか1項に記載のI/O空間リソース割り当て方法。
【請求項10】
前記周辺デバイスはPCIデバイスである、請求項6から9のいずれか1項に記載のI/O空間リソース割り当て方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate


【公開番号】特開2008−71042(P2008−71042A)
【公開日】平成20年3月27日(2008.3.27)
【国際特許分類】
【出願番号】特願2006−248002(P2006−248002)
【出願日】平成18年9月13日(2006.9.13)
【出願人】(000168285)エヌイーシーコンピュータテクノ株式会社 (572)
【Fターム(参考)】