"複数の仮想マシンが動作可能な情報処理装置であって、プログラムを記憶する複数の記憶装置にアクセス可能であって、前記複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり、当該アクセス先の記憶装置からプログラムを読み込むための第1の起動コードを保持するインタフェース部と、それぞれが前記複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり、前記インタフェース部を介して当該アクセス先の記憶装置からプログラムを読み込むための複数の第2の起動コードを記憶する記憶部と、前記複数の仮想マシンのうちのいずれかの仮想マシン上でプログラムを起動するとき、当該仮想マシンに応じた第2の起動コードを前記記憶部から選択し、前記第1の起動コードに代えて選択した第2の起動コードを当該仮想マシンに提供する制御部と、を有する情報処理装置。前記記憶部は、前記複数の仮想マシンそれぞれに対して少なくとも1つの第2の起動コードを対応付けた管理情報を更に記憶し、前記制御部は、前記記憶部に記憶された前記管理情報に基づいて、前記仮想マシンに応じた第2の起動コードを選択する、請求の範囲第1項記載の情報処理装置。前記複数の第2の起動コードは、前記インタフェース部が保持する前記第1の起動コードを用いて生成されて前記記憶部に格納される、請求の範囲第1項記載の情報処理装置。前記制御部は、1つの仮想マシンに対して2以上の第2の起動コードが対応付けられている場合、前記仮想マシンからの通知に基づいて、前記2以上の第2の起動コードの中の1つを選択する、請求の範囲第1項記載の情報処理装置。前記制御部は、前記複数の仮想マシンと前記複数の第2の起動コードとの対応関係を示す管理情報を記憶する他の装置と通信して、前記仮想マシンに応じた第2の起動コードを選択する、請求の範囲第1項記載の情報処理装置。前記インタフェース部は、前記複数の記憶装置にアクセス可能な2以上のアクセス部を備え、前記2以上のアクセス部と対応して2以上の第1の起動コードを保持し、前記複数の第2の起動コードそれぞれは、前記インタフェース部が保持する前記2以上の第1の起動コードの中の1つを用いて生成されて前記記憶部に格納される、請求の範囲第1項記載の情報処理装置。前記アクセス先の記憶装置から読み込まれるプログラムは、オペレーティングシステムのプログラムである、請求の範囲第1項記載の情報処理装置。前記制御部は、前記仮想マシン上で実行されるファームウェアからの要求に応じて、当該仮想マシンに応じた第2の起動コードを選択して前記ファームウェアに提供する、請求の範囲第1項記載の情報処理装置。複数の仮想マシンが動作可能であり、プログラムを記憶する複数の記憶装置にアクセス可能な情報処理装置が実行する仮想マシン管理方法であって、前記複数の仮想マシンのうちのいずれかの仮想マシン上でのプログラムの起動開始を検出し、それぞれが前記複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり、前記情報処理装置が備えるインタフェース部を介して当該アクセス先の記憶装置からプログラムを読み込むための複数の第1の起動コードを記憶する記憶部から、プログラムの起動開始を検出した前記仮想マシンに応じた第1の起動コードを選択し、前記インタフェース部が保持する、前記複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり当該アクセス先の記憶装置からプログラムを読み込むための第2の起動コードに代えて、選択した第1の起動コードを前記仮想マシンに提供する、仮想マシン管理方法。複数の仮想マシンが動作可能であり、プログラムを記憶する複数の記憶装置にアクセス可能なコンピュータに、前記複数の仮想マシンのうちのいずれかの仮想マシン上でのプログラムの起動開始を検出し、それぞれが前記複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり、前記コンピュータが備えるインタフェース部を介して当該アクセス先の記憶装置からプログラムを読み込むための複数の第1の起動コードを記憶する記憶部から、プログラムの起動開始を検出した前記仮想マシンに応じた第1の起動コードを選択し、前記インタフェース部が保持する、前記複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり当該アクセス先の記憶装置からプログラムを読み込むための第2の起動コードに代えて、選択した第1の起動コードを前記仮想マシンに提供する、処理を実行させる仮想マシン管理プログラム。コンピュータは、NICやHBAなどのインタフェースを介して接続された記憶装置から、OSプログラムなどのプログラムを読み込んで実行することもできる。その場合、コンピュータは、例えば、インタフェース内に記憶されている起動用のコードを実行することで、インタフェースを介して当該記憶装置にアクセスすることが考えられる。しかし、複数の仮想マシンが同じインタフェースを共通に利用する物理マシンでは、各仮想マシンがインタフェース内のコードを用いて記憶装置にアクセスしようとすると、仮想マシンに応じてアクセス先の記憶装置を変更することが困難であるという問題がある。よって、例えば、複数種類のOSプログラムを複数の記憶装置に分散して格納しても、インタフェース内に記憶された起動用のコードが1つのみである場合、全ての仮想マシンが同一の記憶装置からOSプログラムを読み込もうとするおそれがある。本発明はこのような点に鑑みてなされたものであり、プログラムの起動の際に何れの記憶装置からプログラムを読み込むかを仮想マシンに応じて変更できる情報処理装置、仮想マシン管理方法および仮想マシン管理プログラムを提供することを目的とする。複数の仮想マシンが動作可能な情報処理装置が提供される。情報処理装置は、インタフェース部と記憶部と制御部とを有する。インタフェース部は、プログラムを記憶する複数の記憶装置にアクセス可能であって、複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり、当該アクセス先の記憶装置からプログラムを読み込むための第1の起動コードを保持する。記憶部は、それぞれが複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり、インタフェース部を介して当該アクセス先の記憶装置からプログラムを読み込むための複数の第2の起動コードを記憶する。制御部は、複数の仮想マシンのうちのいずれかの仮想マシン上でプログラムを起動するとき、当該仮想マシンに応じた第2の起動コードを記憶部から選択し、第1の起動コードに代えて選択した第2の起動コードを当該仮想マシンに提供する。また、複数の仮想マシンが動作可能であり、プログラムを記憶する複数の記憶装置にアクセス可能な情報処理装置が実行する仮想マシン管理方法が提供される。仮想マシン管理方法では、複数の仮想マシンのうちのいずれかの仮想マシン上でのプログラムの起動開始を検出する。それぞれが複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり、情報処理装置が備えるインタフェース部を介して当該アクセス先の記憶装置からプログラムを読み込むための複数の第1の起動コードを記憶する記憶部から、プログラムの起動開始を検出した仮想マシンに応じた第1の起動コードを選択する。インタフェース部が保持する、複数の記憶装置のうちアクセス先の記憶装置を示す情報を含んでおり当該アクセス先の記憶装置からプログラムを読み込むための第2の起動コードに代えて、選択した第1の起動コードを当該仮想マシンに提供する。また、複数の仮想マシンが動作可能であり、プログラムを記憶する複数の記憶装置にアクセス可能なコンピュータで実行される仮想マシン管理プログラムが提供される。プログラムの起動の際に何れの記憶装置からプログラムを読み込むかを、仮想マシンに応じて変更することができる。本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。以下、本実施の形態を図面を参照して説明する。[第1の実施の形態]図1は、第1の実施の形態の情報処理装置を示す図である。情報処理装置1では、仮想マシン1a,1bを含む複数の仮想マシンが動作可能である。また、情報処理装置1は、記憶装置2,2aにアクセスすることができる。記憶装置2,2aは、例えば、不揮発性の記憶装置であり、仮想マシン1a,1b上で実行されるOSプログラムなどのプログラムを記憶する。記憶装置2と記憶装置2aとは、異なるプログラムを記憶してもよい。情報処理装置1は、インタフェース部1c、記憶部1dおよび制御部1eを有する。インタフェース部1cは、記憶装置2,2aにアクセス可能である。インタフェース部1cは、NICやHBAなどのアダプタとして実装してもよい。インタフェース部1cと記憶装置2,2aとは、ケーブルにより直接接続されてもよいし、スイッチなどの中継装置を介して接続されてもよい。インタフェース部1cは、起動コード3第1の起動コードを保持する。起動コード3は、インタフェース部1cが備える不揮発性の記憶装置例えば、ROMReadOnlyMemoryに記憶されていてもよい。ここで、起動コード3は、インタフェース部1cを介して何れかの記憶装置にアクセスし、当該記憶装置からプログラムを読み込むためのコードである。起動コード3は、ブートコードと呼ばれるものであってもよい。起動コード3は、インタフェース部1cからアクセス可能な記憶装置2,2aのうち、アクセス先とする記憶装置を示す情報を含む。例えば、起動コード3は、アクセス先として記憶装置2を示す情報を含む。記憶部1dは、起動コード3a,3b第2の起動コードを記憶する。例えば、記憶部1dは、不揮発NVRAMNonVolatileRAMやRAM、HDDHardDiskDriveとして実装することができる。起動コード3a,3bは、起動コード3と同様、インタフェース部1cを介して何れかの記憶装置にアクセスし、当該記憶装置からプログラムを読み込むためのコードである。起動コード3a,3bは、それぞれ、インタフェース部1cからアクセス可能な記憶装置2,2aのうち、アクセス先とする記憶装置を示す情報を含む。例えば、起動コード3aは記憶装置2を示す情報を含み、起動コード3bは記憶装置2aを示す情報を含む。ここで、起動コード3a,3bは、インタフェース部1cが保持する起動コード3に基づいて生成されて記憶部1dに記憶されてもよい。例えば、起動コード3を複製し、複製した起動コードに含まれるアクセス先の記憶装置の情報を書き換えることで、起動コード3a,3bを生成してもよい。また、記憶部1dでは、仮想マシン毎に少なくとも1つの起動コードが対応付けられてもよい。例えば、仮想マシン1aに起動コード3aが対応付けられ、仮想マシン1bに起動コード3bが対応付けられる。記憶部1dは、仮想マシン1a,1bと起動コード3a,3bとの対応関係を示す管理情報を記憶してもよい。ただし、管理情報は、情報処理装置1と通信可能な他の装置に記憶しておいてもよい。制御部1eは、仮想マシン1a,1bのうちのいずれかの仮想マシン上でプログラム例えば、OSプログラムを起動するとき、当該仮想マシンに応じた起動コードを記憶部1dから選択する。そして、インタフェース部1cが保持する起動コード3に代えて、選択した起動コードを当該仮想マシンに提供する。例えば、制御部1eは、仮想マシン1a上でプログラムを起動するとき、起動コード3aを記憶部1dから読み出して仮想マシン1aに提供する。また、仮想マシン1b上でプログラムを起動するとき、起動コード3bを記憶部1dから読み出して仮想マシン1bに提供する。なお、制御部1eの機能は、例えば、情報処理装置1のCPUおよびRAMを用いて実行されるプログラムのモジュールにより実現することができる。当該モジュールは、ハイパーバイザ内のモジュールとして実装してもよい。また、制御部1eは、仮想マシン1a,1b上のファームウェアから起動コード3の取得要求を受け付けたときに、起動コード3に代えて、記憶部1dに記憶された何れかの起動コードを仮想マシン1a,1bに提供してもよい。仮想マシン1a,1b上のファームウェアは、例えば、制御部1eから提供された起動コードを実行することで、インタフェース部1cを介して記憶装置2,2aのうちの何れかの記憶装置にアクセスし、OSプログラムなどのプログラムを取得する。第1の実施の形態の情報処理装置1によれば、仮想マシン1a,1bのうちいずれかの仮想マシン上でのプログラムの起動開始が検出される。記憶部1dに記憶された起動コード3a,3bの中から、当該仮想マシンに応じた起動コードが選択される。インタフェース部1cが保持する起動コード3に代えて、選択された起動コードが当該仮想マシンに提供される。当該仮想マシンでは、提供された起動コードが示す記憶装置にアクセスすることで、OSプログラムなどのプログラムが読み出される。これにより、仮想マシン1a,1bがインタフェース部1cを共通に利用する場合であっても、仮想マシンに応じてアクセス先の記憶装置を変更することができる。例えば、仮想マシン1aが、起動コード3aを用いて記憶装置2との接続を確立し、記憶装置2aに記憶されたプログラムを読み出す。また、仮想マシン1bが、起動コード3bを用いて記憶装置2aとの接続を確立し、記憶装置2aに記憶されたプログラムを読み出す。このように、仮想マシン1a,1bは、異なる記憶装置に記憶されたプログラムを読み出して実行することができる。例えば、仮想マシン1a,1bは、異なる記憶装置に記憶されたOSプログラムを読み出して実行することができる。[第2の実施の形態]図2は、第2の実施の形態の情報処理システムを示す図である。この情報処理システムは、管理端末装置11,21、サーバ装置100、ファイバチャネルFC:FibreChannelスイッチ装置200、ストレージ装置300,300aを含む。管理端末装置11は、サーバ装置100に接続されている。管理端末装置21は、FCスイッチ装置200に接続されている。また、サーバ装置100は、ネットワーク10に接続されている。管理端末装置11,21は、管理者が操作するコンピュータである。管理端末装置11は、管理者がサーバ装置100に対する指示を入力するためのものである。管理端末装置21は、管理者がFCスイッチ装置200に対する指示を入力するためのものである。サーバ装置100は、複数の仮想マシンが動作可能なサーバコンピュータである。サーバ装置100は、複数の仮想マシンの起動や停止を管理する。サーバ装置100は、ネットワーク10を介して、ネットワーク10に接続されたクライアント装置に対し仮想マシンの機能を利用可能とする。FCスイッチ装置200は、FC用の複数のインタフェースを備え、各インタフェース間を中継する切換機である。FCスイッチ装置200は、サーバ装置100およびストレージ装置300,300aの間のデータ通信を中継する。FCスイッチ装置200は、管理端末装置21からの指示を受け、FCスイッチ装置200上の管理機能を実行する。ストレージ装置300,300aは、プログラムを記憶する記憶装置である。ここで、ストレージ装置300,300aが記憶するプログラムは、OSの起動用のプログラム以下、OSプログラムというである。サーバ装置100上で動作する仮想マシンは、ストレージ装置300,300aに記憶されたOSプログラムをロードして実行することで起動される。なお、ストレージ装置300,300aにOS以外の他のアプリケーションを起動するためのプログラムを格納して、仮想マシンでのアプリケーション起動に用いてもよい。図3は、第2の実施の形態のサーバ装置のハードウェア例を示す図である。サーバ装置100は、CPUCentralProcessingUnitボード101、クロスバースイッチ102、PCIExpressPeripheralComponentInterconnectExpressコントローラ103、SASSerialAttachedSCSISmallComputerSystemInterfaceインタフェース104、HDDHardDiskDrive105、FCインタフェース106、ネットワークインタフェース107、SVPSerViceProcessor108およびディスクドライブ109を有する。CPUボード101は、CPUやメモリを備えた情報処理部である。CPUボード101は、CPU111、RAMRandomAccessMemory112およびNVRAM113を有する。CPU111は、ハイパーバイザのプログラム、OSプログラムおよびアプリケーションプログラムを実行して、仮想マシンや当該仮想マシン上のアプリケーションを実現する演算装置である。なお、CPUボード101は複数のCPUを備えてもよい。RAM112は、CPU111が実行するハイパーバイザのプログラム、OSプログラムおよびアプリケーションプログラムの少なくとも一部を一時的に記憶する揮発性の記憶装置である。RAM112は、CPU111の処理に用いられるデータの少なくとも一部を一時的に記憶する。なお、CPUボード101は複数のRAMを備えてもよい。NVRAM113は、ハイパーバイザの処理に用いるデータを記憶する不揮発性の記憶装置である。なお、CPUボード101は複数のNVRAMやFlashROMを備えてもよい。更に、サーバ装置100は、複数のCPUボードを備えてもよい。クロスバースイッチ102は、CPUボード101、PCIExpressコントローラ103の間のデータ通信を中継する。PCIExpressコントローラ103は、クロスバースイッチ102とSASインタフェース104、FCインタフェース106およびネットワークインタフェース107との間のデータ通信を制御する。SASインタフェース104は、HDD105とディスクドライブ109に接続され、HDD105とディスクドライブ109に対するデータの入出力を制御する。ディスクドライブ109は、SATAプロトコルをカプセリングして入出力制御してもよい。HDD105は、ハイパーバイザのプログラムやハイパーバイザの処理に用いられるデータを記憶する不揮発性の記憶装置である。HDD105は、CPU111の命令に従って、内蔵の磁気ディスクに対する読み書きを行う。なお、サーバ装置100は、HDD以外の不揮発性の記憶装置例えば、SSDSolidStateDriveを備えていてもよく、複数の記憶装置を備えてもよい。また、CPUボード101で実行するハイパーバイザのプログラムをNVRAM113に格納してもよい。FCインタフェース106は、スイッチ装置200と接続され、スイッチ装置200との間のデータ通信を制御するHBAである。FCインタフェース106は、FCコントローラ114およびメモリ115を有する。FCコントローラ114は、FCインタフェース106の動作を制御する演算装置である。メモリ115は、FCコントローラ114の処理に用いるデータを記憶する。サーバ装置100は複数のFCコントローラを備えてもよい。ネットワークインタフェース107は、ネットワーク10と接続され、ネットワーク10を介した他の装置とのデータ通信を制御する。SVP108は、サーバ装置100を管理するための装置である。SVP108は、サーバ装置のCPUボード101、クロスバースイッチ102、PCI-Expressコントローラ103とI2Cなどで接続される。SVP108は、管理端末装置11に接続される。SVP108は、サーバ装置100を管理するためのGUIGraphicalUserInterfaceを管理端末装置11に表示させる。管理者は、管理端末装置11で当該GUIを操作して、サーバ装置100に対する指示を行える。ディスクドライブ109は、記録媒体12に記録されたプログラムやデータを読み取る駆動装置である。記録媒体12として、例えば、フレキシブルディスクFD:FlexibleDiskやHDDなどの磁気ディスク、CDCompactDiscやDVDDigitalVersatileDiscなどの光ディスク、光磁気ディスクMO:MagnetoOpticaldiskを使用できる。ディスクドライブ109は、例えば、CPU111の命令に従って、記録媒体12から読み取ったプログラムやデータをRAM112またはHDD105に格納する。図4は、第2の実施の形態のFCスイッチ装置のハードウェア例を示す図である。FCスイッチ装置200は、ルーティングコントローラ201、メモリ202、SVP203、クロスバースイッチ204、I/FInterFaceコントローラ205,205a,205b,205c,205d,205e、バッファ206,206a,206b,206c,206d,206eおよびポート207,207a,207b,207c,207d,207eを有する。なお、以下ではI/Fコントローラ205、バッファ206およびポート207について説明するが、I/Fコントローラ205a,205b,205c,205d,205e、バッファ206a,206b,206c,206d,206eおよびポート207a,207b,207c,207d,207eに関しても同様である。ルーティングコントローラ201は、複数のSANStorageAreaNetwork間でのデータ通信を制御する。メモリ202は、ルーティングコントローラ201の処理に用いるデータを記憶する。例えば、SAN間を接続するためのルーティングテーブルを記憶する。SVP203は、FCスイッチ装置200を管理するための装置である。SVP203は、管理端末装置21に接続される。SVP203は、FCスイッチ装置200を管理するためのGUIを管理端末装置21に表示させる。管理者は、管理端末装置21で当該GUIを操作して、FCスイッチ装置200に対する指示を行える。クロスバースイッチ204は、各ポートを介した装置間のデータ通信を中継する。I/Fコントローラ205は、各ポート間のデータの流れを制御する。バッファ206は、データの流れを制御するためにデータを一時的に格納するための記憶領域である。ポート207は、外部の装置と接続するためのアダプタである。ポート207は、FCケーブルを介してサーバ装置100と接続されている。ポート207cは、FCケーブルを介してストレージ装置300と接続されている。ポート207dは、FCケーブルを介してストレージ装置300aと接続されている。図5は、仮想マシンの配置例を示すブロック図である。サーバ装置100は、ハードウェア120、ハイパーバイザ140および仮想マシン150,150aを有する。ハードウェア120は、サーバ装置100が備える物理的なリソースである。ハードウェア120は、CPUボード101、PCIExpressコントローラ103、SASインタフェース104、HDD105、FCインタフェース106、ネットワークインタフェース107およびディスクドライブ109を含む。ハイパーバイザ140は、仮想マシンを実現する。ハイパーバイザ140は、各仮想マシンに対するハードウェア120の割り当てを行い、各仮想マシンの起動停止を制御する。また、ハイパーバイザ140は、各仮想マシンがハードウェア120を共同で利用できるよう各仮想マシンのハードウェア120へのアクセスを調停する。更に、ハイパーバイザ140は各仮想マシンに割り当てたハードウェア120の使用状況を監視する。仮想マシン150,150aは、ハイパーバイザ140によりサーバ装置100上に実現された仮想マシンである。仮想マシン150,150aは、それぞれ独立のOSを実行している。仮想マシン150,150aは、その起動のときにOSプログラムをストレージ装置300,300aから取得できる。具体的には、仮想マシン150,150aはハイパーバイザ140から提供される起動コードによりストレージ装置300,300aとの接続を確立する。そして、仮想マシン150,150aはストレージ装置300,300aの所定の記憶領域からOSプログラムをロードする。仮想マシン150,150aが実行するOSはそれぞれ同一でもよいし、異なっていてもよい。同一のOSとしても起動時の設定が異なっていてもよい。図6は、第2の実施の形態のハードウェアの割当例を示すブロック図である。仮想マシン150,150aはサーバ装置100上のハードウェア120を論理的に分割したリソースにより実現される。図6ではハードウェア120に含まれる主要なものとして、CPU111、RAM112およびFCインタフェース106を示している。CPU111は、CPUリソース11,l2,l3,l4に時分割される。例えば、CPUリソースl1,l2は仮想マシン150に割り当てられ、CPUリソースl3,l4は仮想マシン150aに割り当てられる。CPUは、命令単位、処理単位、演算回路単位で分割してもよい。RAM112は、RAMリソースm1,m2に領域分割される。例えば、RAMリソースm1が仮想マシン150に割り当てられ、RAMリソースm2が仮想マシン150aに割り当てられる。FCインタフェース106は、FCインタフェースリソースn1,n2に分割される。例えば、FCインタフェースリソースn1,n2には、FCコントローラ114を時分割したリソースが含まれる。また、例えば、FCインタフェースリソースn1,n2には、バッファ用に確保されたメモリ115を領域分割したリソースが含まれる。例えば、FCインタフェースリソースn1が仮想マシン150に割り当てられ、FCインタフェースリソースn2が仮想マシン150aに割り当てられる。FCインタフェース106を物理HBAとすれば、FCインタフェースリソースn1,n2は当該物理HBA上で実現される仮想HBAである。図7は、第2の実施の形態のサーバ装置の機能を示すブロック図である。サーバ装置100は、起動コード記憶部130,160、ハイパーバイザ140、仮想マシン150,150a、物理ファンクションPF:PhysicalFunction170および仮想ファンクションVF:VirtualFunction180,180a,180bを有する。起動コード記憶部130、ハイパーバイザ140および仮想マシン150,150aの機能は、CPU111が所定のプログラムを実行することによりサーバ装置100上に実現される。また、起動コード記憶部160、PF170およびVF180,180a,180bの機能は、FCコントローラ114が所定のプログラムを実行することによりサーバ装置100上に実現される。ただし、これらのユニットの機能の全部または一部を専用のハードウェアで実装してもよい。起動コード記憶部130は、複数の起動コードおよび起動管理テーブルを記憶する。起動コードは、仮想マシン150,150aがストレージ装置300,300aとの接続を確立し、ストレージ装置300,300aからOSプログラムを取得するための処理や設定内容を記述したデータである。起動管理テーブルは、仮想マシン150,150aとストレージ装置300,300aとの接続や起動コードの対応関係を定義したデータである。ハイパーバイザ140は、制御部141を有する。制御部141は、FCインタフェース106から起動コードを取得し、仮想マシン150,150aごとに複製して起動コード記憶部130に格納する。ハイパーバイザ140は、仮想マシン150,150aごとに起動コードを編集する。編集内容は、例えば管理端末装置11から指示される。制御部141は、仮想マシン150,150aが起動するときに、起動コード記憶部130から仮想マシン150,150aに応じた起動コードを選択し、選択した起動コードを仮想マシン150,150aに提供する。このとき、制御部141は起動コード記憶部130に記憶された起動管理テーブルを参照して、仮想マシン150,150aに応じた起動コードを選択する。仮想マシン150は、ファームウェア151およびOS152を有する。ファームウェア151は、仮想マシン150上にOS152のプログラムをロードし、OS152を起動するためのソフトウェアである。OS152は、仮想マシン150上で動作する基本プログラムである。仮想マシン150aは、ファームウェア151aおよびOS152aを有する。ファームウェア151aはファームウェア151に対応する。OS152aはOS152に対応する。起動コード記憶部160は、起動コードを記憶する。起動コード記憶部160に記憶される起動コードは、例えば管理者により予め設定される。この起動コードは、起動コード記憶部130に記憶される起動コードの雛型となるデフォルトの起動コードである。PF170は、データ通信制御用のモジュールである。PF170は、FCインタフェース106上でVF180,180a,180bを実現する。また、PF170は、ハイパーバイザ140からの要求により、起動コード記憶部160に記憶された起動コードをハイパーバイザ140に出力する。PF170は、アクセス部の一例である。VF180,180a,180bは、PF170によって生成されたデータ通信制御用のモジュールである。VF180,180a,180bは、仮想マシン150,150aに対して仮想的なアダプタとして機能する。仮想マシン150,150aは、VF180,180a,180bにアクセスすることで、単一のPF170を共有して、外部のストレージ装置300,300aとのデータ通信を行える。なお、FCインタフェース106が実行するVFの数は、運用に応じて決定できる。図7では3つ実行する場合を例示したが、3つ以外の数でもよい。図8は、起動コードのデータ構造例を示す図である。図8Aは、起動コード記憶部160に記憶される起動コード161を示している。図8Bは、起動コード記憶部130に記憶される起動コード131,131aを示している。起動コード161は、アクセス先装置IDIDentifierの設定を含む。アクセス先装置IDには、接続先のストレージ装置を識別するための情報が設定される。当該識別情報は、例えば接続先のストレージ装置に対応するWWNである。例えば、ストレージ装置300が備えるFCインタフェースのWWNがデフォルトで設定される。起動コード131,131aは、アクセス先装置IDおよび起動コードIDの設定を含む。アクセス先装置IDは、起動コード161に設定されるアクセス先装置IDに対応している。起動コード131,131aには、互いに別個のアクセス先装置IDを設定可能である。例えば、起動コード131のアクセス先装置IDには、ストレージ装置300が備えるFCインタフェースのWWNが設定される。また、起動コード131aのアクセス先装置IDには、ストレージ装置300aが備えるFCインタフェースのWWNが設定される。また、起動コードIDは、起動コード131,131aを一意に識別するための識別情報である。例えば、起動コード131には、起動コードID0が設定される。また、起動コード131aには、起動コードID1が設定される。起動コード131,131aのアクセス先装置IDおよび起動コードIDの値は、制御部141によって設定される。図9は、第2の実施の形態の起動管理テーブルのデータ構造例を示す図である。起動管理テーブル132は、起動コード記憶部130に格納される。起動管理テーブル132は、制御部141により更新される。起動管理テーブル132には、物理ホストID、仮想ホストID、VF、PF、パス、仮想ポート、起動コードID、起動指定および割当状態の項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、1つの仮想マシンに対するVFや起動コードの割り当てが示される。物理ホストIDの項目には、CPUボードの識別情報が設定される。仮想ホストIDの項目には、仮想マシンの識別情報が設定される。VFの項目には、VFの識別情報が設定される。VFの識別情報は、VFを動作させるFCインタフェース106のデバイスのIDと、PF上で個々のVFを識別するための番号との組で構成される。PFの項目には、PFの識別情報が設定される。PFの識別情報は、PFを動作させるFCインタフェース106のデバイスのIDと、個々のPFを識別するための番号との組で構成される。パスの項目には、ファームウェアがPFとVFを対応付けて識別するためのデバイスパス情報が設定される。仮想ポートの項目には、FCインタフェース106上で利用可能な仮想ポートの識別情報が設定される。仮想ポートの情報としては、例えばNPIVNPortIDVirtualizationを用いることができる。起動コードIDの項目には、起動コードIDが設定される。起動指定の項目には、仮想マシン上のOSの起動に用いるものであるか否かを示す情報が設定される以下、単に起動用という場合、仮想マシン上のOSの起動用であることを示すとする。割当状態を示す項目には、当該VFが何れかの仮想マシンに割当済であるか否かを示す情報が設定される。例えば、起動管理テーブル132には、物理ホストIDが0、仮想ホストIDが0、VFにつきIDが10CF1223、番号が0、PFにつきIDが10CF1223、番号が0、パスが/pci0/vdev0/fc0、仮想ポートが0、起動コードIDが0、起動指定が起動用、割当状態が割当済という情報が設定される。これは、仮想マシン150とVF180とPF170上の仮想ポートの対応関係を示している。すなわち、CPUボード101物理ホストID0で実現される仮想マシン150仮想ホストID0に対して、VF180ID-番号の組が10CF1223-0が対応付けられていることを示す。また、VF180に対して入出力するためのデバイスパス情報が/pci0/vdev0/fc0であることを示す。更に、VF180にPF170ID-番号の組が10CF1223-0の仮想ポート0が対応付けられていることを示す。また、VF180が仮想マシン上のOSの起動用として指定されており、仮想マシン150に割当済であることを示す。また、例えば、起動管理テーブル132には、物理ホストIDが0、仮想ホストIDが1、VFにつきIDが10CF1223、番号が1、PFにつきIDが10CF1223、番号が0、パスが/pci0/vdev1/fc1、仮想ポートが1、起動コードIDが1、起動指定が起動用、割当状態が割当済という情報が設定される。これは、仮想マシン150aとVF180aとPF170上の仮想ポートの対応関係を示している。すなわち、CPUボード101物理ホストID0で実現される仮想マシン150a仮想ホストID1に対して、VF180aID-番号の組が10CF1223-1が対応付けられていることを示す。また、VF180aに対して入出力するためのデバイスパス情報が/pci0/vdev1/fc1であることを示す。更に、VF180aにPF170の仮想ポート1が対応付けられていることを示す。また、VF180aが仮想マシン上のOSの起動用として指定されており、仮想マシン150aに割当済であることを示す。また、例えば、起動管理テーブル132には、物理ホストIDが0、仮想ホストIDが-ハイフン、VFにつきIDが10CF1223、番号が2、PFにつきIDが10CF1223、番号が0、パスが-ハイフン、仮想ポートが-ハイフン、起動コードIDが-ハイフン、起動指定が非起動用、割当状態が未割当という情報が設定される。これは、VF180bの情報を示している。具体的には、VF180bID-番号の組が10CF1223-2に対してPF170ID-番号の組が10CF1223-0が対応付けられていることを示す。また、仮想ホストID、パス、仮想ポート、起動コードIDが設定なし-であり、割当状態が未割当であることから、VF180bは何れの仮想マシンにも割り当てられていないことを示す。なお、起動指定の項目の設定は、VF180bを仮想マシン上のOSの起動用として利用するのか、または、何れかのアプリケーションの起動用として利用するのか、が確定していないので、デフォルトの設定として非起動用が設定される。例えば、仮想マシン150,150aの何れかに対して、未割当のVF180bを所定のアプリケーションの起動用に割り当てることも可能である。その場合には、起動指定の項目の設定は非起動用となる。このように、起動用に利用するVFと、それ以外の用途で利用するVFとを混在させ、両者を区別して利用することもできる。また、例えば、仮想マシン150,150aの何れかに対して、未割当のVF180bを仮想マシン上のOSの起動用として更に割り当てることも可能である。例えば、異なる起動コードを指定して起動したい場合に有用である。具体的には、仮想マシン150に未割当のVF180b、PF170の仮想ポート2および起動コード131aを新たに対応付けることが考えられる。次に、以上の構成のサーバ装置100の処理手順を説明する。図10は、第2の実施の形態の全体処理を示すフローチャートである。以下、図10に示す処理をステップ番号に沿って説明する。ステップS11サーバ装置100が起動する。すると、CPUボード101によりハイパーバイザ140が実行される。ステップS12制御部141は、起動コード記憶部130に記憶された起動管理テーブル132を参照して、仮想マシンとVFとPFの仮想ポートとの対応関係をチェックする。例えば、割当済のVFやPFの存在が確認できない場合に、その旨を管理端末装置11に通知することが考えられる。ステップS13制御部141は、VF割当指示を受け付けたか否かを判定する。VF割当指示は、例えば管理者が管理端末装置11で管理用のGUIに対し所定の操作を行うことで制御部141に入力される。VF割当指示を受け付けた場合、処理をステップS14に進める。VF割当指示を受け付けていない場合、処理をステップS15に進める。ここで、VF割当指示には、新規にVFを割り当てたい仮想マシンを示す情報および割り当てたいPFおよび割り当てるVFの数を指定する情報が含まれる。PFを指定することは、当該PF上で実現されるVFの組を指定することともいえる。ステップS14制御部141は、VF割当指示に基づいてVF割当処理を行う。そして、処理をステップS19に進める。ステップS15制御部141は、VF解除指示を受け付けたか否かを判定する。VF解除指示は、例えば管理者が管理端末装置11で管理用のGUIに対し所定の操作を行うことで制御部141に入力される。VF解除指示を受け付けた場合、処理をステップS16に進める。VF解除指示を受け付けていない場合、処理をステップS17に進める。ここで、VF解除指示には、解除対象とするVFを示す情報が含まれる。ステップS16制御部141は、VF解除指示に基づいてVF解除処理を行う。そして、処理をステップS19に進める。ステップS17制御部141は、仮想マシン起動指示を受け付けたか否かを判定する。仮想マシン起動指示は、例えば管理者が管理端末装置11で管理用のGUIに対し所定の操作を行うことで制御部141に入力される。仮想マシン起動指示を受け付けた場合、処理をステップS18に進める。仮想マシン起動指示を受け付けていない場合、処理をステップS19に進める。ここで、仮想マシン起動指示には、起動対象の仮想マシンを示す情報が含まれる。ステップS18制御部141は、仮想マシン起動指示に基づいて仮想マシンを起動する。ステップS19ハイパーバイザ140は、サーバ装置100が停止されるか否かを判定する。サーバ装置100が停止される場合、サーバ装置100の停止に備えてハイパーバイザ140は停止処理を行い、処理を終了する。サーバ装置100が停止されない場合、処理をステップS13に進める。このようにして、サーバ装置100は各種指示に応じてVFの割当解除および仮想マシン上のOSの起動を行う。以下では、これらの各処理を個別に説明する。まず、上記ステップS14のVF割当処理を説明する。図11は、第2の実施の形態のVF割当処理を示すフローチャートである。以下、図11に示す処理をステップ番号に沿って説明する。ステップS21制御部141は、VF割当指示を取得する。VF割当指示には、例えば、仮想マシン150,150aに対してPF170からVF2つを起動用として割り当てる旨の指示が含まれる。制御部141は、VF割当指示に含まれるPFと要求VF数この場合、2であるとを特定する。ステップS22制御部141は、特定したPFからPF上に構成されるVFの数を確認し、起動コードをロードする。例えば、制御部141は、PF170から起動コード161をロードする。このとき、PF170により、起動コード記憶部160に記憶された起動コード161が読み出され、制御部141に出力される。ステップS23制御部141は、起動管理テーブル132を参照して、当該PFにつき未割当VF数を取得する。例えば、PF170につき割当済VF数として3を取得する例えば、VF180,180a,180bの割当状態が全て未割当である。ステップS24制御部141は、未割当VF数と要求VF数を比較する。ステップS25制御部141は、要求されたVFを割当可能であるか否かを判定する。割当可能である場合とは、未割当VF数が要求VF数以上である場合である。一方、割当不可能である場合とは、未割当VF数が要求VF数よりも小さい場合である。要求されたVFを割当可能である場合、処理をステップS27に進める。要求されたVFを割当不可能である場合、処理をステップS26に進める。なお、制御部141は、割当可能である場合、割り当てるVFを選択する。例えば、VFの識別情報の昇順に割り当てるVFを選択する。例えば、VF180,180a,180bのうち、VF180,180aを割り当て対象として選択する。ステップS26制御部141は、要求されたPFからVFを割り当てることができない旨を管理端末装置11に通知する。管理者は、当該通知を確認して、別のPFを指定したVF割当要求を再度行える。ステップS27制御部141は、ステップS22でPFからロードした起動コードを要求VF数分だけ複製する。このとき、制御部141は、複製した起動コードに起動コードIDを付加する。例えば、PF170からロードした起動コード161を要求VF数2の分だけコピーして、起動コード131,131aを生成する。そして、制御部141は、例えば起動コード131に起動コードID0を付加する。起動コード131aに起動コードID1を付加する。ステップS28制御部141は、管理端末装置11の指示により、VFごとの起動コードを更新する。具体的には、制御部141は起動コード131,131aのアクセス先装置IDを管理者が指定した設定内容に変更する。例えば、起動コード131のアクセス先装置IDをストレージ装置300のWWNに変更する。また、起動コード131aのアクセス先装置IDをストレージ装置300aのWWNに変更する。なお、アクセス先装置の指定は、アクセス先装置IDによる他、トポロジ接続形態の情報によって指定することも考えられる。ステップS29制御部141は、管理端末装置11から編集完了の指示を受けると、変更後の起動コードを起動コード記憶部130に保存する。例えば、制御部141は起動コード記憶部130に起動コード131,131aを保存する。ステップS30制御部141は、起動管理テーブル132を更新する。例えば、制御部141は、仮想マシン150仮想ホストID0と、VF180IDと番号の組10CF1223-0と、PF170の仮想ポート0と、起動コード131起動コードID0とを対応付け、パスを設定する。また、制御部141は、仮想マシン150a仮想ホストID1と、VF180aIDと番号の組10CF1223-1と、PF170の仮想ポート1と、起動コード131a起動コードID1とを対応付け、パスを設定する。更に、これらの各レコードにつき起動指定を起動用に、割当状態を割当済に設定する。そして、制御部141は、割当完了を管理端末装置11に通知する。このように、制御部141はVF割当指示を受け付けると、起動管理テーブル132を編集して、仮想マシン150,150aに対するVF180,180aの割り当てを行う。なお、VF割当指示に各VFに設定したいアクセス先装置IDやその他の設定情報を含めてもよい。その場合、ステップS28では制御部141はVF割当指示で指定されたアクセス先装置IDなどを起動コード131,131aに設定できる。このため、ステップS28での管理者の操作を省ける。また、ステップS30では、仮想マシン150とVF180を対応付け、仮想マシン150aとVF180aを対応付ける場合IDの昇順に対応付ける場合を例示したが、このような方法に限らない。例えば、仮想マシン150とVF180aを対応付け、仮想マシン150aとVF180を対応付けてもよい。更に、PF170の仮想ポートの割り当ては、例えば未割当の仮想ポートをIDの昇順などで選択して割り当てればよい。図12は、第2の実施の形態のVF割当処理を示すシーケンス図である。以下、図12に示す処理をステップ番号に沿って説明する。なお、以下に示すステップST101の直前では、起動コード記憶部130に記憶された起動管理テーブル132において、VF180,180a,180bの割当状態が未割当であるとする。ステップST101管理端末装置11は、ハイパーバイザ140にVF割当指示を送信する。VF割当指示は、仮想マシン150,150aに対してPF170からVFを2つ割り当てる旨の指示を含むとする。ステップST102ハイパーバイザ140は、VF割当指示を受信すると、指定されたPF170に起動コード161を要求する。ステップST103PF170は、ハイパーバイザ140からの要求に応じて、起動コード記憶部160から起動コード161を取得し、ハイパーバイザ140に出力する。ステップST104ハイパーバイザ140は、起動コード161に基づいてPF上に構成されるVFの数を確認する。ハイパーバイザ140は、起動コード記憶部130に記憶された起動管理テーブル132を参照し、PF170上の未割当のVF180,180a,180bに対して、仮想マシン150,150aを割当可能と判断する。ステップST105起動コード161を複製して、起動コード131,131aを生成する。ハイパーバイザ140は、起動コード131,131aに起動コードIDを付加する。ハイパーバイザ140は、起動コード131,131aの内容を管理端末装置11に表示させ、当該管理端末装置11上のGUIから編集可能とする。管理者は当該GUIから各起動コードの編集内容を入力する。管理端末装置11は、起動コード131,131aに対する編集内容をハイパーバイザ140に送信する。管理端末装置11は編集完了の入力を受け付けると、それをハイパーバイザ140に通知する。ステップST106ハイパーバイザ140は、編集内容を起動コード131,131aに反映させて起動コード記憶部130に保存する。そして、ハイパーバイザ140は、起動管理テーブル132を更新する。ステップST107ハイパーバイザ140は割当完了を管理端末装置11に通知する。このようにして、ハイパーバイザ140はPF170から起動コード161を取得し、当該起動コード161を雛型として、起動コード131,131aを生成する。ハイパーバイザ140は、仮想マシン150,150a、VF180,180a、PF170の仮想ポートおよび起動コード131,131aを対応付ける。ハイパーバイザ140は、起動管理テーブル132によって、その対応関係を管理する。次に、図10のステップS16のVF解除処理を説明する。図13は、第2の実施の形態のVF解除処理を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。ステップS31制御部141は、割当解除指示の内容から割当解除対象のVFを特定する。例えば、制御部141はVF180を割当解除対象として特定する。ステップS32制御部141は、割当解除対象のVF、および当該VFが属するPFに通信のために確保していた資源の解放を指示する。例えば、制御部141はPF170およびVF180に資源解放を指示する。ステップS33制御部141は、起動管理テーブル132を更新する。具体的には、VF180のレコードに設定された仮想ホストID、パス、仮想ポート、起動コードIDの各項目の設定値をクリアする。また、起動指定の項目に非起動用を設定する。更に、割当状態の項目を未割当に設定する。このように、制御部141はVF解除指示を受け付けると、起動管理テーブル132を編集して、仮想マシン150に対するVF180の割り当てを解除する。図14は、第2の実施の形態のVF解除処理を示すシーケンス図である。以下、図14に示す処理をステップ番号に沿って説明する。なお、以下に示すステップST111の直前では、起動コード記憶部130に記憶された起動管理テーブル132において仮想マシン150仮想ホストID0、VF180VFのIDと番号の組が10CF1223-0および起動コード131起動コードID0が対応付けられた状態であるとする。ステップST111管理端末装置11は、ハイパーバイザ140にVF解除指示を送信する。VF解除指示は、VF180の割り当てを解除する旨の指示を含むとする。ステップST112ハイパーバイザ140は、VF解除指示を受信すると、解除指示を受けたVF180と、VF180が属するPF170に対して、確保している資源の解放指示を送信する。ステップST113PF170は、資源解放指示に応じて、VF180を用いた通信用にメモリ115に確保していた記憶領域などを解放する。VF180も同様に通信用にメモリ115に確保していた記憶領域などを解放する。そして、PF170は、資源解放が完了した旨をハイパーバイザ140に応答する。ステップST114ハイパーバイザ140は、起動コード記憶部130に記憶された起動管理テーブル132を更新する。具体的には、VF180に対応付けられていた仮想マシン150、パス、PF170の仮想ポートおよび起動コード131の情報を起動管理テーブル132上から削除する。ステップST115ハイパーバイザ140は、管理端末装置11にVF解除指示に応じたVF解除を完了した旨を通知する。このようにして、ハイパーバイザ140はVF180の割当解除を行う。ハイパーバイザ140は、起動管理テーブル132の設定内容を更新して、VF180が未割当の状態として管理される。これにより、VF180が他の仮想マシンに対して割当可能な状態となり、VF180の状態を適切に管理できる。なお、上記ステップST114では、起動コード記憶部130から起動コード131を削除せずに残すものとした。ただし、起動コード記憶部130から起動コード131を削除してもよい。次に、図10のステップS18の仮想マシン起動処理を説明する。図15は、第2の実施の形態の仮想マシン起動処理を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。ステップS41制御部141は、仮想マシン起動指示を受け付けると、指示された仮想マシンのファームウェアをCPU111に実行させる。例えば、制御部141は仮想マシン150,150aの起動指示を受け付ける。すると、ファームウェア151,151aをCPU111に実行させる。これにより、ファームウェア151,151aの機能がサーバ装置100上に実現され、仮想マシン150,150aの起動が開始される。ステップS42制御部141は、起動コード記憶部130に記憶された起動管理テーブル132を参照して、起動対象の仮想マシンに割り当てられたVFが存在するか否かを判定する。存在する場合、処理をステップS43に進める。存在しない場合、処理を終了する。例えば、制御部141は、起動対象の仮想マシン150,150aに対して、VF180,180aが割当済であることを確認する。ステップS43制御部141は、起動管理テーブル132を参照して、起動対象の仮想マシンに割り当てられた起動コードが存在するか否かを判定する。存在する場合、処理をステップS44に進める。存在しない場合、処理を終了する。例えば、制御部141は、起動対象の仮想マシン150,150aに対して起動コード131,131aが割当済であることを確認する。ステップS44制御部141は、ステップS41でサーバ装置100上に実現されたファームウェアに仮想マシンの起動指示を行う。すると、ファームウェアはOSプログラムをロードするための起動コードを制御部141に要求する。例えば、起動指示を受けたファームウェア151,151aは、起動コードを制御部141に要求する。ステップS45制御部141は、当該要求を受けると、起動コード記憶部130に記憶された起動管理テーブル132を参照し、各仮想マシンに対応付けられた起動コードを特定する。例えば、仮想マシン150に対して起動コード131を特定し、仮想マシン150aに対して起動コード131aを特定する。制御部141は、起動コード131をファームウェア151に提供する。制御部141は、起動コード131aをファームウェア151aに提供する。ステップS46ファームウェア151,151aは、制御部141から取得した起動コードと仮想ポートに基づいてストレージ装置300,300aとの接続を確立し、各装置からOSプログラムをロードする。例えば、ファームウェア151は、起動コード131のアクセス先装置IDで指定されたWWNに対応するストレージ装置300との接続を確立し、ストレージ装置300からOSプログラムをロードする。また、ファームウェア151aは、起動コード131aのアクセス先装置IDで指定されたWWNに対応するストレージ装置300aとの接続を確立し、ストレージ装置300aからOSプログラムをロードする。そして、ファームウェア151,151aは、ロードしたOSプログラムをCPU111に実行させることで、OS152,152aを起動する。このようにして、制御部141は仮想マシン150,150aを起動するときに、起動コード記憶部130に記憶された起動コード131,131aを取得して、仮想マシン150,150aに提供する。なお、上記ステップS42,S43において、処理を終了する場合に、制御部141はファームウェア151,151aを停止させてもよい。また、制御部141は処理を終了する場合に、処理を終了する理由割り当てられたVFまたは起動コードが存在しないなどを管理端末装置11に通知してもよい。図16は、第2の実施の形態の仮想マシン起動処理を示すシーケンス図である。以下、図16に示す処理をステップ番号に沿って説明する。ステップST121管理端末装置11は、ハイパーバイザ140に仮想マシン起動指示を送信する。仮想マシン起動指示は、仮想マシン150,150aを指定する情報を含むとする。ステップST122ハイパーバイザ140は、仮想マシン起動指示を受信すると、仮想マシン150,150aが指定されていることを検知する。すると、ハイパーバイザ140は、起動コード記憶部130に記憶された起動管理テーブル132を参照して、仮想マシン150に対してVF180および起動コード131が対応付けられていることを確認する。そして、ハイパーバイザ140は、仮想マシン150に起動指示を出力する。これにより、ファームウェア151がサーバ装置100上で実行開始され、仮想マシン150の起動が開始される。ステップST123ハイパーバイザ140は、起動管理テーブル132を参照して、仮想マシン150aに対してVF180aおよび起動コード131aが対応付けられていることを確認する。そして、ハイパーバイザ140は、仮想マシン150aに起動指示を出力する。これにより、ファームウェア151aがサーバ装置100上で実行開始され、仮想マシン150aの起動が開始される。ステップST124仮想マシン150は、ハイパーバイザ140に起動コードを要求する。ステップST125ハイパーバイザ140は、起動コード記憶部130から起動コード131を取得し、仮想マシン150に提供する。ステップST126仮想マシン150aは、ハイパーバイザ140に起動コードを要求する。ステップST127ハイパーバイザ140は、起動コード記憶部130から起動コード131aを取得し、仮想マシン150aに提供する。ステップST128仮想マシン150は、起動コード131で示されるアクセス先装置IDに基づいて、ストレージ装置300との接続を試みる。その際、ハイパーバイザ140は起動管理テーブル132を参照して、当該接続をVF180に割り当て、更にPF170の仮想ポート0に対応付ける。すなわち、仮想マシン150は、VF180およびPF170の仮想ポート0を介してストレージ装置300との接続を確立する。そして、仮想マシン150はストレージ装置300にOSプログラムを要求する。ステップST129ストレージ装置300は、仮想マシン150にOSプログラムを送信する。ハイパーバイザ140は、PF170の仮想ポート0を介して受信したOSプログラムをVF180に対応付けて、仮想マシン150に出力する。仮想マシン150は、OSプログラムを受信するとOS152を起動する。ステップST130仮想マシン150aは、起動コード131aで示されるアクセス先装置IDに基づいて、ストレージ装置300aとの接続を試みる。その際、ハイパーバイザ140は起動管理テーブル132を参照して、当該接続をVF180aに割り当て、更にPF170の仮想ポート1に対応付ける。すなわち、仮想マシン150aは、VF180aおよびPF170の仮想ポート1を介してストレージ装置300aとの接続を確立する。そして、仮想マシン150aはストレージ装置300aにOSプログラムを要求する。ステップST131ストレージ装置300aは、仮想マシン150aにOSプログラムを送信する。ハイパーバイザ140は、PF170の仮想ポート1を介して受信したOSプログラムをVF180aに対応付けて、仮想マシン150aに出力する。仮想マシン150aは、OSプログラムを受信するとOS152aを起動する。このようにして、ハイパーバイザ140は、仮想マシン150,150a、VF180,180a、PF170の仮想ポートおよび起動コード131,131aの対応関係を起動管理テーブル132により管理する。そして、仮想マシン150,150aが起動するときに、FCインタフェース106上の起動コード記憶部160に記憶された起動コード161に代えて、起動コード記憶部130に記憶された起動コード131,131aを仮想マシン150,150aに提供する。これにより、仮想マシン150,150aはそれぞれ別個の起動コード131,131aを用いて、ストレージ装置300,300aとの接続を確立できる。起動コード131,131aでアクセス先として互いに異なるストレージ装置を指定すれば、それぞれ別個のストレージ装置からOSプログラムをロードでき、別個のOSプログラムを仮想マシン150,150a上で起動できる。すなわち、OSプログラムの起動時のアクセス先のストレージ装置300,300aを仮想マシン150,150aごとに切り換えられる。なお、図9の説明で仮想マシン150に起動コード131,131aを対応付ける例を示した。この設定をした場合、起動コード131,131aのうち何れを用いて仮想マシン150を起動するかは、例えばファームウェア151に設定し、仮想マシン150の起動時にファームウェア151からハイパーバイザ140に指示する。このようにすれば、仮想マシン150上で起動するOSを、仮想マシン150の起動時に選択可能となる。また、以上の説明ではOSプログラムの起動について主に説明したが、OSプログラムの起動に限られない。例えば、OS以外の所定のアプリケーションを起動する際に、当該アプリケーションプログラムをロードするストレージ装置を仮想マシンごとに切り換えることもできる。[第3の実施の形態]次に、第3の実施の形態を説明する。前述の第2の実施の形態との相違点を主に説明し、同様の事項は説明を省略する。第2の実施の形態では、1つのCPUボード上で実行される複数の仮想マシンに1つのFCインタフェース上のPFおよびVFを割り当てる方法を例示した。ここで、サーバ装置100には複数のCPUボードおよび複数のFCインタフェースが設けられることもある。その場合、1つのCPUボードと1つのFCインタフェースとの間の仮想マシン、PFおよびVFの対応付けは、第2の実施の形態と同様にして行える。一方で、1つのCPUボード上の複数の仮想マシンに対して複数のFCインタフェースからVFを割り当ててもよい。そこで、第3の実施の形態では、複数のCPUボードと複数のFCインタフェースを備えたサーバ装置において各仮想マシンに異なるFCインタフェースからVFを割り当てる方法を説明する。なお、第3の実施の形態の情報処理システムの全体構成は、図2で説明した第2の実施の形態の情報処理システムの全体構成と同様であるため説明を省略する。また、第3の実施の形態のサーバ装置のハードウェア構成は、図3で説明した第2の実施の形態のサーバ装置100のハードウェア構成と同様であるため説明を省略する各構成をサーバ装置100と同一符号で表記する。ただし、第3の実施の形態のサーバ装置100はCPUボード101aおよびFCインタフェース106aを更に備える。CPUボード101aのハードウェア構成はCPUボード101と同様である。FCインタフェース106aのハードウェア構成はFCインタフェース106と同様である。更に、第3の実施の形態のFCスイッチ装置のハードウェア構成は、図4で説明した第2の実施の形態のFCスイッチ装置200のハードウェア構成と同様であるため説明を省略する各構成をFCスイッチ装置200と同一符号で表記する。図17は、第3の実施の形態のサーバ装置の機能を示すブロック図である。サーバ装置100は、起動コード記憶部130,130a、ハイパーバイザ140,140a、仮想マシン150,150a,150b、起動コード記憶部160,160a、PF170,170aおよびVF180,180a,180c,180dを有する。起動コード記憶部130、ハイパーバイザ140および仮想マシン150,150aは、CPU111が所定のプログラムを実行することで、サーバ装置100上に実現される。起動コード記憶部130a、ハイパーバイザ140aおよび仮想マシン150bは、CPUボード101a上のCPUが所定のプログラムを実行することでサーバ装置100上に実現される。起動コード記憶部160、PF170およびVF180,180aは、FCコントローラ114が所定のプログラムを実行することでサーバ装置100上に実現される。起動コード記憶部160a、PF170aおよびVF180c,180dは、FCインタフェース106a上のFCコントローラが所定のプログラムを実行することでサーバ装置100上に実現される。ただし、これらのユニットの機能の全部または一部を専用のハードウェアで実現してもよい。起動コード記憶部130aは、起動コード記憶部130に対応する。ハイパーバイザ140aは、ハイパーバイザ140に対応する。ハイパーバイザ140aは、制御部141aを有する。制御部141aは、制御部141に対応する。制御部141,141aは、互いに通信可能である。制御部141,141aは、起動コード記憶部130,130aに記憶された起動コードおよび起動管理テーブルの設定内容を同期する。制御部141,141aは、起動コード記憶部160,160a全体として一意の起動コード識別情報を起動コードに付与する。仮想マシン150bは、仮想マシン150,150aに対応する。ここで、仮想マシン150bは仮想マシン150aと共に論理的な1つの仮想マシンを構成する。すなわち、CPUボード101,101aに跨って、仮想マシン150a,150bを組み合わせた1つの仮想マシンが実現される。ハイパーバイザ140,140aは所定のデータを互いに同期し、仮想マシン150a,150bを1つの仮想マシンとして、クライアント装置から利用可能とする。起動コード記憶部160aは、起動コード記憶部160に対応する。PF170aは、PF170に対応する。PF170aは、FCスイッチ装置200に接続されている。VF180c,180dは、VF180,180aに対応する。VF180c,180dは、PF170aによって生成されたデータ通信制御用のモジュールである。仮想マシン150,150a,150bは、VF180c,180dにアクセスすることで単一のPF170aを共有して、外部のストレージ装置300,300aとのデータ通信を行える。なお、第3の実施の形態では、FCインタフェース106のVF180bの図示を省略しているVF180bは割当済もしくは存在しないとする。図18は、第3の実施の形態の起動管理テーブルのデータ構造例を示す図である。起動管理テーブル132aは、起動管理テーブル132に対応する。各項目に設定される内容は、起動管理テーブル132と同様である。ここで、仮想マシン150aを起動するときに、PF170からVFを割り当てることができない場合を考える。その一例が、VF180,180aとも仮想マシン150に割当済であり、PF170上で他に未割当のVFが存在しない場合である。起動管理テーブル132aは、その場合の設定を例示している。具体的には、CPUボード101物理ホストID0における仮想マシン150仮想ホストID0に対して、VF180,180aVFのIDと番号の組が10CF1223-0および10CF1223-1が割当済である。VF180,180aの何れも起動用である。VF180,180aにつき起動コードIDが0、1の2種類の起動コードが対応付けられており、仮想マシン150は、その起動時に何れかの起動コードを選択して起動可能となっている。また、起動管理テーブル132aでは、仮想マシン150bに対する割当状況も示されている。具体的には、CPUボード101a物理ホストID1における仮想マシン150b仮想ホストID0に対して、PF170a上のVF180cVFのIDと番号の組が10CF1223-0が割り当てられている。また、VF180cにはPF170aの仮想ポート0が対応付けられている。更に、仮想マシン150bに対して起動コードID2が対応付けられている。制御部141は、このようにPF170上のVFが全て割当済の状態でPF170を指定したVF割当指示を受けた場合でも、同一IDのPF170aを検出し、PF170a上の未割当のVF180dを仮想マシン150aに割り当てる。具体的には、CPUボード101物理ホストID0における仮想マシン150a仮想ホストID1に対して、PF170aPFのIDと番号の組が10CF1223-1上のVF180dVFのIDと番号の組が10CF1223-1が割り当てられている。また、VF180dにはPF170aの仮想ポート1が対応付けられている。図17のハイパーバイザ140とVF180dとの間の関連線は、この割当関係を示している。更に、仮想マシン150aに対して起動コードID3が対応付けられている。次に、以上の構成のサーバ装置100の処理手順を説明する。ここで、全体処理、割当解除処理および仮想マシン起動処理の手順は、図10,13,15で説明した第2の実施の形態の全体処理、割当解除処理および仮想マシン起動処理の手順と同様であるため説明を省略する。図19は、第3の実施の形態のVF割当処理を示すフローチャートである。以下、図19に示す処理をステップ番号に沿って説明する。ステップS51制御部141は、VF割当指示を取得する。VF割当指示には、仮想マシンを指定する情報、当該仮想マシンに対して、起動用として割り当てるPFおよび割り当てるVFの数要求VF数が含まれる。制御部141は、VF割当指示からPFおよび要求VF数を特定する。ステップS52制御部141は、特定したPFからPF上に構成されるVFの数を確認し、起動コードをロードする。ステップS53制御部141は、起動コード記憶部130に記憶された起動管理テーブル132aを参照して、当該PFにつき未割当VF数を取得する。ステップS54制御部141は、未割当VF数と要求VF数とを比較する。ステップS55制御部141は、要求された数のVFを指定されたPFから割当可能であるか否かを判定する。割当可能である場合、処理をステップS58に進める。割当不可能である場合、処理をステップS56に進める。ステップS56制御部141は、起動管理テーブル132aを参照して、別のFCインタフェース上に同一IDのPFが存在するか否かを判定する。同一IDのPFが存在する場合、処理をステップS57に進める。同一IDのPFが存在しない場合、VFの割り当てができないことを管理端末装置11に通知して処理を終了する。例えば、PF170と同一ID10CF1223のPFとしてPF170aが存在する。なお、制御部141はステップS51~S55の処理を実行済のPFを除いてステップS56の判断を行う。ステップS57制御部141は、ステップS51で取得したVF割当指示のPFの指定を、ステップS56で検知したPFに変更する。その結果、VF割当指示では、別個のPF例えば、PF170に代えてPF170aが指定されることとなる。そして、処理をステップS51に進める。なお、制御部141はステップS52で取得した起動コードを破棄する。ステップS58制御部141は、ステップS52でPFからロードした起動コードを要求VF数分だけ複製する。制御部141は、複製した起動コードに起動コードIDを付加する。ステップS59制御部141は、管理端末装置11の指示により、VFごとの起動コードのアクセス先装置IDの設定内容を更新する。ステップS60制御部141は、管理端末装置11から編集完了の指示を受けると、変更後の起動コードを起動コード記憶部130に保存する。そして、制御部141は制御部141aにも保存した起動コードを送信し、起動コード記憶部130aに保存させ、起動コードの同期を行う。ステップS61制御部141は、起動管理テーブル132aを更新する。制御部141は、制御部141aにも更新内容を送信し、起動コード記憶部130aに格納された起動管理テーブルを更新させ、起動管理テーブルの同期を行う。このように、制御部141はVF割当指示を受け付けた際に、指定されたPFからVFを割り当てることができない場合でも、同一IDの他のPFが存在すれば、当該PFから未割当のVFを検出して、仮想マシンに割り当てる。なお、同一IDのPFを検出する理由は、当該IDがデバイスに割り当てられたIDを示すものであり、IDが同一であればPFの機能が同一であると考えられるからである。すなわち、制御部141は、VF割当指示によって指定されたPFからVFを割り当てられない場合、当該PFと同一機能を備える他のPFからVFの割り当てを試みる。なお、VF割当指示に各VFに設定したいアクセス先装置IDやその他の設定情報を含めてもよい。その場合、ステップS59では制御部141はVF割当指示で指定されたアクセス先装置IDなどを起動コードに設定できる。このため、ステップS59での管理者の操作を省ける。図20は、第3の実施の形態のVF割当処理を示すシーケンス図である。以下、図20に示す処理をステップ番号に沿って説明する。なお、以下に示すステップST141の直前では、VF180,180aは仮想マシン150に割当済であり、VF180cは仮想マシン150bに割当済であるとする。そして、PF170にはその他に未割当のVFが存在しないとする。また、起動管理テーブル132aにおいて、VF180dが未割当の状態であるとする。ステップST141管理端末装置11は、ハイパーバイザ140にVF割当指示を送信する。VF割当は、仮想マシン150aに対して、PF170からVFを起動用として1つ割り当てる旨の指示を含むとする。ステップST142ハイパーバイザ140は、VF割当指示を受信すると、指定されたPF170に起動コード161の送信を要求する。ステップST143PF170は、ハイパーバイザ140からの要求に応じて、起動コード記憶部160から起動コード161を取得し、ハイパーバイザ140に出力する。ステップST144ハイパーバイザ140は、起動コード161に基づいて、PF上に構成されるVFの数を確認する。ハイパーバイザ140は、起動コード記憶部130に記憶された起動管理テーブル132aを参照してPF170に未割当のVFが存在しておらず、PF170から新たにVFの割り当てを行うことができないと判断する。ステップST145ハイパーバイザ140は、PF170と同一IDのPF170aを検知すると、PF170aに起動コードの送信を要求する。ステップST146PF170aは、ハイパーバイザ140からの要求に応じて、起動コード記憶部160aから起動コードを所得し、ハイパーバイザ140に出力する。ステップST147ハイパーバイザ140は、PF170aから受信した起動コードに基づいて、PF170a上に構成されるVFの数を確認する。ハイパーバイザ140は、起動管理テーブル132aを参照してPF170aにおけるVF180dが未割当であり、VF割当可能であると判断する。ステップST148ハイパーバイザ140は、PF170aから受信した起動コードに対して起動コードID3を付加する要求VF数が1つなので起動コードの複製を行わなくてもよい。以下、起動コードID3を付した起動コードを起動コード131aと表記する。ハイパーバイザ140は、管理端末装置11からの起動コード131aの編集を受け付ける。例えば、起動コード131aのアクセス先装置IDにストレージ装置300aのWWNが設定される。管理端末装置11は、管理者による編集完了の入力を受け付けると、それをハイパーバイザ140に通知する。ステップST149ハイパーバイザ140は、編集内容を起動コード131aに反映させて、起動コード記憶部130に保存する。ハイパーバイザ140は、仮想マシン150a、PF170aの仮想ポート0、VF180dおよび起動コード131aの対応関係を起動用として起動管理テーブル132aに設定する。ハイパーバイザ140は、ハイパーバイザ140aと通信して、保存した起動コード131aと起動管理テーブル132aの更新内容とを同期する。ステップST150ハイパーバイザ140は、割当完了を管理端末装置11に通知する。このようにして、ハイパーバイザ140は、指定されたPF170に未割当VFが存在しなくても、PF170と同一IDのPF170aから未割当VFを検出して、仮想マシン150aに対応付ける。図21は、第3の実施の形態の仮想マシン起動処理を示すシーケンス図である。以下、図21に示す処理をステップ番号に沿って説明する。ステップST151管理端末装置11は、ハイパーバイザ140に仮想マシン起動指示を送信する。仮想マシン起動指示は、仮想マシン150,150aを指定する情報を含むとする。ステップST152ハイパーバイザ140は、仮想マシン起動指示を受信すると、仮想マシン150,150aが指定されていることを検知する。すると、ハイパーバイザ140は、起動コード記憶部130に記憶された起動管理テーブル132aを参照して、仮想マシン150に対して起動用のVF180,180aおよび起動コード131を含む2つの起動コードが対応付けられていることを確認する。そして、ハイパーバイザ140は、仮想マシン150に起動指示を出力する。これにより、ファームウェア151がサーバ装置100上で実行開始される。ステップST153ハイパーバイザ140は、起動管理テーブル132aを参照して、仮想マシン150aに対して起動用のVF180dおよび起動コード131aが対応付けられていることを確認する。そして、ハイパーバイザ140は、仮想マシン150aに起動指示を出力する。これにより、ファームウェア151aがサーバ装置100上で実行開始される。ステップST154仮想マシン150は、ハイパーバイザ140に起動コードを要求する。ここで、起動管理テーブル132aでは、仮想マシン150に対して起動コード131を含む2つの起動コードが対応付けられている。仮想マシン150は、そのうちの起動コード131を指定してハイパーバイザ140に要求する。起動コードは、仮想マシン150のファームウェアで選定しておいてよい。ステップST155ハイパーバイザ140は、起動コード記憶部130から起動コード131を取得し、仮想マシン150に提供する。ステップST156仮想マシン150aは、ハイパーバイザ140に起動コードを要求する。ステップST157ハイパーバイザ140は、起動コード記憶部130から起動コード131aを取得し、仮想マシン150aに提供する。ステップST158仮想マシン150は、起動コード131で示されるアクセス先装置IDに基づいて、ストレージ装置300との接続を試みる。その際、ハイパーバイザ140は起動管理テーブル132aを参照して、当該接続をVF180に割り当て、更にPF170の仮想ポート0に対応付ける。すなわち、仮想マシン150は、VF180およびPF170の仮想ポート0を介してストレージ装置300との接続を確立する。そして、仮想マシン150はストレージ装置300にOSプログラムを要求する。ステップST159ストレージ装置300は、仮想マシン150にOSプログラムを送信する。ハイパーバイザ140は、PF170の仮想ポート0を介して受信したOSプログラムをVF180に対応付けて、仮想マシン150に出力する。仮想マシン150は、OSプログラムを受信するとOS152を起動する。ステップST160仮想マシン150aは、起動コード131aで示されるアクセス先装置IDに基づいて、ストレージ装置300aとの接続を試みる。その際、ハイパーバイザ140は起動管理テーブル132aを参照して、当該接続をVF180dに割り当て、更にPF170aの仮想ポート0に対応付ける。すなわち、仮想マシン150aは、VF180dおよびPF170aの仮想ポート0を介してストレージ装置300aとの接続を確立する。そして、仮想マシン150aはストレージ装置300aにOSプログラムを要求する。ステップST161ストレージ装置300aは、仮想マシン150aにOSプログラムを送信する。ハイパーバイザ140は、PF170aの仮想ポート0を介して受信したOSプログラムをVF180dに対応付けて、仮想マシン150aに出力する。仮想マシン150aは、OSプログラムを受信するとOS152aを起動する。このようにして、ハイパーバイザ140は、CPUボード101上の仮想マシン150,150aに対して、FCインタフェース106,106aからVFを割り当てることができる。これにより、各仮想マシンに対するVF割当の自由度を向上できる。また、仮想マシン150aに対して指定のPFからVFを割り当てることができない場合、仮想マシン150aと共に1つの仮想マシンを構成する仮想マシン150bが存在することがある。その場合には、仮想マシン150bに対応付けられているPF170aを優先して選択し、未割当VFを検出してもよい。[第4の実施の形態]次に、第4の実施の形態を説明する。前述の第2,第3の実施の形態との相違点を主に説明し、同様の事項は説明を省略する。第2,第3の実施の形態では、管理端末装置11からの指示によりハイパーバイザが仮想マシン、VF、PFの仮想ポートおよび起動コードの対応関係を管理する例を示した。一方、これをスイッチ装置200が行ってもよい。その場合、管理者は管理端末装置21を操作してFCスイッチ装置200を介して仮想マシンの起動を指示できる。第4の実施の形態では、このような機能を説明する。なお、第4の実施の形態の情報処理システムの全体構成は、図2で説明した第2の実施の形態の情報処理システムの全体構成と同様であるため説明を省略する。ここで、サーバ装置100のSVP108およびFCスイッチ装置200のSVP203は、管理用のLANLocalAreaNetworkで接続される。また、第4の実施の形態のサーバ装置のハードウェア構成は、図3で説明した第2の実施の形態のサーバ装置100のハードウェア構成と同一であるため説明を省略する各構成をサーバ装置100と同一符号で表記する。更に、第4の実施の形態のFCスイッチ装置のハードウェア構成は、図4で説明した第2の実施の形態のFCスイッチ装置200のハードウェア構成と同様であるため説明を省略する各構成をFCスイッチ装置200と同一符号で表記する。図22は、第4の実施の形態のFCスイッチ装置の機能を示すブロック図である。FCスイッチ装置200は、起動管理情報記憶部210および制御部220を有する。これらのユニットの機能は、SVP203が所定のプログラムを実行することによりFCスイッチ装置200上に実現される。ただし、これらのユニットの機能の全部または一部を専用のハードウェアで実装してもよい。起動管理情報記憶部210は、起動管理テーブルを記憶する。起動管理テーブルのデータ構造例は、図9で説明した起動管理テーブル132と同様である。制御部220は、管理端末装置21からVF割当指示を受け付けると、ハイパーバイザ140に対する起動コードの複製編集を指示する。また、制御部220は、起動管理情報記憶部210に記憶された起動管理テーブルを更新する。具体的には、制御部220は、新たに割り当てた仮想マシン、起動コード、VF180,180a,180bおよびPF170の仮想ポートの対応関係を起動管理テーブルに設定する。次に、以上の構成のFCスイッチ装置200の処理手順を説明する。サーバ装置100の制御部141が行う処理のうち、起動管理テーブルに関する処理を制御部220が実行する。具体的には、制御部220は図10で示した全体処理を実行する。ただし、ステップS11に対応するステップはFCスイッチ装置200の起動を契機として、ステップS19に対応するステップはFCスイッチ装置200の停止有無の判断を契機として実行する。制御部220は、VF割当指示、VF解除指示および仮想マシン起動指示を管理端末装置21から受け付ける。また、制御部220は、図11,13,15で示したVF割当処理、割当解除処理および仮想マシン起動処理のうち、起動管理テーブルを照会更新する処理を担う。すなわち、制御部220は、起動コードの複製保存に関してはハイパーバイザ140の制御部141に依頼する。また、制御部220は、当該起動コードに基づく仮想マシンの起動を制御部141に依頼する。その際、制御部220は起動管理情報記憶部210に記憶された起動管理テーブルを参照して、仮想マシン、VF、PFの仮想ポートおよび起動コードの対応関係を制御部141に通知する。以下では、制御部220のこのような処理を具体的に説明する。図23は、第4の実施の形態のVF割当処理を示すシーケンス図である。以下、図23に示す処理をステップ番号に沿って説明する。ステップST171管理端末装置21は、制御部220にVF割当指示を送信する。VF割当指示は、仮想マシン150に対してPF170からVFを起動用として1つ割り当てる旨の指示を含むとする。また、VF割当指示には、その他の起動コードに設定する情報時間設定や接続形態などを示す情報が含まれ得る。ステップST172制御部220は、VF割当指示を受信すると、サーバ装置100のSVP108を介して、ハイパーバイザ140にVF割当指示を出力する。ステップST173ハイパーバイザ140は、VF割当指示を受信すると、指定されたPF170にVF数と起動コード161の送信を要求する。ステップST174PF170は、ハイパーバイザ140からの要求に応じて、VF数と起動コード記憶部160から起動コード161を取得し、ハイパーバイザ140に出力する。ステップST175ハイパーバイザ140は、PF170上に構成されるVFの数を確認し、制御部220に通知する。ステップST176制御部220は、起動管理情報記憶部210に記憶された起動管理テーブルを参照して、PF170のVF180が未割当であり、これを仮想マシン150に割当可能である旨をハイパーバイザ140に通知する。ハイパーバイザ140は、取得した起動コード161に起動コードIDを付加し、起動コード131を生成する要求VF数が1であるため複製はしなくてもよい。ステップST177制御部220は、ステップST171で受け付けたVF割当指示の設定指示内容に基づいて、起動コード131を編集する。ステップST178ハイパーバイザ140は、起動コード131を起動コード記憶部130に保存する。そして、ハイパーバイザ140は、起動コード131の保存完了通知を制御部220に送信する。保存完了通知には、起動コード131の起動コードIDが含まれる。ステップST179制御部220は、保存完了通知を受信すると、起動管理情報記憶部210に記憶された起動管理テーブルを更新する。具体的には、制御部220は、仮想マシン150、VF180、PF170の仮想ポート0および起動コード131を対応付けて、起動管理テーブルに設定する。ステップST180制御部220は、VF割当完了を管理端末装置21に通知する。このようにして、FCスイッチ装置200で起動管理テーブルを保持する。ハイパーバイザ140は、制御部220の指示によって、起動コードの複製保存を行う。なお、ステップST177では、第2,第3の実施の形態と同様に管理端末装置21から管理者による編集を受け付けてもよい。図24は、第4の実施の形態の仮想マシン起動処理を示すシーケンス図である。以下、図24に示す処理をステップ番号に沿って説明する。ステップST181管理端末装置21は、制御部220に仮想マシン起動指示を送信する。仮想マシン起動指示は、仮想マシン150を指定する情報を含むとする。ステップST182制御部220は、仮想マシン起動指示を受信すると、ハイパーバイザ140に対し、サーバ装置のSVP108を介して当該仮想マシン起動指示を送信する。制御部220は、転送する仮想マシン起動指示に、指定された仮想マシン150、VF180、PF170の仮想ポート0および起動コード131の対応関係を示す情報を含める。制御部220は、起動管理情報記憶部210に記憶された起動管理テーブルを参照して、当該対応関係を取得できる。ステップST183ハイパーバイザ140は、制御部220から仮想マシン起動指示を受信すると、仮想マシン150が指定されていることを検知する。ハイパーバイザ140は、仮想マシン150に起動指示を出力する。これにより、ファームウェア151がサーバ装置100上で実行開始される。ステップST184仮想マシン150は、ハイパーバイザ140に起動コードを要求する。ステップST185ハイパーバイザ140は、ステップST183で受信した仮想マシン起動指示に含まれる対応関係の情報に基づいて、起動コード記憶部130から起動コード131を取得し、仮想マシン150に提供する。ステップST186仮想マシン150は、起動コード131で示されるアクセス先装置IDに基づいて、ストレージ装置300との接続を試みる。その際、ハイパーバイザ140は、制御部220から取得した対応関係に基づいて、当該接続をVF180に割り当て、更にPF170の仮想ポート0に対応付ける。すなわち、仮想マシン150は、VF180およびPF170の仮想ポート0を介してストレージ装置300との接続を確立する。そして、仮想マシン150はストレージ装置300にOSプログラムを要求する。ステップST187ストレージ装置300は、仮想マシン150にOSプログラムを送信する。ハイパーバイザ140は、PF170の仮想ポート0を介して受信したOSプログラムをVF180に対応付けて、仮想マシン150に出力する。仮想マシン150は、OSプログラムを受信するとOS152を起動する。このようにして、FCスイッチ装置200で起動管理テーブルを一元管理する。そして、仮想マシン150を起動するときには、FCスイッチ装置200の制御部220からハイパーバイザ140に起動コードに関する情報を送信する。なお、仮想マシン150の起動の処理を説明したが、仮想マシン150aに関しても同様である。例えば、仮想マシン150aをストレージ装置300aから起動したい場合、起動管理情報記憶部210に記憶された起動管理テーブルにそのための対応関係を予め設定する。そして、仮想マシン150aの起動時には、制御部220は、当該仮想マシン150aに関する対応関係を起動管理テーブルから取得してハイパーバイザ140に通知する。このようにFCスイッチ装置200で起動管理テーブルを一元管理すれば、各ハイパーバイザで起動管理テーブルを保持しなくてよい。このため、例えば、第3の実施の形態で示したようなハイパーバイザ間での同期による通信負荷を軽減できる。また、例えば各ハイパーバイザの同期処理に伴う処理負荷を軽減できる。[第5の実施の形態]次に、第5の実施の形態を説明する。前述の第2~第4の実施の形態との相違点を主に説明し、同様の事項は説明を省略する。第2~第4の実施の形態では、FCインタフェースが1つのPFを有する場合を例示した。一方、1つのインタフェースが複数の異なるPFを有する場合もある。例えば、1つのアダプタで複数規格の通信例えば、FCとEthernet登録商標に対応可能なインタフェースが考えられる。このようなインタフェースは、CEEConvergedEnhancedEthernetと呼ばれることもある。そこで、第5の実施の形態では、複数のPFを有するCEEインタフェースを備えたサーバ装置において各仮想マシンにVFを割り当てる方法を説明する。なお、第5の実施の形態の情報処理システムの全体構成は、図2で説明した第2の実施の形態の情報処理システムの全体構成と同様である。ただし、FCスイッチ装置200に代えてCEEをサポートするCEEスイッチ装置200aを用いる。図25は、第5の実施の形態のサーバ装置の機能を示すブロック図である。ここで、CEEスイッチ装置200aは、ネットワーク20を介してサーバ装置100aと接続する。ネットワーク20は、LANである。サーバ装置100aは、ネットワーク20と接続され、ストレージ装置300,300aと同様にOSプログラムを記憶する情報処理装置である。また、サーバ装置100,100aのハードウェア構成は、図3で説明した第2の実施の形態のサーバ装置100のハードウェア構成と同様であるため説明を省略する各構成をサーバ装置100と同一符号で表記する。ただし、第5の実施の形態のサーバ装置100は、FCインタフェース106に代えてCEEインタフェース106bを備える。CEEインタフェース106b上には、FCおよびEthernetによる通信を制御するためのCEEコントローラが設けられる。更に、CEEスイッチ装置200aのハードウェア構成は、図4で説明した第2の実施の形態のFCスイッチ装置200のハードウェア構成と同様である。ただし、各ポート、I/Fコントローラおよびルーティングコントローラは、FCおよびEthernetに対応可能である。サーバ装置100は、起動コード記憶部130、ハイパーバイザ140、仮想マシン150,150a、起動コード記憶部160,160b、PF170,170bおよびVF180,180a,180e,180fを有する。起動コード記憶部130、ハイパーバイザ140および仮想マシン150,150aは、図7で説明した第2の実施の形態における同一符号のユニットに対応する。起動コード記憶部160,160b、PF170,170bおよびVF180,180a,180e,180fは、CEEコントローラが所定のプログラムを実行することでサーバ装置100上に実現される。ただし、これらのユニットの機能の全部または一部を専用のハードウェアで実現してもよい。起動コード記憶部160bは、起動コード記憶部160に対応する。起動コード記憶部160bは、デフォルトの起動コードを1つ記憶する。起動コード記憶部160に記憶されるブートコードは、Ethernet接続用のものである。このため、当該ブートコードのアクセス先装置IDでは、例えばMACMediaAccessControladdressアドレスやIPInternetProtocolアドレスによって接続先装置が指定される。PF170bは、Ethernet接続するためのインタフェースである。PF170bは、CEEスイッチ装置200aに接続されている。VF180e,180fは、仮想マシンがEthenet接続するための仮想アダプタである。VF180e,180fは、PF170bによって生成されたデータ通信制御用のモジュールである。仮想マシン150,150aは、VF180e,180fにアクセスすることで単一のPF170bを共有している。PF170とPF170bは、CEEインタフェース106bをバーチャルレーンで共有して、CEEスイッチ装置200aと接続している。バーチャルレーンは、1つのインタフェースの物理接続を論理的に分割した経路である。これにより、PF170は、CEEスイッチ装置200aを介してFC接続により外部のストレージ装置300,300aとのデータ通信を行える。また、PF170bは、CEEスイッチ装置200aおよびネットワーク20を介して外部のサーバ装置100aとのデータ通信を行える。図26は、第5の実施の形態の起動管理テーブルのデータ構造例を示す図である。起動管理テーブル132bは、起動管理テーブル132に対応する。各項目に設定される内容は、起動管理テーブル132と同様である。ここで、仮想マシン150はストレージ装置300に記憶された起動コードでOS起動し、仮想マシン150aはサーバ装置100aに記憶された起動コードでOS起動したい場合を考える。その場合、仮想マシン150は、PF170を介してストレージ装置300とFC接続できる。仮想マシン150aは、PF170bを介してサーバ装置100aとEthernet接続できる。起動管理テーブル132bは、その場合の設定を例示している。具体的には、CPUボード101物理ホストID0における仮想マシン150仮想ホストID0に対して、VF180,180aVFのIDと番号の組が10CF1223-0および10CF1223-1が割当済である。VF180,180aの何れも起動用である。VF180,180aにつき起動コードIDが0、1の2種類の起動コードが対応付けられており、仮想マシン150は、その起動時に何れかの起動コードを選択して起動可能となっている。一方、仮想マシン150a仮想ホストID1に対しては、PF170bPFのIDと番号の組が10CF1224-1上のVF180eVFのIDと番号の組が10CF1224-0が割り当てられている。図25のハイパーバイザ140とVF180eとの間の関連線は、この割当関係を示している。更に、仮想マシン150aには起動コードID2が対応付けられている。パスの項目に設定された/pci1/vdev0/etn0のetn0の箇所は、当該VF180eがEthernet接続用のものであることを示している。なお、起動管理テーブル132bでは、PF170b上のVF180fVFのIDと番号の組が10CF1224-1の割当状況も示されている。VF180fは、割当状態が未割当である。次に、以上の構成のサーバ装置100の処理手順を説明する。ここで、全体処理、割当解除処理および仮想マシン起動処理の手順は、図10,13,15で説明した第2の実施の形態の全体処理、割当解除処理および仮想マシン起動処理の手順と同様であるため説明を省略する。図27は、第5の実施の形態のVF割当処理を示すフローチャートである。以下、図27に示す処理をステップ番号に沿って説明する。ステップS71制御部141は、VF割当指示を取得する。VF割当指示には、仮想マシンを指定する情報、当該仮想マシンに対して、起動用として割り当てるPFおよび割り当てるVFの数要求VF数が含まれる。例えば、仮想マシン150をストレージ装置300のOSプログラムで起動させたい場合、PF170が選択される。また、仮想マシン150aをサーバ装置100aのOSプログラムで起動させたい場合、PF170bが選択される。制御部141は、VF割当指示からPFおよび要求VF数を特定する。ステップS72制御部141は、特定したPFから起動コードをロードし、PF上に構成されるVFの数を確認する。ステップS73制御部141は、起動管理テーブル132bを参照して、当該PFにつき未割当VF数を取得する。ステップS74制御部141は、未割当VF数と要求VF数とを比較する。ステップS75制御部141は、要求された数のVFを指定されたPFから割当可能であるか否かを判定する。割当可能である場合、処理をステップS78に進める。割当不可能である場合、処理をステップS76に進める。ステップS76制御部141は、要求されたPFからVFを割り当てることができない旨を管理端末装置11に通知する。管理者は、当該通知を確認して、別のPFを指定したVF割当要求を再度行える。ステップS77制御部141は、ステップS72でPFからロードした起動コードを要求VF数分だけ複製する。制御部141は、複製した起動コードに起動コードIDを付加する。ステップS78制御部141は、管理端末装置11の指示により、VFごとの起動コードのアクセス先装置IDの設定内容を更新する。FC接続であれば、アクセス先装置IDは、WWNである。Ethernet接続であれば、アクセス先装置IDは、例えばMACアドレスやIPアドレスである。ステップS79制御部141は、管理端末装置11から編集完了の指示を受けると、変更後の起動コードを起動コード記憶部130に保存する。ステップS80制御部141は起動管理テーブル132bを更新する。このようにして、CEEインタフェース106bを用いる場合でも、FC接続およびEthernet接続に関わらず、同様にしてVFごとの起動コードを生成できる。図28は、第5の実施の形態のVF割当処理を示すシーケンス図である。以下、図28の示す処理をステップ番号に沿って説明する。ステップST191管理端末装置11は、ハイパーバイザ140にVF割当指示を送信する。VF割当指示には、仮想マシン150aに対して、PF170bからVFを1つ起動用として割り当てる旨の指示を含むとする。ステップST192ハイパーバイザ140は、PF170bに起動コードを要求する。ステップST193PF170bは、ハイパーバイザ140からの要求に応じて、起動コード記憶部160bから起動コードを取得し、ハイパーバイザ140に出力する。ステップST194ハイパーバイザ140は、PF170bから受信した起動コードに基づいて、PF上に構成されるVFの数を確認する。ハイパーバイザ140は、起動管理テーブル132aを参照してPF170bにおけるVF180eが未割当であり、VF割当可能であると判断する。なお、VF180e,180fの何れを割り当てるかは、例えば、識別情報VFのIDと番号の組の昇順に未割当のVFを選択していくなどのルールがハイパーバイザ140に予め設定される。ステップST195ハイパーバイザ140は、PF170bから受信した起動コードに対して起動コードID2を付加する要求VF数が1つなので起動コードの複製を行わなくてもよい。以下、起動コードID2を付した起動コードを起動コード131aと表記する。ハイパーバイザ140は、管理端末装置11からの起動コード131aの編集を受け付ける。例えば、起動コード131aのアクセス先装置IDにサーバ装置100aのMACアドレスあるいはIPアドレスが設定される。管理端末装置11は、管理者による編集完了の入力を受け付けると、それをハイパーバイザ140に通知する。ステップST196ハイパーバイザ140は、編集内容を起動コード131aに反映させて、起動コード記憶部130に保存する。ハイパーバイザ140は、仮想マシン150a、PF170bの仮想ポート0、VF180eおよび起動コード131aの対応関係を起動管理テーブル132bに設定する。ステップST197ハイパーバイザ140は、割当完了を管理端末装置11に通知する。このようにして、ハイパーバイザ140は、CEEインタフェース106bによりサーバ装置100aとEthernet接続する仮想マシン150aに対して、VF180eを割り当てる。図29は、第5の実施の形態の仮想マシン起動処理を示すシーケンス図である。以下、図29に示す処理をステップ番号に沿って説明する。ステップST201管理端末装置11は、ハイパーバイザ140に仮想マシン起動指示を送信する。仮想マシン起動指示は、仮想マシン150,150aを指定する情報を含むとする。ステップST202ハイパーバイザ140は、仮想マシン起動指示を受信すると、仮想マシン150,150aが指定されていることを検知する。すると、ハイパーバイザ140は、起動コード記憶部130に記憶された起動管理テーブル132bを参照して、仮想マシン150に対して起動用のVF180,180aおよび起動コード131を含む2つの起動コードが対応付けられていることを確認する。そして、ハイパーバイザ140は、仮想マシン150に起動指示を出力する。これにより、ファームウェア151がサーバ装置100上で実行開始される。ステップST203ハイパーバイザ140は、起動管理テーブル132bを参照して、仮想マシン150aに対して起動用のVF180eおよび起動コード131aが対応付けられていることを確認する。そして、ハイパーバイザ140は、仮想マシン150aに起動指示を出力する。これにより、ファームウェア151aがサーバ装置100上で実行開始される。ステップST204仮想マシン150は、ハイパーバイザ140に起動コードを要求する。ここで、起動管理テーブル132aでは、仮想マシン150に対して2つの起動コードが対応付けられている。仮想マシン150は、そのうちの起動コード131を指定してハイパーバイザ140に要求する。ステップST205ハイパーバイザ140は、起動コード記憶部130から起動コード131を取得し、仮想マシン150に提供する。ステップST206仮想マシン150aは、ハイパーバイザ140に起動コードを要求する。ステップST207ハイパーバイザ140は、起動コード記憶部130から起動コード131aを取得し、仮想マシン150aに提供する。ステップST208仮想マシン150は、起動コード131で示されるアクセス先装置IDに基づいて、ストレージ装置300との接続を試みる。その際、ハイパーバイザ140は起動管理テーブル132bを参照して、当該接続をVF180に割り当て、更にPF170の仮想ポート0に対応付ける。すなわち、仮想マシン150は、VF180およびPF170の仮想ポート0を介してストレージ装置300とのFC接続を確立する。そして、仮想マシン150はストレージ装置300にOSプログラムを要求する。ステップST209ストレージ装置300は、仮想マシン150にOSプログラムを送信する。ハイパーバイザ140は、PF170の仮想ポート0を介して受信したOSプログラムをVF180に対応付けて、仮想マシン150に出力する。仮想マシン150は、OSプログラムを受信するとOS152を起動する。ステップST210仮想マシン150aは、起動コード131aで示されるアクセス先装置IDに基づいて、サーバ装置100aとの接続を試みる。その際、ハイパーバイザ140は起動管理テーブル132bを参照して、当該接続をVF180eに割り当て、更にPF170bの仮想ポート0に対応付ける。すなわち、仮想マシン150aは、VF180eおよびPF170bの仮想ポート0を介してサーバ装置100aとのEthernet接続を確立する。そして、仮想マシン150aはストレージ装置300aにOSプログラムを要求する。ステップST211ストレージ装置300aは、仮想マシン150aにOSプログラムを送信する。ハイパーバイザ140は、PF170bの仮想ポート0を介して受信したOSプログラムをVF180eに対応付けて、仮想マシン150aに出力する。仮想マシン150aは、OSプログラムを受信するとOS152aを起動する。このようにして、ハイパーバイザ140は、CPUボード101上の仮想マシン150,150aに対して、CEEインタフェース106b上の異なるPF170,170bから接続したい通信規格に応じたVFを割り当てることができる。これにより、各仮想マシンに対するVF割当の自由度を向上できる。なお、第5の実施の形態では、FCおよびEthernetでの接続を例示して説明したが、他の通信規格を使い分けて接続する場合も同様である。CEEインタフェース106bでサポート可能な他の通信規格としては、例えば、SASインタフェース、Infinibandインタフェース、PCIExpressインタフェースが考えられる。また、第2~第4の実施の形態でも、FCインタフェースに限らず、NICインタフェース、SASインタフェース、Infinibandインタフェース、PCIExpressインタフェースなどに対して、同様にしてアダプタ切り換えの制御を行える。上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。"