(57)【特許請求の範囲】
【請求項１】
メモリ保護情報で指定されたアドレス領域にのみアクセスを可能とすることによってメモリを保護する機能を備えたコンピュータにおいて、
指定されたアドレスへのメモリアクセスを伴う処理要求を受け取ると、上記処理要求に従った処理を実行するとともに、メモリアクセスが発生した際には、上記処理要求で指定されたアドレスへのアクセス要求を出力する要求処理手段と、
上記要求処理手段が出力した上記アクセス要求を受け取り、上記処理要求を出力したオブジェクトがアクセスできる領域をアクセス可能領域としたメモリ保護情報を設定し、上記アクセス要求に応じたメモリアクセス命令をプロセッサに出力するメモリアクセス代行手段と、
上記メモリアクセス代行手段が出力した上記メモリアクセス命令が、上記メモリ保護情報に設定されている領域以外へのアクセスであるときには、上記メモリアクセス命令に対する例外を発生させるメモリ管理手段と、
上記メモリ管理手段により発生された例外に応じて、例外処理を実行し、上記メモリアクセス代行手段の実行中に発生した例外であるときには、上記メモリアクセス代行手段にアクセス要求を出力した要求処理手段に対して、処理が例外終了した旨のメッセージを通知する例外処理手段とを備え、
上記メモリアクセス代行手段は、予め定められたメモリ領域で実行されており、
上記例外処理手段は、上記例外が発生した際にプログラムカウンタに設定されているアドレスが、上記メモリアクセス代行手段が実行されているメモリ領域内を指し示していることに基づいて、上記メモリアクセス代行手段実行中の例外であることを認識するコンピュータ。
【請求項２】
上記メモリ管理手段は、上記プロセッサ内に構成されている請求項１に記載のコンピュータ。
【請求項３】
上記メモリアクセス代行手段は、上記要求処理手段のコンテキスト上で各種処理を実行する請求項１に記載のコンピュータ。
【請求項４】
メモリアクセス命令がメモリ保護情報に設定されている領域以外へのアクセスであるときには、上記メモリアクセス命令に対する例外を発生させるようなメモリ管理機能を備えたプロセッサで実行されるアドレス有効性照合プログラムを記録したコンピュータ読み取り可能な記録媒体において、
コンピュータを、指定されたアドレスへのメモリアクセスを伴う処理要求を受け取ると、上記処理要求に従った処理を実行するとともに、メモリアクセスが発生した際には、上記処理要求で指定されたアドレスへのアクセス要求を出力する要求処理手段、上記要求処理手段が出力した上記アクセス要求を受け取り、上記処理要求を出力したオブジェクトがアクセスできる領域をアクセス可能領域としたメモリ保護情報を設定し、上記アクセス要求に応じたメモリアクセス命令を上記プロセッサに出力するメモリアクセス代行手段、及び上記メモリ管理機能により発生された例外に応じて、例外処理を実行し、上記メモリアクセス代行手段の実行中に発生した例外であるときには、上記メモリアクセス代行手段にアクセス要求を出力した要求処理手段に対して、処理が例外終了した旨のメッセージを通知する例外処理手段として、機能させ、
上記メモリアクセス代行手段は、予め定められたメモリ領域で実行されており、
上記例外処理手段は、上記例外が発生した際にプログラムカウンタに設定されているアドレスが、上記メモリアクセス代行手段が実行されているメモリ領域内を指し示していることに基づいて、上記メモリアクセス代行手段実行中の例外であることを認識するアドレス有効性照合プログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項５】
メモリアクセス命令がメモリ保護情報に設定されている領域以外へのアクセスであるときには、上記メモリアクセス命令に対する例外を発生させるようなメモリ管理機能を備えたプロセッサを用いたアドレス有効性照合方法において、
要求処理手段は、指定されたアドレスへのメモリアクセスを伴う処理要求が出力されると、上記処理要求に従った処理を実行するとともに、メモリアクセスが発生した際には、上記処理要求で指定されたアドレスへのアクセス要求を出力し、
メモリアクセス代行手段は、上記アクセス要求を受け取り、上記処理要求を出力したオブジェクトがアクセスできる領域をアクセス可能領域としたメモリ保護情報を設定し、上記処理要求の実行中に発生したメモリアクセスを行うための命令を上記プロセッサに対して出力し、
例外処理手段は、上記プロセッサにより発生された例外に応じて、例外処理を実行し、上記例外が発生した際にプログラムカウンタに設定されているアドレスが、上記メモリアクセス代行手段が実行されている予め定められたメモリ領域内を指し示していることに基づいて、上記メモリアクセス代行手段実行中の例外であることを認識したときには、上記メモリアクセス代行手段にアクセス要求を出力した要求処理手段に対して、処理が例外終了した旨のメッセージを通知するアドレス有効性照合方法。
【発明の詳細な説明】
【発明の属する技術分野】
【０００１】
本発明は、メモリ保護機能を有するコンピュータ、アドレス有効性照合プログラムを記録したコンピュータ読み取り可能な記録媒体及びコンピュータでのアドレス有効性照合方法に関し、特に、あるオブジェクトの依頼を受けて他のオブジェクトがメモリアクセスする機能を有しているコンピュータ、そのコンピュータで実行されるアドレス有効性照合プログラムを記録したコンピュータ読み取り可能な記録媒体及びそのコンピュータでのアドレス有効性照合方法に関する。
【従来の技術】
【０００２】
コンピュータ上でプログラムを実行するには、何らかの手段によってメモリを保護する必要がある。例えば、コンピュータ上で実行されるオブジェクトは、その実行中に自分に許可されたアドレス領域以外のメモリ領域に対し、意図的に又は結果的に不正なアクセス要求を発行する場合がある。ここで、オブジェクトとは、例えば同じ出願人による発明を記載した米国出願特許ＵＳ０８／６７８，２８８でいうところの並行オブジェクトであることが好ましい。並行オブジェクトとは、プロセスの実行単位であり、他の並行オブジェクトと並行に処理を行うことのできるようなオブジェクトである。セキュリティやシステムの安定的動作を維持するために、不正なアドレス領域へのアクセスは排除する必要がある。そこで、多くのオペレーティングシステムでは、プロセッサのメモリ管理システムを利用してメモリ保護を実現している。
【０００３】
不正なアドレス領域へのアクセスが生じたときのメモリ保護の処理について、以下に説明する。
【０００４】
図１は、従来のメモリ保護動作を説明するためのブロック図である。オペレーティングシステム１１０は、オブジェクト１０１の実行を開始する際にはコンテキストスイッチを行い、そのオブジェクト１０１の持つメモリ保護情報をプロセッサ１２０のメモリ管理システム１２１に設定する。そして、オブジェクト１０１からメモリ１０２へのアクセスは、全てメモリ管理システム１２１を通して行われる。その際、メモリ管理システム１２１は、指定されたアドレスが現在メモリ管理システム１２１に設定されているメモリ保護情報に違反していないかのチェックを行い、違反がなければ実際のメモリ１０２へのアクセスを行う。違反していた場合、メモリアクセスは行われず、メモリ管理システム１２１により例外が発生される。その例外の情報は、オペレーティングシステム１１０に通知される。オペレーティングシステム１１０は例外事象を解析し、それに応じた例外処理サービスを提供する。
【０００５】
このようにして、オブジェクト１０１からは、所定のメモリ空間に対してのみアクセス可能となり、メモリが保護される。
【０００６】
また、オブジェクト１０１がオペレーティングシステム１１０を介してメモリアクセスを行う場合もある。その場合には、オペレーティングシステム１１０内においてアドレスの有効性に関する照合が行われる。例えば、オペレーティングシステム１１０は、オブジェクト１０１からの要求に応えるためのサービス、例えばシステムコールやＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ Ｐｒｏｇｒａｍｍｉｎｇ Ｉｎｔｅｒｆａｃｅ）を提供しており、これらのサービス要求時にオブジェクト１０１からアドレスを渡される場合がある。通常、このアドレスは、そのオブジェクト１０１に許可されたアドレス領域を指し、オペレーティングシステム１１０は、これらの領域にアクセスしてサービスを行う。このときの動作について以下に説明する。
【０００７】
図２は、オペレーティングシステム１１０によるアドレス照合の動作を説明するためのブロック図である。オペレーティングシステム１１０は、オブジェクト１０１からアドレスを含むサービス要求を受けると、実際のサービスをサービス処理オブジェクト１１２で実行する前に、アドレス照合モジュール１１１でアドレスの有効性を検査する。これは、以下のような理由により、必要な処理である。
【０００８】
通常、オペレーティングシステム１１０は、サービス実現のためにオペレーティングシステム１１０自身のアドレス領域に加えてオブジェクト１０１のアドレス領域に対するアクセス権を持っている。そのため、オブジェクト１０１から渡されたアドレスが不正にオペレーティングシステム１１０のアドレス領域を指定している場合でも、プロセッサ１２０が有しているメモリ管理システム１２１では有効性が識別できずアクセスできてしまう。そのため、事前にアドレスの有効性を判別しておく必要が生じている。
【０００９】
アドレスの有効性照合は、通常渡されたアドレスがオブジェクト１０１の持つメモリ保護情報に違反していないかをアドレス照合モジュール１１１によって順次照合することにより、行われる。アドレスの照合結果はサービス処理オブジェクト１１２に渡され、その結果が不正なアドレスと判断された場合、サービス結果としてエラーがオブジェクト１０１に返される。
【００１０】
しかし、上述した方法によりオペレーティングシステム１１０の提供する機能を利用したメモリアクセスを行うと、オペレーティングシステム１１０でオブジェクト１０１から渡されたアドレスを実際に使用する前に、アドレス照合モジュール１１１でアドレスの有効性照合を行う必要があり、実行処理速度が低下してしまうという問題が生じる。
【００１１】
また、アドレスの有効性を照合しないという方法も考えられるが、この場合、オブジェクト１０１から渡されたアドレスがオペレーティングシステム１１０内のデータの格納先を指定していた場合などがチェックされないため、オペレーティングシステム１１０のデータが破壊されたり、不正にアクセスできてしまうという問題が生じる。
【００１２】
このように、従来のオペレーティングシステムは、オブジェクトから渡されたアドレスを実際に使用する前に、必ずアドレスの有効性照合を行う必要があり、アドレスの有効性照合を行うと、メモリ保護情報の量に応じて実行速度が低下するという欠点があった。
【発明が解決しようとする課題】
【００１３】
本発明は、このような点に鑑みてなされたものであり、本発明の目的は、あるオブジェクトの要求に応じて他のオブジェクトが実行するメモリアクセスを、高い信頼性で高速に行うことができるコンピュータを提供することである。
【００１４】
また、本発明の他の目的は、あるオブジェクトの要求に応じて他のオブジェクトが実行するメモリアクセスを、高い信頼性で高速にコンピュータに行わせることができる例外処理プログラムを記録したコンピュータ読み取り可能な記録媒体を提供することである。
【００１５】
また、本発明の他の目的は、あるオブジェクトの要求に応じて他のオブジェクトが実行するメモリアクセスを、高い信頼性で高速に実行させるための例外処理方法を提供することである。
【課題を解決するための手段】
【００１６】
上述した課題を解決するために、本発明に係るコンピュータは、メモリ保護情報で指定されたアドレス領域にのみアクセスを可能とすることによってメモリを保護する機能を備えたコンピュータにおいて、指定されたアドレスへのメモリアクセスを伴う処理要求を受け取ると、処理要求に従った処理を実行するとともに、メモリアクセスが発生した際には、処理要求で指定されたアドレスへのアクセス要求を出力する要求処理手段と、要求処理手段が出力したアクセス要求を受け取り、処理要求を出力したオブジェクトがアクセスできる領域をアクセス可能領域としたメモリ保護情報を設定し、アクセス要求に応じたメモリアクセス命令をプロセッサに出力するメモリアクセス代行手段と、メモリアクセス代行手段が出力したメモリアクセス命令が、メモリ保護情報に設定されている領域以外へのアクセスであるときには、メモリアクセス命令に対する例外を発生させるメモリ管理手段と、メモリ管理手段により発生された例外に応じて、例外処理を実行し、メモリアクセス代行手段の実行中に発生した例外であるときには、メモリアクセス代行手段にアクセス要求を出力した要求処理手段に対して、処理が例外終了した旨のメッセージを通知する例外処理手段とを備え、メモリアクセス代行手段は、予め定められたメモリ領域で実行されており、例外処理手段は、例外が発生した際にプログラムカウンタに設定されているアドレスが、メモリアクセス代行手段が実行されているメモリ領域内を指し示していることに基づいて、メモリアクセス代行手段実行中の例外であることを認識する。
【００１７】
このようなコンピュータによれば、指定されたアドレスへのメモリアクセスを伴う処理要求が出力されると、その処理要求が要求処理手段で受け取られ、要求に従った処理が実行される。その際、メモリアクセスが発生すると、要求処理手段によって、処理要求で指定されたアドレスへのアクセス要求が出力される。すると、メモリアクセス代行手段により、アクセス要求が受け取られ、処理要求を出力したオブジェクトがアクセスできる領域をアクセス可能領域としたメモリ保護情報が設定される。その状態において、メモリアクセス代行手段により、アクセス要求に応じたメモリアクセス命令がプロセッサに出力される。メモリアクセス代行手段が出力したメモリアクセス命令が、メモリ保護情報に設定されている領域以外へのアクセスである場合にはときには、メモリ管理手段により、メモリアクセス命令に対する例外が発生される。そして、例外処理手段は、例外が発生した際にプログラムカウンタに設定されているアドレスが、メモリアクセス代行手段が実行されている予め定められたメモリ領域内を指し示していることに基づいて、メモリアクセス代行手段実行中の例外であることを認識したときには、メモリアクセス代行手段にアクセス要求を出力した要求処理手段に対して、処理が例外終了した旨のメッセージを通知する。
【００１８】
また、上述した課題を解決するために、本発明に係るアドレス有効性照合プログラムを記録した記録媒体は、メモリアクセス命令がメモリ保護情報に設定されている領域以外へのアクセスであるときには、上記メモリアクセス命令に対する例外を発生させるようなメモリ管理機能を備えたプロセッサで実行されるアドレス有効性照合プログラムを記録したコンピュータ読み取り可能な記録媒体において、コンピュータを、指定されたアドレスへのメモリアクセスを伴う処理要求を受け取ると、処理要求に従った処理を実行するとともに、メモリアクセスが発生した際には、処理要求で指定されたアドレスへのアクセス要求を出力する要求処理手段、要求処理手段が出力したアクセス要求を受け取り、処理要求を出力したオブジェクトがアクセスできる領域をアクセス可能領域としたメモリ保護情報を設定し、アクセス要求に応じたメモリアクセス命令をプロセッサに出力するメモリアクセス代行手段、及びメモリ管理機能により発生された例外に応じて、例外処理を実行し、メモリアクセス代行手段の実行中に発生した例外であるときには、メモリアクセス代行手段にアクセス要求を出力した要求処理手段に対して、処理が例外終了した旨のメッセージを通知する例外処理手段として、機能させ、メモリアクセス代行手段は、予め定められたメモリ領域で実行されており、例外処理手段は、例外が発生した際にプログラムカウンタに設定されているアドレスが、メモリアクセス代行手段が実行されているメモリ領域内を指し示していることに基づいて、メモリアクセス代行手段実行中の例外であることを認識するアドレス有効性照合プログラムを記録したコンピュータ読み取り可能な記録媒体である。
【００１９】
このような記録媒体に記録されたアドレス有効性照合プログラムをコンピュータに実行させれば、上述した本発明に係るコンピュータに必要な機能が構築される。
【００２０】
また、上述した課題を解決するために、本発明に係るアドレス有効性照合方法は、メモリアクセス命令がメモリ保護情報に設定されている領域以外へのアクセスであるときには、メモリアクセス命令に対する例外を発生させるようなメモリ管理機能を備えたプロセッサを用いたアドレス有効性照合方法において、要求処理手段は、指定されたアドレスへのメモリアクセスを伴う処理要求が出力されると、処理要求に従った処理を実行するとともに、メモリアクセスが発生した際には、上記処理要求で指定されたアドレスへのアクセス要求を出力し、メモリアクセス代行手段は、アクセス要求を受け取り、処理要求を出力したオブジェクトがアクセスできる領域をアクセス可能領域としたメモリ保護情報を設定し、処理要求の実行中に発生したメモリアクセスを行うための命令をプロセッサに対して出力し、例外処理手段は、プロセッサにより発生された例外に応じて、例外処理を実行し、例外が発生した際にプログラムカウンタに設定されているアドレスが、メモリアクセス代行手段が実行されている予め定められたメモリ領域内を指し示していることに基づいて、メモリアクセス代行手段実行中の例外であることを認識したときには、メモリアクセス代行手段にアクセス要求を出力した要求処理手段に対して、処理が例外終了した旨のメッセージを通知する。
【００２１】
このようなアドレス有効性照合方法によれば、指定されたアドレスへのメモリアクセスを伴う処理要求が出力されると、その処理要求が実行され、実行中にメモリアクセスが発生すると、処理要求を出力したオブジェクトのアクセスできる領域をアクセス可能としたメモリ保護情報が設定される。その後、メモリアクセスを行うための命令がプロセッサに対して出力される。そして、例外処理手段は、例外が発生した際にプログラムカウンタに設定されているアドレスが、メモリアクセス代行手段が実行されている予め定められたメモリ領域内を指し示していることに基づいて、メモリアクセス代行手段実行中の例外であることを認識したときには、メモリアクセス代行手段にアクセス要求を出力した要求処理手段に対して、処理が例外終了した旨のメッセージを通知する。
【発明の実施の形態】
【００２２】
以下、本発明に係るコンピュータ、アドレス有効性照合プログラムを記録した記録媒体及びアドレス有効性照合方法について、図面を参照して説明する。
【００２３】
図３は、本発明の原理を説明するためのブロック図である。本発明に係るコンピュータでは、オブジェクト１からアドレスを含む処理要求が出力されると、その処理要求は、オペレーティングシステム２内の要求処理手段２ａへ送られる。そして、要求処理手段２ａは、処理要求に従った処理を実行する。処理の実行中にアドレスを使用する操作を必要とした場合には、要求処理手段２ａは、メモリアクセス代行手段２ｂを呼び出してアクセス要求を渡し、メモリアクセスを代行させる。メモリアクセス代行手段２ｂは、オブジェクト１のメモリ保護情報１ａをプロセッサ３のメモリ管理手段３ａに設定する。そして、メモリアクセス代行手段２ｂが実行中であるということが例外処理手段２ｃで認識可能な状態で、メモリアクセス代行手段２ｂは、メモリアクセス命令をプロセッサ３に出力する。
【００２４】
メモリアクセス命令を受け取ったプロセッサ３のメモリ管理手段３ａは、アクセス先がメモリ保護情報１ａによって許可されている領域内か否かを判定する。アクセス先が適切なアドレスを指定していたときには、プロセッサ３は、命令に従ってメモリ４にアクセスする。一方、メモリアクセス命令で指定されたアドレスが不正であったときは、プロセッサ３は、例外事象を発生する。例外が発生した旨の情報は、オペレーティングシステム２の例外処理手段２ｃに渡される。
【００２５】
例外処理手段２ｃは、メモリアクセス代行手段２ｂの実行中に発生した例外であることを認識する。そして、例外処理手段２ｃは、メモリアクセス代行手段２ｂへアクセス要求を出力した要求処理手段２ａに対して、アクセス要求が例外終了した旨のサービス例外メッセージを送る。要求処理手段２ａは、サービス例外メッセージを受け取ると、現在処理中のサービスをエラーとしてオブジェクトに返す。
【００２６】
このような機能を有するコンピュータによれば、従来行っていたような、サービス要求メッセージに含まれるアドレスを使用する前にアドレス照合モジュールによるオブジェクトの持つメモリ保護情報に違反していないか順次照合する処理を行う必要がなくなる。その代わりにメモリアクセス代行手段２ｂによってメモリアクセス処理が行われる。その際、処理要求を出力したオブジェクト１のメモリ保護情報１ａをプロセッサ３のメモリ管理手段３ａに設定することにより、不正なメモリアクセスを排除している。したがって、従来必要であったアドレス照合モジュールでの処理が不要となり、有効なアドレスが渡された場合の処理を高速に行うことができる。
【００２７】
なお、上述の説明において、オブジェクト１やオペレーティングシステム２の有する機能とプロセッサ３の機能とを分けて表現しているが、実際には、オブジェクト１やオペレーティングシステム２の機能は、その機能の処理内容が記述されたプログラムをプロセッサ３で実行することによって実現される機能である。また、プロセッサ３の機能として説明しているのは、プロセッサ３自身がハードウェア的に有している機能である。これらのことは、以後の説明においても同様である。
【００２８】
以下に、オブジェクト指向概念に基づいて構築されたコンピュータシステムに本発明を適用した具体例について説明する。
【００２９】
図４は、本発明を実施するためのコンピュータのハードウェア構成を示すブロック図である。このシステムは、プロセッサ１１を中心に構成されている。プロセッサ１１は、メモリ１２に記憶されているプログラムに基づいて各種処理を実行するとともに、不正なアドレス領域に対するアクセス要求があった場合には、例外を発生させる機能を有している。また、プロセッサ１１は、バス１７を介して接続された各種機器を制御している。バス１７に接続された周辺機器は、次のようなものである。
【００３０】
ディスプレイコントローラ１３は、プロセッサ１１から送られてくる描画命令に従って表示画像を生成し、表示装置２１に送る。ディスプレイコントローラ１３に接続された表示装置２１は、ディスプレイコントローラ１３から送られた表示画像情報に従い、その画像を画面に表示する。
【００３１】
入力機器インタフェース１４は、キーボード２２やマウス２３が接続されており、キーボード２２やマウス２３からの入力信号をプロセッサ１１へ転送する。
ネットワークインタフェース１５は、ＬＡＮ（Ｌｏｃａｌ Ａｒｅａ Ｎｅｔｗｏｒｋ）に接続されており、ＬＡＮを介したデータ通信を制御する。すなわち、プロセッサ１１から送られたデータをＬＡＮ上の他の装置へ転送するとともに、ＬＡＮを介して送られてきたデータを受け取りプロセッサ１１に渡す。
【００３２】
ＨＤＤ（Ｈａｒｄ Ｄｉｓｋ Ｄｒｉｖｅ）コントローラ１６には、ハードディスク装置等の記憶装置２４が接続されており、ＨＤＤコントローラ１６が接続された記憶装置２４へのデータの入出力を制御する。記憶装置２４には、プロセッサ１１が実行すべきオペレーティングシステムのプログラム、オブジェクト指向概念に基づいて作成されたプログラム（以下、単に「オブジェクト」という）等が格納されている。
【００３３】
このようなシステムのプロセッサ１１において、必要に応じてオブジェクトが実行される。そのとき、オペレーティングシステムが提供する機能を用いて、メモリアクセスを行う場合がある。例えば、オペレーティングシステムが管理するシステム時刻をオブジェクトに返すサービスがある。そのサービスを利用して、各オブジェクトがシステム時刻を取得することができる。そこで、オペレーティングシステムが提供するサービスを用いて、オブジェクトがメモリアクセスを行う場合について、システム時刻の取得サービスを例に挙げて、本発明の実施の形態を説明する。
【００３４】
図５は、システム時刻取得時の動作を説明するためのブロック図である。オブジェクト３１は、ＧｅｔＳｙｓｔｅｍＴｉｍｅＡＰＩを用いて、オペレーティングシステム４０にシステム時刻を要求する。このとき、オブジェクト３１は、ＧｅｔＳｙｓｔｅｍＴｉｍｅＡＰＩへの引数として、システム時刻の結果を格納する場所のアドレスをオペレーティングシステム４０に渡す。オペレーティングシステム４０は、引数で与えられたアドレスが有効なときには、システム時刻をそれで示される場所に格納するとともに、ステータス（ｒｅｔｕｒｎ Ｓｔａｔｕｓ）としてＳＵＣＣＥＳＳをオブジェクト３１に返す。また、オペレーティングシステム４０は、アドレスが無効のときには、システム時刻を格納せずに、ステータスとしてＦＡＩＬをオブジェクト３１に返す。
【００３５】
次に、オペレーティングシステム４０の構成について説明する。
【００３６】
図６は、オペレーティングシステムを構成する各オブジェクトの相関を示すブロック図である。なお、本実施例では、オペレーティングシステム４０をオブジェクト指向型のプログラムによって構築している。そして、以下の説明において、「メタオブジェクト」とは、例えばタイマのように他のオブジェクトに対してオペレーティングシステムとしてのサービスを提供するオブジェクト、「ベースオブジェクト」とは、アプリケーションプログラムを構成するものであって、例えばタイマによるサービスを必要とするオブジェクトのことを指している。
【００３７】
メタオブジェクトであるタイマ（Ｔｉｍｅｒ）４１は、オペレーティングシステム４０内でシステム時間を管理する。タイマ４１は、表１に示すようなメッセージを受け取るようになっている。
【００３８】
【表１】
0004516693.tif 000002
【００３９】
タイマ４１は、ベースオブジェクト３２から送られるＧｅｔＳｙｓｔｅｍＴｉｍｅメッセージにより、メッセージ中で指定されたアドレスにシステム時刻を格納する。このとき、メッセージ中で指定されたアドレスの有効性のチェックは行わず、メタプロキシライブラリ（ＭｅｔａＰｒｏｘｙＬｉｂ）４２内にあるＣｏｐｙｏｕｔ関数を呼び出す。Ｃｏｐｙｏｕｔ関数に対する引数としては、メッセージ中で指定されたアドレスをコピー先アドレスとし、システム時刻をコピー元データとし、さらにシステム時刻の大きさをコピーサイズとする。また同時に、タイマ４１は、ベースオブジェクト３２のメモリ保護情報とタイマ４１のデータに対する読出権をプロセッサ１１に渡す。Ｃｏｐｙｏｕｔ関数の処理終了後、タイマ４１は、ステータスとしてＳＵＣＣＥＳＳをベースオブジェクト３２に返す。また、タイマ４１は、例外処理ハンドラ（ＥｘｃｅｐｔｉｏｎＨａｎｄｌｅｒ）４３から送られるＣａｎｃｅｌＳｅｒｖｉｃｅメッセージに従って、メソッドを実行するようになっている。このメソッドでは、タイマ４１は、ステータスとしてＦＡＩＬをベースオブジェクト３２に返す。
【００４０】
メタプロキシライブラリ４２は、全てのメタオブジェクトから呼び出せるようになっている。またメタプロキシライブラリ４２は特定のアドレスに配置されていて、例外処理ハンドラ４３はそのアドレスを予め知っている。メタプロキシライブラリ４２に含まれるＣｏｐｙｏｕｔ関数は、表２に示すように、その呼び出し時に引数として渡されたメモリ保護情報をプロセッサ１１のメモリ管理システム１１ａに設定する。
【００４１】
【表２】
0004516693.tif 000003
【００４２】
メタプロキシライブラリ４２のＣｏｐｙｏｕｔ関数は、タイマ４１からＧｅｔＳｙｓｔｅｍＴｉｍｅメッセージ処理中に呼び出される。Ｃｏｐｙｏｕｔ関数は、呼び出し時に指定されたメモリ保護情報をプロセッサ１１のメモリ管理システム１１ａに設定し、その後コピー元データからコピーサイズ分のデータをコピー先にコピーを行う。Ｃｏｐｙｏｕｔ関数は、最後にメモリ保護情報をこの関数の呼び出し前のものに復帰する。
【００４３】
メタオブジェクトである例外処理ハンドラ４３は、オペレーティングシステム４０内でプロセッサ１１が発生する例外の処理を行う。例外処理ハンドラ４３は、表３に示すように、プロセッサ１１で例外が発生するとＨａｎｄｌｅＡｓＦａｕｌｔメッセージが送られてくるようになっていて、これに従ってメソッドを実行するようになっている。
【００４４】
【表３】
0004516693.tif 000004
【００４５】
このメソッドでは、例外処理ハンドラ４３は、プロセッサ１１から通知された例外を解析し、例外を発生させたオブジェクトを特定する。例外処理ハンドラ４３は、ＨａｎｄｌｅＡｓＦａｕｌｔメッセージで渡される例外がアドレス例外のとき、さらに例外が発生したときのプログラムカウンタの値が、メタプロキシライブラリ４２が配置されているアドレス内にあるかどうかを調べ、そうであった場合には、例外を発生したオブジェクト、すなわちタイマ４１にＣａｎｃｅｌＳｅｒｖｉｃｅメッセージを送る。
【００４６】
プロセッサ１１は、メモリ管理システム１１ａを有している。メモリ管理システム１１ａは、多くのプロセッサ内にあるハードウェアであり、論理アドレスから物理アドレスへの変換、メモリの保護等の機能を持っている。論理アドレスから物理アドレスへの変換機能は本発明とは直接関係ないため説明を省略する。メモリ保護機能とは、以下のような内容である。
【００４７】
メモリ管理システム１１ａは、オブジェクトが実行時に参照するアドレスが現在メモリ管理システム１１ａに設定されているメモリ保護情報に違反していないかのチェックを行い、違反がなければ実際のメモリ１２へのアクセスを行う。メモリ管理システム１１ａは、違反していたときには、メモリアクセスは行わず、例外としてオペレーティングシステム４０にアドレス例外をＨａｎｄｌｅＡｓＦａｕｌｔメッセージとして通知する。メモリ保護情報としては、書込権、実行権、読出権等がある。書込権はオブジェクトがそのメモリページにデータを書き込む権利があるかどうかを示し、実行権はオブジェクトがそのメモリページのデータを命令列として実行する権利があるかを示し、読出権はオブジェクトがそのメモリページのデータを読み出す権利があるかを示している。
【００４８】
次に、ベースオブジェクト３２からシステム時刻の問い合わせがあった場合の動作を説明する。
【００４９】
まず、最初にベースオブジェクト３２がシステム時刻を得る際に、ＧｅｔＳｙｓｔｅｍＴｉｍｅＡＰＩに対して、ベースオブジェクト３２が参照可能な有効なアドレスを指定した場合のシナリオを説明する。
【００５０】
図７は、指定アドレス有効時の処理を示すフローチャートである。これは、ベースオブジェクト３２がＧｅｔＳｙｓｔｅｍＴｉｍｅＡＰＩを使用したときの処理の手続きである。
【００５１】
ベースオブジェクト３２は、ＧｅｔＳｙｓｔｅｍＴｉｍｅメッセージをオペレーティングシステム４０に送る（ステップＳ１）。このとき、ベースオブジェクト３２から「Ｔｉｍｅｒ」のメタオブジェクトであるタイマ４１へコンテキストスイッチが発生する。すなわち、ベースオブジェクト３２の使用していたプロセッサ１１のレジスタの内容が別の場所に保存され、タイマ４１の持つメモリ保護情報やプロセッサ権限レベル、割り込みレベルがプロセッサ１１のレジスタに設定される。
【００５２】
ＧｅｔＳｙｓｔｅｍＴｉｍｅメッセージを受け取ると、タイマ４１は、システムの時間を自分が管理しているデータ構造やデバイスから取得する（ステップＳ２）。次に、タイマ４１は、メタプロキシライブラリ４２のＣｏｐｙｏｕｔ関数を呼び出す（ステップＳ３）。このとき、関数呼び出しのためコンテキストスイッチは行われない。
【００５３】
メタプロキシライブラリ４２のＣｏｐｙｏｕｔ関数は、タイマ４１から引数として渡されたベースオブジェクト３２のメモリ保護情報とタイマ４１のデータに対する読出権をプロセッサ１１のメモリ管理システム１１ａに設定する（ステップＳ４）。このため、Ｃｏｐｙｏｕｔ関数実行中はメタオブジェクトであるタイマ４１のコンテキストで実行しているにも拘わらず、メモリ保護についてはベースオブジェクト３２のものが使われることになる。
【００５４】
このあと、Ｃｏｐｙｏｕｔ関数は、タイマ４１からの引数で指定されたコピー元データからコピーサイズ分のデータをコピー先にコピーする（ステップＳ５）。これにより、システム時刻がベースオブジェクト３２の指定するアドレスにコピーされることになる。
【００５５】
最後に、Ｃｏｐｙｏｕｔ関数は、メモリ保護を元のメタオブジェクトのものに復帰する（ステップＳ６）。これにより、Ｃｏｐｙｏｕｔ関数の実行が終了し、処理がタイマ４１に戻される。
【００５６】
タイマ４１は、Ｃｏｐｙｏｕｔ関数の実行が終了すると、ベースオブジェクト３２に対してＳＵＣＣＥＳＳのステータスを返す（ステップＳ７）。このとき保存してあったベースオブジェクト３２のコンテキストが復帰される。ベースオブジェクト３２は、ＧｅｔＳｙｓｔｅｍＴｉｍｅＡＰＩのステータスがＳＵＣＣＥＳＳであるため、ＧｅｔＳｙｓｔｅｍＴｉｍｅにおいて指定したアドレスにアクセスすることにより、システム時刻を得ることができる。
【００５７】
以上が、適正なアドレスが指定されていた場合の処理手順である。
【００５８】
次に、ベースオブジェクトがシステム時刻を得る際に、ＧｅｔＳｙｓｔｅｍＴｉｍｅＡＰＩにベースオブジェクトから参照が許されていないオペレーティングシステム内のアドレスを不正に指定した場合のシナリオを説明する。
【００５９】
図８は、指定アドレス不正時の処理を示すフローチャートである。これは、ベースオブジェクト３２がＧｅｔＳｙｓｔｅｍＴｉｍｅＡＰＩを使用したときの処理の手続きである。
ベースオブジェクト３２は、ＧｅｔＳｙｓｔｅｍＴｉｍｅメッセージを送る（ステップＳ１１）。このとき、ベースオブジェクト３２からメタオブジェクトであるタイマ４１へのコンテキストスイッチが発生する。
【００６０】
ＧｅｔＳｙｓｔｅｍＴｉｍｅメッセージを受け取ったタイマ４１は、システムの時間を自分が管理しているデータ構造やデバイスから取得し（ステップＳ１２）、メタプロキシライブラリ４２のＣｏｐｙｏｕｔ関数を呼び出す（ステップＳ１３）。このとき、関数呼び出しのためコンテキストスイッチは行われない。メタプロキシライブラリ４２のＣｏｐｙｏｕｔ関数は、引数として渡されたベースオブジェクト３２のメモリ保護情報とタイマ４１のデータに対する読出権をプロセッサ１１のメモリ管理システム１１ａに設定する（ステップＳ１４）。このため、Ｃｏｐｙｏｕｔ関数実行中は、メタオブジェクトであるタイマ４１のコンテキストで実行しているにも拘わらず、メモリ保護についてはベースオブジェクト３２のものが使われることになる。
【００６１】
ここまでは、アドレス有効時のシナリオと同様である。このあと、Ｃｏｐｙｏｕｔ関数は、引数で指定されたコピー元データからコピーサイズ分のデータをコピー先にコピーを行う（ステップＳ１５）。このとき、コピー先に指定されたアドレスは、ベースオブジェクト３２から参照不可能なオペレーティングシステム４０内を指定していて、Ｃｏｐｙｏｕｔ関数実行中のメモリ管理システム１１ａは、ベースオブジェクト３２のメモリ保護情報しか持っていない。そのため、Ｃｏｐｙｏｕｔ関数が書込を実行したときに、メモリ管理システム１１ａは、例外を発生する（ステップＳ１６）。例外処理ハンドラ４３は、例外発生を示すＨａｎｄｌｅＡｓＦａｕｌｔを受け取ると、例外の内容を解析する（ステップＳ１７）。例外がアドレス例外であり、さらに例外が発生したときのプログラムカウンタの値が、メタプロキシライブラリ４２が配置されているアドレス内にある場合、例外処理ハンドラ４３は、例外を発生したオブジェクトにＣａｎｃｅｌＳｅｒｖｉｃｅメッセージを送る（ステップＳ１８）。
【００６２】
このとき、タイマ４１に関する現在実行中のコンテキストは、例外発生のため破棄され、新しいコンテキストとして実行される。このため、タイマ４１のメモリ保護は本来のものに戻される。そして、タイマ４１は、ベースオブジェクト３２に対してＦＡＩＬのステータスを返す（ステップＳ１９）。ここで、保存してあったベースオブジェクト３２のコンテキストが復帰される。結果として、ベースオブジェクト３２は、不正なアドレスをＧｅｔＳｙｓｔｅｍＴｉｍｅＡＰＩに指定したため、ＦＡＩＬのステータスを受け取る。
【００６３】
以上のように、本実施例では、ベースオブジェクト３２から渡されたアドレスを直接扱うアドレス操作モジュールとして、メタプロキシライブラリ４２を特定のアドレス位置に配置する。また、メタプロキシライブラリ４２実行時には、コンテキストスイッチは行われず、メモリ保護情報のみがベースオブジェクト３２のものに切り替えられる。このため、従来のように、オペレーティングシステム４０においてアドレス照合を行う必要がなくなり、有効なアドレスが渡される場合においては、メタプロキシライブラリ４２の呼び出しの実行速度の低下が小さく抑えられる。その結果、処理をより高速に実行することができるようになる。なお、通常の処理においては、有効なアドレスが渡されると想定されるため、実行速度の低下は、不正なアドレスが指定された場合に限定される。
【００６４】
ところで、本実施例では、メタプロキシライブラリ４２の関数呼び出し時に、コンテキストスイッチを行わないため、タイマ４１がそれ自身の原因によって例外を発生したのか、ベースオブジェクト３２から渡されたアドレスが原因で例外が発生したのかをコンテキストからは判断できない。しかし、メタプロキシライブラリ４２を特定のアドレスに配置することにより、例外が発生したときにそれを処理する例外処理ハンドラ４３が、プログラムカウンタの値によって、メタプロキシライブラリ４２の実行中に例外が発生したことを識別することが可能になる。
【００６５】
また、メタプロキシライブラリ４２実行時には、メモリ管理システム１１ａはベースオブジェクト３２のメモリ保護情報とタイマ４１のデータに対する読出権しか持たないため、これを超えた操作をメタプロキシライブラリ４２内で行おうとすると、アドレス例外が発生し、例外処理ハンドラ４３からのＣａｎｃｅｌＳｅｒｖｉｃｅメッセージをタイマ４１が処理することにより、不正アドレスを指定した場合のエラー処理を適切に行うことができる。
【００６６】
なお、上述の各オブジェクトやオペレーティングシステムが有する機能の処理内容は、コンピュータで読み取り可能な記録媒体に記録されたプログラムに記述しておく。そして、このプログラムをコンピュータで実行することにより、上述した処理がコンピュータで実現される。コンピュータで読み取り可能な記録媒体としては、磁気記録装置や半導体メモリ等がある。市場に流通させる場合には、ＣＤ−ＲＯＭ（Ｃｏｍｐａｃｔ Ｄｉｓｋ Ｒｅａｄ Ｏｎｌｙ Ｍｅｍｏｒｙ）やフロッピーディスク等の可搬型記録媒体にプログラムを格納して流通させたり、ネットワークを介して接続されたコンピュータの記憶装置に格納しておき、ネットワークを通じて他のコンピュータに転送することもできる。コンピュータで実行する際には、コンピュータ内のハードディスク装置等にプログラムを格納しておき、メインメモリにロードして実行する。
【００６７】
次に、本発明の他の実施例について説明する。図９は、この実施例のためのコンピュータのハードウェア構成を示すブロック図である。図４に示す構成要素と同じ構成要素には、同じ指示符号を付して、重複する説明は省略する。
【００６８】
シリアルインタフェース１８には、パーソナルコンピュータ等のホストコンピュータ２５が接続されている。ホストコンピュータ２５上では、プロセッサ１１〜ＨＤＤコントローラ１６等から構成されるコンピュータ（以下、システムという。）上で動作するプログラムをデバッグするためのホストデバッガが動作する。ホストデバッガは、デバッグのために必要な情報をシリアルインタフェース１８を経由してこのシステムのオペレーティングシステムから得ることができる。
【００６９】
ユーザは、ホストコンピュータ２５上で動作するホストデバッガを操作して、このシステム上で動作するプログラムをデバッグする。そのとき、オペレーティングシステムが提供する機能を用いて、メモリアクセスを行う場合がある。例えば、プログラム中で使用される変数の値をユーザが参照したい場合がある。Ｃ＋＋言語のｖｏｉｄ＊型である変数Ｐの値を参照したい場合などである。この場合、変数Ｐの値はアドレスであるが、そのアドレスの値だけでなく、Ｐで示されるアドレスにおかれた文字列の値も参照したい。文字列の値は、オペレーティングシステムがデバッグのために提供するサービスを利用して取得することができる。そこで、オペレーティングシステムが提供するサービスを利用した、ホストデバッガが変数の値を表示する場合を例にして、この実施例について説明する。
【００７０】
図１０は、ホストデバッガが変数の値の表示を行う場合の動作を説明するためのブロック図である。ユーザ５１は、ホストコンピュータ２５上で動作するホストデバッガ５２を操作して、変数の値Ｐの表示をホストデバッガ５２に要求する（ｖｉｅｗ ｖａｒｉａｂｌｅ）。このとき、ｖｉｅｗ ｖａｒｉａｂｌｅには、値を表示すべき変数の情報が渡される。ホストデバッガ５２は、デバッグ対象のプログラムのシンボルテーブル等の情報から、変数のアドレスを決定し、ＲｅａｄＭｅｍｏｒｙを用いて、オペレーティングシステム６０にそのアドレスのメモリ内容を要求する。このとき、ホストデバッガ５２は、ＲｅａｄＭｅｍｏｒｙへの引数としてメモリへのアドレスをオペレーティングシステム６０に渡す。オペレーティングシステム６０は、引数で与えられたアドレスが有効であるときは、メモリの内容と、ステータスとしてＳＵＣＣＥＳＳをホストデバッガ５２に返す。また、アドレスが無効のときには、オペレーティングシステム６０は、メモリの内容は返さずに、ステータスとしてＦＡＩＬをホストデバッガ５２に返す。
【００７１】
次に、オペレーティングシステム６０の構成について説明する。
【００７２】
図１１は、オペレーティングシステムを構成するオブジェクトや関数の相関を示すブロック図である。なお、本実施例では、オペレーティングシステム６０を複数の並行オブジェクトと、プロセッサの処理を抽象化するメタコア（ＭｅｔａＣｏｒｅ）７０によって構築している。メタコア７０は、さらに、アドレスプローブ（ＡｄｄｒｅｓｓＰｒｏｂｅ）７１、ＴＬＢ３２例外処理ハンドラ（ＴＬＢ３２ＥｘｃｅｐｔｉｏｎＨａｎｄｌｅｒ）７２、汎用例外処理ハンドラ（ＧｅｎｅｒａｌＥｘｃｅｐｔｉｏｎＨａｎｄｌｅｒ）７３の関数モジュールにより構成されている。
【００７３】
また、本実施例では、プロセッサ５５は、メモリ管理手段としてＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ Ｌｏｏｋａｓｉｄｅ Ｂｕｆｆｅｒ）５５ａを持っている。プロセッサ５５は、メモリアクセス命令を受け取ったとき、アクセスするアドレスの保護属性のチェックと物理アドレスへの変換を、ＴＬＢ５５ａに照会することによって行う。ＴＬＢ５５ａは、アドレスに対応するエントリがないときには、このアドレスを引数としてＴＬＢ不一致例外を発生させるようになっている。
【００７４】
各オブジェクトは、それに対応するＣｏｎｔｅｘｔがオペレーティングシステムによって割り当てられている。Ｃｏｎｔｅｘｔは、メモリ保護情報として、ＴＬＢエントリテーブル（ＴＬＢＥｎｔｒｙＴａｂｌｅ）を持つ。そして、現在実行中のオブジェクトのＣｏｎｔｅｘｔは、メタコア７０によりアクティブコンテキスト（ＡｃｔｉｖｅＣｏｎｔｅｘｔ）７５に設定される。そのためＣｏｎｔｅｘｔの持つメモリ保護情報ＴＬＢＥｎｔｒｙＴａｂｌｅもＴＬＢエントリテーブル（ＴＬＢＥｎｔｒｙＴａｂｌｅ）７４に設定されることになる。
【００７５】
デバッガオブジェクト（ＤｅｂｕｇｇｅｒＯｂｊｅｃｔ）６１は、オペレーティングシステム６０内で、ホストデバッガ５２と協調してデバッグ支援サービスを提供する。デバッガオブジェクト６１に対応するＣｏｎｔｅｘｔのＴＬＢＥｎｔｒｙＴａｂｌｅには、デバッグ対象オブジェクトのメモリ保護情報が含まれている。また、デバッガオブジェクト６１の実行時には、デバッガオブジェクト６１に対応するＣｏｎｔｅｘｔが、アクティブコンテキスト７５に設定される。このため、図３に示すメモリアクセス代行手段２ｂによるメモリ保護情報の設定は不要となる。デバッガオブジェクト６１は、ホストデバッガ５２から送られるＲｅａｄＭｅｍｏｒｙメッセージを受け取ると、メッセージ中で指定されたアドレスの有効性のチェックをメタコア７０内のアドレスプローブ７１のＩｓＶａｌｉｄＡｄｄｒｅｓｓ関数を呼び出すことによって行う。デバッガオブジェクト６１は、ＩｓＶａｌｉｄＡｄｄｒｅｓｓ関数の呼び出し後、ＡｄｄｒｅｓｓＳｔａｔｕｓがｔｒｕｅであるときには、ＲｅａｄＭｅｍｏｒｙで指定されたアドレスの内容をホストデバッガ５２に返す。ＡｄｄｒｅｓｓＳｔａｔｕｓがｆａｌｓｅであるときには、ｅｒｒｏｒをホストデバッガ５２に返す。
【００７６】
アドレスプローブ７１は、オペレーティングシステム６０内で、アドレスの有効性のチェックを行う。ＩｓＶａｌｉｄＡｄｄｒｅｓｓ関数では、例外発生時にｅｒｒｏｒを返すための復帰準備を行った後、引数に指定されたアドレスのメモリにアクセスを行う。その後、アドレスが有効であることを示すｔｒｕｅをＡｄｄｒｅｓｓＳｔａｔｕｓとして返す。
【００７７】
ＴＬＢ３２例外処理ハンドラ７２は、オペレーティングシステム６０内で、プロセッサ５５からのＴＬＢ不一致例外を処理する。ＴＬＢ３２例外処理ハンドラ７２は、ＴＬＢ不一致例外を受け取ると、アクティブコンテキスト７５内のＴＬＢエントリテーブル７４を検索して、ＴＬＢ不一致例外の引数として渡されたアドレスに対応するＴＬＢエントリを得る。ＴＬＢ３２例外処理ハンドラ７２は、ＴＬＢエントリが見つかったときには、プロセッサ５５のＴＬＢ５５ａから不要なエントリを削除して、ＴＬＢエントリテーブル７４を検索して見つかったＴＬＢエントリを代わりにＴＬＢ５５ａに登録し、例外から復帰する。ＴＬＢ３２例外処理ハンドラ７２は、ＴＬＢエントリが見つからないときには、例外発生時のプログラム実行位置を示すプログラムカウンタを引数として汎用例外処理ハンドラ７３のＢｅｇｉｎＥｘｃｅｐｔｉｏｎＨａｎｄｌｉｎｇを呼び出す。
【００７８】
汎用例外処理ハンドラ７３は、オペレーティングシステム６０内で、例外処理全般を処理する。汎用例外処理ハンドラ７３は、ＢｅｇｉｎＥｘｃｅｐｔｉｏｎＨａｎｄｌｉｎｇが呼び出されると、引数として渡されたプログラムカウンタがアドレスプローブ７１のプログラム範囲にあるかどうかをチェックし、プログラムカウンタが範囲内であるときには、例外の復帰を行う。一方、汎用例外処理ハンドラ７３は、プログラムカウンタが範囲外であるときには、通常の例外処理を行う。
【００７９】
図１２は、ユーザ５１が変数表示をホストデバッガ５２上で操作したときに、そのアドレスが有効範囲であった場合の処理を示すフローチャートである。ユーザ５１が変数の表示を要求すると、ｖｉｅｗ ｖａｒｉａｂｌｅがホストデバッガ５２に送られる（ステップＳ３１）。このとき、ｖｉｅｗ ｖａｒｉａｂｌｅには値を表示すべき変数の情報が含まれている。
【００８０】
ホストデバッガ５２は、引数で渡された変数の情報と、デバッグ対象のプログラムのシンボルテーブル等の情報から、変数のアドレスを決定し（ステップＳ３２）、このアドレスを引数としてＲｅａｄＭｅｍｏｒｙメッセージをデバッガオブジェクト６１に送る（ステップＳ３３）。
デバッガオブジェクト６１は、ＲｅａｄＭｅｍｏｒｙメッセージの引数として渡されたアドレスを引数として、アドレスプローブ７１のＩｓＶａｌｉｄＡｄｄｒｅｓｓ関数を呼び出すことにより、アドレスの有効性をチェックする（ステップＳ３４）。
【００８１】
アドレスプローブ７１のＩｓＶａｌｉｄＡｄｄｒｅｓｓ関数は、デバッガオブジェクト６１から関数として呼び出される。また、デバッガオブジェクト６１は、そのＣｏｎｔｅｘｔのメモリ保護情報ＥｎｔｒｙＴａｂｌｅに、デバッグ対象のプログラムのメモリ保護情報も持っている。そして、デバッガオブジェクト６１の実行中は、図１１に示すアクティブコンテキスト７５内のＴＬＢエントリテーブル７４にデバッガオブジェクト６１のＥｎｔｒｙＴａｂｌｅが設定される。このため、アドレスプローブ７１は、デバッグ対象のプログラムのメモリ保護情報を使って動作する。すなわち、アドレスプローブ７１は、例外発生時にＡｄｄｒｅｓｓＳｔａｔｕｓとしてｆａｌｓｅがアドレスプローブ７１の呼び出し元に返るように準備を行う（ステップＳ３５）。次に、アドレスプローブ７１は、引数で渡されたアドレスへのアクセスを行う命令を実行する（ステップＳ３６）。このとき、アクセスしたアドレスに対応するエントリが図１１のプロセッサ５５内のＴＬＢ５５ａにあるかどうかで、処理が分岐する。アクセスしたアドレスに対応するエントリが図１１のプロセッサ５５内のＴＬＢ５５ａにないときには、アクセスしたアドレスを引数としてＴＬＢ不一致例外が発生する（ステップＳ３７）。
【００８２】
ＴＬＢ３２例外処理ハンドラ７２は、ＴＬＢ不一致例外を受け取る（ステップＳ３８）と、図１１のＴＬＢエントリテーブル７４を検索して（ステップＳ３９）、ＴＬＢ不一致例外の引数として渡されたアドレスに対応するＴＬＢのエントリを得る。この処理の場合、アクセスするアドレスは有効範囲にあるため、対応するＴＬＢエントリは見つけられる（ステップＳ４０）。ＴＬＢ３２例外処理ハンドラ７２は、図１１のプロセッサ５５のＴＬＢ５５ａから不要なエントリを削除して、ＴＬＢエントリテーブル７４を検索して見つかったＴＬＢエントリを代わりにＴＬＢ５５ａに登録し（ステップＳ４１）、例外から復帰する（ステップＳ４２）。
【００８３】
例外が復帰すると、処理は、アドレスプローブ７１のステップＳ３６においてＩｓＶａｌｉｄＡｄｄｒｅｓｓ関数の引数として渡されたアドレスへのアクセスを行う命令から再開される。このとき、図１１のＴＬＢ５５ａには、アクセスしたアドレスに対応するエントリが、ＴＬＢ３２例外処理ハンドラ７２の実行により、存在するため、今度はアクセスが成功する。ステップＳ３６において、アクセスしたアドレスに対応するエントリが図１１のＴＬＢ５５ａに既に存在するときは、ステップＳ３７のＴＬＢ不一致例外〜ステップＳ４２の例外の復帰までの処理は行われない。次に、アドレスプローブ７１は、ＡｄｄｒｅｓｓＳｔａｔｕｓとしてｔｒｕｅを設定して、（ステップＳ４３）、ＡｄｄｒｅｓｓＳｔａｔｕｓをデバッガオブジェクト６１に返す（ステップＳ４４）。
【００８４】
デバッガオブジェクト６１は、ＩｓＶａｌｉｄＡｄｄｒｅｓｓ関数の呼び出しの結果、ＡｄｄｒｅｓｓＳｔａｔｕｓがｔｒｕｅであったときには（ステップＳ４５）、ＲｅａｄＭｅｍｏｒｙの引数で指定されたアドレスで示されるメモリの内容を得（ステップＳ４６）、このメモリの内容と、ステータスをＳＵＣＣＥＳＳしてホストデバッガ５２に返す（ステップＳ４８）。
【００８５】
ホストデバッガ５２は、ＲｅａｄＭｅｍｏｒｙの呼び出しの結果、返ってきたステータスがＳＵＣＣＥＳＳのときには、メモリの内容を、ホストコンピュータ２５の画面上に表示する（ステップＳ４８）。
【００８６】
図１３は、ユーザ５１が変数表示をホストデバッガ５２上で操作したときに、そのアドレスが有効範囲でなかった場合の処理を示すフローチャートである。
【００８７】
ステップＳ５１〜ステップＳ５５の処理は、図１２のステップＳ３１〜ステップＳ３５の処理と同じである。この処理の場合、ステップＳ６においてＩｓＶａｌｉｄＡｄｄｒｅｓｓ関数の引数として渡されたアドレスへのアクセスが行われるが、このアドレスに対応するエントリは、図１１のプロセッサ５５内のＴＬＢ５５ａには必ず存在しない。このため、ステップＳ５７〜ステップＳ５９の処理が、図１２のステップＳ３７〜ステップＳ３９の処理と同様に行われる。ステップＳ６０において、アクセスするアドレスは有効範囲にないため、対応するＴＬＢのエントリは見つからない。このため、ステップＳ６１において、汎用例外処理ハンドラ７３のＢｅｇｉｎＥｘｃｅｐｔｉｏｎＨａｎｄｌｉｎｇが、例外発生時のプログラム実行位置を示すプログラムカウンタを引数として呼び出される。
【００８８】
汎用例外処理ハンドラ７３は、引数として渡されたプログラムカウンタがアドレスプローブ７１のプログラム範囲にあるかどうかをチェックし（ステップＳ６２）、プログラムカウンタが範囲内であるときには、例外の復帰を行う（ステップＳ６３）。一方、汎用例外処理ハンドラ７３は、プログラムカウンタが範囲外であるときには、通常の例外処理を行う（ステップＳ６３）。この通常の処理の場合、プログラムカウンタがアドレスプローブ７１のプログラム範囲にあるため、例外の復帰が行われる。例外の復帰が行われると、ステップＳ５で行われた処理により、ＡｄｄｒｅｓｓＳｔａｔｕｓとしてｆａｌｓｅがアドレスプローブ７１の呼び出し元に、すなわちデバッガオブジェクト６１に返される。
【００８９】
デバッガオブジェクト６１は、ＩｓＶａｌｉｄＡｄｄｒｅｓｓ関数の呼び出しの結果、ＡｄｄｒｅｓｓＳｔａｔｕｓがｆａｌｓｅであったときには（ステップＳ６６）、ステータスをＦＡＩＬとしてホストデバッガ５２に返す（ステップＳ６７）。
【００９０】
ホストデバッガ５２は、ＲｅａｄＭｅｍｏｒｙの呼び出しの結果、返ってきたステータスがＦＡＩＬのときには、変数の値が不正であったことを示すメッセージを、ホストコンピュータ２５の画面上に表示する（ステップＳ６８）。
【００９１】
図１４、図１５は、ホストコンピュータ２５の画面に表示されたデバックの結果を示す図である。図１４に示すように、アドレスが有効範囲内であるときは、メモリの内容、例えば「０ｘ０」が、ホストコンピュータ２５の画面の結果ウィンド２６に表示される。一方、図１５に示すように、アドレスが有効範囲外であったときには、変数の値が不正であることを示すメッセージ、例えば「Ｕｎｒｅａｄａｂｌｅ ｍｅｍｏｒｙ」が結果ウィンド２６に表示される。
【産業上の利用可能性】
【００９２】
以上説明したように、本発明に係るコンピュータでは、要求処理手段が処理を行う際に発生したメモリアクセスを伴う操作を、メモリアクセス代行手段に依頼し、メモリアクセス代行手段は、最初の処理要求を出力したオブジェクトがアクセス可能な領域に対してアクセスできるようなメモリ保護情報を設定した後、メモリアクセス命令をプロセッサに出力するようにしている。これにより、メモリ保護を、有効なアドレスが渡されるときには、より高速に行うことができる。通常は、有効なアドレスが渡されると想定されるため、実行速度の低下は、不正なアドレスが指定された場合に限定され、全体的な実効速度を向上させることができる。
【００９３】
また、本発明に係るアドレス有効性照合プログラムを記録したコンピュータ読み取り可能な記録媒体では、記録されたアドレス有効性照合プログラムをコンピュータで実行させることにより、要求処理手段が処理要求に従った処理を行う際にメモリアクセスを伴う操作が発生すると、処理要求を出力したオブジェクトがアクセス可能な領域に対してアクセスできるようなメモリ保護情報を設定した後、メモリアクセス命令をプロセッサに出力するような処理をコンピュータに行わせることができる。その結果、信頼性の高いメモリアクセスを高速に実行可能なコンピュータが構築される。
【００９４】
また、本発明に係るアドレス有効性照合方法では、記録されたアドレス有効性照合プログラムをコンピュータで実行させることにより、要求処理手段が処理要求に従った処理を行う際にメモリアクセスを伴う操作が発生すると、処理要求を出力したオブジェクトがアクセス可能な領域に対してアクセスできるようなメモリ保護情報を設定した後、メモリアクセス命令をプロセッサに出力するようにしたため、信頼性の高いメモリアクセスを高速に行うことができる。
【図面の簡単な説明】
【００９５】
【図１】図１は、従来のメモリ保護動作を説明するためのブロック図である。
【図２】図２は、オペレーティングシステムによるアドレス照合の動作を説明するためのブロック図である。
【図３】図３は、本発明の原理を説明するためのブロック図である。
【図４】図４は、本発明を実施するためのコンピュータのハードウェア構成を示すブロック図である。
【図５】図５は、システム時刻取得時の動作を説明するためのブロック図である。
【図６】図６は、オペレーティングシステムを構成する各オブジェクトの相関を示すブロック図である。
【図７】図７は、指定アドレス有効時の処理を示すフローチャートである。
【図８】図８は、指定アドレス不正時の処理を示すフローチャートである。
【図９】図９は、本発明を実施するためのコンピュータのハードウェア構成を示すブロック図である。
【図１０】図１０は、ホストデバッガが変数の値の表示を行う場合の動作を説明するためのブロック図である。
【図１１】図１１は、オペレーティングシステムを構成するオブジェクトや関数の相関を示すブロック図である。
【図１２】図１２は、ユーザが変数表示をホストデバッガ上で操作したときに、そのアドレスが有効範囲であった場合の処理を示すフローチャートである。
【図１３】図１３は、ユーザが変数表示をホストデバッガ上で操作したときに、そのアドレスが有効範囲でなかった場合の処理を示すフローチャートである。
【図１４】図１４は、ユーザが変数表示をホストデバッガ上で操作したときに、そのアドレスが有効範囲であった場合のホストデバッガの表示画面を示す図である。
【図１５】図１５は、ユーザが変数表示をホストデバッガ上で操作したときに、そのアドレスが有効範囲になかった場合のホストデバッガの表示画面を示す図である。
【図１】
0004516693.tif 000005
【図２】
0004516693.tif 000006
【図３】
0004516693.tif 000007
【図４】
0004516693.tif 000008
【図５】
0004516693.tif 000009
【図６】
0004516693.tif 000010
【図７】
0004516693.tif 000011
【図８】
0004516693.tif 000012
【図９】
0004516693.tif 000013
【図１０】
0004516693.tif 000014
【図１１】
0004516693.tif 000015
【図１２】
0004516693.tif 000016
【図１３】
0004516693.tif 000017
【図１４】
0004516693.tif 000018
【図１５】
0004516693.tif 000019