(57)【要約】【課題】プログラムの実行効率を向上させる。【解決手段】共有メモリに対するアクセスをトランザクション単位で制御するメモリ制御装置であって、共有メモリに記憶されたデータのバージョンを記憶する管理部と、トランザクションの処理中の共有メモリに対する更新処理の実行に応じて、当該更新処理をしたデータのバージョンを含む更新エントリを、トランザクション毎に記憶するログ記憶部と、トランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと管理部に記憶されたバージョンとが一致する場合、当該更新処理の実行に応じた処理結果を共有メモリに書き込み、一致しない場合、当該更新処理を再実行して再実行結果を共有メモリに書き込む制御部と、を備えるメモリ制御装置を提供する。【選択図】図３
2010117869.tif 000002
【特許請求の範囲】
【請求項１】
共有メモリに対するアクセスをトランザクション単位で制御するメモリ制御装置であって、
前記共有メモリに記憶されたデータのバージョンを記憶する管理部と、
トランザクションの処理中の前記共有メモリに対する更新処理の実行に応じて、当該更新処理をしたデータのバージョンを含む更新エントリを、トランザクション毎に記憶するログ記憶部と、
トランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致する場合、当該更新処理の実行に応じた処理結果を前記共有メモリに書き込み、一致しない場合、当該更新処理を再実行して再実行結果を前記共有メモリに書き込む制御部と、
を備えるメモリ制御装置。
【請求項２】
前記制御部は、トランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致せず且つ当該更新処理の実行に応じた処理結果が読み出されている場合、再実行結果を前記共有メモリに書き込むことなく、当該トランザクションをロールバックさせる
請求項１に記載のメモリ制御装置。
【請求項３】
前記制御部は、トランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致せず且つ当該更新処理の処理結果が他の書込処理に応じて上書きされている場合、上書きされたデータを前記共有メモリに書き込む
請求項１から２の何れかに記載のメモリ制御装置。
【請求項４】
前記管理部は、前記共有メモリに記憶されたデータのバージョンをアドレス毎に管理し、
前記ログ記憶部は、それぞれの更新エントリに、当該更新処理において更新するデータの共有メモリ上のアドレスおよび当該更新処理において更新するデータのバージョンを含めて記憶し、
前記制御部は、トランザクションのコミット要求が与えられたことに応じて、当該トランザクションの処理中において記憶された更新エントリのそれぞれについて、当該更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致する場合、当該更新処理の実行に応じた処理結果を前記共有メモリの当該更新エントリに含まれたアドレスに書き込み、一致しない場合、当該更新処理を再実行して再実行結果を前記共有メモリの当該更新エントリに含まれたアドレスに書き込む
請求項１から３の何れかに記載のメモリ制御装置。
【請求項５】
前記ログ記憶部は、
トランザクションの処理中の前記共有メモリに対する読出処理の実行に応じて、当該読出処理において読み出すデータの共有メモリ上のアドレスおよび当該読出処理において読み出すデータのバージョンを含む読出エントリを、トランザクション毎に記憶し、
トランザクションの処理中の前記共有メモリに対する書込処理の実行に応じて、当該書込処理において書き込むデータの共有メモリ上のアドレスおよび当該書込処理において前記共有メモリに書き込むデータを含む書込エントリを、トランザクション毎に記憶し、
トランザクションの処理中の前記共有メモリに対する更新処理の実行に応じて、当該更新処理において読み出すデータの共有メモリ上のアドレスおよび当該更新処理において読み出すデータのバージョンを含む読出エントリを、トランザクション毎に記憶し、
トランザクションの処理中の前記共有メモリに対する更新処理の実行に応じて、当該更新処理において書き込むデータの共有メモリ上のアドレスおよび当該更新処理において前記共有メモリに書き込む当該更新処理の処理結果であるデータを含む書込エントリを、トランザクション毎に記憶する
請求項４に記載のメモリ制御装置。
【請求項６】
前記ログ記憶部は、トランザクションの処理中の前記共有メモリに対する更新処理の実行において、当該更新処理において更新するデータの共有メモリ上のアドレスが既に何れかの書込エントリに含まれている場合、当該更新処理に対応する新たな更新エントリを記憶せずに、当該更新処理において更新するデータの共有メモリ上のアドレスを含む書込エントリに更新処理結果を格納する
請求項５に記載のメモリ制御装置。
【請求項７】
前記ログ記憶部は、それぞれの更新エントリに、当該更新処理の処理結果を含む書込エントリへのポインタを含めて記憶し、
前記制御部は、
トランザクションのコミット要求が与えられたことに応じて、
当該トランザクションの処理中において記憶された更新エントリのそれぞれについて、当該更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致しない場合、当該更新処理を再実行し、
更新処理を再実行した再実行結果を、再実行対象となる更新処理に対応する更新エントリに含まれる前記ポインタにより示された書込エントリ内に上書きし、
当該トランザクションに対応するそれぞれの書込エントリに含まれるデータを、前記共有メモリの当該書込エントリに含まれたアドレスに書き込む
請求項５から６の何れかに記載のメモリ制御装置。
【請求項８】
前記ログ記憶部は、更新処理の処理結果を含む書込エントリに、当該更新処理の内容を表わす内容情報を含めて記憶し、
前記制御部は、再実行対象となる更新処理に対応する更新エントリに含まれる前記ポインタにより示された書込エントリ内の内容情報に応じた更新処理を再実行する
請求項７に記載のメモリ制御装置。
【請求項９】
前記ログ記憶部は、それぞれの書込エントリに、当該書込エントリに含まれるデータが読み出されたことを示す読出フラグを含めて記憶し、
前記制御部は、トランザクションの処理中の前記共有メモリに対する読出処理の実行に応じて、当該読出処理において読み出すデータの共有メモリ上のアドレスが当該トランザクションに対応する何れの書込エントリにも含まれていない場合、前記共有メモリからデータを読み出し、何れかの書込エントリに含まれていた場合、当該書込エントリからデータを読み出すとともに当該書込エントリに前記読出フラグを設定し、
前記制御部は、トランザクションのコミット要求が与えられたことに応じて、当該トランザクションの処理中において記憶された更新エントリの何れかについて、当該更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致せず且つ当該更新エントリに含まれる前記ポインタにより示された書込エントリに前記読出フラグが含まれる場合、書込エントリに含まれるデータを前記共有メモリに書き込むことなく、当該トランザクションをロールバックさせる
請求項７から８の何れかに記載のメモリ制御装置。
【請求項１０】
前記ログ記憶部は、それぞれの書込エントリに、当該書込エントリのデータが更新処理以外の処理に応じて書き込まれたことを示す上書フラグを含んで記憶し、
前記制御部は、トランザクションのコミット要求が与えられたことに応じて、当該トランザクションの処理中において記憶された更新エントリのそれぞれについて、当該更新エントリに含まれる前記ポインタにより示された書込エントリに前記上書フラグが含まれる場合、当該更新エントリに対応する更新処理を再実行せずに、当該書込エントリに含まれるデータを前記共有メモリの当該書込エントリに含まれたアドレスに書き込む
請求項７から９の何れかに記載のメモリ制御装置。
【請求項１１】
共有メモリに対するアクセスをトランザクション単位で制御するメモリ制御装置であって、
前記共有メモリに記憶されたデータのバージョンをアドレス毎に管理する管理部と、
トランザクションの処理中の前記共有メモリに対する更新処理の実行に応じて、当該更新処理において更新するデータの共有メモリ上のアドレスおよび当該更新処理をしたデータのバージョンを含む更新エントリを、トランザクション毎に記憶するログ記憶部と、
制御部と、
を備え、
前記制御部は、
トランザクションのコミット要求が与えられたことに応じて、
当該トランザクションの処理中において記憶された更新エントリのそれぞれについて、当該更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致する場合、当該更新処理の実行に応じた処理結果を前記共有メモリの当該更新エントリに含まれたアドレスに書き込み、一致しない場合、当該更新処理を再実行して再実行結果を前記共有メモリの当該更新エントリに含まれたアドレスに書き込み、
当該トランザクションの処理中において記憶された更新エントリの何れかについて、更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致せず且つ当該更新処理の実行に応じた処理結果が読み出されている場合、再実行結果を前記共有メモリに書き込むことなく、当該トランザクションをロールバックさせ、
当該トランザクションの処理中において記憶された更新エントリのそれぞれについて、更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致せず且つ当該更新処理の処理結果が他の書込処理に応じて上書きされている場合、上書きされたデータを前記共有メモリに書き込む
メモリ制御装置。
【請求項１２】
共有メモリに対するアクセスをトランザクション単位で制御するメモリ制御装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記共有メモリに記憶されたデータのバージョンを記憶する管理部と、
トランザクションの処理中の前記共有メモリに対する更新処理の実行に応じて、当該更新処理をしたデータのバージョンを含む更新エントリを、トランザクション毎に記憶するログ記憶部と、
トランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致する場合、当該更新処理の実行に応じた処理結果を前記共有メモリに書き込み、一致しない場合、当該更新処理を再実行して再実行結果を前記共有メモリに書き込む制御部と、
して機能させるプログラム。
【請求項１３】
共有メモリに対するアクセスをトランザクション単位で制御するメモリ制御装置として、コンピュータを動作させる方法であって、
前記コンピュータは、
前記共有メモリに記憶されたデータのバージョンを記憶する管理部と、
トランザクションの処理中の前記共有メモリに対する更新処理の実行に応じて、当該更新処理をしたデータのバージョンを含む更新エントリを、トランザクション毎に記憶するログ記憶部と、
を備え、
トランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致する場合、当該更新処理の実行に応じた処理結果を前記共有メモリに書き込み、一致しない場合、当該更新処理を再実行して再実行結果を前記共有メモリに書き込む
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリに対するアクセスをトランザクション単位で制御するメモリ制御装置、プログラム及び方法に関する。
【背景技術】
【０００２】
コンピュータシステムにおいて、複数のスレッドが複数の処理を並列に実行するマルチスレッドが用いられる。マルチスレッドを用いたコンピュータシステムでは、各スレッドが、複数のスレッドが共通に用いる共有変数にアクセスする場合、他のスレッドとの同期をとらなければならない。マルチスレッドにおける同期方法としては、例えば、ロックを使用した排他制御が知られている。しかし、ロックを使用した排他制御では、排他的に実行される処理領域（即ち、クリティカルセクション）が大きくなると、マルチスレッドによる処理の並列性が損なわれ、性能を低下させてしまう。
【０００３】
このような問題を解決する同期機構の一つに、トランザクショナルメモリが存在する。トランザクショナルメモリは、クリティカルセクションをトランザクションとして扱い、トランザクション内のメモリアクセスをアトミックに処理する。即ち、トランザクショナルメモリは、トランザクション内の共有変数に対するメモリアクセスをログし、トランザクション内での共有変数の値の変更を、当該トランザクションがコミットされるまで、他のトランザクションから不可視とする。そして、トランザクショナルメモリは、トランザクションの最後において共有変数に対するアクセスの衝突を確認して、衝突がなければ当該トランザクションをコミットして共有変数の値の変更を反映し、衝突があれば当該トランザクションをロールバックする。
【０００４】
図１は、２つのトランザクションＴ１、Ｔ２が並行して共有変数Ｖの値をリードモディファイライトした場合の処理の流れを示す。例えば、トランザクションＴ１内での共有変数Ｖの値の変更がコミットされ、トランザクションＴ２がトランザクションＴ１においてコミットされる前の共有変数Ｖの値を読んでいる。この場合、トランザクションＴ１とトランザクションＴ２との間で共有変数Ｖに対するメモリアクセスが衝突し、トランザクションＴ２のコミットが失敗する。コミットに失敗したトランザクションＴ２は、ロールバックされる。即ち、トランザクションＴ２は、トランザクション内のメモリアクセスが、トランザクションの開始時の状態に巻き戻されて、再実行される。
【０００５】
【非特許文献１】Ｔ．Ｈａｒｒｉｓ，Ｓ．  Ｓｔｉｐｉｃ、"Ａｂｓｔｒａｃｔ  ｎｅｓｔｅｄ  Ｔｒａｎｓａｃｔｉｏｎｓ"、［ｏｎｌｉｎｅ］、ＴＲＡＮＳＡＣＴ  ２００７、［平成２０年１０月２７日検索］、インターネット  ＜ＵＲＬ  http://www.cs.rochester.edu/meetings/TRANSACT07/papers/harris.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、このようなトランザクショナルメモリでは、トランザクション中に、変数の値を読み出して読み出した値に対して演算をした後に書き戻すリードモディファイライトが存在すると、ロールバックが頻繁に発生する可能性がある。ロールバックによるオーバヘッドは、トランザクションのサイズが大きいほど大きい。従って、大きなサイズのトランザクションにリードモディファイライトが含まれている場合、プログラムの実行効率が悪くなってしまう。
【０００７】
このような問題を回避する方法として、非特許文献１には、トランザクションのコミット失敗時において、トランザクション全体を再実行しなくてよい方法が記載されている。非特許文献１に記載された方法は、プログラマがトランザクションを構成するコード中に、ＡＮＴ（Ａｂｓｔｒａｃｔ  ｎｅｓｔｅｄ  Ｔｒａｎｓａｃｔｉｏｎｓ）ブロックを設ける。そして、ＡＮＴブロックの実行のログおよびＡＮＴブロック以外のコードの実行のログを別個に取得し、もしＡＮＴブロック中のメモリアクセスのみがロールバックの原因となっている場合、ＡＮＴブロックのみの再実行を試みる。そして、最初の実行結果と再実行の結果とを比較して、もし再実行がプログラムの実行結果に影響しない場合、再実行の結果を基にコミットする。
【０００８】
しかし、非特許文献１に記載された方法では、プログラマがリードモディファイライト等のロールバックの原因となる箇所を指定しなければならない。従って、ソースコードが存在しないライブラリの中のリードモディファイライトが原因でロールバックが頻発した場合、トランザクション全体の再実行を回避することができない。
【０００９】
そこで本発明は、上記の課題を解決することのできるメモリ制御装置、プログラム及び方法を提供することを目的とする。この目的は特許請求の範囲における独立項に記載の特徴の組み合わせにより達成される。また従属項は本発明の更なる有利な具体例を規定する。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明の第１の態様においては、共有メモリに対するアクセスをトランザクション単位で制御するメモリ制御装置であって、前記共有メモリに記憶されたデータのバージョンを記憶する管理部と、トランザクションの処理中の前記共有メモリに対する更新処理の実行に応じて、当該更新処理をしたデータのバージョンを含む更新エントリを、トランザクション毎に記憶するログ記憶部と、トランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと前記管理部に記憶されたバージョンとが一致する場合、当該更新処理の実行に応じた処理結果を前記共有メモリに書き込み、一致しない場合、当該更新処理を再実行して再実行結果を前記共有メモリに書き込む制御部と、を備えるメモリ制御装置を提供する。更に、このようなメモリ制御装置としてコンピュータを機能させるプログラム及び方法を提供する。
【００１１】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではなく、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【発明を実施するための最良の形態】
【００１２】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１３】
図２は、本実施形態に係るコンピュータシステム１０の構成を示す。コンピュータシステム１０は、複数のスレッド１２と、共有メモリ１４とを備える。複数のスレッド１２は、それぞれがプロセッサを有し、複数のプログラムを並行して実行する。共有メモリ１４は、それぞれのスレッド１２からアクセスされる共有変数を記憶する。
【００１４】
また、複数のスレッド１２のそれぞれは、トランザクショナルメモリの機能を有する。これにより、複数のスレッド１２のそれぞれは、他のスレッド１２との同期を取って、共有メモリ１４に対してアクセスをすることができる。
【００１５】
図３は、本実施形態に係るメモリ制御装置３０の機能構成を、共有メモリ１４及び実行部２０と共に示す。実行部２０は、スレッド１２内のプロセッサがプログラムを実行することにより実現される。実行部２０は、共有メモリ１４に対するアクセスを実行する。より具体的には、実行部２０は、共有メモリ１４に記憶されているデータを読み出す読出処理、共有メモリ１４に対してデータを書き込む書込処理を実行する。更に、実行部２０は、共有メモリ１４に記憶されているデータを読み出して読み出したデータに所定の演算処理を施したデータを共有メモリ１４に書き戻す更新処理を実行する。
【００１６】
メモリ制御装置３０は、実行部２０による共有メモリ１４に対するアクセスをトランザクション単位で制御して、トランザクショナルメモリの機能を実現する。メモリ制御装置３０は、複数のスレッド１２のそれぞれにより個別に実現されてもよいし、複数のスレッド１２のうちの何れか一つにより当該コンピュータシステム１０の共通機能として実現されてもよい。
【００１７】
なお、ここで、トランザクションとは、実行部２０による複数の処理を一つにまとめた単位をいう。トランザクションは、コミットまたはロールバックにより処理が完了する。メモリ制御装置３０は、一のトランザクション内の全ての処理が不整合無く完了できる場合には、処理結果を共有メモリ１４に反映するコミット処理を実行する。また、メモリ制御装置３０は、一のトランザクション内の少なくとも１つの処理に不整合が発生する場合には、実行部２０に対してロールバックを要求して、実行部２０により当該一のトランザクションを再実行させる。
【００１８】
メモリ制御装置３０は、管理部３２と、ログ記憶部３４と、制御部３６とを備える。管理部３２は、共有メモリ１４に記憶されたそれぞれのデータのバージョンを記憶する。ここで、管理部３２は、それぞれのデータのバージョンを、当該コンピュータシステム１０において実行される複数のトランザクションに対して同期して管理する。管理部３２は、一例として、複数のスレッド１２によりアクセスがされるメモリ上にバージョンを表わす値を記憶して、記憶した値をロックを用いた排他制御により管理する。
【００１９】
ログ記憶部３４は、トランザクションの処理中の共有メモリ１４に対する更新処理の実行に応じて、当該更新処理をしたデータのバージョンを含む更新エントリを、トランザクション毎に記憶する。より具体的には、ログ記憶部３４は、トランザクションの処理中において共有メモリ１４に対する更新処理が実行された場合、更新処理の対象となるデータのバージョンを管理部３２から読み出す。そして、ログ記憶部３４は、読み出したバージョンを含む更新エントリを生成して、生成した更新エントリを当該トランザクションに対応させて記憶する。
【００２０】
制御部３６は、実行部２０からトランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと管理部３２に記憶されたバージョンとが一致するか否かを判断する。そして、制御部３６は、一致する場合、当該更新処理の実行に応じた処理結果を共有メモリ１４に書き込み、一致しない場合、当該更新処理を再実行して再実行結果を共有メモリ１４に書き込む。
【００２１】
ただし、制御部３６は、トランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと管理部３２に記憶されたバージョンとが一致せず且つ当該更新処理の実行に応じた処理結果が読み出されている場合、再実行結果を共有メモリ１４に書き込むことなく、当該トランザクションをロールバックさせる。また、制御部３６は、トランザクションのコミット要求が与えられたことに応じて、更新エントリに含まれるバージョンと管理部３２に記憶されたバージョンとが一致せず且つ当該更新処理の処理結果が他の書込処理に応じて上書きされている場合、上書きされたデータを共有メモリ１４に書き込む。
【００２２】
このようにメモリ制御装置３０は、当該トランザクション内の更新処理の対象のデータが、当該更新処理を実行してからコミットまでの間に他のトランザクション内の処理において書き換えられた場合であっても、コミット時まで実行を遅らせることができる更新処理についてはコミット時において再実行する。これにより、メモリ制御装置３０によれば、トランザクションの全体の再実行を回避して、プログラムの実行効率を向上させることができる。
【００２３】
図４は、管理部３２内に記憶されたデータの一例を示す。管理部３２は、一例として、共有メモリ１４に記憶されたデータのバージョンを共有メモリ１４のアドレス毎に管理してよい。
【００２４】
管理部３２は、一例として、図４に示されるように、インデックス、バージョンおよびロックビットを見出しとして含むテーブルを記憶してよい。インデックスには、共有メモリ１４のアドレスを表わす値が格納される。
【００２５】
バージョンには、対応するアドレスに記憶されたデータのバージョンを表す値が格納される。例えば、バージョンには、初期値（例えば０）から最終値（例えば１０２３）までの範囲を、サイクリックに、１ずつインクリメントまたはデクリメントされる整数値が格納されてよい。ロックビットには、当該行におけるバージョンの更新を排他管理するためのビット値が格納される。管理部３２は、このようなテーブルを記憶することにより、共有メモリ１４に記憶されたデータのバージョンを共有メモリ１４のアドレス毎に管理することができる。
【００２６】
なお、管理部３２は、アドレスの下位ビットの値毎に、データのバージョンを管理してもよい。この場合、管理部３２は、アドレスの下位ビットが同一となる複数のデータのバージョンを共通に管理するので、コミット時においてバージョンの不一致が生じる可能性が高くなるデメリットが生じるが、記憶容量を少なくすることができるというメリットが生じる。
【００２７】
図５は、ログ記憶部３４内に記憶されるデータの構成の一例を示す。ログ記憶部３４は、読出エントリ、更新エントリおよび書込エントリをトランザクション毎に記憶する。
【００２８】
より詳しくは、ログ記憶部３４は、トランザクションの処理中の共有メモリ１４に対する読出処理および更新処理の実行に応じて、読出エントリをトランザクション毎に記憶する。ここで、ログ記憶部３４は、それぞれの読出エントリに、当該読出処理又は当該更新処理において読み出すデータの共有メモリ１４上のアドレス、および、当該読出処理又は当該更新処理において読み出すデータのバージョンを含めて記憶する。
【００２９】
また、ログ記憶部３４は、トランザクションの処理中の共有メモリ１４に対する更新処理の実行に応じて、更新エントリをトランザクション毎に記憶する。ここで、ログ記憶部３４は、それぞれの更新エントリに、当該更新処理において更新するデータの共有メモリ１４上のアドレス、当該更新処理において更新するデータのバージョン、および、当該更新処理の処理結果を含む書込エントリへのポインタを含めて記憶する。
【００３０】
また、ログ記憶部３４は、トランザクションの処理中の共有メモリ１４に対する書込処理および更新処理の実行に応じて、書込エントリをトランザクション毎に記憶する。ここで、ログ記憶部３４は、それぞれの書込エントリに、アドレス、データ、読出フラグ、上書フラグおよび内容情報を含めて記憶する。
【００３１】
各書込エントリに含まれるアドレスは、当該書込処理又は当該更新処理において書き込むデータの共有メモリ１４上のアドレスである。各書込エントリに含まれるデータは、当該書込処理において共有メモリ１４に書き込むデータ、または、当該更新処理において共有メモリ１４に書き込む当該更新処理の処理結果であるデータである。
【００３２】
また、各書込エントリに含まれる読出フラグは、当該書込エントリに含まれるデータが読み出されたことを示すフラグである。各書込エントリに含まれる上書フラグは、当該書込エントリのデータが更新処理以外の処理に応じて書き込まれたことを示すフラグである。
【００３３】
各書込エントリに含まれる内容情報は、当該更新処理の内容を表わす情報である。ログ記憶部３４は、一例として、内容情報として、値を読み出して１を加算して書き戻す処理（インクリメント）、値を読み出して１を減算して書き戻す処理（デクリメント）、値を読み出して定数を加算して書き戻す処理、値を読み出して定数を乗算して書き戻す処理等を識別する情報を記憶する。
【００３４】
なお、このようなログ記憶部３４は、トランザクションの処理中の共有メモリ１４に対する更新処理の実行において、当該更新処理において更新するデータの共有メモリ１４上のアドレスが既に何れかの書込エントリに含まれている場合、当該更新処理に対応する新たな更新エントリを記憶しない。そして、この場合には、ログ記憶部３４は、当該更新処理において更新するデータの共有メモリ１４上のアドレスを含む書込エントリに更新処理結果を格納する。
【００３５】
図６は、実行部２０によるトランザクションの処理中の共有メモリ１４に対する読出処理の実行において、メモリ制御装置３０が行う処理のフローを示す。メモリ制御装置３０の制御部３６は、実行部２０によるトランザクションの処理中の共有メモリ１４に対する読出処理の実行に応じて、当該読出処理において読み出すデータの共有メモリ１４上のアドレスを実行部２０から受け取る。そして、制御部３６は、受け取ったアドレスが、当該トランザクションに対応してログ記憶部３４内に記憶された何れかの書込エントリに含まれているか否かを判断する（Ｓ１０１）。即ち、制御部３６は、当該読出処理により読み出すデータが、当該トランザクションの処理中の当該読出処理より以前の書込処理により書き込まれたデータであるか否かを判断する。
【００３６】
制御部３６は、当該読出処理において読み出すデータの共有メモリ１４上のアドレスが当該トランザクションに対応する何れの書込エントリにも含まれていない場合（Ｓ１０１のＮＯ）、共有メモリ１４からデータを読み出す（Ｓ１０２）。続いて、制御部３６は、共有メモリ１４から読み出したデータのバージョンを、管理部３２から読み出す（Ｓ１０３）。続いて、制御部３６は、読み出したデータの共有メモリ１４上のアドレスおよびバージョンを含む読出エントリを、新たに追加してログ記憶部３４に記憶させる（Ｓ１０４）。
【００３７】
一方、制御部３６は、当該読出処理において読み出すデータの共有メモリ１４上のアドレスが当該トランザクションに対応する何れかの書込エントリに含まれていた場合（Ｓ１０１のＹＥＳ）、当該書込エントリからデータを読み出す（Ｓ１０５）。続いて、制御部３６は、当該書込エントリに、読出フラグを設定する（Ｓ１０６）。
【００３８】
ステップＳ１０４またはステップＳ１０６の処理を終えると、続いて、制御部３６は、共有メモリ１４または書込エントリから読み出したデータを実行部２０に返信する（Ｓ１０７）。ステップＳ１０７の処理を終えると、制御部３６は、当該書込処理に応じた処理を終了する。制御部３６は、以上のステップＳ１０１からステップＳ１０７の処理を、実行部２０において読出処理が実行される毎に実行する。
【００３９】
図７は、実行部２０によるトランザクションの処理中の共有メモリ１４に対する書込処理の実行において、メモリ制御装置３０が行う処理のフローを示す。メモリ制御装置３０の制御部３６は、実行部２０によるトランザクションの処理中の共有メモリ１４に対する書込処理の実行に応じて、当該書込処理において共有メモリ１４に書き込むデータおよび共有メモリ１４上のアドレスを、実行部２０から受け取る。そして、制御部３６は、受け取ったアドレスが、当該トランザクションに対応してログ記憶部３４内に記憶された何れかの書込エントリに含まれているか否かを判断する（Ｓ１２１）。即ち、制御部３６は、当該トランザクションの処理中の当該書込処理より以前に書き込んだデータに、新たなデータを上書するか否かを判断する。
【００４０】
制御部３６は、当該書込処理においてデータを書き込む共有メモリ１４上のアドレスが当該トランザクションに対応する何れの書込エントリにも含まれていない場合（Ｓ１２１のＮＯ）、書込エントリを新たに追加してログ記憶部３４に記憶させる（Ｓ１２２）。一方、制御部３６は、当該書込処理においてデータを書き込む共有メモリ１４上のアドレスが当該トランザクションに対応する何れかの書込エントリに含まれていた場合（Ｓ１２１のＹＥＳ）、新たな書込エントリを追加せずに、当該書込エントリをログ記憶部３４に上書きして記憶させる（Ｓ１２３）。
【００４１】
ここで、ログ記憶部３４は、当該書込処理が更新処理に伴った処理である場合には、書込エントリに、アドレス、データ及び内容情報を含め、読出フラグ及び上書フラグを含めずに記憶する。また、ログ記憶部３４は、当該書込処理が更新処理に伴っていない処理である場合には、書込エントリに、アドレス、データ及び上書フラグを含め、読出フラグ及び内容情報を含めずに記憶する。
【００４２】
ステップＳ１２２またはステップＳ１２３の処理を終えると、制御部３６は、書込処理に応じた処理を終了する。制御部３６は、以上のステップＳ１２１からステップＳ１２３の処理を、実行部２０において書込処理が実行される毎に実行する。
【００４３】
図８は、実行部２０によるトランザクションの処理中の共有メモリ１４に対する更新処理の実行において、メモリ制御装置３０が行う処理のフローを示す。メモリ制御装置３０の制御部３６は、実行部２０によるトランザクションの処理中の共有メモリ１４に対する更新処理の実行に応じて、当該更新処理において読み出すデータの共有メモリ１４上のアドレスを、実行部２０から受け取る。そして、制御部３６は、図６のステップＳ１０１からステップＳ１０７において示した読出処理と同様の処理を実行する（Ｓ１３１）。実行部２０は、ステップＳ１３１において読み出されたデータに対して、インクリメントおよびデクリメント等の更新処理のための演算を施す。
【００４４】
続いて、制御部３６は、更新処理のための演算をした結果を実行部２０から受け取る。これとともに、制御部３６は、更新処理の処理内容を実行部２０から受け取る。そして、制御部３６は、図７のステップＳ１２１からステップＳ１２３において示した書込処理と同様の処理を実行する（Ｓ１３２）。
【００４５】
続いて、制御部３６は、受け取ったアドレスが、当該トランザクションに対応してログ記憶部３４内に記憶された何れかの更新エントリに含まれているか否かを判断する（Ｓ１３３）。制御部３６は、当該更新処理においてデータを書き込む共有メモリ１４上のアドレスが当該トランザクションに対応する何れの更新エントリにも含まれていない場合（Ｓ１３３のＮＯ）、アドレス、データ及びポインタを含めた更新エントリを、ログ記憶部３４に新たに追加して記憶させる（Ｓ１３４）。そして、制御部３６は、当該更新処理を終了する。
【００４６】
一方、制御部３６は、当該更新処理においてデータを書き込む共有メモリ１４上のアドレスが当該トランザクションに対応する何れかの更新エントリに含まれていた場合（Ｓ１３３のＹＥＳ）、新たな更新エントリを追加せずに、処理を終了する。制御部３６は、以上のステップＳ１３１からステップＳ１３４の処理を、実行部２０において更新処理が実行される毎に実行する。
【００４７】
図９は、実行部２０からトランザクションのコミット要求が与えられた場合に、メモリ制御装置３０が行う処理のフローを示す。メモリ制御装置３０の制御部３６は、実行部２０からトランザクションのコミット要求が与えられたことに応じて、以下のステップＳ１４１からステップＳ１５２の処理を実行する。
【００４８】
制御部３６は、トランザクションのコミット要求が与えられると、当該トランザクションに対応して記憶した、全ての書込エントリに含まれるアドレスを読出して、読み出したそれぞれのアドレスについてロックを取得する（Ｓ１４１）。これにより、制御部３６は、これらのアドレスに対して、他のトランザクションによるデータの書き換えを禁止することができる。
【００４９】
なお、制御部３６は、読み出したアドレスのうち何れか１つでもロックが取得できなかった場合には、実行部２０による当該トランザクションの処理を開始時の状態にロールバックさせて処理を終了する（Ｓ１４２）。これにより、制御部３６は、当該トランザクションの処理中に書き込まれるべきデータが、他のトランザクションにより書き換えられている場合には、当該トランザクションをロールバックして再実行させるので、他のトランザクションとの同期を取ることができる。
【００５０】
ロックが取得できると、続いて、制御部３６は、当該トランザクションの処理中において記憶された読出エントリのそれぞれについて、当該読出エントリに含まれるバージョンと、当該読出エントリに含まれるアドレスに対応する管理部３２に記憶されたバージョンとが一致するか否かを比較する（Ｓ１４３）。読出エントリに含まれるバージョンと管理部３２に記憶されたバージョンとが一つでも一致しない場合、制御部３６は、実行部２０による当該トランザクションの処理を開始時の状態にロールバックさせて処理を終了する（Ｓ１４２）。これにより、制御部３６は、当該トランザクションの処理中に読み出されたデータが他のトランザクションにより書き換えられた場合には、当該トランザクションをロールバックして再実行させるので、当該データの整合性を保つことができる。
【００５１】
当該読出エントリに含まれるバージョンと管理部３２に記憶されたバージョンとが全て一致する場合、制御部３６は、処理をステップＳ１４４に進める。ステップＳ１４４において、制御部３６は、当該トランザクションの処理中において記憶された更新エントリのそれぞれについて、当該更新エントリに含まれるバージョンと、当該更新エントリに含まれるアドレスに対応する管理部３２に記憶されたバージョンとが一致するか否かを比較する（Ｓ１４４）。制御部３６は、当該更新エントリに含まれるバージョンと管理部３２に記憶されたバージョンとが全て一致する場合、処理をステップＳ１５１に進める。
【００５２】
制御部３６は、当該更新エントリに含まれるバージョンと管理部３２に記憶されたバージョンとが一つでも一致しない場合、処理をステップＳ１４５に進める。次にステップＳ１４５において、制御部３６は、当該トランザクションの処理中において記憶された更新エントリのそれぞれついて、当該更新エントリに含まれるバージョンと管理部３２に記憶されたバージョンとが一致せず且つ当該更新エントリに含まれるポインタにより示された書込エントリに読出フラグが含まれるか否かを判断する（Ｓ１４５）。制御部３６は、更新エントリの何れか一つでも、当該更新エントリのバージョンが不一致で且つポインタにより示された書込エントリに読出フラグが含まれる場合、実行部２０による当該トランザクションの処理を開始時の状態にロールバックさせて処理を終了する（Ｓ１４２）。これにより、制御部３６は、更新処理をした処理結果が当該トランザクション中において読み出されており、且つ、当該更新処理をすべきデータが他のトランザクションにおいて書き換えられた場合には、当該トランザクションをロールバックして再実行させるので、当該データの整合性を保つことができる。
【００５３】
更新エントリの何れもが、当該更新エントリのバージョンが不一致で且つポインタにより示された書込エントリに読出フラグが含まれない場合、制御部３６は、処理をステップＳ１４６に進める。制御部３６は、当該トランザクションの処理中において記憶された更新エントリのそれぞれについて、ステップＳ１４７からステップＳ１４９の処理を実行する（Ｓ１４６、Ｓ１５０）。
【００５４】
制御部３６は、ステップＳ１４７において、当該更新エントリに含まれるポインタにより示された書込エントリに上書フラグが含まれるか否かを判断する（Ｓ１４７）。当該更新エントリに含まれるポインタにより示された書込エントリに上書フラグが含まれない場合（Ｓ１４７のＮＯ）、当該更新処理を再実行する（Ｓ１４８）。この場合において、制御部３６は、再実行対象となる更新処理に対応する更新エントリに含まれるポインタにより示された書込エントリ内の内容情報に応じた更新処理を再実行する。続いて、制御部３６は、更新処理を再実行した再実行結果を再実行対象となる更新処理に対応する更新エントリに含まれるポインタにより示された書込エントリ内に上書きする（Ｓ１４９）。
【００５５】
また、制御部３６は、当該更新エントリに含まれるポインタにより示された書込エントリに上書フラグが含まれる場合（Ｓ１４７のＹＥＳ）、当該更新エントリに対応する更新処理を再実行しない。以上のように、制御部３６は、当該更新エントリに含まれるポインタにより示された書込エントリに上書フラグが含まれず且つ当該更新エントリに含まれるバージョンと管理部３２に記憶されたバージョンとが一致しない場合、当該更新処理を再実行することができる。
【００５６】
当該トランザクションの処理中において記憶された更新エントリのそれぞれについて、ステップＳ１４７からステップＳ１４９の処理を終了すると、制御部３６は、処理をステップＳ１５１に進める。ステップＳ１５１において、制御部３６は、当該トランザクションに対応するそれぞれの書込エントリに含まれるデータを、共有メモリ１４の当該書込エントリに含まれたアドレスに書き込む（Ｓ１５１）。
【００５７】
続いて、制御部３６は、共有メモリ１４に書き込んだデータのバージョンを更新する（Ｓ１５２）。制御部３６は、一例として、更新エントリに含まれるそれぞれのアドレスに対応するバージョンを管理部３２から読み出して、読み出した値を例えば１ずつインクリメントして、管理部３２に書き戻す。
【００５８】
このようにメモリ制御装置３０は、当該トランザクション内の更新処理の対象のデータが、当該更新処理を実行してからコミットまでの間に書き換えられてバージョンの不一致が発生した場合であっても、コミット時まで実行を遅らせることができる更新処理についてはコミット時において再実行する。これにより、メモリ制御装置３０によれば、トランザクションの全体の再実行を回避して、プログラムの実行効率を向上させることができる。
【００５９】
図１０は、本実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ１９００は、ホスト・コントローラ２０８２により相互に接続されるＣＰＵ２０００、ＲＡＭ２０２０、グラフィック・コントローラ２０７５、及び表示装置２０８０を有するＣＰＵ周辺部と、入出力コントローラ２０８４によりホスト・コントローラ２０８２に接続される通信インターフェイス２０３０、ハードディスクドライブ２０４０、及びＣＤ−ＲＯＭドライブ２０６０を有する入出力部と、入出力コントローラ２０８４に接続されるＲＯＭ２０１０、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０を有するレガシー入出力部とを備える。
【００６０】
ホスト・コントローラ２０８２は、ＲＡＭ２０２０と、高い転送レートでＲＡＭ２０２０をアクセスするＣＰＵ２０００及びグラフィック・コントローラ２０７５とを接続する。ＣＰＵ２０００は、ＲＯＭ２０１０及びＲＡＭ２０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ２０７５は、ＣＰＵ２０００等がＲＡＭ２０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置２０８０上に表示させる。これに代えて、グラフィック・コントローラ２０７５は、ＣＰＵ２０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【００６１】
入出力コントローラ２０８４は、ホスト・コントローラ２０８２と、比較的高速な入出力装置である通信インターフェイス２０３０、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０を接続する。通信インターフェイス２０３０は、ネットワークを介して他の装置と通信する。ハードディスクドライブ２０４０は、コンピュータ１９００内のＣＰＵ２０００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ２０６０は、ＣＤ−ＲＯＭ２０９５からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。
【００６２】
また、入出力コントローラ２０８４には、ＲＯＭ２０１０と、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０の比較的低速な入出力装置とが接続される。ＲＯＭ２０１０は、コンピュータ１９００が起動時に実行するブート・プログラム、及び／又は、コンピュータ１９００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ２０５０は、フレキシブルディスク２０９０からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。入出力チップ２０７０は、フレキシブルディスク・ドライブ２０５０を入出力コントローラ２０８４へと接続すると共に、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ２０８４へと接続する。
【００６３】
ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供されるプログラムは、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ２０２０を介してコンピュータ１９００内のハードディスクドライブ２０４０にインストールされ、ＣＰＵ２０００において実行される。
【００６４】
コンピュータ１９００にインストールされ、コンピュータ１９００をメモリ制御装置３０として機能させるプログラムは、管理モジュールと、ログ記憶モジュールと、制御モジュールとを備える。これらのプログラム又はモジュールは、ＣＰＵ２０００等に働きかけて、コンピュータ１９００を、管理部３２、ログ記憶部３４および制御部３６としてそれぞれ機能させる。
【００６５】
これらのプログラムに記述された情報処理は、コンピュータ１９００に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段である管理部３２、ログ記憶部３４および制御部３６として機能する。そして、これらの具体的手段によって、本実施形態におけるコンピュータ１９００の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有のメモリ制御装置３０が構築される。
【００６６】
一例として、コンピュータ１９００と外部の装置等との間で通信を行う場合には、ＣＰＵ２０００は、ＲＡＭ２０２０上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス２０３０に対して通信処理を指示する。通信インターフェイス２０３０は、ＣＰＵ２０００の制御を受けて、ＲＡＭ２０２０、ハードディスクドライブ２０４０、フレキシブルディスク２０９０、又はＣＤ−ＲＯＭ２０９５等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス２０３０は、ＤＭＡ（ダイレクト・メモリ・アクセス）方式により記憶装置との間で送受信データを転送してもよく、これに代えて、ＣＰＵ２０００が転送元の記憶装置又は通信インターフェイス２０３０からデータを読み出し、転送先の通信インターフェイス２０３０又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
【００６７】
また、ＣＰＵ２０００は、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０（ＣＤ−ＲＯＭ２０９５）、フレキシブルディスク・ドライブ２０５０（フレキシブルディスク２０９０）等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をＤＭＡ転送等によりＲＡＭ２０２０へと読み込ませ、ＲＡＭ２０２０上のデータに対して各種の処理を行う。そして、ＣＰＵ２０００は、処理を終えたデータを、ＤＭＡ転送等により外部記憶装置へと書き戻す。このような処理において、ＲＡＭ２０２０は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはＲＡＭ２０２０および外部記憶装置等をメモリ、記憶部、または記憶装置等と総称する。本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、ＣＰＵ２０００は、ＲＡＭ２０２０の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはＲＡＭ２０２０の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもＲＡＭ２０２０、メモリ、及び／又は記憶装置に含まれるものとする。
【００６８】
また、ＣＰＵ２０００は、ＲＡＭ２０２０から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、ＲＡＭ２０２０へと書き戻す。例えば、ＣＰＵ２０００は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすかどうかを判断し、条件が成立した場合（又は不成立であった場合）に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
【００６９】
また、ＣＰＵ２０００は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第１属性の属性値に対し第２属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、ＣＰＵ２０００は、記憶装置に格納されている複数のエントリの中から第１属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第２属性の属性値を読み出すことにより、所定の条件を満たす第１属性に対応付けられた第２属性の属性値を得ることができる。
【００７０】
以上に示したプログラム又はモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５の他に、ＤＶＤ又はＣＤ等の光学記録媒体、ＭＯ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワーク又はインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１９００に提供してもよい。
【００７１】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【００７２】
請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【図面の簡単な説明】
【００７３】
【図１】図１は、２つのトランザクションＴ１、Ｔ２が並行して共有変数Ｖの値をリードモディファイライトした場合の処理の流れを示す。
【図２】図２は、本実施形態に係るコンピュータシステム１０の構成を示す。
【図３】図３は、本実施形態に係るメモリ制御装置３０の機能構成を、共有メモリ１４及び実行部２０と共に示す。
【図４】図４は、管理部３２内に記憶されたデータの一例を示す。
【図５】図５は、ログ記憶部３４内に記憶されるデータの構成の一例を示す。
【図６】図６は、実行部２０によるトランザクションの処理中の共有メモリ１４に対する読出処理の実行において、メモリ制御装置３０が行う処理のフローを示す。
【図７】図７は、実行部２０によるトランザクションの処理中の共有メモリ１４に対する書込処理の実行において、メモリ制御装置３０が行う処理のフローを示す。
【図８】図８は、実行部２０によるトランザクションの処理中の共有メモリ１４に対する更新処理の実行において、メモリ制御装置３０が行う処理のフローを示す。
【図９】図９は、実行部２０からトランザクションのコミット要求が与えられた場合に、メモリ制御装置３０が行う処理のフローを示す。
【図１０】本発明の実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。
【符号の説明】
【００７４】
１０  コンピュータシステム
１２  スレッド
１４  共有メモリ
２０  実行部
３０  メモリ制御装置
３２  管理部
３４  ログ記憶部
３６  制御部
１９００  コンピュータ
２０００  ＣＰＵ
２０１０  ＲＯＭ
２０２０  ＲＡＭ
２０３０  通信インターフェイス
２０４０  ハードディスクドライブ
２０５０  フレキシブルディスク・ドライブ
２０６０  ＣＤ−ＲＯＭドライブ
２０７０  入出力チップ
２０７５  グラフィック・コントローラ
２０８０  表示装置
２０８２  ホスト・コントローラ
２０８４  入出力コントローラ
２０９０  フレキシブルディスク
２０９５  ＣＤ−ＲＯＭ
【図１】
2010117869.tif 000003
【図２】
2010117869.tif 000004
【図３】
2010117869.tif 000005
【図４】
2010117869.tif 000006
【図５】
2010117869.tif 000007
【図６】
2010117869.tif 000008
【図７】
2010117869.tif 000009
【図８】
2010117869.tif 000010
【図９】
2010117869.tif 000011
【図１０】
2010117869.tif 000012