(57)【特許請求の範囲】
【請求項１】
オペレーティングシステム（ターゲットＯＳ）のメモリプールの管理を別のオペレーティングシステム（環境ＯＳ）上でシミュレート（模擬実験）するメモリ管理シミュレートシステムであって、
前記メモリプールを生成するメモリプール生成手段と、
前記メモリプールに指定サイズのメモリブロックを確保し、前記メモリプールの現使用メモリ量と現使用プールサイズとを更新するメモリ確保手段と、
指定の前記メモリブロックを解放し、前記現使用メモリ量を更新するメモリ解放手段と、
指定の前記メモリプールより最大使用プールサイズと最大使用メモリ量とを得るメモリプール情報収集手段とを含んでおり、
前記メモリ確保手段は、メモリ確保をシミュレートし、前記ターゲットＯＳ上で要求サイズが確保できるか否かをチェックするメモリ確保シミュレート（チェック）手段と、前記環境ＯＳから実際のメモリを確保する実メモリ確保手段と、メモリ確保をシミュレートし前記メモリプールの現使用メモリ量と現使用プールサイズとを更新するメモリ確保シミュレート手段とを含み、
前記メモリ確保シミュレート手段は、確保したメモリブロックが最後の空きブロックであり、更新後の現使用プールサイズが最大使用プールサイズより大きい場合、最大使用プールサイズに現使用プールサイズを設定しかつ最大使用メモリ量に現使用メモリ量を設定することを特徴とするメモリ管理シミュレートシステム。
【請求項２】
前記メモリ解放手段は、前記メモリの解放をシミュレートするメモリ解放シミュレート手段と、実際のメモリを前記環境ＯＳに解放する実メモリ解放手段とを含むことを特徴とする請求項１記載のメモリ管理シミュレートシステム。
【請求項３】
前記メモリ確保シミュレート（チェック）手段にてメモリブロックの確保が可能と判定された場合に前記実メモリ確保手段により前記環境ＯＳから実際のメモリが確保され、次いで前記メモリ確保シミュレート手段によりメモリ確保のシミュレートがなされることを特徴とする請求項１又は２記載のメモリ管理シミュレートシステム。
【請求項４】
前記メモリ確保シミュレート手段は、確保したメモリのサイズが空きブロックサイズと等しいか否かを比較し、等しくない場合に前記空きブロックサイズから前記確保したメモリのサイズを差し引いたサイズの空きメモリブロックを新たに作成することを特徴とする請求項１から３いずれかに記載のメモリ管理シミュレートシステム。
【請求項５】
前記実メモリ解放手段は、前記メモリ解放シミュレート手段によるメモリブロックの解放が成功した場合に前記実際のメモリを前記環境ＯＳに解放することを特徴とする請求項２から４いずれかに記載のメモリ管理シミュレートシステム。
【請求項６】
前記メモリ解放シミュレート手段は解放したメモリブロックよりも１つ前に空きブロックが存在した場合、これらのメモリブロックを統合することを特徴とする請求項１から５いずれかに記載のメモリ管理シミュレートシステム。
【請求項７】
前記メモリ解放シミュレート手段は前記メモリプールの現使用メモリ量から解放したメモリサイズを減算することを特徴とする請求項２から６いずれかに記載のメモリ管理シミュレートシステム。
【請求項８】
前記メモリ解放シミュレート手段は、解放したメモリブロックが最後の空きブロックである場合、現使用プールサイズから前記空きブロックサイズを減算したものを新たな使用プールサイズに設定することを特徴とする請求項２から７いずれかに記載のメモリ管理シミュレートシステム。
【請求項９】
前記メモリ確保手段は、メモリ確保をシミュレートし前記メモリプールの現使用メモリ量と現使用プールサイズとを更新するメモリ確保シミュレート手段と、前記メモリ確保シミュレート手段にてメモリ確保が可能と判定された場合、前記環境ＯＳから実際のメモリを確保する実メモリ確保手段とを含むことを特徴とする請求項１記載のメモリ管理シミュレートシステム。
【請求項１０】
オペレーティングシステム（ターゲットＯＳ）のメモリプールの管理を別のオペレーティングシステム（環境ＯＳ）上でシミュレート（模擬実験）するメモリ管理シミュレート方法であって、
前記メモリプールを生成する第１ステップと、
前記メモリプールに指定サイズのメモリブロックを確保し、前記メモリプールの現使用メモリ量と現使用プールサイズとを更新する第２ステップと、
指定の前記メモリブロックを解放し、前記現使用メモリ量を更新する第３ステップと、
指定の前記メモリプールより最大使用プールサイズと最大使用メモリ量とを得る第４ステップとを含んでおり、
前記第２ステップは、メモリ確保をシミュレートし、前記ターゲットＯＳ上で要求サイズが確保できるか否かをチェックする第２１ステップと、前記環境ＯＳから実際のメモリを確保する第２２ステップと、メモリ確保をシミュレートし前記メモリプールの現使用メモリ量と現使用プールサイズとを更新する第２３ステップとを含み、
前記第２３ステップは、確保したメモリブロックが最後の空きブロックであり、更新後の現使用プールサイズが最大使用プールサイズより大きい場合、最大使用プールサイズに現使用プールサイズを設定しかつ最大使用メモリ量に現使用メモリ量を設定することを特徴とするメモリ管理シミュレート方法。
【請求項１１】
前記第３ステップは、前記メモリの解放をシミュレートする第３１ステップと、実際のメモリを前記環境ＯＳに解放する第３２ステップとを含むことを特徴とする請求項１０記載のメモリ管理シミュレート方法。
【請求項１２】
前記第２１ステップにてメモリブロックの確保が可能と判定された場合に前記第２２ステップにより前記環境ＯＳから実際のメモリが確保され、次いで前記第２３ステップによりメモリ確保のシミュレートがなされることを特徴とする請求項１０又は１１記載のメモリ管理シミュレート方法。
【請求項１３】
前記第２３ステップは、確保したメモリのサイズが空きブロックサイズと等しいか否かを比較し、等しくない場合に前記空きブロックサイズから前記確保したメモリのサイズを差し引いたサイズの空きメモリブロックを新たに作成することを特徴とする請求項１０から１２いずれかに記載のメモリ管理シミュレート方法。
【請求項１４】
前記第３２ステップは、前記第３１ステップによるメモリブロックの解放が成功した場合に前記実際のメモリを前記環境ＯＳに解放することを特徴とする請求項１１から１３いずれかに記載のメモリ管理シミュレート方法。
【請求項１５】
前記第３１ステップは解放したメモリブロックよりも１つ前に空きブロックが存在した場合、これらのメモリブロックを統合することを特徴とする請求項１０から１４いずれかに記載のメモリ管理シミュレート方法。
【請求項１６】
前記第３１ステップは前記メモリプールの現使用メモリ量から解放したメモリサイズを減算することを特徴とする請求項１１から１５いずれかに記載のメモリ管理シミュレート方法。
【請求項１７】
前記第３１ステップは、解放したメモリブロックが最後の空きブロックである場合、現使用プールサイズから前記空きブロックサイズを減算したものを新たな使用プールサイズに設定することを特徴とする請求項１１から１６いずれかに記載のメモリ管理シミュレート方法。
【請求項１８】
前記第２ステップは、メモリ確保をシミュレートし前記メモリプールの現使用メモリ量と現使用プールサイズとを更新する第２３ステップと、前記第２３ステップにてメモリ確保が可能と判定された場合、前記環境ＯＳから実際のメモリを確保する第２２ステップとを含むことを特徴とする請求項１０記載のメモリ管理シミュレート方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はメモリ管理シミュレートシステム及びシミュレート方法に関し、特にオペレーティングシステム（ターゲットＯＳ）のメモリプールの管理を別のオペレーティングシステム（環境ＯＳ）上でシミュレート（模擬実験）するメモリ管理シミュレートシステム及びシミュレート方法に関する。
【０００２】
【従来の技術】
パーソナルコンピュータ等の情報処理装置に組込まれたソフトウエア（以下、組込みソフトウエアという）は、限られたメモリ（ＲＡＭ）容量で動作する必要があり、メモリ容量の見積もりやチューニングは、組込み機器のメモリサイズの決定や冗長なメモリの削減を可能にする意味で重要である。
【０００３】
一方、組込みソフトウェアをパーソナルコンピュータなどの汎用ＯＳ上でシミュレートする場合、実際のターゲットＯＳの機能をパソコンなどの汎用ＯＳ（環境ＯＳ）上で疑似的に実現し、シミュレートすることが多い。実機上では、ターゲットＯＳのメモリプールの管理方法によっては、可変長ブロックサイズのメモリプールの場合、フラグメントが発生し、空きメモリの合計サイズが確保要求サイズより大きくても、空きブロックが分散しており、連続した領域として確保できない場合があり得る。
【０００４】
このフラグメントについて簡単に説明しておく。要求するメモリ領域は連続した領域として確保しておく必要がある。従って、要求するメモリ領域よりも小さい領域しかそのメモリに残っていない場合、その領域を使用することができず、その領域は空きブロックとしてメモリに残存することになる。このような空きブロックがメモリ上に複数個散在する状態をフラグメントという。
【０００５】
一方、メモリ管理をシミュレートするシステムではないが、メモリ管理方法の一例が特開２０００−２１５０９９号公報（以下、先行技術文献１という）、特開平６−３０９１９７号公報（以下、先行技術文献２という）、特開平８−９５８４９号公報（以下、先行技術文献３という）、特開平８−３２８９４４号公報（以下、先行技術文献４という）及び特開平９−３１９６５８号公報（以下、先行技術文献５という）に開示されている。これら先行技術文献１〜５に開示されているメモリ管理方法は、オペレーティングシステムにおけるメモリ割当て及び開放方法である。
【０００６】
【発明が解決しようとする課題】
しかし、従来の環境ＯＳのメモリ管理ではメモリの大きさや管理方法など、上述したようなターゲットＯＳの事情を忠実に再現することができないという欠点がある。又、このような事情から、メモリプールサイズのチューニングは、最大メモリ仕様量ではなくて、途中の空きブロックも含めての最大必要なメモリプールのサイズを把握する必要がある。しかしながら、従来の環境ＯＳはこのようなメモリ管理機能を有していない。一方、これらの課題を解決する手段は上述の先行技術文献１〜５にも開示されていない。
【０００７】
そこで本発明の目的は、ターゲットＯＳのメモリプールの管理をシミュレートし、メモリプール内のフラグメントによる未使用域を考慮した最大必要メモリプールサイズを収集することが可能なメモリ管理シミュレートシステムを提供することにある。
【０００８】
【課題を解決するための手段】
前記課題を解決するために本発明によるメモリ管理シミュレートシステムは、オペレーティングシステム（ターゲットＯＳ）のメモリプールの管理を別のオペレーティングシステム（環境ＯＳ）上でシミュレート（模擬実験）するメモリ管理シミュレートシステムであって、そのシステムは前記メモリプールを生成するメモリプール生成手段と、前記メモリプールに指定サイズのメモリブロックを確保し、前記メモリプールの現使用メモリ量と現使用プールサイズとを更新するメモリ確保手段と、指定の前記メモリブロックを解放し、前記現使用メモリ量を更新するメモリ解放手段と、指定の前記メモリプールより最大使用プールサイズと最大使用メモリ量とを得るメモリプール情報収集手段とを含んでおり、前記メモリ確保手段は、メモリ確保をシミュレートし、前記ターゲットＯＳ上で要求サイズが確保できるか否かをチェックするメモリ確保シミュレート（チェック）手段と、前記環境ＯＳから実際のメモリを確保する実メモリ確保手段と、メモリ確保をシミュレートし前記メモリプールの現使用メモリ量と現使用プールサイズとを更新するメモリ確保シミュレート手段とを含み、前記メモリ確保シミュレート手段は、確保したメモリブロックが最後の空きブロックであり、更新後の現使用プールサイズが最大使用プールサイズより大きい場合、最大使用プールサイズに現使用プールサイズを設定しかつ最大使用メモリ量に現使用メモリ量を設定することを特徴とする。
【０００９】
又、本発明によるメモリ管理シミュレート方法は、オペレーティングシステム（ターゲットＯＳ）のメモリプールの管理を別のオペレーティングシステム（環境ＯＳ）上でシミュレート（模擬実験）するメモリ管理シミュレート方法であって、その方法は前記メモリプールを生成する第１ステップと、前記メモリプールに指定サイズのメモリブロックを確保し、前記メモリプールの現使用メモリ量と現使用プールサイズとを更新する第２ステップと、指定の前記メモリブロックを解放し、前記現使用メモリ量を更新する第３ステップと、指定の前記メモリプールより最大使用プールサイズと最大使用メモリ量とを得る第４ステップとを含んでおり、前記第２ステップは、メモリ確保をシミュレートし、前記ターゲットＯＳ上で要求サイズが確保できるか否かをチェックする第２１ステップと、前記環境ＯＳから実際のメモリを確保する第２２ステップと、メモリ確保をシミュレートし前記メモリプールの現使用メモリ量と現使用プールサイズとを更新する第２３ステップとを含み、
前記第２３ステップは、確保したメモリブロックが最後の空きブロックであり、更新後の現使用プールサイズが最大使用プールサイズより大きい場合、最大使用プールサイズに現使用プールサイズを設定しかつ最大使用メモリ量に現使用メモリ量を設定することを特徴とする。
【００１０】
本発明によれば、ターゲットＯＳのメモリプールの管理をシミュレートし、メモリプール内のフラグメントによる未使用域を考慮した最大必要メモリプールサイズを収集することが可能となる。
【００１１】
【発明の実施の形態】
まず、本発明の概要について説明する。本発明は、オペレーティングシステム（以下、ターゲットＯＳという）を別のオペレーティングシステム（以下、環境ＯＳという）上でシミュレートするシステムに関し、ターゲットＯＳのメモリの確保・解放を環境ＯＳのメモリ管理で実現しながらも、ターゲットＯＳのメモリ状態を正確にシミュレートし、メモリの使用効率などターゲットＯＳのメモリプールをチューニングするための情報収集機能を提供するものである。
【００１２】
図１は本発明に係るメモリ管理シミュレートシステムの第１の実施の形態の構成図である。同図を参照すると、本システムは、ターゲットＯＳのメモリ関連システムコールをシミュレートするメモリプール生成部１０１と、メモリ確保部１１１と、メモリ解放部１２１と、メモリプール情報収集部１３１とを有している。
【００１３】
メモリ確保部１１１は、メモリ確保をシミュレートし、ターゲットＯＳ上で要求サイズが確保できるかチェックするメモリ確保シミュレート（チェック）部１１２と、確保可能であれば環境ＯＳから実際のメモリを確保する実メモリ確保部１４１と、メモリ確保をシミュレートするメモリ確保シミュレート部１１３とを有し、メモリ解放部１２１は、メモリ解放をシミュレートするメモリ解放シミュレート部１２２と、実際のメモリを環境ＯＳに解放する実メモリ解放部１４２とを有し、メモリプール情報収集部１３１は、メモリプールの最大どこまで使用したかの情報を収集する最大必要プールサイズ参照部１３２と、このときの使用メモリ量を収集する最大メモリ使用量参照部１３３とを有していることを特徴とする。
【００１４】
以下、本発明の第１の実施の形態について添付図面を参照しながら説明する。図２はターゲットＯＳのメモリ管理のシステムコールの仕様例を示す図である。同図を参照すると、メモリはいくつかのメモリプールに分けて管理され、メモリプールの定義を行うメモリプール生成システムコール２０１は、引数にメモリプールを一意に識別するためのメモリプールＩＤ（ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）とメモリプールサイズを指定する。メモリプールから使用するメモリブロックを確保するメモリ確保システムコール２０２は、引数にメモリプールＩＤと確保するブロックサイズを指定し、確保したメモリのアドレスを返却する。ターゲットＯＳのメモリ確保のアルゴリズムの論理的仕様は、メモリプール領域の先頭に最も近い要求サイズ確保可能な空き領域の先頭部分にメモリを確保するものとする。メモリ解放システムコール２０３は、引数に解放するメモリブロックのアドレスと確保時に指定したメモリプールＩＤを指定する。
【００１５】
図３は提供するメモリプールの情報収集ＡＰＩ（ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）の仕様を示す図である。同図を参照すると、メモリプール情報収集ＡＰＩ３０１は、情報収集の対象のメモリプールＩＤを引数とし、そのメモリプールの最大必要プールサイズ、最大メモリ使用量、サイズ別使用中ブロック数及びサイズ別空きブロック数を返却する。
【００１６】
図４は最大必要プールサイズ４１２と最大メモリ使用量４１１の違いを示す図である。同図を参照すると、可変長ブロックサイズのメモリプール場合、利用者のメモリ確保・解放の順序によってフラグメントが発生し、空きブロックが散在して、メモリの使用量より必要なプールサイズの方が一般に大きくなる。この必要なプールサイズの最大値が、最大必要プールサイズ４１２で、このときのメモリの使用量を最大メモリ使用量４１１と定義する。
【００１７】
図５はターゲットＯＳのメモリ管理のシステムコールをシミュレートするための内部データ構造図である。同図を参照すると、メモリプール毎にメモリプールの状態を表すメモリプール管理構造体６００（６００−１，６００−２，…）を作成して、メモリプール構造体ポインタ５００にリストしている。
【００１８】
図６はメモリプール管理構造体の構成図である。各メモリプール管理構造体６００は、同図に示すように、リストを構成するための次構造体ポインタ６０１と、メモリプールＩＤ６０２と、メモリプールサイズ６０３と、プールの使用状況を具体的に表現するためのメモリ使用状況ブロックリスト６０４と、そこまでの最大使用プールサイズ６０５と、最大使用メモリ量６０６と、現在の最大使用プールサイズ６０７と、現在の使用メモリ量６０８とから構成される。
【００１９】
図７はメモリ使用状況ブロックリスト６０４の構成図である。同図を参照すると、メモリ使用状況ブロックリスト６０４は、メモリプール中の領域の各ブロックを表すメモリブロック管理構造体７００（７００−１，７００−２，…）のリストで構成される。メモリブロック管理構造体７００は、リストを構成するための次構造体ポインタ７０１と、ブロックが使用中か空きかを表す使用中／空きステータス７０２と、当該ブロックのサイズを示すブロックサイズ７０３と、使用中の場合は、そのブロックの環境ＯＳでの実際のアドレスを示す使用中ブロック実アドレス７０４とから構成される。メモリプールは、このメモリ使用状況ブロックリスト６０４の順にブロックが並んでいるものとして表される。
【００２０】
次に、ターゲットＯＳのメモリ管理のシステムコールをシミュレートし情報収集するための構成を図１を参照して説明する。本発明のオペレーティングシステムのメモリ管理のシミュレータの第１の実施の形態は、ターゲットＯＳのメモリ管理のシステムコールをシミュレートするシステムとして、メモリプール生成部１０１と、メモリ確保部１１１と、メモリ解放部１２１と、メモリプールの情報を収集するメモリプール情報収集部１３１とから構成されている。
【００２１】
メモリプール生成部１０１は、メモリプール管理構造体（図６参照）を作成しメモリプールを定義するものである。メモリ確保部１１１は、メモリ使用状況ブロックリスト６０４で要求サイズが確保できるかチェックするメモリ確保シミュレート（チェック）部１１２と、確保可能であれば環境ＯＳから実際のメモリを確保する実メモリ確保部１４１と、メモリ確保をメモリ使用状況ブロックリスト６０４に反映（表示）し、最大必要プールサイズ４１２と最大メモリ使用量４１１などの情報をメモリプール管理構造体６００に記録するメモリ確保シミュレート部１１３とから構成される。
【００２２】
メモリ解放部１２１は、メモリ使用状況ブロックリスト６０４でメモリ解放をシミュレートするメモリ解放シミュレート部１２２と、実際のメモリを環境ＯＳに解放する実メモリ解放部１４２とから構成される。
【００２３】
メモリプール情報収集部１３１は、メモリプール管理構造体（図６参照）に記録された、最大必要プールサイズ４１２を収集する最大必要プールサイズ参照部１３２と、このときの使用メモリ量（最大メモリ使用量４１１）を収集する最大メモリ使用量参照部１３３とから構成される。
【００２４】
次に、フローチャートを参照して第１の実施の形態の全体の動作について詳細に説明する。図８はメモリプール生成部１０１の動作を示すフローチャートである。まず、メモリプール生成時、メモリプール生成部１０１が動作する。同図を参照すると、メモリプール構造体ポインタ５００にポインタが入っているか否かを判定し（Ｓ１）、入っている場合（Ｓ１にてＮＯの場合）は、そのメモリプール構造体ポインタ５００のリストの中に指定のメモリプールＩＤに一致するものがあるか否かをチェックする（Ｓ２）。一方、メモリプール構造体ポインタ５００にポインタが入っていない場合（Ｓ１にてＹＥＳの場合）は、後述するステップ３（Ｓ３）に進む。
【００２５】
そして、メモリプール構造体ポインタ５００にポインタが入っており（Ｓ１にてＮＯの場合）かつ指定のメモリプールＩＤのメモリプール管理構造体６００が存在しない場合（Ｓ２にてＮＯの場合）は、メモリプール管理構造体６００を新たに作成し（Ｓ３）、初期化を行って（Ｓ４）、メモリプール構造体ポインタ５００からのリストの最後にそのメモリプール管理構造体６００を追加する（Ｓ５）。
【００２６】
メモリプール管理構造体６００の初期化は、指定されたメモリプールＩＤ、メモリプールサイズを設定し、最大使用プールサイズ、最大使用メモリ量、現使用プールサイズ、現使用メモリ量を零（０）とする。又、メモリ使用状況ブロックリスト６０４には、メモリブロック管理構造体６００を１つ作成し、ステータスを「空き」、ブロックサイズをメモリプールのサイズとして（メモリプール全体が１つの空きブロックとして）リストしておく（Ｓ４）。
【００２７】
次に、メモリの確保時にはメモリ確保部１１１が動作する。図９はメモリ確保部１１１の動作を示すフローチャートである。同図を参照すると、まず、メモリ確保シミュレート（チェック）部１１２で要求サイズのメモリが確保できるかチェックする（Ｓ１１）。そして、確保できない場合（Ｓ１２にてＮＯの場合）は、メモリ不足時の処理を行う（Ｓ１３）。これは、ターゲットＯＳの仕様によって、メモリの空き発生の通知まで待つなどである。この結果リトライ可能であれば（Ｓ１４にてＹＥＳの場合）、再度ステップ１１（Ｓ１１）に戻る。又、リトライ可能でなければ（Ｓ１４にてＮＯの場合）、動作終了となる。
【００２８】
一方、要求サイズのメモリが確保できる場合（Ｓ１２にてＹＥＳの場合）は、実メモリ確保部１４１で環境ＯＳからメモリを確保し（Ｓ１５）、メモリ確保シミュレート部１１３でメモリブロックの確保をシミュレートする（Ｓ１６）。ここで、実メモリ確保部１４１は、環境ＯＳにおけるメモリ確保システムコールでよく、例えばＣ言語がサポートされているならば、ｍａｌｌｏｃ関数をサイズを指定して呼び出せば実現される。
【００２９】
図１０はメモリ確保シミュレート（チェック）部１１２の動作を示すフローチャートである。同図を参照すると、メモリ確保シミュレート（チェック）部１１２は、まず、メモリプール構造体ポインタ５００にリストされた指定のメモリプールＩＤに一致するメモリプール管理構造体６００をサーチし（Ｓ２１）、そのメモリプール管理構造体６００のメモリ使用状況ブロックリスト６０４に要求サイズの空きがあるかサーチする（Ｓ２２）。この空きブロックサーチ処理の動作は、後述する。その結果、空きブロックがある場合（Ｓ２３にてＹＥＳの場合）は、指定サイズの空きありとして（Ｓ２４）、動作を終了し、空きブロックがない場合（Ｓ２３にてＮＯの場合）は、指定サイズの空きなしとして（Ｓ２５）、動作を終了する。
【００３０】
図１１はメモリ確保シミュレート部１１３の動作を示すフローチャートである。同図を参照すると、メモリ確保シミュレート部１１３は、まず、メモリプール構造体ポインタ５００にリストされた指定のメモリプールＩＤに一致するメモリプール管理構造体６００をサーチし（Ｓ３１）、そのメモリプール管理構造体６００のメモリ使用状況ブロックリスト６０４に要求サイズの空きがあるかサーチする（Ｓ３２）。この空きブロックサーチ処理の動作は、後述する。
【００３１】
サーチした空きのメモリブロック管理構造体７００のステータス７０２を「使用中」に、ブロックサイズ７０３を「確保サイズ」に、使用中ブロック実アドレス７０４に確保したアドレスを設定する（Ｓ３３）。ここで、確保サイズが元の空きブロックのサイズに等しくない場合（Ｓ３４にてＮＯの場合）、即ち、元の空きブロックのサイズの方が確保サイズよりも大きい場合は、新たにメモリブロック管理構造体７００を作成して、ステータスに「空き」、ブロックサイズに元の空きサイズから確保サイズを減じたものを設定して、先のメモリブロック管理構造体７００の次に挿入する（Ｓ３５）。一方、確保サイズが元の空きブロックのサイズに等しい場合（Ｓ３４にてＹＥＳの場合）は、後述するステップ３６（Ｓ３６）に進む。
【００３２】
次に、ステップ３５（Ｓ３５）に次いでメモリプール管理構造体６００の現使用メモリ量に確保サイズを加算する（Ｓ３６）。そして、確保したのが最後の空きブロックからであった場合（Ｓ３７にてＹＥＳの場合）は、メモリプール管理構造体６００の現使用プールサイズに確保サイズを加算する（Ｓ３８）。さらにこの結果、メモリプール管理構造体６００の現使用プールサイズが最大使用プールサイズよりも大きくなった場合（Ｓ３９にてＹＥＳの場合）は、最大使用プールサイズに現使用プールサイズ、最大使用メモリ量に現使用メモリ量を設定する（Ｓ４０）。
【００３３】
一方、確保したのが最後の空きブロックからでなかった場合（Ｓ３７にてＮＯの場合）もしくはメモリプール管理構造体６００の現使用プールサイズが最大使用プールサイズよりも大きくならなかった場合（Ｓ３９にてＮＯの場合）は、動作終了となる。
【００３４】
図１２は前述の空きブロックサーチ処理の動作を示すフローチャートである。同図を参照すると、空きブロックサーチ処理の動作は、メモリプール管理構造体６００のメモリ使用状況ブロックリスト６０４の最初のメモリブロック管理構造体７００を得て（Ｓ４１）、ステータスが空き（Ｓ４２にてＹＥＳの場合）かつサイズが指定サイズ以上なら（Ｓ４３にてＹＥＳの場合）、指定サイズ確保可能として当該メモリブロック管理構造体７００を返却し（Ｓ４４）、動作終了となる。
【００３５】
一方、ステータスが空きでないか（Ｓ４２にてＮＯの場合）あるいはサイズが指定サイズ未満であれば（Ｓ４３にてＮＯの場合）、次のメモリブロック管理構造体７００があれば（Ｓ４５にてＹＥＳの場合）、そのメモリブロック管理構造体７００を得て（Ｓ４７）、ステップ４２（Ｓ４２）から繰り返す。又、次のメモリブロック管理構造体がない場合（Ｓ４５にてＮＯの場合）は、指定サイズの空きなしとして（Ｓ４６）、動作終了となる。
【００３６】
図１３はメモリ解放部１２１の動作を示すフローチャートである。同図を参照すると、メモリ解放部１２１は、まず、メモリ解放シミュレート部１２２で指定メモリプールの指定アドレスのメモリの解放をシミュレートする（Ｓ５１）。そして、シミュレートの結果、解放成功なら（Ｓ５２にてＹＥＳの場合）、実メモリ解放部１４２でメモリを解放し（Ｓ５３）、メモリ解放後の処理を行う（Ｓ５４）。これは、ターゲットＯＳの仕様によって、メモリの空き発生の通知を行うなどである。一方、開放失敗なら（Ｓ５２にてＮＯの場合）、エラーを返却する（Ｓ５５）。実メモリ解放部１４２は、環境ＯＳにおけるメモリ解放システムコールでよく、例えばＣ言語がサポートされているならば、ｆｒｅｅ関数を呼び出せば、実現される。
【００３７】
図１４及び図１５はメモリ解放シミュレート部１２２の動作を示すフローチャートである。同図を参照すると、メモリ解放シミュレート部１２２は、まず、メモリプール構造体ポインタ（図５の５００参照）にリストされた指定のメモリプールＩＤに一致するメモリプール管理構造体６００をサーチし（Ｓ６１）、そのメモリプール管理構造体６００のメモリ使用状況ブロックリスト６０４の先頭のメモリブロック管理構造体７００を得る（Ｓ６２）。当該メモリブロック管理構造体７００のステータスが使用中でない（Ｓ６３にてＮＯの場合）又はアドレスが指定の解放アドレスと一致してなければ（Ｓ６４にてＮＯの場合）、次のメモリブロック管理構造体７００があれば（Ｓ６５にてＹＥＳの場合）、そのメモリブロック管理構造体７００を取得し（Ｓ６６）、そのメモリブロック管理構造体７００について、ステップＳ６３から繰り返しサーチする。
【００３８】
一方、次のメモリブロック管理構造体７００がなければ（Ｓ６５にてＮＯの場合）、解放アドレス不正などのエラーとして終了する（Ｓ６７）。さらに、ステータスが使用中で（Ｓ６３にてＹＥＳの場合）かつアドレスが指定の解放アドレスと一致するメモリブロック管理構造体７００が見つかったら（Ｓ６４にてＹＥＳの場合）、そのステータスを空きに変更し（Ｓ６８）、１つ前のメモリブロック管理構造体７００がありかつそのステータスが空きなら（Ｓ６９にてＹＥＳの場合）、１つ前のメモリブロック管理構造体７００と当該メモリブロック管理構造体７００を統合する（Ｓ７０）。統合処理の動作については後述する。次のメモリブロック管理構造体７００がありかつつそのステータスが空きなら（Ｓ７１にてＹＥＳの場合）、次のメモリブロック管理構造体７００と当該メモリブロック管理構造体７００を統合する（Ｓ７２）。
【００３９】
次に、メモリプール管理構造体６００の現使用メモリ量から解放サイズを減算する（Ｓ７３）。もし、当該メモリブロック管理構造体７００が最後の空きとなった（次ポインタ＝ｎｕｌｌ）ならば（Ｓ７４にてＹＥＳの場合）、メモリプール管理構造体６００の現使用プールサイズにメモリプールサイズから当該メモリブロック管理構造体７００のブロックサイズを引いたものを設定する（Ｓ７５）。
【００４０】
なお、１つ前のメモリブロック管理構造体７００がないかもしくはそのステータスが空きでなければ（Ｓ６９にてＮＯの場合）、ステップ７１（Ｓ７１）に進み、次のメモリブロック管理構造体７００がないかもしくはそのステータスが空きでなければ（Ｓ７１にてＮＯの場合）、ステップ７３（Ｓ７３）に進み、もし、当該メモリブロック管理構造体７００が最後の空きでなければ（次ポインタ＝ｎｕｌｌではない）（Ｓ７４にてＮＯの場合）、動作終了となる。
【００４１】
図１６は隣合う空き状態のメモリブロック管理構造体７００の統合処理の動作を示すフローチャートである。同図を参照すると、その統合処理の動作は、隣合うメモリブロック管理構造体７００の前の方のメモリブロック管理構造体７００の次構造体ポインタ６０１に後の方のメモリブロック管理構造体７００の次構造体ポインタ６０１をコピーし（これにより後の方のメモリブロック管理構造体７００はリストから外れる）、前の方のメモリブロック管理構造体７００のブロックサイズに両者のブロックサイズの合計を設定する（Ｓ８１）。次に、後の方のメモリブロック管理構造体７００を解放する（Ｓ８２）。
【００４２】
図１７はメモリプール情報収集部１３１の動作を示すフローチャートである。同図を参照すると、メモリプール情報収集部１３１は、まず、メモリプール構造体ポインタ（図５の５００参照）にリストされた指定のメモリプールＩＤに一致するメモリプール管理構造体６００をサーチし（Ｓ９１）、最大必要プールサイズ参照部（図１の１３２）で最大必要プールサイズを得て（Ｓ９２）、最大メモリ使用量参照部（図１の１３３）で最大メモリ使用量を得て（Ｓ９３）、取得した最大必要プールサイズと最大メモリ使用量とを返却する（Ｓ９４）。
【００４３】
図１８は最大必要プールサイズ参照部１３２の動作を示すフローチャートである。同図を参照すると、最大必要プールサイズ参照部１３２は、指定のメモリプール管理構造体６００より最大使用プールサイズを得て返却する（Ｓ１０１）。
【００４４】
図１９は最大メモリ使用量参照部１３３の動作を示すフローチャートである。同図を参照すると、最大メモリ使用量参照部１３３は、指定のメモリプール管理構造体６００より最大使用メモリ量を得て返却する（Ｓ１１１）。
【００４５】
以上の各手段の処理は、すべてクリティカルセクションとして保護（排他制御）される。
【００４６】
次に、第２の実施の形態について説明する。図２０は第２の実施の形態の構成図である。同図を参照すると、第２の実施の形態は、先に挙げた第１の実施の形態（図１参照）に比べてメモリ確保シミュレート（チェック）部１１２を省略したものである。第１の実施の形態では一旦メモリ確保できるか否かをメモリ確保シミュレート（チェック）部１１２にてシミュレートによってチェックして、実メモリを確保し、その後実際にシミュレートしていたが、第２の実施の形態（図２０参照）での動作は、先にメモリ確保シミュレート部１１３でシミュレートしてしまい、確保可能であったら実メモリ確保部１４１で確保するものである。これにより、動作が高速化される。
【００４７】
【発明の効果】
本発明によれば、オペレーティングシステム（ターゲットＯＳ）のメモリプールの管理を別のオペレーティングシステム（環境ＯＳ）上でシミュレート（模擬実験）するメモリ管理シミュレートシステムであって、そのシステムは前記メモリプールを生成するメモリプール生成手段と、前記メモリプールに指定サイズのメモリブロックを確保し、前記メモリプールの現使用メモリ量と現使用プールサイズとを更新するメモリ確保手段と、指定の前記メモリブロックを解放し、前記現使用メモリ量を更新するメモリ解放手段と、指定の前記メモリプールより最大使用プールサイズと最大使用メモリ量とを得るメモリプール情報収集手段とを含むため、ターゲットＯＳのメモリプールの管理をシミュレートし、メモリプール内のフラグメントによる未使用域を考慮した最大必要メモリプールサイズを収集することが可能となる。又、本発明による他の発明も上記本発明と同様の効果を奏する。
【図面の簡単な説明】
【図１】本発明に係るメモリ管理シミュレートシステムの第１の実施の形態の構成図である。
【図２】ターゲットＯＳのメモリ管理のシステムコールの仕様例を示す図である。
【図３】提供するメモリプールの情報収集ＡＰＩの仕様を示す図である。
【図４】最大必要プールサイズ４１２と最大メモリ使用量４１１の違いを示す図である。
【図５】ターゲットＯＳのメモリ管理のシステムコールをシミュレートするための内部データ構造図である。
【図６】メモリプール管理構造体の構成図である。
【図７】メモリ使用状況ブロックリスト６０４の構成図である。
【図８】メモリプール生成部１０１の動作を示すフローチャートである。
【図９】メモリ確保部１１１の動作を示すフローチャートである。
【図１０】メモリ確保シミュレート（チェック）部１１２の動作を示すフローチャートである。
【図１１】メモリ確保シミュレート部１１３の動作を示すフローチャートである。
【図１２】前述の空きブロックサーチ処理の動作を示すフローチャートである。
【図１３】メモリ解放部１２１の動作を示すフローチャートである。
【図１４】メモリ解放シミュレート部１２２の動作を示すフローチャートである。
【図１５】メモリ解放シミュレート部１２２の動作を示すフローチャートである。
【図１６】隣合う空き状態のメモリブロック管理構造体７００の統合処理の動作を示すフローチャートである。
【図１７】メモリプール情報収集部１３１の動作を示すフローチャートである。
【図１８】最大必要プールサイズ参照部１３２の動作を示すフローチャートである。
【図１９】最大メモリ使用量参照部１３３の動作を示すフローチャートである。
【図２０】第２の実施の形態の構成図である。
【符号の説明】
１０１  メモリプール生成部
１１１  メモリ確保部
１１２  メモリ確保シミュレート（チェック）部
１１３  メモリ確保シミュレート部
１２１  メモリ解放部
１２２  メモリ解放シミュレート部
１３１  メモリプール情報収集部
１３２  最大必要プールサイズ参照部
１３３  最大メモリ使用量参照部
１４１  実メモリ確保部
１４２  実メモリ解放部
【図１】
0003551145.tif 000002
【図２】
0003551145.tif 000003
【図３】
0003551145.tif 000004
【図４】
0003551145.tif 000005
【図５】
0003551145.tif 000006
【図６】
0003551145.tif 000007
【図７】
0003551145.tif 000008
【図８】
0003551145.tif 000009
【図９】
0003551145.tif 000010
【図１０】
0003551145.tif 000011
【図１１】
0003551145.tif 000012
【図１２】
0003551145.tif 000013
【図１３】
0003551145.tif 000014
【図１４】
0003551145.tif 000015
【図１５】
0003551145.tif 000016
【図１６】
0003551145.tif 000017
【図１７】
0003551145.tif 000018
【図１８】
0003551145.tif 000019
【図１９】
0003551145.tif 000020
【図２０】
0003551145.tif 000021