(57)【要約】【課題】次のプロセス実行開始までの時間を短縮する。【解決手段】実行待ちのジョブキューがある場合は、ジョブキュー５００からジョブキューチェックテーブル１２００を作成し、これと、ＤＲＡＭ３８の実メモリに記憶されているプロセスの種類とに基づいてスワップアウト／イン候補のプロセスを決定する。実行待ちのジョブキューがない場合は、プロセス実行履歴テーブル６００と、直前に実行されたプロセスの種類とに基づいてプロセス実行頻度テーブル１３００を作成し、次に実行されるプロセスを予測すると共に、該予測に基づいてスワップアウト／イン候補のプロセスを決定する。上記決定に従って、スワップアウト候補を実メモリからスワップアウトし、それによって空いた実メモリの領域に、スワップイン候補をスワップインする。【選択図】図９
2010211696.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセスで成るジョブが実行される情報処理装置において、１次記憶装置と２次記憶装置とを用いて前記プロセスの仮想記憶を行うメモリスワップ管理方法であって、
前記情報処理装置における実行待ちのジョブが複数ある場合にそれらの予定実行順序を記憶する記憶工程と、
前記記憶工程により記憶されている前記実行待ちのジョブの予定実行順序と前記１次記憶装置に記憶されているプロセスの種類とに基づいて、スワップアウト候補のプロセスとスワップイン候補のプロセスとを決定する決定工程と、
前記決定工程による決定に従って、前記スワップアウト候補のプロセスを前記１次記憶装置から前記２次記憶装置にスワップアウトすると共に、それによって空いた前記１次記憶装置の領域に、前記スワップイン候補のプロセスを前記２次記憶装置からスワップインするスワップ処理工程とを有することを特徴とするメモリスワップ管理方法。
【請求項２】
前記決定工程は、前記実行待ちのジョブのうち予定実行順序が最も遅いジョブを構成するプロセスを前記スワップアウト候補とすると共に、前記実行待ちのジョブのうち予定実行順序が最も早いジョブを構成するプロセスを前記スワップイン候補とすることを特徴とする請求項１記載のメモリスワップ管理方法。
【請求項３】
前記決定工程は、前記実行待ちのジョブのうち予定実行順序が最も早いジョブを構成するプロセスが複数ある場合は、当該ジョブにおいて最も早く実行されるプロセスから順に優先的に前記スワップイン候補とすることを特徴とする請求項２記載のメモリスワップ管理方法。
【請求項４】
少なくとも１つのプロセスで成るジョブが実行される情報処理装置において、１次記憶装置と２次記憶装置とを用いて前記プロセスの仮想記憶を行うメモリスワップ管理方法であって、
プロセスの実行実績を記録する記録工程と、
前記記録工程において記録されたプロセスの実行実績と、直前に実行されたプロセスの種類とに基づいて、次に実行される可能性を各プロセスについて予測する予測工程と、
前記予測工程により予測された可能性に基づいて、スワップアウト候補のプロセスとスワップイン候補のプロセスとを決定する決定工程と、
前記決定工程による決定に従って、前記スワップアウト候補のプロセスを前記１次記憶装置から前記２次記憶装置にスワップアウトすると共に、それによって空いた前記１次記憶装置の領域に、前記スワップイン候補のプロセスを前記２次記憶装置からスワップインするスワップ処理工程とを有することを特徴とするメモリスワップ管理方法。
【請求項５】
前記記録工程は、前記実行実績として、プロセス毎に、当該プロセスの実行の直後に実行されたプロセスの各々の実行頻度を記録し、前記予測工程は、前記記録された実行頻度に基づいて、前記直前に実行されたプロセスの次にどのプロセスがどの程度の可能性で実行されるのかを各プロセスについて予測することを特徴とする請求項４記載のメモリスワップ管理方法。
【請求項６】
少なくとも１つのプロセスで成るジョブが実行される情報処理装置において、１次記憶装置と２次記憶装置とを用いて前記プロセスの仮想記憶を行うメモリスワップ管理装置であって、
前記情報処理装置における実行待ちのジョブが複数ある場合にそれらの予定実行順序を記憶する記憶手段と、
前記記憶手段により記憶されている前記実行待ちのジョブの予定実行順序と前記１次記憶装置に記憶されているプロセスの種類とに基づいて、スワップアウト候補のプロセスとスワップイン候補のプロセスとを決定する決定手段と、
前記決定手段による決定に従って、前記スワップアウト候補のプロセスを前記１次記憶装置から前記２次記憶装置にスワップアウトすると共に、それによって空いた前記１次記憶装置の領域に、前記スワップイン候補のプロセスを前記２次記憶装置からスワップインするスワップ処理手段とを有することを特徴とするメモリスワップ管理装置。
【請求項７】
少なくとも１つのプロセスで成るジョブが実行される情報処理装置において、１次記憶装置と２次記憶装置とを用いて前記プロセスの仮想記憶を行うメモリスワップ管理装置であって、
プロセスの実行実績を記録する記録手段と、
前記記録手段において記録されたプロセスの実行実績と、直前に実行されたプロセスの種類とに基づいて、次に実行される可能性を各プロセスについて予測する予測手段と、
前記予測手段により予測された可能性に基づいて、スワップアウト候補のプロセスとスワップイン候補のプロセスとを決定する決定手段と、
前記決定手段による決定に従って、前記スワップアウト候補のプロセスを前記１次記憶装置から前記２次記憶装置にスワップアウトすると共に、それによって空いた前記１次記憶装置の領域に、前記スワップイン候補のプロセスを前記２次記憶装置からスワップインするスワップ処理手段とを有することを特徴とするメモリスワップ管理装置。
【請求項８】
請求項１〜５のいずれか１項に記載のメモリスワップ管理方法をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセスで成るジョブが実行される情報処理装置において１次記憶装置と２次記憶装置とを用いてプロセスの仮想記憶を行うメモリスワップの技術に関する。
【背景技術】
【０００２】
従来、コピー、プリント、ファクシミリ等、多様な機能を有する複合機等の情報処理装置において、仮想記憶方式を採用し、メモリ領域のスワップを制御するメモリスワップ管理手法が知られている。
【０００３】
仮想記憶方式を採用する手法においては、２次記憶装置を利用して、１次記憶装置における実メモリの容量以上のメモリ領域を管理することができる。実メモリ容量以上のメモリ領域を使用する場合は、メモリ領域の内容を一時的に２次記憶装置であるＨＤＤ（ハードディスク）等の記憶領域へ待避（スワップアウト）するスワップ処理を行う。スワップ処理には、実メモリとＨＤＤ間のデータ転送を伴うため、スワップ処理が発生するとそれだけ次のプロセスの実行開始が遅くなる。
【０００４】
そこで、スワップ処理を効率化するための改良として、プロセスのスワップアウト時にページの活性状態に応じて複数ページをまとめてスワップアウトすることで効率化を図るようにした方法が下記特許文献１に開示されている。
【０００５】
また、従来、実メモリから一旦スワップアウトされたプロセスが再び動作する必要が生じた場合に、そのプロセスを実メモリにスワップインするために時間がかかり、レスポンスが悪くなるという問題があった。
【０００６】
その対策の一つとして、次に動作するプロセスのレスポンスを良くするために、次のような試みを検討する余地がある。まず、スワップアウトされた領域の情報をリストで管理する。そして、システムのアイドル時に実メモリに空きがあれば、直近にスワップアウトされたプロセスから順にスワップインしておくことで、次に動作するプロセスのレスポンスを良くする。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平５−８８９８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記特許文献１の方法では、複数回のスワップアウト処理をまとめることで時間は短縮されるが、プロセスの実行時に頻繁にスワップが発生し得るため、プロセス実行開始までの時間の短縮が行えない。
【０００９】
また、上記検討される試みの手法では、最も直近にスワップアウトされたプロセスが次に動作する可能性が常に高いとは限らない。そのため、プロセス動作時に当該プロセスが実メモリに存在せずにスワップ処理が発生してしまい、効率が低下することが十分にあり得る。
【００１０】
ところで、複合機のような情報処理装置においては、汎用ＰＣ（パーソナルコンピュータ）とは異なり、コピー、プリント、ファックス、スキャナ等の機能が、ジョブとして指示により実行される。各ジョブの実行においては、そのジョブを構成するプロセスのみが実行される。従来は、このような、ユーザの使用状況によって特定のプロセスのみが頻繁に実行され得るような環境においても、ユーザの使用状況によってスワップ処理を最適化することは行われていない。そのため、この種の装置においては特に、ジョブ実行直前のスワップ処理発生を抑制してデバイスの処理速度を向上させる上で改善の余地がある。
【００１１】
本発明の目的は、次に実行される可能性が高いプロセスが１次記憶装置に優先的に置かれるようにして、次のプロセス実行開始までの時間を短縮することができるメモリスワップ管理方法、装置およびプログラムを提供することにある。
【課題を解決するための手段】
【００１２】
上記目的を達成するために本発明の請求項１のメモリスワップ管理方法は、少なくとも１つのプロセスで成るジョブが実行される情報処理装置において、１次記憶装置と２次記憶装置とを用いて前記プロセスの仮想記憶を行うメモリスワップ管理方法であって、前記情報処理装置における実行待ちのジョブが複数ある場合にそれらの予定実行順序を記憶する記憶工程と、前記記憶工程により記憶されている前記実行待ちのジョブの予定実行順序と前記１次記憶装置に記憶されているプロセスの種類とに基づいて、スワップアウト候補のプロセスとスワップイン候補のプロセスとを決定する決定工程と、前記決定工程による決定に従って、前記スワップアウト候補のプロセスを前記１次記憶装置から前記２次記憶装置にスワップアウトすると共に、それによって空いた前記１次記憶装置の領域に、前記スワップイン候補のプロセスを前記２次記憶装置からスワップインするスワップ処理工程とを有することを特徴とする。
【００１３】
上記目的を達成するために本発明の請求項４のメモリスワップ管理方法は、少なくとも１つのプロセスで成るジョブが実行される情報処理装置において、１次記憶装置と２次記憶装置とを用いて前記プロセスの仮想記憶を行うメモリスワップ管理方法であって、プロセスの実行実績を記録する記録工程と、前記記録工程において記録されたプロセスの実行実績と、直前に実行されたプロセスの種類とに基づいて、次に実行される可能性を各プロセスについて予測する予測工程と、前記予測工程により予測された可能性に基づいて、スワップアウト候補のプロセスとスワップイン候補のプロセスとを決定する決定工程と、前記決定工程による決定に従って、前記スワップアウト候補のプロセスを前記１次記憶装置から前記２次記憶装置にスワップアウトすると共に、それによって空いた前記１次記憶装置の領域に、前記スワップイン候補のプロセスを前記２次記憶装置からスワップインするスワップ処理工程とを有することを特徴とする。
【発明の効果】
【００１４】
本発明によれば、次に実行されるジョブを構成するプロセスであって次に実行される可能性が高いプロセスが１次記憶装置に優先的に置かれるようにして、次のプロセス実行開始までの時間を短縮することができる。
【００１５】
また、本発明によれば、次に実行される可能性が高いプロセスが１次記憶装置に優先的に置かれるようにして、次のプロセス実行開始までの時間を短縮することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の一実施の形態に係るメモリスワップ管理が適用される情報処理装置である画像入出力装置の構成を示すブロック図である。
【図２】コントローラ部の詳細構成を示すブロック図である。
【図３】画像入出力装置で実行されるプロセスのプロセス名と役割を表すテーブルを示す図である。
【図４】ジョブプロセステーブルを示す図である。
【図５】ジョブキューの一例を示す図である。
【図６】初期状態のプロセス実行履歴テーブルの一例を示す図である。
【図７】更新されたプロセス実行履歴テーブルの一例を示す図である。
【図８】プロセスメモリ管理テーブルの更新前（図（ａ））と更新後（図（ｂ））の例を示す図である。
【図９】スワップ制御の全体処理のフローチャートである。
【図１０】図９のステップＳ９０３で実行される、ジョブキューの内容からスワップ処理対象のプロセスを決定する処理（第１の決定方法）を示すフローチャートである。
【図１１】図９のステップＳ９０４で実行される、プロセス実行履歴テーブルからスワップ処理対象のプロセスを決定する処理（第２の決定方法）のフローチャートである。
【図１２】ジョブキューチェックテーブルを示す図である。
【図１３】プロセス実行頻度テーブル（図（ａ）、（ｃ））、スワップ対象プロセステーブル（図（ｂ）、（ｄ））である。
【図１４】スワップ対象プロセステーブル（図（ａ））、直前にｆａｘ送信ジョブが実行された状態におけるプロセスメモリ管理テーブルの例（図（ｂ））、更新後のプロセスメモリ管理テーブルの例（図（ｃ））を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態を図面を参照して説明する。
【００１８】
《画像入出力装置》
図１は、本発明の一実施の形態に係るメモリスワップ管理が適用される情報処理装置である画像入出力装置の構成を示すブロック図である。
【００１９】
この画像入出力装置１は、イーサネット（登録商標）等のＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）４００にてホストコンピュータ（ＰＣ）３、４に接続されている。画像入出力装置１は、画像データの読み取り処理を行うリーダ部２と、画像データの出力処理を行うプリンタ部６と、コントローラ部１１０とを有する。さらに、画像データや各種機能の表示等を行う液晶パネルを備えた操作部７と、制御プログラムや画像データ等が予め書き込まれたハードディスクドライブ（ＨＤＤ）８、９とを備える。上記各構成要素はコントローラ部１１０に接続され、コントローラ部１１０によって制御される。
【００２０】
リーダ部２は、原稿用紙を搬送する原稿給紙ユニット１０と、原稿画像を光学的に読み取って電気信号としての画像データに変換するスキャナユニット１１とを有する。プリンタ部６は、記録用紙を収容する複数段の給紙カセットを備えた給紙ユニット１２と、画像データを記録用紙に転写、定着するマーキングユニット１３とを備える。プリンタ部６はさらに、印字された記録用紙にソート処理やステイプル処理を施して外部に排出する排紙ユニット１４を備える。
【００２１】
《コントローラ部》
図２は、コントローラ部１１０の詳細構成を示すブロック図である。
【００２２】
コントローラ部１１０は、メインコントローラ３２を備える。メインコントローラ３２は、ＣＰＵ３３と、バスコントローラ３４と、後述する各種コントローラ回路を含む機能ブロックとを内蔵する。
【００２３】
コントローラ部１１０には、ＲＯＭＩ／Ｆ（インターフェイス）３５を介してＲＯＭ３６が接続されると共に、ＤＲＡＭＩ／Ｆ３７を介してＤＲＡＭ３８が接続される。コントローラ部１１０にはさらに、コーデックＩ／Ｆ３９を介してコーデック４０が接続され、また、ネットワークＩ／Ｆ４１を介してネットワークコントローラ４２が接続されている。
【００２４】
ＲＯＭ３６には、メインコントローラ３２のＣＰＵ３３で実行される各種制御プログラムや演算データが格納されている。ＤＲＡＭ３８は、ＣＰＵ３３が動作するための作業領域や画像データを蓄積するための領域として使用される。ＤＲＡＭ３８には、後述する各種のテーブルも記憶される。コーデック４０は、ＤＲＡＭ３８に蓄積されたラスタイメージデータをＭＨ／ＭＲ／ＭＭＲ／ＪＢＩＧ等の周知の圧縮方式で圧縮し、また圧縮されたデータをラスタイメージに伸長する。
【００２５】
コーデック４０にはＳＲＡＭ４３が接続されており、該ＳＲＡＭ４３はコーデック４０の一時的な作業領域として使用される。ネットワークコントローラ４２は、ネットワークコネクタ４４を介してＬＡＮ４００との間で所定の制御動作を行う。また、メインコントローラ３２は、スキャナバス４５を介してスキャナＩ／Ｆ４６に接続されると共に、プリンタバス４７を介してプリンタＩ／Ｆ４８に接続される。
【００２６】
メインコントローラ３２はさらに、ＰＣＩバス等の汎用高速バス４９を介して、拡張ボードを接続するための拡張コネクタ５０および入出力制御部（Ｉ／Ｏ制御部）５１に接続されている。Ｉ／Ｏ制御部５１には、リーダ部２やプリンタ部６との間で制御コマンドを送受信するための調歩同期式のシリアル通信コントローラ５２が２チャンネル装備されている。該シリアル通信コントローラ５２には、Ｉ／Ｏバス５３を介してスキャナＩ／Ｆ４６およびプリンタＩ／Ｆ４８が接続されている。
【００２７】
スキャナＩ／Ｆ４６は、第１の調歩同期シリアルＩ／Ｆ５４および第１のビデオＩ／Ｆ５５を介してスキャナコネクタ５６に接続され、さらに該スキャナコネクタ５６はリーダ部２のスキャナユニット１１（図１）に接続されている。そして、スキャナＩ／Ｆ４６は、スキャナユニット１１から受信した画像データに対し、所望の２値化処理や、主走査方向および／または副走査方向の変倍処理を行う。また、スキャナユニット１１から送られてきたビデオ信号に基づいて制御信号を生成し、それを、スキャナバス４５を介してメインコントローラ３２に転送する。
【００２８】
プリンタＩ／Ｆ４８は、第２の調歩同期シリアルＩ／Ｆ５７および第２のビデオＩ／Ｆ５８を介してプリンタコネクタ５９に接続され、さらに該プリンタコネクタ５９はプリンタ部６のマーキングユニット１３（図１）に接続されている。
【００２９】
そして、プリンタＩ／Ｆ４８は、メインコントローラ３２から出力された画像データにスムージング処理を施して該画像データをマーキングユニット１３に出力する。さらに、マーキングユニット１３から送られたビデオ信号に基づいて、生成された制御信号をプリンタバス４７に出力する。
【００３０】
メインコントローラ３２のＣＰＵ３３は、ＲＯＭ３６からＲＯＭＩ／Ｆ３５を介して読み込まれた制御プログラムに基づいて動作する。例えば、ホストコンピュータ３、４（図１）から受信したＰＤＬ（ページ記述言語）データを解釈し、ラスタイメージデータに展開処理を行う。
【００３１】
また、バスコントローラ３４は、スキャナＩ／Ｆ４６、プリンタＩ／Ｆ４８、その他拡張コネクタ５０等に接続された外部機器から入出力されるデータ転送を制御するものであり、バス競合時のアービトレーション（調停）やＤＭＡデータ転送の制御を行う。例えば、上述したＤＲＡＭ３８とコーデック４０との間のデータ転送や、スキャナユニット１１からＤＲＡＭ３８へのデータ転送、ＤＲＡＭ３８からマーキングユニット１３へのデータ転送等は、バスコントローラ３４によって制御され、ＤＭＡ転送される。
【００３２】
また、Ｉ／Ｏ制御部５１には、ＬＣＤコントローラ６０およびキー入力Ｉ／Ｆ６１を介してパネルＩ／Ｆ６２が接続され、パネルＩ／Ｆ６２には操作部７（図１）が接続されている。Ｉ／Ｏ制御部５１は、不揮発性メモリ領域としての不図示のＥＥＰＲＯＭに接続されている。Ｉ／Ｏ制御部５１はまた、Ｅ−ＩＤＥコネクタ６３を介してハードディスクドライブ（ＨＤＤ）８、９に接続されている。Ｉ／Ｏ制御部５１はさらに、機器内で管理する日付と時刻を更新／保存するリアルタイムクロックモジュール６４に接続されている。リアルタイムクロックモジュール６４は、バックアップ用電池６５に接続されて該バックアップ用電池６５によりバックアップされている。
【００３３】
本実施の形態において、コントローラ部１１０は、メモリスワップ管理装置としての機能を果たす。ＣＰＵ３３は、決定手段、スワップ処理手段、予測手段としての機能を果たす。ＤＲＡＭ３８は、記録手段、記憶手段としての機能を果たす。ハードディスクドライブ（ＨＤＤ）８、９は、記録手段としての機能を果たす。
【００３４】
《プロセスとジョブの関係》
図３は、画像入出力装置１で実行されるプロセスのプロセス名と役割を表すテーブルを示す図である。このテーブル３００に示されるプロセスの１つに「ｎｅｔｗｏｒｋ  ｐｒｏｃｅｓｓ」がある。これは、ネットワークカードのドライバやＴＣＰ／ＩＰプロトコルスタックのようにシステムに常駐するプロセスではなく、ファックスの送受信のためのアプリケーションプログラムである。
【００３５】
以降の説明において、各プロセスの記載につき、「ｐｒｏｃｅｓｓ」を「プロセス」と記したり、「ｐｒｏｃｅｓｓ」自体を省略したりすることがある。
【００３６】
図４は、ジョブプロセステーブルを示す図である。このジョブプロセステーブル４０１は、画像入出力装置１で実行されるジョブと、各ジョブを構成するプロセスのプロセス名と、各ジョブにおいて実行されるプロセスの実行順序とを記述したものである。
【００３７】
ここで、ジョブとは、画像入出力装置１が提供する、スキャンやプリント等の機能を実行する単位であり、各ジョブは、対応する（自身を構成する）プロセスが既定の実行順序で実行されることにより動作する。例えば、ｃｏｐｙジョブではｓｃａｎ、ｐｒｉｎｔ、ｉｍａｇｉｎｇの各プロセスがこの順序で実行される。
【００３８】
図５は、ジョブキューの一例を示す図である。このジョブキュー５００は、画像入出力装置１で実行待ちのジョブと各ジョブを構成するプロセス名とその予定実行順序とを記述した情報である。ジョブキュー５００は、システム開始時（例えば、画像入出力装置１の電源オン時）にＣＰＵ３３によってＤＲＡＭ３８上に作成される（記憶工程）。そして、ホストコンピュータ３、４からのＰＤＬジョブの受信や、ユーザからの操作部７を介するコピー、ファックス等の指示により、ジョブキュー５００に新規なジョブが追加される。ジョブキュー５００は、新規なジョブの追加、ジョブの実行完了によって更新される。
【００３９】
ジョブキュー５００の項目「順序」の列は、対応する実行待ち状態のジョブの、キュー内での順序を表わし、数値が小さいものから順番に実行される。ジョブキュー５００の項目「ジョブキュー」の列は、項目「順序」で表される順番で実行されるジョブのジョブ名を示す。ジョブキュー５００の項目「対応するプロセスの実行順序」の列は、対応するジョブを構成するプロセスの実行順序を示す。
【００４０】
ジョブキュー５００が図５に示すようなものであった場合、まず、項目「順序」が「１」である「ｐｄｌ  ｐｒｉｎｔジョブ」が実行され、それを構成するｐｒｉｎｔ、ｉｍａｇｉｎｇ、ｒｅｎｄｅｒｉｎｇの各プロセスがこの順序で実行される。実行されたジョブはジョブキュー５００から削除され、項目「順序」が「２」である行の内容が、項目「順序」が「１」である行に移動し、同様に各行の内容が、若い番号の側に繰り上がる。そして、順次、ジョブキュー５００が空になるまで項目「順序」が「１」である行のジョブが実行される。
【００４１】
《プロセス実行履歴》
図６に、初期状態におけるプロセス実行履歴テーブルの一例を示す。このプロセス実行履歴テーブル６００は、直前に動作していたプロセスと、その次に動作したプロセスの関係を示すテーブルである。すなわち、プロセスの実行実績を示す情報である。
【００４２】
プロセス実行履歴テーブル６００における左側の列は、「直前に動作していたプロセス」のプロセス名を示し、右側の列は、上記直前に動作したプロセスの次に（すなわち、直後に）動作したプロセスの実行頻度（実行回数）を、頻度値としてプロセス毎に示す。例えば、図６のプロセス実行履歴テーブル６００の１行目を参照すると、ｐｒｉｎｔプロセスの直後に、ｉｍａｇｉｎｇプロセスは１０回動作し、ｒｅｎｄｅｒｉｎｇプロセスは１度も動作せず、ｓｃａｎプロセスは１回動作している。この実行頻度は、直前に実行されたプロセスの次にどのプロセスがどの程度の可能性で実行されるのかを各プロセスについて予測するための情報となる。
【００４３】
プロセス実行履歴テーブル６００の初期値は、コントローラ部１１０のＲＯＭ３６に保存されている。初期値のプロセス実行履歴テーブル６００は、システムの初期状態として「ｃｏｐｙ」、「ｐｄｌ  ｐｒｉｎｔ」のジョブが頻繁に実行されると想定して設定されたものである。システムの初回起動時に、ＣＰＵ３３はＲＯＭＩ／Ｆ３５を介してＲＯＭ３６に保存されたプロセス実行履歴テーブル６００を読み込み、ＤＲＡＭＩ／Ｆ３７を介してＤＲＡＭ３８に展開する。また、システムの終了時に、ＣＰＵ３３はＤＲＡＭＩ／Ｆ３７を介してＤＲＡＭ３８上のプロセス実行履歴テーブル６００を取得する。そして、その値をＥ−ＩＤＥコネクタ６３を介してハードディスクドライブ８、９に保存する（記録工程）。
【００４４】
２回目以降のシステム起動時には、ＣＰＵ３３はハードディスクドライブ８、９に保存されたプロセス実行履歴テーブル６００を読み込むことにより前回までの更新結果を使用する。なお、プロセス実行履歴テーブル６００をハードディスクドライブ８、９に保存することとしたが、コントローラ部１１０に他の保存装置（フラッシュメモリ等）が備えられていれば、それを使用するようにしてもよい。
【００４５】
プロセス実行履歴テーブル６００は、ジョブの実行に伴って更新される。例えば、ｃｏｐｙ→ｆａｘ送信→ｓｃａｎ→ｆａｘ送信というジョブシーケンスが高い頻度で使用される環境を想定する。当該想定したのと同じジョブシーケンスを繰り返し、更新されたプロセス実行履歴テーブル６００の一例を図７に示す。
【００４６】
図７に例示する、更新されたプロセス実行履歴テーブル６００の１行目を参照すると、上記のジョブシーケンスを繰り返したことによって、ｐｒｉｎｔプロセスの直後におけるｉｍａｇｉｎｇプロセスの頻度値は１７回に増えている。これは、上記のジョブシーケンスに限れば、ｐｒｉｎｔプロセスはｃｏｐｙジョブにしか含まれず、しかも、ｃｏｐｙジョブにおいて、ｐｒｉｎｔプロセスの直後にはｉｍａｇｉｎｇプロセスが実行されるからである。
【００４７】
プロセス実行履歴テーブル６００の更新は以下のようにして行われる。あるプロセスが今回実行されたら、ＣＰＵ３３は、ＤＲＡＭ３８に記憶されているプロセス実行履歴テーブル６００において、直前に実行されていたプロセスの行を特定する。そして、特定した行における、上記今回実行されたプロセスの頻度値を「１」だけ増加させる。例えば、ｉｍａｇｉｎｇプロセスが今回実行されたとして、直前にはｐｒｉｎｔプロセスが実行されていたとすると、ｐｒｉｎｔプロセスの行におけるｉｍａｇｉｎｇプロセスの値が「１」だけ増加する。
【００４８】
また、この操作に加えて、頻度値を増加させた項目が属する行の中で、増加させることとなった元の頻度値が最大値でなかった場合は、ＣＰＵ３３は、その行で値が最大となっているプロセスの頻度値を「１」だけ減少させる。これにより予測が外れたことを反映させる。例えば、図７に示すプロセス実行履歴テーブル６００で例示すると、ｓｃａｎプロセスが今回実行されたとして、直前にはｐｒｉｎｔプロセスが実行されていたとする。この場合、ｐｒｉｎｔプロセスの行におけるｓｃａｎプロセスの頻度値が「１」だけ増加すると共に、頻度値が最大（１７）であるｉｍａｇｉｎｇプロセスの頻度値が「１」だけ減少する。
【００４９】
《プロセス実行履歴に基づくスワップ処理》
プロセス実行履歴テーブル６００に基づいて、次に実行される可能性が高いプロセスをスワップインするためには、スワップ処理したメモリ領域とプロセスを関連付けて管理する必要がある。
【００５０】
本実施の形態では、プロセスの仮想記憶を行う上で、ＤＲＡＭ３８が１次記憶装置として機能し、プロセスがスワップインされ記憶される「実メモリ」を提供する。一方、ハードディスクドライブ８、９が、２次記憶装置として機能し、プロセスのスワップアウト先の記憶領域を提供する。ただし、これらは例示であり、アクセスの速い方の記憶装置を１次記憶装置として、他の種類の記憶装置を適用してもよい。
【００５１】
図８（ａ）は、プロセスメモリ管理テーブルの例を示す。このプロセスメモリ管理テーブル８００は、プロセスと関連する仮想アドレス、実アドレス等の関係を示す情報である。図８（ｂ）は、図８（ａ）のプロセスメモリ管理テーブルを更新した場合の一例を示し、詳細は後述する。
【００５２】
本実施の形態では、理解を簡単にするため、各プロセスには１ページのメモリ領域のみが割り当てられると仮定する。また、実メモリは２ページ分、スワップファイルは３ページ分と仮定する。ただし、これらの設定値は例示であり、限定されるものではない。
【００５３】
プロセスが実行されると、ＣＰＵ３３は、対応するメモリ領域の仮想アドレスを割り当て、プロセスメモリ管理テーブル８００の“仮想アドレス”の列に記入する。次に実メモリの割り当てが行われる。ＣＰＵ３３は、実メモリに空きがあれば“対応する実アドレス”の列に“あり”を記入し、“情報”の列に実アドレスの値を記入する。実メモリに空きがない場合、ＣＰＵ３３は、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔ  Ｕｓｅｄ）アルゴリズム等に基づき、必要性の低いメモリ領域の内容をＨＤＤ８またはＨＤＤ９にスワップアウトし、それによって空いた実メモリのアドレスへの割り当てを行う。
【００５４】
ＣＰＵ３３は、ＨＤＤ８、９にスワップアウトしたプロセスについては“対応する実アドレス”の列に“なし”を記入し、“情報”の列にスワップファイル内の「セグメントＩＤ＃」を記入する。
【００５５】
プロセスメモリ管理テーブル８００の“優先度”の列は、同一プロセスに属するページの優先度を示し、値が小さい程、優先度が高いことを示す。ＣＰＵ３３は、スワップインする時に実メモリの空きサイズに応じて優先度順にページをスワップインする。例えば、プロセスの処理開始時に必要になるページに高い優先度を与えることで、プロセス処理開始時に当該ページが実メモリに存在している確率を高くすることができる。本実施の形態では、１プロセス＝１ページを仮定しているので、優先度は全て「１」となっている。
【００５６】
以下に、次に実行される可能性が高いプロセスを予測してスワップ処理を行う方法を、図９〜１１のフローチャートを参照して説明する。
【００５７】
図９は、スワップ制御の全体処理のフローチャートである。
【００５８】
ＣＰＵ３３は、図９のメモリスワップ処理を開始すると、まず、ステップＳ９０１で、現在実行中のプロセスが存在するか否かを判定する。実行中のプロセスが存在する場合は、プロセスが終了するのを待つ。実行中のプロセスが無い場合はステップＳ９０２に進む。従って、システムのアイドリング時に、ステップＳＳ９０２以降の処理が実行される。
【００５９】
ステップＳ９０２で、ＣＰＵ３３は、ＤＲＡＭ３８内のジョブキュー５００（図５）に実行待ちジョブが有るか否かを判定する。実行待ちジョブがある場合はステップＳ９０３に進む一方、実行待ちジョブが無い場合（ジョブキューが空の場合）はステップＳ９０４に進む。
【００６０】
ステップＳ９０３では、ＣＰＵ３３は、ジョブキュー５００の内容から、スワップインするプロセスとスワップアウトするプロセスとを決定する（決定工程）。ここでのプロセスの決定方法（第１の決定方法と称する）は、図５、図１０、図１２、図１４を用いて後述する。
【００６１】
ステップＳ９０４では、ＣＰＵ３３は、プロセス実行履歴テーブル６００の内容から、スワップインするプロセスとスワップアウトするプロセスとを決定する（決定工程）。ここでのプロセスの決定方法（第２の決定方法と称する）は、図６、図７、図１１、図１３を用いて後述する。
【００６２】
《スワップ処理対象プロセス決定後の処理》
ステップＳ９０３またはステップＳ９０４でスワップ処理対象プロセスが決定されると、ステップＳ９０５に進む。ステップＳ９０５では、ＣＰＵ３３は、スワップ処理を実行する（スワップ処理工程）。これは、ＤＲＡＭ３８内のスワップ対象プロセステーブル１３０１（図１３（ｂ）、（ｄ）、図１４（ａ）参照）およびプロセスメモリ管理テーブル８００（図８（ａ）、図１４（ｂ）参照）を用いて実行される。
【００６３】
図１３（ａ）は、直前に実行されたプロセスがｓｃａｎである場合において、図６に示すプロセス実行履歴テーブル６００に基づき作成されたプロセス実行頻度テーブルである。このプロセス実行頻度テーブル１３００に基づいて、後述する図１１の処理によって、図１３（ｂ）に示すスワップ対象プロセステーブル１３０１が作成される。図１３（ｃ）、（ｄ）は、直前に実行されたプロセスがｓｃａｎである場合において、基づくプロセス実行履歴テーブル６００の内容が図１３（ａ）、（ｂ）とは異なっている場合を例示したものである。すなわち、図１３（ｃ）は、図１３（ａ）と同様に、直前に実行されたプロセスがｓｃａｎである場合において、図７に示すプロセス実行履歴テーブル６００に基づき作成されたプロセス実行頻度テーブル１３００である。このプロセス実行頻度テーブル１３００に基づいて、図１３（ｄ）に示すスワップ対象プロセステーブル１３０１が作成される。
【００６４】
図９に戻り、前記ステップＳ９０５のスワップ処理では次のような処理が行われる。まず、スワップ対象プロセステーブル１３０１（図１３（ｂ）を例にとって説明する）のスワップアウト候補として決定されているプロセスはｉｍａｇｉｎｇである。ＣＰＵ３３は、このプロセスが実メモリにある（記憶されている）か否かを確認する。すなわち、プロセスメモリ管理テーブル８００（図８（ａ）を例にとって説明する）において、ｉｍａｇｉｎｇにおける、「対応する実アドレス」が「あり」であるか否かを判別する。
【００６５】
そして、ｉｍａｇｉｎｇが実メモリになかった場合は、何も行わない。図８（ａ）に示す例では、ｉｍａｇｉｎｇは実メモリにあるので、ｉｍａｇｉｎｇのスワップアウト処理を行い、プロセスメモリ管理テーブル８００を更新する。
【００６６】
具体的には、ｉｍａｇｉｎｇを実メモリからＨＤＤ８、９にスワップアウトする。それと並行して、プロセスメモリ管理テーブル８００のｉｍａｇｉｎｇ  ｐｒｏｃｅｓｓの行の「対応する実アドレス」の項目に「なし」を記入する。さらに、「情報」の項目に、スワップアウト先のハードディスクドライブ８、９上のセグメントＩＤ＃４を記入する。
【００６７】
ｉｍａｇｉｎｇのスワップアウト処理を行った場合においては、次に、スワップ対象プロセステーブル１３０１（図１３（ｂ））のスワップイン候補として決定されているプロセスであるｐｒｉｎｔが実メモリにあるか否かを確認する。これは、プロセスメモリ管理テーブル８００（図８（ａ））において確認する。
【００６８】
そして、ｐｒｉｎｔが既に実メモリにあれば何も行わない。図８（ａ）に示す例では、ｐｒｉｎｔが実メモリに無いので、ｉｍａｇｉｎｇをスワップアウトして空いた実メモリの領域にＨＤＤ８、９からｐｒｉｎｔをスワップインすると共に、プロセスメモリ管理テーブル８００を更新し、ステップＳ９０６に進む。
【００６９】
具体的には、プロセスメモリ管理テーブル８００（図８（ａ））において、ｐｒｉｎｔ  ｐｒｏｃｅｓｓの行の「対応する実アドレス」の項目に「あり」を記入する。それと共に、「情報」の項目に、ｉｍａｇｉｎｇ  ｐｒｏｃｅｓｓのあった実アドレスである「０ｘ１０００」を記入する。
【００７０】
こうしてプロセスメモリ管理テーブル８００が更新され、図８（ｂ）に示すような内容となる。
【００７１】
続くステップＳ９０６〜Ｓ９０９では、実行されたプロセスに応じてプロセス実行履歴テーブル６００を更新するための処理がなされる。
【００７２】
まず、ステップＳ９０６では、ＣＰＵ３３は、プロセス実行開始を監視し、プロセスが実行開始したらステップＳ９０７に進む。ステップＳ９０７では、ＣＰＵ３３は、実際に実行開始したプロセスの種類を元にプロセス実行履歴テーブル６００を更新する。
【００７３】
ここで、通常、プロセス実行履歴テーブル６００については、最新のものを用いることになるが、ここでの説明に限り、今回のステップＳ９０７の処理において、初期状態である図６のものを用いると仮定する。一例として、直前に実行されたプロセスがｓｃａｎであったとする。ステップＳ９０５の後に実行されるジョブがｆａｘ送信ジョブであった場合を例にとると、前記ステップＳ９０６で実行開始が判断されるプロセスは、ｆａｘ送信ジョブを構成する筆頭のプロセスであるｓｃａｎプロセスとなる。
【００７４】
この場合は、ＣＰＵ３３は、プロセス実行履歴テーブル６００（図６）におけるｓｃａｎの行において、右列のｓｃａｎの頻度値「１」に「１」だけ加算して「２」とすることで更新し、ステップＳ９０８に進む。
【００７５】
ステップＳ９０８では、ＣＰＵ３３は、上記実行開始したプロセス（ｓｃａｎ）が、プロセス実行履歴テーブル６００（図６）における、直前に実行されていたプロセス（ｓｃａｎ）の行における最大頻度値を有するプロセスか否かを判別する。
【００７６】
図６の例では、プロセス実行履歴テーブル６００において、直前に実行されていたプロセス（ｓｃａｎ）の行の最大頻度値を有するプロセスは、頻度値が１０であるｐｒｉｎｔであり、上記実行開始したプロセス（ｓｃａｎ）と異なる。そのため、ステップＳ９０９に進む。両プロセスが一致する場合は、前記ステップＳ９０９を実行することなく本処理を終了する。
【００７７】
ステップＳ９０９では、ＣＰＵ３３は、プロセス実行履歴テーブル６００（図６）の右列の最大頻度値を有するプロセス（ｐｒｉｎｔ）の値１０を「１」減らして「９」とすることで更新し、本処理を終了する。
【００７８】
前記ステップＳ９０５〜Ｓ９０９の処理内容は、当該処理開始時のプロセス実行履歴テーブル６００の内容と、ステップＳ９０５で実行開始が判断されたプロセスとによって異なる。仮に、上記したように、ｃｏｐｙ→ｆａｘ送信→ｓｃａｎ→ｆａｘ送信というジョブシーケンスが高い頻度で繰り返されたとすると、プロセス実行履歴テーブル６００は、更新により、やがて図７に示した内容に近づいていく。
【００７９】
プロセス実行履歴テーブル６００は、直前に実行されたプロセスから、次に実行されるプロセスが何であるかを予測するための情報となる。例えば、上記したジョブシーケンスが高い頻度で繰り返される場合を考察する。ジョブプロセステーブル４０１（図４）から、次のことがわかる。すなわち、ｓｃａｎプロセスの後には、ｐｒｉｎｔ（ｃｏｐｙジョブの場合）、ｓｃａｎ（ｓｃａｎジョブ→ｆａｘ送信ジョブの場合）、ｎｅｔｗｏｒｋ（ｆａｘ送信ジョブの場合）のプロセスが高い頻度で実行されることがわかる。
【００８０】
このため、ｓｃａｎプロセスの行に着目すると、図６のプロセス実行履歴テーブル６００では、ｐｒｉｎｔの頻度が高いのに対し、図７のプロセス実行履歴テーブル６００では、ｓｃａｎ、ｎｅｔｗｏｒｋの頻度が高くなっている。
【００８１】
このことから、プロセス実行履歴テーブル６００が図７に示すものとなっている環境では、ジョブでいえば、ｓｃａｎジョブの後には、ｓｃａｎ、ｎｅｔｗｏｒｋのプロセスを使用する「ｆａｘ送信ジョブ」が実行される可能性が高いことが予測される。
【００８２】
以下に、前記ステップＳ９０３、Ｓ９０４でのスワップイン／アウト対象の決定について詳細に説明する。
【００８３】
《ジョブキューからのスワップイン／アウト対象の決定（第１の決定方法）》
図１０は、図９のステップＳ９０３で実行される、ジョブキュー５００（図５）の内容からスワップ処理対象のプロセスを決定する処理（第１の決定方法）を示すフローチャートである。
【００８４】
図１２は、ジョブキューチェックテーブルを示す図である。このジョブキューチェックテーブル１２００は、図１０の処理によって、ジョブキュー５００の内容から作成される。ジョブキューチェックテーブル１２００において、各ジョブ名に対して、各ジョブを構成するプロセスの実行順序と、各ジョブの出現順が設定される。
【００８５】
図１０の処理開始にあたって、ＣＰＵ３３は、ＤＲＡＭ３８にジョブキューチェックテーブル１２００を作成し、該ジョブキューチェックテーブル１２００における全ジョブの「出現順」の項目を未設定（空白）に初期化する。
【００８６】
ステップＳ１００１では、ＣＰＵ３３は、変数Ｃｏｕｎｔにジョブキュー５００内のジョブ数（図５の例では「７」）を設定すると共に、変数ｉ、ｊに「１」を、変数Ｐａｇｅｓに実メモリ上のページ数（本実施の形態では「２」）をそれぞれ設定する。続くステップＳ１００２で、ＣＰＵ３３は、ジョブキュー５００（図５）のｉ番目のジョブ名に対応する、ジョブキューチェックテーブル１２００におけるジョブ名の出現順の欄が未設定（空白）か否かを判定する。そして、出現順の欄が未設定の場合は、ステップＳ１００３に進み、未設定でない場合はステップＳ１００７に進む。ステップＳ１００７では、ＣＰＵ３３は、変数ｉを「１」増やしてステップＳ１００２に進む。
【００８７】
例えば、ｉ＝１の場合、図５の１番目のジョブがｐｄｌ  ｐｒｉｎｔである。この場合、図１２のｐｄｌ  ｐｒｉｎｔの行の出現順が「１」であって未設定ではないので、ステップＳ１００７に進む。これにより、既に値が設定されている出現順は、その値が維持されることになる。
【００８８】
ステップＳ１００３では、ＣＰＵ３３は、ジョブキュー５００のｉ番目のジョブ名に対応する、ジョブキューチェックテーブル１２００におけるジョブ名の出現順の欄に変数ｊの値を記入すると共に、変数ｊを「１」増やして、ステップＳ１００４に進む。ステップＳ１００４では、ＣＰＵ３３は、変数ｉが変数Ｃｏｕｎｔに等しいか否かを判別する。その判別の結果、変数ｉが変数Ｃｏｕｎｔに等しい場合はステップＳ１００５に進む一方、等しくない場合はステップＳ１００７に進む。
【００８９】
従って、ステップＳ１００１〜Ｓ１００４の処理によれば、ジョブキューチェックテーブル１２００（図１２）において、ジョブキュー５００（図５）で規定される実行順番に従って、「１」、「２」・・・という順で各ジョブに番号が付与されていく。その際、各ジョブの「出現順」に、順番が先頭のジョブから「１」が付与されていく。ただし、２度目に登場する場合は、既に設定されている出現順が維持される。ジョブキュー５００にないジョブについては、出現順は未設定のままとなる。
【００９０】
ステップＳ１００５では、ＣＰＵ３３は、ジョブキューチェックテーブル１２００における出現順が「１」であるジョブから順に、当該ジョブ（図１２の例ではｐｄｌ  ｐｒｉｎｔ）を構成しているプロセスを、スワップイン候補として決定する。すなわち、実行順序で規定される優先順位で、最大Ｐａｇｅｓ個（ここでは２個）分、スワップイン候補として決定する。同じジョブ内では、より早く実行されるプロセスの優先順位を高くする。出現順が「１」であるジョブだけでは最大Ｐａｇｅｓ個に満たない場合は、次に出現順が「２」のジョブのプロセスが対象とされる。
【００９１】
このようにして、ジョブキューチェックテーブル１２００から、図１４（ａ）に示すスワップ対象プロセステーブル１３０１が作成される。ここではまず、スワップイン候補として、ｐｄｌ  ｐｒｉｎｔジョブを構成しているｐｒｉｎｔプロセス、ｉｍａｇｉｎｇプロセスがスワップ対象プロセステーブル１３０１に設定される。
【００９２】
なお、ここで、スワップイン候補が既に実メモリにあるものと同じである場合は、この候補に代えて、優先順位が次である、すなわち、次に早く実行されるプロセスを、スワップイン候補として決定するようにしてもよい。仮に、直前にｆａｘ送信ジョブが実行されていたと仮定すると、実メモリにはｓｃａｎ、ｎｅｔｗｏｒｋのプロセスがあったことになる。この場合、実メモリの内容とｐｄｌ  ｐｒｉｎｔに対応するプロセスは全て異なっているのでｐｒｉｎｔ、ｉｍａｇｉｎｇがスワップイン候補に決定される。
【００９３】
次に、ステップＳ１００６では、ＣＰＵ３３は、まず、ジョブキューチェックテーブル１２００の出現順が未設定のジョブがあれば該ジョブを構成するプロセスをスワップアウト候補とする。すなわち、上記決定したスワップイン候補と同じ数だけスワップアウト候補を決定する。
【００９４】
このとき、ジョブを構成するプロセスのうち、より遅く実行されるプロセスの優先順位を高くする。ただし、出現順が未設定のジョブがない場合や、出現順が未設定であるジョブだけではスワップイン候補と同じ数に満たない場合は、出現順の値が最も大きいジョブを構成するプロセスをスワップアウト候補とする。
【００９５】
すなわち、ＣＰＵ３３はジョブキューチェックテーブル１２００の出現順が大きい方から順に、そのジョブの行について同様の処理を行う。そして、ステップＳ１００５でスワップイン候補となったプロセスと同じ数のプロセスがスワップアウト候補になるまで当該処理を繰り返す。
【００９６】
ここで、出現順が未設定のジョブが２以上存在する場合、あるいは、出現順が最大値であるジョブが２以上存在する場合に、対象候補選定においていずれのジョブを優先するかを、デフォルトで決めておくのがよい。
【００９７】
なお、一旦決定したスワップアウト候補に前記ステップＳ１００５で決定したスワップイン候補が含まれる場合は、当該スワップアウト候補を対象から除外するようにしてもよい。例えば、ジョブキューチェックテーブル１２００が図１２に示すようなものであった場合は、次のようになる。すなわち、出現順が未設定のｆａｘ受信を構成するｎｅｔｗｏｒｋ、ｐｒｉｎｔプロセスのうち、スワップイン候補となっているｐｒｉｎｔを除外してｎｅｔｗｏｒｋが先に候補とされる。
【００９８】
さらに、スワップイン候補となっているプロセスをスワップアウト候補の対象から除外する場合において、優先順位が次であるプロセスをスワップアウト候補として追加決定するようにしてもよい。例えば、ジョブキューチェックテーブル１２００が図１２に示すようなものであった場合は、出現順が「４」であるｓｃａｎジョブのｓｃａｎプロセスがスワップアウト候補に追加される。その結果、スワップアウト候補として、ｎｅｔｗｏｒｋ、ｓｃａｎが決定される。
【００９９】
このようにして、スワップインアウト候補として、ｎｅｔｗｏｒｋ、ｓｃａｎプロセスが、図１４（ａ）に示すスワップ対象プロセステーブル１３０１において設定される。
【０１００】
図１４（ｂ）は、直前にｆａｘ送信ジョブが実行された状態におけるプロセスメモリ管理テーブルの例を示す。図１４（ｃ）は、図１４（ｂ）のプロセスメモリ管理テーブルを、図１４（ａ）に示すスワップ対象プロセステーブル１３０１に基づき更新したものを示す。すなわち、図９のステップＳ９０５において、スワップアウト候補であるｎｅｔｗｏｒｋ、ｓｃａｎプロセスがスワップアウトされる。そして、それによって空いた実メモリの領域に、スワップイン候補となっているｐｒｉｎｔ、ｉｍａｇｉｎｇがスワップインされる。
【０１０１】
直前にｆａｘ送信ジョブが実行された状態において、次に実行予定となっているジョブがｐｄｌ  ｐｒｉｎｔである場合（図５、図１２参照）を考える。ｐｄｌ  ｐｒｉｎｔジョブを構成するプロセスであるｐｒｉｎｔ、ｉｍａｇｉｎｇは、図９のステップＳ９０５のスワップ処理によって既に実メモリに存在している。そのため、ｐｄｌ  ｐｒｉｎｔジョブの実行開始にあたって新たなスワップ処理は発生せず、直ちに次のプロセス（ｐｒｉｎｔ）の実行を開始することができる。
【０１０２】
《プロセス実行履歴テーブルからのスワップイン／アウト対象の決定（第２の決定方法）》
図１１は、図９のステップＳ９０４で実行される、プロセス実行履歴テーブル６００からスワップ処理対象のプロセスを決定する処理（第２の決定方法）のフローチャートである。
【０１０３】
まず、ステップＳ１１０１で、ＣＰＵ３３は、ＤＲＡＭ３８内のプロセス実行履歴テーブル６００から、プロセス実行頻度テーブル１３００（図１３（ａ））を作成する（予測工程）。すなわち、プロセス実行履歴テーブル６００（図６）において、直前に動作していたプロセスの行において、「次に動作したプロセス」を、実行頻度が高い順に左から並べ替える。
【０１０４】
例えば、直前に実行されたプロセスがｓｃａｎである場合において、図６に示すプロセス実行履歴テーブル６００では、ｓｃａｎの行に着目すると、ｐｒｉｎｔ、ｎｅｔｗｏｒｋ、ｓｃａｎの順に実行頻度が高い。実行頻度が同じプロセス同士の並び替え時の順位は、デフォルトで設定されている。例えば、ｒｅｎｄｅｒｉｎｇの実行頻度は、ｉｍａｇｉｎｇと同じ「０」であるが、一例として、デフォルトの設定によって、ｒｅｎｄｅｒｉｎｇの方が並び替え時の優先順位が高くなっている。
【０１０５】
このようにして作成されたものが、上記した図１３（ａ）に示すプロセス実行頻度テーブル１３００である。ちなみに、図７に示すプロセス実行履歴テーブル６００に基づき作成されたものが、上記した図１３（ｃ）に示すプロセス実行頻度テーブル１３００である。その後、ステップＳ１１０２に進む。
【０１０６】
本処理における以降の説明では、直前にｓｃａｎプロセスが実行され、図６に示すプロセス実行履歴テーブル６００に基づきプロセス実行頻度テーブル１３００を作成する場合を例にとる。
【０１０７】
ステップＳ１１０２では、ＣＰＵ３３は、変数Ｃｏｕｎｔにプロセス実行頻度テーブル１３００において設定されるプロセス数（本例では「５」）を設定する。さらに、変数ｉに「１」を、設定値であるＭＡＸに実メモリに格納可能なページ数（本例では「２」）を、それぞれ設定する。そして、ステップＳ１１０３に進む。ステップＳ１１０３では、ＣＰＵ３３は、変数ｉが変数Ｃｏｕｎｔと等しいか否かを判別する。その判別の結果、両者が等しい場合はステップＳ１１０７に進む一方、両者が異なる場合はステップＳ１１０４に進む。
【０１０８】
ステップＳ１１０４では、ＣＰＵ３３は、プロセス実行頻度テーブル１３００（図１３（ａ））のｉ列目のプロセスを、スワップ対象プロセステーブル１３０１（図１３（ｂ）参照）のスワップイン候補に追加し、ステップＳ１１０５に進む。例えば、ｉ＝１の場合は、図１３（ａ）における左から１番目のｐｒｉｎｔをスワップイン候補に追加する。
【０１０９】
ところで、ステップＳ１１０４でスワップイン候補にプロセスに追加する場合、プロセス実行頻度テーブル１３００において、当該追加しようとするプロセスの「頻度」の値（頻度値）と、頻度値が次に大きいプロセスの頻度値とを比較する。そして、両者の頻度値の差が規定値（本実施例では例えば、「５」とするがこれに限られない）を超える場合は、当該追加しようとするプロセスより後にはスワップイン候補としての追加を行わない。これは、次に実行される可能性の低いプロセスがスワップインされることで不要なスワップ処理が行われるのを避けるためである。
【０１１０】
図１３（ａ）に示すプロセス実行頻度テーブル１３００である場合、追加しようとするプロセスｐｒｉｎｔと、頻度値が次に大きいプロセスｎｅｔｗｏｒｋとの頻度値の差は「８」で、規定値を超える。従って、ｎｅｔｗｏｒｋ以降のプロセスは対象とならず、スワップ対象プロセステーブル１３０１のスワップイン候補にはｐｒｉｎｔのみが追加されることになる。この場合、処理は、ステップＳ１１０４からステップＳ１１０７に移行する。
【０１１１】
ステップ１１０５では、ＣＰＵ３３は、スワップ対象プロセステーブル１３０１に設定されたスワップイン候補のプロセスの数がＭＡＸ（＝２）に等しいか否かを判別する。その判別の結果、スワップイン候補のプロセスの数がＭＡＸに等しい場合はステップＳ１１０７に進む一方、等しくない場合はステップＳ１１０６で変数ｉを「１」増やして、前記ステップＳ１１０３に進む。従って、上記頻度値の差が規定値を超えない限り、スワップイン候補のプロセスの数がＭＡＸになるまでスワップイン候補が追加される。
【０１１２】
ステップＳ１１０７では、ＣＰＵ３３は、変数Ｃｏｕｎｔにプロセス実行頻度テーブル１３００内のプロセス数（本例では「５」）を設定する。さらに、変数ｉに変数Ｃｏｕｎｔの値（本例では「５」）を、ＭＡＸにスワップ対象プロセステーブル１３０１のスワップイン候補のプロセスの数（本例では「５」）をそれぞれ設定する。そして、ステップＳ１１０８に進む。
【０１１３】
ステップＳ１１０８では、ＣＰＵ３３は、変数ｉが「１」と等しいか否かを判別する。その判別の結果、変数ｉが「１」と等しい場合は本処理を終了する一方、等しくない場合はステップＳ１１０９に進む。
【０１１４】
ステップＳ１１０９では、ＣＰＵ３３は、プロセス実行頻度テーブル１３００のｉ列目のプロセス（ｉ＝５の場合、右側から１番目のｉｍａｇｉｎｇ）を、スワップ対象プロセステーブル１３０１（図１３（ｂ））のスワップアウト候補に追加する。そして、ステップＳ１１１０に進む。
【０１１５】
ステップＳ１１１０では、ＣＰＵ３３は、スワップ対象プロセステーブル１３０１のスワップイン候補のプロセスの数がＭＡＸに等しいか否かを判別する。その判別の結果、スワップイン候補のプロセスの数がＭＡＸに等しい場合は本処理を終了する一方、等しくない場合はステップＳ１１１１で変数ｉを「１」減らして、前記ステップＳ１１０８に進む。
【０１１６】
図１３（ｂ）の例では、スワップイン候補のプロセスの数がｐｒｉｎｔの１つだけであったので、スワップアウト候補は、ｉｍａｇｉｎｇの１つだけとなる。図１１の処理を終了するときにスワップ対象プロセステーブル１３０１に設定されているプロセスが、スワップイン／アウトの候補となる。
【０１１７】
ちなみに、直前にｓｃａｎプロセスが実行され、図７に示すプロセス実行履歴テーブル６００に基づきプロセス実行頻度テーブル１３００を作成する場合を考えると、前記ステップＳ１１０３〜Ｓ１１０６、Ｓ１１０７〜Ｓ１１１１の処理は次のようになる。
【０１１８】
前記ステップＳ１１０３〜Ｓ１１０６では、図１３（ｃ）に示すプロセス実行頻度テーブル１３００を参照すると、プロセスｓｃａｎを追加しようとする際に、ｓｃａｎと、頻度値が次に大きいプロセスｎｅｔｗｏｒｋとで、頻度値の差は「０」である。従って、頻度値の差は規定値を超えない。この場合は、図１３（ｄ）に示すように、ｓｃａｎプロセスに加えてｎｅｔｗｏｒｋプロセスもスワップイン候補として追加されることになる。
【０１１９】
また、前記ステップＳ１１０７〜Ｓ１１１１では、スワップイン候補が２個であるので、プロセス実行頻度テーブル１３００の右から２番目までのプロセスであるｉｍａｇｉｎｇ、ｒｅｎｄｅｒｉｎｇが、スワップアウト候補に追加される（図１３（ｄ））。
【０１２０】
《プロセス実行履歴テーブル更新の効果》
実メモリにｓｃａｎ、ｉｍａｇｉｎｇプロセスが存在し、直前にｓｃａｎジョブが実行された状態を仮定する。この状態で、プロセス実行履歴テーブル６００（図６、図７）を更新し、次に実行されるプロセスを予測して、スワップ処理をするようにしたことで、次のような効果を生じる。
【０１２１】
まず、初期状態のプロセス実行履歴テーブル６００（図６）に基づきスワップ処理（図９のステップＳ９０４、Ｓ９０５、図１１）がされた場合を考える。この場合は、実メモリにはｓｃａｎ、ｐｒｉｎｔプロセスが置かれることになる（図１３（ａ）、（ｂ）、図８（ｂ））。仮に、この状態で次にｆａｘ送信ジョブが実行されるとすると、ｓｃａｎ、ｎｅｔｗｏｒｋプロセスが実行されることになる。
【０１２２】
しかし、ｎｅｔｗｏｒｋプロセスのメモリが実メモリに存在しないため、実際には、ｎｅｔｗｏｒｋプロセスをスワップインするためのスワップ処理が発生する。従って、プロセス実行開始までに時間がかかる。図６のプロセス実行履歴テーブル６００では、未だ、使用継続によるプロセスの実行実績が次の実行プロセスの予測に反映されないからである。
【０１２３】
一方、プロセス実行履歴テーブル６００（図７）に基づきスワップ処理（図９のステップＳ９０４、Ｓ９０５、図１１）がされた場合を考える。この場合は、実メモリにはｓｃａｎ、ｎｅｔｗｏｒｋプロセスが置かれることになる（図１３（ｃ）、（ｄ））。仮に、この状態で次にｆａｘ送信ジョブが実行されるとすると、ｓｃａｎ、ｎｅｔｗｏｒｋプロセスが実行されることになる。しかし、これらのプロセスは、既に実メモリに存在するため、新たなスワップ処理は発生せず、直ちに次のプロセスの実行を開始することができる。
【０１２４】
本実施の形態によれば、実行待ちのジョブキューがある場合は、ジョブキュー５００（図５）に記憶されている実行待ちジョブの予定実行順序と実メモリに記憶されているプロセスの種類とに基づいて、スワップアウト／イン候補のプロセスが決定される。これらは主に、図１０のステップＳ１００５、Ｓ１００６、図１２、図１４（ａ）に示される（第１の決定方法）。
【０１２５】
これにより、次に実行されるジョブを構成するプロセスであって次に実行される可能性が高いプロセスが、１次記憶装置であるＤＲＡＭ３８の実メモリに優先的に置かれるようにすることができる。
【０１２６】
一方、実行待ちのジョブキューがない場合は、プロセスの実行実績であるプロセス実行履歴テーブル６００（図７）と、直前に実行されたプロセスの種類とに基づいて、次に実行される可能性を各プロセスについて予測する（図１３（ａ）、（ｃ））。そして、予測された可能性に基づいて、スワップアウト／イン候補のプロセスを決定する（第２の決定方法）（図１１、図１３（ｂ）、（ｄ））。
【０１２７】
これにより、次に実行される可能性が高いプロセスがＤＲＡＭ３８の実メモリに優先的に置かれるようにすることができる。
【０１２８】
そして、上記第１、第２の決定方法のいずれが採用された場合でも、上記決定に従って、スワップアウト候補のプロセスが実メモリからＨＤＤ８、９にスワップアウトされる。さらに、それによって空いた実メモリの領域に、スワップイン候補のプロセスがハードディスクドライブ８、９からスワップインされる（図９のステップＳ９０５）。
【０１２９】
よって、本実施の形態によれば、次のプロセス実行開始までの時間を短縮することができる。すなわち、ジョブ実行直前のスワップ処理発生を抑制してデバイスの処理速度を向上させることができる。特に、スワップ処理が、アイドリング時に行われることで、次のジョブ実行直前にスワップが生じにくくなっている。
【０１３０】
なお、情報処理装置として画像入出力装置１を示したがこれは一例である。すなわち、プロセスで成るジョブが指示に応じて実行され、１次記憶装置と２次記憶装置とを用いてプロセスの仮想記憶を行うメモリスワップ管理方法が適用される情報処理装置であれば、本発明を適用可能である。従って、情報処理装置が備える機能は問わない。
【０１３１】
また、本発明の目的は、以下の処理を実行することによって達成される。即ち、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）が記憶媒体に格納されたプログラムコードを読み出す処理である。
【０１３２】
この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施の形態の機能を実現することになり、そのプログラムコードおよび該プログラムコードを記憶した記憶媒体は本発明を構成することになる。
【０１３３】
また、プログラムコードを供給するための記憶媒体としては、次のものを用いることができる。例えば、フロッピー（登録商標）ディスク、ハードディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＤＶＤ−ＲＷ、ＤＶＤ＋ＲＷ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等である。または、プログラムコードをネットワークを介してダウンロードしてもよい。
【０１３４】
また、コンピュータが読み出したプログラムコードを実行することにより、上記実施の形態の機能が実現される場合も本発明に含まれる。加えて、そのプログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）等が実際の処理の一部または全部を行い、その処理によって前述した実施形態の機能が実現される場合も含まれる。
【０１３５】
更に、前述した実施形態の機能が以下の処理によって実現される場合も本発明に含まれる。即ち、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれる。その後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵ等が実際の処理の一部または全部を行う場合である。
【図１】
2010211696.tif 000003
【図２】
2010211696.tif 000004
【図３】
2010211696.tif 000005
【図４】
2010211696.tif 000006
【図５】
2010211696.tif 000007
【図６】
2010211696.tif 000008
【図７】
2010211696.tif 000009
【図８】
2010211696.tif 000010
【図９】
2010211696.tif 000011
【図１０】
2010211696.tif 000012
【図１１】
2010211696.tif 000013
【図１２】
2010211696.tif 000014
【図１３】
2010211696.tif 000015
【図１４】
2010211696.tif 000016