(57)【要約】【課題】ユーザ・カーネル間共有メモリを送受信バッファとして利用して通信する場合におけるページフォルトの発生を抑制する情報処理装置を提供する。【解決手段】共有メモリ上の送受信バッファを利用して通信処理を行う情報処理装置であって、送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標を保持する確度指標保持手段１と、確度指標保持手段１が保持する確度指標に基づいて、確度が大きい送受信バッファから割当を行うバッファ管理手段２とを備えている。【選択図】図１４
2012208698.tif 000002
【特許請求の範囲】
【請求項１】
共有メモリ上の送受信バッファを利用して通信処理を行う情報処理装置であって、
前記送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標を保持する確度指標保持手段と、
前記確度指標保持手段が保持する前記確度指標に基づいて、前記確度が大きい送受信バッファから割当を行うバッファ管理手段とを
備えたことを特徴とする情報処理装置。
【請求項２】
バッファ管理手段は、確度指標保持手段が保持する確度指標に基づいて、確度が小さい送受信バッファからバッファの解放と当該送受信バッファに対応する物理ページの解放とを行う
請求項１記載の情報処理装置。
【請求項３】
確度指標保持手段は、確度指標として、送受信バッファの利用頻度を保持し、
バッファ管理手段は、前記送受信バッファの割当処理と解放処理とのいずれか、または両方において前記利用頻度を計数する
請求項１又は請求項２記載の情報処理装置。
【請求項４】
確度指標保持手段は、確度指標として、送受信バッファの位置する物理ページのページテーブルからの参照数を保持し、
バッファ管理手段は、ページテーブルにおけるマッピングの設定および削除処理において前記参照数を計数する
請求項１又は請求項２記載の情報処理装置。
【請求項５】
バッファ管理手段は、参照数が大きい送受信バッファから割当を行い、参照数が小さい送受信バッファからバッファの解放と当該送受信バッファに対応する物理ページの解放とを行う
請求項４記載の情報処理装置。
【請求項６】
共有メモリ上の送受信バッファを利用して通信処理を行う情報処理装置における送受信バッファ管理方法であって、
前記送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標を計数し、
前記確度指標に基づいて前記確度が大きい送受信バッファから割当を行う
ことを特徴とする送受信バッファ管理方法。
【請求項７】
確度指標に基づいて確度が小さい送受信バッファからバッファの解放と当該送受信バッファに対応する物理ページの解放とを行う
請求項６に記載の送受信バッファ管理方法。
【請求項８】
共有メモリ上の送受信バッファを利用して通信処理を行わせるための送受信バッファ管理プログラムであって、
前記送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標を保持する確度指標保持手段を備えたコンピュータに、
前記確度指標に基づいて、前記確度が大きい送受信バッファから割当を行うバッファ割当処理を
実行させるための送受信バッファ管理プログラム。
【請求項９】
コンピュータに、
確度指標に基づいて、確度が小さい送受信バッファからバッファの解放と当該送受信バッファに対応する物理ページの解放とを行うバッファ解放処理を実行させる
請求項８記載の送受信バッファ管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信処理を行う情報処理装置、送受信バッファ管理方法および送受信バッファ管理プログラムに関する。
【背景技術】
【０００２】
オペレーティングシステム（ＯＳ）では、仮想アドレス空間をユーザ空間とカーネル空間に分離し、ユーザプロセスからのカーネル空間へのアクセスを制限することにより、ＯＳの安全性が確保されている。そのため、ユーザプロセスがシステムコールを利用して通信処理を行いたい場合、ユーザ空間とカーネル空間との間でデータのメモリコピーが発生することになる。高速な通信環境において、このコピー処理によるオーバーヘッドは比較的大きく、十分な性能を発揮できないことがある。
【０００３】
ユーザ・カーネル間でのメモリコピーを抑制するための１つの方法として、図１３に示すようにユーザ・カーネル間の共有メモリ上に送受信バッファを確保する方法がある（非特許文献１）。
【０００４】
ユーザ・カーネル間共有メモリを利用したデータ送信処理では、ユーザプロセスはユーザ空間にマッピングされた送信バッファに対するデータの書き込みを行い、送信バッファのアドレス（または共有メモリの先頭からのオフセット）とデータ長とを指定して送信用のシステムコール呼び出す。システムコールによってカーネルに処理が移ると、指定された送信バッファのアドレス（共有メモリの先頭からのオフセット）から対応するカーネル空間での送信バッファのアドレスを特定し、そのアドレスを利用して送信処理を行う。
【０００５】
データ受信処理では、ＯＳカーネルは共有メモリ上に受信バッファを確保し、ネットワークインタフェースからデータを受信バッファに受信するとデータの受信先のユーザプロセスの受信キューにデータを蓄積する。ユーザプロセスから受信用システムコールが呼ばれると、受信バッファに対応するユーザ空間でのアドレス（または、共有メモリの先頭からのオフセット）とデータ長とをユーザプロセスに返すことでデータ受信処理を行う。このように、ユーザ・カーネル間共有メモリを送受信バッファとして利用することで、通信処理におけるメモリコピー処理を抑制することができる。
【０００６】
これに関連する技術として、例えば、特許文献１には、プロアクティブなメモリ管理の方法が記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００４−１３３９３４号公報
【非特許文献】
【０００８】
【非特許文献１】Ｍ．Ｓｃｈｒｏｅｄｅｒ他著、「Ｐｅｒｆｏｒｍａｎｃｅ  ｏｆ  Ｆｉｒｅｆｌｙ  ＲＰＣ」、ＡＣＭ  Ｔｒａｎｓａｃｉｏｎｓ  ｏｎ  Ｃｏｍｐｕｔｉｎｇ  Ｓｙｓｔｅｍｓ、Ｐ．１―１７（１９９０年２月）
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ユーザ・カーネル間の共有メモリに送受信バッファを確保する場合におけるユーザプロセスのバッファ領域へのアクセス時の動作は以下のようになる。まず、アクセス対象のバッファに対応する仮想ページと物理ページとのマッピングがページテーブルに存在している場合、特に問題なくユーザプロセスからのアクセスができる。
【００１０】
一方、そのようなマッピングが存在していない場合、メモリ管理ユニット（ＭＭＵ）がそれを検出し、ページフォルトが発生する。ページフォルトが発生すると、カーネルはその仮想ページに対応するマッピングを設定する。つまり、その仮想ページに対応する物理ページが未割当であれば、シグナルなどを利用してユーザプロセスにアクセス違反を通知し、カーネルは処理を終了する。既にカーネルによるバッファ割当処理によって物理ページが割当済みであれば、対応する物理ページを検索する。そして、カーネルはユーザプロセスによってアクセスされた仮想ページと、検索によって見つかった物理ページとのマッピングをユーザプロセスのページテーブルに設定する。ページテーブルの設定が終わると、カーネルは処理をユーザプロセスに返す。その後、ユーザプロセスはページフォルトの原因となったメモリアクセスから処理を再開することになる。
【００１１】
このように、ユーザ・カーネル間共有メモリを送受信バッファとして利用する場合、ユーザプロセスのページテーブルにマッピングがない領域を送受信バッファとして割り当てた場合に、ページフォルト処理が発生することになる。
【００１２】
ネットワークを介して外部からデータを受信する場合、受信データは最終的にユーザプロセスに届けられる。受信プロセスが受信バッファにアクセスする際のページフォルトを抑制するためには、受信プロセスのページテーブルにマッピングが存在する領域から受信バッファを確保する必要がある。しかしながら、ネットワークインタフェースカード（ＮＩＣ）ドライバが受信バッファを確保しＤＭＡマッピングを設定する段階では、どのようなデータが到着するかを判断することができないため、その受信バッファがどのユーザプロセスに到着するかは判断できない。そのため、ＮＩＣドライバは受信プロセスを感知することなく受信バッファを割り当てることになり、結果として、受信プロセスが受信バッファ領域にアクセスした際に、ページフォルトが発生する可能性が高くなり、ページフォルト処理によって性能が低下する。
【００１３】
また、特許文献１に記載された方法では、使用頻度などの優先度情報に基づいてページアウトされている高価値のページを低価値のページに置き換えてプリフェッチ（ページイン）することで効率化を図っている。しかしながら、共有メモリ上の送受信バッファに置き換えた場合には、これに対応する動作は、バッファ割当の段階でマッピングを設定すること・または予めマッピングを設定することに当たる。そのため、ユーザ・カーネル間の共有メモリを送受信バッファとして利用する場合に、特許文献１に記載された方法ではユーザプロセスがアクセスしないバッファに対する不要なマッピング設定が生じる。
【００１４】
そこで、本発明は、ユーザ・カーネル間共有メモリを送受信バッファとして利用して通信する場合におけるページフォルトの発生を抑制する情報処理装置、送受信バッファ管理方法及び送受信バッファ管理プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明による情報処理装置は、共有メモリ上の送受信バッファを利用して通信処理を行う情報処理装置であって、送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標を保持する確度指標保持手段と、確度指標保持手段が保持する確度指標に基づいて、確度が大きい送受信バッファから割当を行うバッファ管理手段とを備えたことを特徴とする。
【００１６】
本発明による送受信バッファ管理方法は、共有メモリ上の送受信バッファを利用して通信処理を行う情報処理装置における送受信バッファ管理方法であって、送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標を計数し、確度指標に基づいて確度が大きい送受信バッファから割当を行うことを特徴とする。
【００１７】
本発明による送受信バッファ管理プログラムは、共有メモリ上の送受信バッファを利用して通信処理を行わせるための送受信バッファ管理プログラムであって、送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標を保持する確度指標保持手段を備えたコンピュータに、確度指標に基づいて、確度が大きい送受信バッファから割当を行うバッファ割当処理を実行させることを特徴とする。
【発明の効果】
【００１８】
本発明によれば、ユーザ・カーネル間共有メモリを送受信バッファとして利用して通信する場合におけるページフォルトの発生を抑制することができる。
【図面の簡単な説明】
【００１９】
【図１】第１の実施形態における情報処理装置の構成例を示すブロック図である。
【図２】第１の実施形態におけるバッファ解放処理の動作例を示すフローチャートである。
【図３】第１の実施形態におけるバッファ解放処理の動作例を示すフローチャートである。
【図４】第１の実施形態におけるバッファ割当処理の動作例を示すフローチャートである。
【図５】第１の実施形態におけるバッファ割当処理の動作例を示すフローチャートである。
【図６】第１の実施形態における物理ページ回収処理の動作例を示すフローチャートである。
【図７】第１の実施形態におけるマッピング設定処理の動作例を示すフローチャートである。
【図８】第２の実施形態における情報処理装置の構成例を示すブロック図である。
【図９】第２の実施形態におけるバッファ解放処理の動作例を示すフローチャートである。
【図１０】第２の実施形態におけるバッファ割当処理の動作例を示すフローチャートである。
【図１１】第２の実施形態における物理ページ回収処理の動作例を示すフローチャートである。
【図１２】第２の実施形態におけるマッピング設定処理の動作例を示すフローチャートである。
【図１３】共有メモリ上で送受信バッファを管理する場合におけるアドレス空間の一例である。
【図１４】情報処理装置の最小の構成例を示すブロック図である。
【発明を実施するための形態】
【００２０】
実施形態１．
図１は、本発明の第１の実施形態の情報処理装置の構成例を示すブロック図である。図１に示すように、本実施形態における情報処理装置は、ユーザプロセス１０と、バッファ管理部２０と、利用頻度記憶部３０と、バッファキャッシュ４０と、ＮＩＣドライバ５０と、プロトコル処理部６０とを備えている。情報処理装置は、具体的には、プログラムに従って動作するパーソナルコンピュータ等によって実現される。
【００２１】
本実施形態における情報処理装置におけるアドレス空間は、ユーザ空間とカーネル空間とに分かれている。ユーザプロセス１０はユーザ空間で動作する。また、バッファ管理部２０、利用頻度記憶部３０、バッファキャッシュ４０、ＮＩＣドライバ５０およびプロトコル処理部６０はカーネル空間で動作する。
【００２２】
情報処理装置は、送受信バッファ（以下、単にバッファや送信バッファ、受信バッファともいう）のための領域として共有メモリ（図示されない）を備えている。共有メモリにはユーザ空間とカーネル空間との両方からアクセスすることができる。仮想ページと物理ページとのマッピングはページテーブルによって管理される。
【００２３】
ユーザプロセス１０は、ユーザ空間で動作しデータの送受信処理を行う機能を備えている。ユーザプロセス１０は、具体的には、プログラムに従って情報処理装置のＣＰＵが処理を実行することによって実現される。情報処理装置上では一つ以上のユーザプロセス１０が動作しており、複数のユーザプロセス１０が動作している場合には動作しているアドレス空間が独立している。
【００２４】
ユーザプロセス１０は、データの送信処理を行う場合、バッファ管理部２０からバッファを割り当ててもらい、そのバッファにデータを書き込んだ後、そのバッファとデータ長とを指定してプロトコル処理部６０に対してデータの送信依頼を出力する。なお、バッファの割り当ての詳細については後述する。
【００２５】
ユーザプロセス１０は、データの受信処理を行う場合、プロトコル処理部６０から受信データを保持するバッファの仮想アドレスとデータ長とを受信し、受信データへのアクセスが終わった段階で、受信データを保持するバッファの解放依頼をバッファ管理部２０に出力する。
【００２６】
バッファ管理部２０は、具体的には、プログラムに従って動作する情報処理装置のＣＰＵによって実現される。バッファ管理部２０は、送受信処理に利用するバッファの管理を行う機能を備えている。バッファ管理部２０は、ユーザプロセス１０またはＮＩＣドライバ５０からの要求に従い、バッファの割当処理と解放処理とを行う。なお、以降の説明を簡単にするため、バッファの割当のサイズと物理ページのサイズとは同一のものとして扱う。ただし、これは本発明の範囲を制限するものではなく、１つの物理ページからの複数のバッファの割り当てる場合においても本発明は適用可能である。
【００２７】
バッファ管理部２０は、バッファを割り当てる際に、バッファキャッシュ４０に保持される未使用バッファから優先的に行い、バッファキャッシュが空の場合には、新たに空き物理ページを確保して行う。空き物理ページを確保しバッファを割り当てる場合には、バッファ管理部２０は、カーネル空間のページテーブルに、確保した物理ページに関するマッピングの設定を行う。なお、バッファキャッシュが空の場合とは、具体的には、バッファキャッシュ４０が未使用バッファを保持していない状態をいう。
【００２８】
バッファ管理部２０は、バッファの解放を、バッファキャッシュ４０にバッファを返すことで行う。具体的には、バッファ管理部２０は、解放対象のバッファをバッファキャッシュ４０に蓄積する。また、バッファ管理部２０は、図示されない物理ページ回収機構からの要求に従い、バッファキャッシュ４０内の一部のバッファについて、対応する物理ページを解放する処理を行う。ただし、バッファキャッシュ４０内の未使用バッファの量が所定の閾値を超えた場合には、一部の未使用バッファをバッファキャッシュ４０から削除し、その未使用バッファに対応する物理ページを解放するよう構成してもよい。その場合、バッファ管理部２０は、ユーザプロセス１０のページテーブルからその物理ページに関するマッピングを削除する。
【００２９】
バッファ管理部２０は、バッファキャッシュ４０からバッファを割り当てる場合には、利用頻度記憶部３０が記憶する利用頻度データに示される利用頻度の高いバッファから順に割り当てを行い、バッファの割当・解放のタイミングで利用頻度記憶部３０の利用頻度データを更新する。
【００３０】
利用頻度記憶部３０は、具体的には、メモリ等の記憶装置によって実現される。利用頻度記憶部３０は、仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標として、利用頻度データを記憶する。利用頻度記憶部３０は、利用頻度データとして、送受信バッファの利用頻度を保持する。利用頻度記憶部３０は、利用頻度データとして、バッファ管理部２０によって割り当てられてまだ解放されていないバッファおよびバッファキャッシュ４０内のバッファの利用頻度を保持する。ここで、利用頻度を表す値として、バッファの割当回数、解放回数、またはその両方の合計を用いることができる。また、利用頻度の計数は、ユーザプロセス１０への割当またはユーザプロセス１０からの解放時に限定してもよい。
【００３１】
バッファキャッシュ４０は、具体的には、メモリ等の記憶装置によって実現される。バッファキャッシュ４０は、解放された未使用バッファの一部を保持する。具体的には、バッファキャッシュ４０は、バッファ管理部２０の解放処理により未使用となったバッファを保持する。
【００３２】
ＮＩＣドライバ５０は、具体的には、プログラムに従って情報処理装置のＣＰＵが処理を実行することによって実現される。ＮＩＣドライバ５０は、カーネル空間で動作し、ネットワークインタフェースカード（ＮＩＣ；図示されない）を操作し、情報処理装置外部へのデータ送信及び情報処理装置外部からのデータ受信を行う機能を備えている。ＮＩＣドライバ５０は、プロトコル処理装置６０から送信依頼を受信すると、送信バッファが保持する送信データをＮＩＣから送信し、ＮＩＣからの送信完了後に送信バッファの解放依頼をバッファ管理部２０に出力する。さらに、ＮＩＣドライバ５０は、バッファ管理部２０から受信バッファを割り当ててもらい、その受信バッファに対してＮＩＣからの受信データを書き込み、その受信バッファをプロトコル処理部６０に渡す処理を行う。受信バッファをプロトコル処理部６０に渡す処理では、例えば、ＮＩＣドライバ５０は、プロトコル処理部６０に対して、受信バッファを指定して受信通知を行う。
【００３３】
プロトコル処理部６０は、具体的には、プログラムに従って情報処理装置のＣＰＵが処理を実行することによって実現される。プロトコル処理部６０は、ＴＣＰ、ＵＤＰ、ＩＰなどの各種プロトコル処理を行う機能を備えている。プロトコル処理部６０は、ユーザプロセス１０から送信バッファを受信すると、ヘッダの付与やフラグメント化などのプロトコル処理を行った後、ＮＩＣドライバ５０に対して送信バッファの送信依頼を出力する。具体的には、プロトコル処理部６０は、ユーザプロセス１０から送信バッファとデータ長とを指定した送信依頼を受信すると、所定のプロトコル処理を行う。そして、所定のプロトコル処理が完了すると、プロトコル処理部６０は、ＮＩＣドライバ５０に対して送信バッファを指定して送信依頼を出力する。
【００３４】
また、プロトコル処理部６０は、ＮＩＣドライバ５０から受信バッファを受信すると、ヘッダを解析し、データを受信するユーザプロセス１０を特定し、データのリアセンブル、順序制御などのプロトコル処理を行い、ユーザプロセス１０に受信バッファを届ける処理を行う。具体的には、プロトコル処理部６０は、ＮＩＣドライバ５０から受信バッファを指定して受信通知されると、所定のプロトコル処理を行う。そして、所定のプロトコル処理が完了すると、プロトコル処理部６０は、ユーザプロセス１０に対して受信バッファの仮想アドレスとデータ長とを出力する。
【００３５】
次に、本実施形態におけるバッファ管理処理の動作について説明する。
【００３６】
最初に、バッファ解放時の動作について説明する。図２は、バッファ解放時の動作例を示すフローチャートである。まず、ユーザプロセス１０またはＮＩＣドライバ５０は、バッファ管理部２０に対して不要になったバッファの解放依頼を出力する（ステップＳ０１）。
【００３７】
解放依頼を受信したバッファ管理部２０は、解放依頼に従って、該当するバッファをバッファキャッシュ４０に蓄積する（ステップＳ０２）。そして、バッファ管理部２０は、利用頻度記憶部３０が記憶する利用頻度データを更新し、そのバッファの利用頻度を１加算する（ステップＳ０３）。この際、図３に示すように、ユーザプロセス１０からの解放依頼であったときのみ利用頻度データを更新するよう構成することもできる（ステップＳ０４）。その場合、結果として、ユーザ空間で利用されたバッファの利用頻度が高くなることになる。
【００３８】
次に、バッファ割当時の動作について説明する。図４は、バッファ割当時の動作例を示すフローチャートである。まず、ユーザプロセス１０またはＮＩＣドライバ５０は、バッファ管理部２０に対してバッファの割当依頼を出力する（ステップＳ１１）。
【００３９】
割当依頼を受信したバッファ管理部２０は、まずバッファキャッシュ４０が空かどうかを判断する（ステップＳ１２）。
【００４０】
バッファキャッシュ４０が空であると判断した場合（ステップＳ１２のＹｅｓ）、バッファ管理部２０は、新たに空き物理ページを確保しバッファを割り当てる（ステップＳ１４）。さらに、バッファ管理部２０は、カーネル空間のページテーブルに、確保した物理ページに関するマッピングを作成する（ステップＳ１５）。
【００４１】
バッファキャッシュ４０が空でないと判断した場合（ステップＳ１２のＮｏ）、バッファ管理部２０は、バッファキャッシュ４０に保持されている未使用バッファのうち、利用頻度記憶部３０が記憶する利用頻度データに示される利用頻度が高いバッファを割り当てる（ステップＳ１３ａ）。
【００４２】
ステップＳ１３ａまたはステップＳ１４で割り当てられたバッファを、バッファ管理部２０は、依頼元のユーザプロセス１０またはＮＩＣドライバ５０に渡す。例えば、バッファ管理部２０は、割り当てたバッファの仮想アドレスをユーザプロセス１０またはＮＩＣドライバ５０に通知する。
【００４３】
バッファの割当が完了すると、バッファ管理部２０は、利用頻度記憶部３０が記憶する利用頻度データを更新し、割り当てたバッファの利用頻度を１加算する（ステップＳ１６）。なお、図５に示すように、ユーザプロセス１０からの割当依頼であったときのみ利用頻度を更新するよう構成することもできる（ステップＳ１７）。その場合、解放時と同様、ユーザ空間で利用されたバッファの利用頻度が高くなることになる。
【００４４】
次に、空き物理ページが少なくなったときの物理ページ回収処理について説明する。図６は、空き物理ページが少なくなったときの物理ページ回収処理の動作例を示すフローチャートである。
【００４５】
情報処理装置内での空き物理ページが少なくなると、物理ページ回収機構は、物理ページの回収依頼をバッファ管理部２０に対して出力する（ステップＳ２１）。
【００４６】
回収依頼を受信したバッファ管理部２０は、バッファキャッシュ４０内に保持されている送受信バッファの量がある閾値以上であるか否かを判断する（ステップＳ２２）。ここで、閾値は予め利用者によって設定された値でもよいし、送受信バッファの利用量から動的に計算される値であってもよい。
【００４７】
閾値より少ないと判断した場合（ステップＳ２２のＮｏ）、バッファ管理部２０は、物理ページの回収処理を終了する。また、閾値以上であると判断した場合（ステップＳ２２のＹｅｓ）、バッファ管理部２０は、利用頻度記憶部３０を参照し、バッファキャッシュ４０から利用頻度の低いバッファを選択し、対応する物理ページを解放する（ステップＳ２３ａ）。この際、バッファ管理部２０は、利用頻度記憶部３０が記憶する利用頻度データのうちの該当バッファの利用頻度を削除する。さらに、バッファ管理部２０は、解放した物理ページに対応するマッピングをページテーブルから削除する（ステップＳ２４ａ）。
【００４８】
バッファ管理部２０は、バッファキャッシュ４０に保持されている送受信バッファの量が閾値より少なくなるまで、ステップＳ２３ａ、ステップＳ２４ａの操作を繰り返す。その後、バッファ管理部２０は、送受信バッファの量が閾値より少なくなったと判断すると、物理ページの回収処理を終了する。
【００４９】
次に、ページフォルト時の動作について説明する。図７は、ページフォルト時の動作を示すフローチャートである。
【００５０】
ユーザプロセス１０が、ページテーブルが存在しない仮想アドレス上のバッファ領域にアクセスする（ステップＳ３１）と、図示されないメモリ管理ユニット（ＭＭＵ）によりページフォルトが発生する（ステップＳ３２）。
【００５１】
ページフォルトが発生すると処理はカーネルに移り、ページテーブルの更新処理が行われる。具体的には、まず、バッファ管理部２０は、ユーザプロセス１０がアクセスした仮想アドレスに対して、バッファ割当によって物理ページが割り当てられているか否かを判断する（ステップＳ３３）。
【００５２】
物理ページが割り当てられていないと判断した場合（ステップＳ３３のＮｏ）、バッファ管理部２０は、そのアクセスは未割当のバッファ領域に対するものであり無効なため、シグナルなどを利用してアクセス違反をユーザプロセス１０に通知する（ステップＳ３６）。
【００５３】
一方、割り当てられていると判断した場合（ステップＳ３３のＹｅｓ）、バッファ管理部２０は、仮想アドレスに対応する物理ページを検索する（ステップＳ３４）。仮想アドレスに対する物理ページの検索については、カーネル空間での共有メモリのマッピング情報を利用すれば、共有メモリの先頭からオフセット位置をもとに容易に行うことができる。そして、対応する物理ページを特定すると、バッファ管理部２０は、ユーザプロセス１０のページテーブルを更新し、仮想アドレスと検索した物理ページとのマッピングを設定する（ステップＳ３５）。
【００５４】
以上のように、本実施形態では、バッファの利用頻度を計測し、利用頻度の高いバッファを優先して割り当てを行い、利用頻度の低いバッファの物理ページを優先的に解放する。これにより、優先頻度の高いバッファが頻繁にユーザプロセス１０にアクセスされるようになる。そのため、ユーザプロセス１０のページテーブルにマッピングが存在している領域のバッファが優先的に利用されることになる。その結果、マッピングが存在しない領域のバッファにユーザプロセス１０がアクセスする確率が低くなることで、ページフォルトが発生する確率を低下させることができる。
【００５５】
実施形態２．
図８は、本発明の第２の実施形態における情報処理装置の構成例を示すブロック図である。図８に示すように、本実施形態における情報処理装置は、バッファ管理部２１の機能が異なるとともに、利用頻度記憶部３０に代えてページ参照数記憶部３１を含む点で、第１の実施形態における情報処理装置と異なる。その他の構成要素については第１の実施形態と同様であり、同一の符号を付し、詳細な説明を省略する。
【００５６】
バッファ管理部２１は、第１の実施形態のバッファ管理部２０と同様、送受信処理に利用するバッファの管理を行う。第１の実施形態のバッファ管理２０との違いは、利用頻度記憶部３０の代わりに、ページ参照数記憶部３１を利用してバッファの管理を行う点である。
【００５７】
本実施形態におけるバッファ管理部２１は、バッファキャッシュ４０内のバッファのうち、ページ参照数記憶部３１が記憶するページ参照数データに示されるページ参照数が多い物理ページに対応するバッファから優先的に割り当てを行う。
【００５８】
また、本実施形態では、物理ページ回収機構から物理ページの回収依頼を受信した場合、バッファ管理部２１は、バッファキャッシュ４０内のバッファから対応する物理ページの参照数が少ないものについてバッファの削除および対応する物理ページの解放処理を行う。
【００５９】
ページ参照数記憶部３１は、具体的には、メモリ等の記憶装置によって実現される。ページ参照数記憶部３１は、仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標として、バッファキャッシュ４０に保持されるバッファに対応する物理ページについて、ページテーブルからの参照数を示す参照数データを記憶する。ページテーブルからの参照数とは、すなわちページテーブルにおいて仮想ページと対応付けられている数のことをいう。ページ参照数記憶部３１が記憶する参照数データのページ参照数は、ページフォルト時にマッピングを更新するときに加算され、物理ページの解放によりページテーブルからマッピングを削除するときに減算される。
【００６０】
次に、本実施形態におけるバッファ管理処理の動作について説明する。図９は、バッファ解放時の動作を示すフローチャートである。第１の実施形態の図２との違いは、ステップＳ０３に相当するステップが存在しない点である。
【００６１】
図１０は、バッファ割当時の動作を示すフローチャートである。第１の実施形態の図４と異なり、バッファキャッシュ４０が空でないと判断した場合（ステップＳ１２のＮｏ）に、バッファ管理部２１は、ページ参照数記憶部３１を参照し、参照数の大きい物理ページに対応するバッファから優先的にバッファ割当を行う（ステップＳ１３ｂ）。また、バッファ管理部２１がステップＳ１５でカーネル空間でのマッピングを設定した後、ページ参照数記憶部３１が記憶する参照数データのページ参照数を１に設定する（ステップＳ１８）処理が追加されている。
【００６２】
図１１は、空き物理ページが少なくなったときの動作を示すフローチャートである。第１の実施形態の図６とは、ステップＳ２３ｂとステップＳ２４ｂとの処理が異なる。ステップ２３ｂでは、バッファ管理部２１は、利用頻度の代わりにページ参照数記憶部３１が記憶する参照数データのページ参照数に基づいて回収する物理ページを選択する。つまり、本実施形態では、ページ参照数の小さい物理ページに対応するバッファから優先的に回収される。ステップ２４ｂでは、図６のステップ２４ａと同様に、バッファ管理部２１は、ページテーブルからマッピングの削除を行うが、さらに、ページ参照数記憶部３１が記憶する参照数データから該当する物理ページの参照数の削除も行う。
【００６３】
図１２は、ページフォルト時の動作を示すフローチャートである。第１の実施形態の図７と異なり、ステップＳ３５でのページテーブル更新後に、ステップＳ３７において、バッファ管理部２１は、ページ参照数記憶部３１が記憶する参照数データの物理ページの参照数を１加算する処理を行う。
【００６４】
上記に加え、本実施形態ではユーザプロセス１０の終了時に、バッファ管理部２１は、そのプロセスのメモリ空間に対応するページテーブルを解放によるマッピング削除の際にもページ参照数記憶部３１が記憶する参照数データの参照数を１減算する処理を行う。これらの一連の処理により、ページ参照数記憶部３１には物理ページに対するページテーブルからの参照数が保持される。
【００６５】
本実施形態では、物理ページのページテーブルからの参照数に基づいてバッファの割当順を決定する。そのため、ページテーブルに当該物理ページへのマッピングが存在するユーザプロセスの数を正確に把握できる。したがって、第１の実施形態と比べて、より正確にページフォルトの発生しにくいバッファを割り当てることができる。
【００６６】
以上のように、本発明による情報処理装置では、バッファの割当・解放処理を行うバッファ管理部が、送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在するかどうかを示す確度指標を計測し、確度指標が大きい送受信バッファを優先して割り当てる。さらに、確度指標が小さい送受信バッファの解放とそのバッファに対応する物理ページの解放処理を行う。
【００６７】
したがって、本発明によれば、送受信バッファの位置する物理ページがユーザプロセスのページテーブルにマッピング済みである可能性が向上するため、ユーザプロセスが送受信バッファにアクセスした際に生じるページフォルトの発生を抑制することができる。
【００６８】
また、特許文献１に記載された公知例では、使用頻度などの優先度情報に基づいてページアウトされている高価値のページを低価値のページに置き換えてプリフェッチ（ページイン）することで効率化を図っている。これに対し、本発明では複数の仮想空間にマッピング（共有）されているメモリのうち、より多くの仮想空間にマッピングされているメモリ領域をバッファとして優先的に割り当てる。
【００６９】
公知例では、アクセスされる仮想ページの内容に対して優先度付けがなされるのに対し、本発明では、物理ページ自体に対して優先度付けを行うものであり、ページが含む内容とは無関係である。そのため、利用履歴を指標として使う場合、公知例では仮想ページに対して履歴をとり、本発明では物理ページに対する履歴をとる点で異なる。
【００７０】
また、公知例では優先度の高いページをプロアクティブにページインすることで効率化を図っているが、共有メモリ上の送受信バッファに置き換えを行う場合、これに対応する動作は、バッファ割当の段階でマッピングを設定すること・または予めマッピングを設定することに該当する。これに対し、本発明では、そもそもマッピングの設定の必要性が少ない物理ページからバッファを割り当てるため、バッファ割当の段階でマッピングの設定を行うことはない。
【００７１】
次に、本発明による情報処理装置の最小構成について説明する。図１４は、情報処理装置の最小の構成例を示すブロック図である。図１４に示すように、情報処理装置は、共有メモリ上の送受信バッファを利用して通信処理を行い、最小の構成要素として、確度指標保持手段１と、バッファ管理手段２とを備えている。
【００７２】
図１４に示す最小構成の情報処理装置では、確度指標保持手段１は、送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標を保持する。そして、バッファ管理手段２は、確度指標保持手段１が保持する確度指標に基づいて、確度が大きい送受信バッファから割当を行う。
【００７３】
従って、最小構成の情報処理装置によれば、ユーザ・カーネル間共有メモリを送受信バッファとして利用して通信する場合におけるページフォルトの発生を抑制することができる。
【００７４】
なお、本実施形態では、以下の（１）〜（５）に示すような情報処理装置の特徴的構成が示されている。
【００７５】
（１）情報処理装置は、共有メモリ上の送受信バッファを利用して通信処理を行う情報処理装置であって、送受信バッファの位置する仮想ページから物理ページへのマッピングがページテーブルに存在する確度を示す確度指標（例えば、利用頻度データや参照数データ）を保持する確度指標保持手段（例えば、利用頻度記憶部３０やページ参照数記憶部３１によって実現される）と、確度指標保持手段が保持する確度指標に基づいて、確度が大きい送受信バッファから割当を行うバッファ管理手段（例えば、バッファ管理部２０やバッファ管理部２１によって実現される）とを含むことを特徴とする。
【００７６】
（２）情報処理装置において、バッファ管理手段は、確度指標保持手段が保持する確度指標に基づいて、確度が小さい送受信バッファからバッファの解放と送受信バッファに対応する物理ページの解放とを行うように構成されていてもよい。
【００７７】
（３）情報処理装置において、確度指標保持手段は、確度指標として、送受信バッファの利用頻度（例えば、利用頻度データに含まれる）を保持し、バッファ管理手段は、送受信バッファの割当処理と解放処理とのいずれか、または両方において利用頻度を計数するように構成されていてもよい。
【００７８】
（４）情報処理装置において、確度指標保持手段は、確度指標として、送受信バッファの位置する物理ページのページテーブルからの参照数（例えば、参照数データに含まれる）を保持し、バッファ管理手段は、ページテーブルにおけるマッピングの設定および削除処理において参照数を計数するように構成されていてもよい。
【００７９】
（５）情報処理装置において、バッファ管理手段は、参照数が大きい送受信バッファから割当を行い、参照数が小さい送受信バッファからバッファの解放と当該送受信バッファに対応する物理ページの解放とを行うように構成されていてもよい。
【産業上の利用可能性】
【００８０】
本発明は、通信処理を行う情報処理装置を制御する用途に適用可能である。
【符号の説明】
【００８１】
１  確度指標保持手段
２  バッファ管理手段
１０  ユーザプロセス
２０、２１  バッファ管理部
３０  利用頻度記憶部
３１  ページ参照数記憶部
４０  バッファキャッシュ
５０  ＮＩＣドライバ
６０  プロトコル処理部
【図１】
2012208698.tif 000003
【図２】
2012208698.tif 000004
【図３】
2012208698.tif 000005
【図４】
2012208698.tif 000006
【図５】
2012208698.tif 000007
【図６】
2012208698.tif 000008
【図７】
2012208698.tif 000009
【図８】
2012208698.tif 000010
【図９】
2012208698.tif 000011
【図１０】
2012208698.tif 000012
【図１１】
2012208698.tif 000013
【図１２】
2012208698.tif 000014
【図１３】
2012208698.tif 000015
【図１４】
2012208698.tif 000016