(57)【特許請求の範囲】
【請求項１】
各オブジェクト毎に当該オブジェクトの実行状況についての情報をコンテキストデータとして記録しつつ、オブジェクト毎にデータ処理を実行するデータ処理方法において、
第１のオブジェクトがメッセージ送信を指示する所定のメソッドを実行して第２のオブジェクトにメッセージを送信する際に、
所定の条件を満たす場合には、
メッセージ送信元の上記第１のオブジェクトの実行を中断するとともに、上記第１のオブジェクトの実行を中断したことを示すように上記第１のオブジェクトに対応するコンテキストデータを書き換えた後、
メッセージ送信に関する手続きが記述された所定のモジュールを呼び出して、当該モジュールに記述された手続きの中から上記メソッドに対応した手続きを実行することにより、メッセージ送信先の上記第２のオブジェクトに対応するコンテキストデータを検索し、
上記検索により見つかったコンテキストデータを、当該コンテキストデータに対応する上記第２のオブジェクトが実行中であることを示すように書き換えるとともに、上記第２のオブジェクトに上記第１のオブジェクトからのメッセージを受け渡し、
上記所定の条件を満たさない場合には、
メッセージ送信のメカニズムを実現する第３のオブジェクトを用い、上記第１のオブジェクトから上記第３のオブジェクトへ実行制御を切り替え、さらに上記第３のオブジェクトから上記第２のオブジェクトへ実行制御を切り換えることにより、上記第２のオブジェクトに上記第１のオブジェクトからのメッセージを受け渡すこと
を特徴とするデータ処理方法。
【請求項２】
オブジェクトに記述されたメッセージ送信に関するメソッドと、上記モジュールに記述された手続きとの関係を、各オブジェクト毎に予め登録しておき、
上記モジュールに記述された手続きの中から上記メソッドに対応した手続きを実行する際に、上記登録の内容を参照して、該当する手続きを選択すること
を特徴とする請求項１記載のデータ処理方法。
【請求項３】
上記所定の条件を満たす場合とは、
メッセージ送信元の上記第１のオブジェクトからメッセージ送信先の上記第２のオブジェクトにメッセージが送信された時点において、それらのオブジェクトが並行動作する必要がなく、且つ、
メッセージ送信元の上記第１のオブジェクトからメッセージ送信先の上記第２のオブジェクトにメッセージを送信するときに、メッセージ送信先の上記第２のオブジェクトが他のオブジェクトからのメッセージに基づく処理を実行していない場合であること
を特徴とする請求項１記載のデータ処理方法。
【請求項４】
上記モジュールは、メッセージ送信元の上記第１のオブジェクトやメッセージ送信先の上記第２のオブジェクトが実行される環境を提供するオペレーティングシステムを構成するオブジェクトであり、上記モジュールに記述された手続きとは、このオブジェクトのメソッドであること
を特徴とする請求項１記載のデータ処理方法。
【請求項５】
上記オペレーティングシステムは、コンテキストデータの書き換えを伴うコンテキストスイッチの処理を担うコンテキストスイッチ処理部を備えているとともに、当該コンテキストスイッチ処理部の内容を変更することなく、当該オペレーティングシステムを構成するオブジェクトの内容変更が可能とされていること
を特徴とする請求項４記載のデータ処理方法。
【請求項６】
オペレーティングシステムが記録されたコンピュータ読み取り可能な記録媒体であって、
上記オペレーティングシステムは、
当該オペレーティングシステム又は当該オペレーティングシステム上で実行されるアプリケーションプログラムを構成する第１のオブジェクトから第２のオブジェクトへのメッセージ送信の処理を行う際に、
所定の条件を満たす場合には、
メッセージ送信元の上記第１のオブジェクトの実行を中断するとともに、当該オブジェクトの実行を中断したことを示すように上記第１のオブジェクトに対応するコンテキストデータを書き換えた後、
メッセージ送信に関する手続きが記述された所定のモジュールを呼び出して、当該モジュールに記述された手続きの中から上記メソッドに対応した手続きを実行することにより、メッセージ送信先の上記第２のオブジェクトに対応するコンテキストデータを検索し、
上記検索により見つかったコンテキストデータを、当該コンテキストデータに対応する上記第２のオブジェクトが実行中であることを示すように書き換えるとともに、当該オブジェクトにメッセージ送信元のオブジェクトからのメッセージを受け渡し、
上記所定の条件を満たさない場合には、
メッセージ送信のメカニズムを実現する第３のオブジェクトを用い、上記第１のオブジェクトから上記第３のオブジェクトへ実行制御を切り替え、さらに上記第３のオブジェクトから上記第２のオブジェクトへ実行制御を切り換えることにより、上記第２のオブジェクトに上記第１のオブジェクトからのメッセージを受け渡すこと
を特徴とする記録媒体。
【請求項７】
上記オペレーティングシステムは、
上記モジュールに記述された手続きの中からメッセージ送信を指示するメソッドに対応した手続きを呼び出して実行する際に、
各オブジェクト毎に予め登録された、オブジェクトに記述されたメッセージ送信に関するメソッドと、上記モジュールに記述された手続きとの関係についての情報を参照して、該当する手続きを呼び出して実行する
ことを特徴とする請求項６記載の記録媒体。
【請求項８】
上記所定の条件を満たす場合とは、
メッセージ送信元の上記第１のオブジェクトからメッセージ送信先の上記第２のオブジェクトにメッセージが送信された時点において、それらのオブジェクトが並行動作する必要がなく、且つ、
メッセージ送信元の上記第１のオブジェクトからメッセージ送信先の上記第２のオブジェクトにメッセージを送信するときに、メッセージ送信先の上記第２のオブジェクトが他のオブジェクトからのメッセージに基づく処理を実行していない場合であること
を特徴とする請求項６記載の記録媒体。
【請求項９】
上記モジュールは、上記オペレーティングシステムを構成するオブジェクトからなり、上記モジュールに記述された手続きとは、このオブジェクトのメソッドであること
を特徴とする請求項６記載の記録媒体。
【請求項１０】
上記オペレーティングシステムは、コンテキストデータの書き換えを伴うコンテキストスイッチの処理を担うコンテキストスイッチ処理部を備えているとともに、当該コンテキストスイッチ処理部の内容を変更することなく、当該オペレーティングシステムを構成するオブジェクトの内容変更が可能とされていること
を特徴とする請求項６記載の記録媒体。
【請求項１１】
オペレーティングシステムが記録された記録媒体を備えたデータ処理装置であって、
上記オペレーティングシステムは、
当該オペレーティングシステム又は当該オペレーティングシステム上で実行されるアプリケーションプログラムを構成する第１のオブジェクトから第２のオブジェクトへのメッセージ送信の処理を行う際に、
所定の条件を満たす場合には、
メッセージ送信元の上記第１のオブジェクトの実行を中断するとともに、上記第１のオブジェクトの実行を中断したことを示すように上記第１のオブジェクトに対応するコンテキストデータを書き換えた後、
メッセージ送信に関する手続きが記述された所定のモジュールを呼び出して、当該モジュールに記述された手続きの中から上記メソッドに対応した手続きを実行することにより、メッセージ送信先の上記第２のオブジェクトに対応するコンテキストデータを検索し、
上記検索により見つかったコンテキストデータを、当該コンテキストデータに対応する上記第２のオブジェクトが実行中であることを示すように書き換えるとともに、当該オブジェクトにメッセージ送信元の上記第１のオブジェクトからのメッセージを受け渡し、
上記所定の条件を満たさない場合には、
メッセージ送信のメカニズムを実現する第３のオブジェクトを用い、上記第１のオブジェクトから上記第３のオブジェクトへ実行制御を切り替え、さらに上記第３のオブジェクトから上記第２のオブジェクトへ実行制御を切り換えることにより、上記第２のオブジェクトに上記第１のオブジェクトからのメッセージを受け渡すこと
を特徴とするデータ処理装置。
【請求項１２】
上記オペレーティングシステムは、
上記モジュールに記述された手続きの中からメッセージ送信を指示するメソッドに対応した手続きを呼び出して実行する際に、
各オブジェクト毎に予め登録された、オブジェクトに記述されたメッセージ送信に関するメソッドと、上記モジュールに記述された手続きとの関係についての情報を参照して、該当する手続きを呼び出して実行すること
を特徴とする請求項１１記載のデータ処理装置。
【請求項１３】
上記所定の条件を満たす場合とは、
メッセージ送信元の上記第１のオブジェクトからメッセージ送信先の上記第２のオブジェクトにメッセージが送信された時点において、それらのオブジェクトが並行動作する必要がなく、且つ、
メッセージ送信元の上記第１のオブジェクトからメッセージ送信先の上記第２のオブジェクトにメッセージを送信するときに、メッセージ送信先の上記第２のオブジェクトが他のオブジェクトからのメッセージに基づく処理を実行していない場合であること
を特徴とする請求項１１記載のデータ処理装置。
【請求項１４】
上記モジュールは、上記オペレーティングシステムを構成するオブジェクトからなり、上記モジュールに記述された手続きとは、このオブジェクトのメソッドであること
を特徴とする請求項１１記載のデータ処理装置。
【請求項１５】
上記オペレーティングシステムは、コンテキストデータの書き換えを伴うコンテキストスイッチの処理を担うコンテキストスイッチ処理部を備えているとともに、当該コンテキストスイッチ処理部の内容を変更することなく、当該オペレーティングシステムを構成するオブジェクトの内容変更が可能とされていること
を特徴とする請求項１１記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、各オブジェクト毎に当該オブジェクトの実行状況についての情報をコンテキストデータとして記録しつつ、オブジェクト毎にデータ処理を実行するデータ処理方法に関する。また、そのようなデータ処理方法を実現するオペレーティングシステムが記録された記録媒体、並びにそのような記録媒体を備えたデータ処理装置に関する。
【０００２】
【従来の技術】
オブジェクト指向をオペレーティングシステムに適用し、オペレーティングシステムの構成要素をオブジェクトとしてモジュール化する技術がある。このように、構成要素がオブジェクトとしてモジュール化されたオペレーティングシステムのことを、一般にオブジェクト指向オペレーティングシステムと呼ぶ。オブジェクト指向オペレーティングシステムでは、システムの動作はオブジェクト間の実行制御の切り替えの連続で定義される。このようなオブジェクト間の実行制御の切り換えは、一般にコンテキストスイッチと呼ばれる。
【０００３】
そして、オペレーティングシステムの実行性能は、このコンテキストスイッチの回数に大きく影響を受ける。すなわち、例えば、同様な処理を実現するプログラムであっても、コンテキストスイッチが少なくて済む場合よりも、コンテキストスイッチを多く必要とする場合の方が、より多くの処理時間を要する。
【０００４】
ところで、オペレーティングシステム上で実行されるアプリケーションプログラムを構成するオブジェクトと、オペレーティングシステムを構成するオブジェクトとが、同様な実行機構を持つオペレーティングシステムのことを、純オブジェクト指向オペレーティングシステムと呼ぶこととする。また、あるオブジェクトが他のオブジェクトに対して何らかのサービスを要求する場合に、サービスを要求する側のオブジェクトをサービス依頼者と称し、サービスを提供する側のオブジェクトをサービス提供者と呼ぶこととする。すなわち、サービス依頼者がサービス提供者にサービスを要求すると、サービス依頼者からサービス提供者へコンテキストスイッチが行われ、サービス提供者によってサービスが提供される。
【０００５】
このとき、サービス依頼者とサービス提供者の相対関係が、オペレーティングシステム上の全てのオブジェクトに関して定義されると、純オブジェクト指向オペレーティングシステムの動作は、サービス依頼者とサービス提供者との間でのコンテキストスイッチの連続で定義される。このようにすれば、オペレーティングシステムの基本部分（すなわち、オブジェクトとしては定義できない部分）については、サービス依頼者とサービス提供者との間のコンテキストスイッチを実現するコンテキストスイッチ処理部だけとすることができる。そして、このようにオペレーティングシステムの基本部分をコンテキストスイッチ処理部だけとすれば、オペレーティングシステムの基本部分を最小化することができ、ハードウェアやユーザの要求に対して柔軟なシステムが構築可能となる。
【０００６】
【発明が解決しようとする課題】
しかしながら、オペレーティングシステムの基本部分をコンテキストスイッチ処理部だけとしてしまうと、サービス依頼者とサービス提供者との間でのコンテキストスイッチの回数が多くなり、オペレーティングシステムの実行性能が劣化してしまうという問題が生じる。
【０００７】
本発明は、以上のような従来の実情に鑑みて提案されたものであり、ハードウェアやユーザの要求に対して柔軟なシステムが構築可能な純オブジェクト指向オペレーティングシステムを実現しつつ、且つ、コンテキストスイッチの回数が少なくて済みオペレーティングシステムの実行性能の劣化が少ないデータ処理方法を提供することを目的としている。また、本発明は、そのようなデータ処理方法を実現するオペレーティングシステムが記録された記録媒体、並びにそのような記録媒体を備えたデータ処理装置を提供することも目的としている。
【０００８】
【課題を解決するための手段】
本発明に係るデータ処理方法は、各オブジェクト毎に当該オブジェクトの実行状況についての情報をコンテキストデータとして記録しつつ、オブジェクト毎にデータ処理を実行するデータ処理方法において、第１のオブジェクトがメッセージ送信を指示する所定のメソッドを実行して第２のオブジェクトにメッセージを送信する際に、所定の条件を満たす場合には、メッセージ送信元の上記第１のオブジェクトの実行を中断するとともに、上記第１のオブジェクトの実行を中断したことを示すように上記第１のオブジェクトに対応するコンテキストデータを書き換えた後、メッセージ送信に関する手続きが記述された所定のモジュールを呼び出して、当該モジュールに記述された手続きの中から上記メソッドに対応した手続きを実行することにより、メッセージ送信先の上記第２のオブジェクトに対応するコンテキストデータを検索し、上記検索により見つかったコンテキストデータを、当該コンテキストデータに対応する上記第２のオブジェクトが実行中であることを示すように書き換えるとともに、上記第２のオブジェクトに上記第１のオブジェクトからのメッセージを受け渡し、上記所定の条件を満たさない場合には、メッセージ送信のメカニズムを実現する第３のオブジェクトを用い、上記第１のオブジェクトから上記第３のオブジェクトへ実行制御を切り替え、さらに上記第３のオブジェクトから上記第２のオブジェクトへ実行制御を切り換えることにより、上記第２のオブジェクトに上記第１のオブジェクトからのメッセージを受け渡すことを特徴としている。
【０００９】
このデータ処理方法では、メッセージ送信時に所定の条件を満たす場合、メッセージ送信元の第１のオブジェクトの実行が中断されるとともに、第１のオブジェクトの実行を中断したことを示すように第１のオブジェクトに対応するコンテキストデータが書き換えられる。その後、メッセージ送信に関する手続きが記述されたモジュールに記述された手続きが実行され、メッセージ送信先の第２のオブジェクトに対応するコンテキストデータが検索される。そして、この検索により見つかったコンテキストデータが、当該コンテキストデータに対応する第２のオブジェクトが実行中であることを示すように書き換えられ、メッセージ送信先の第２のオブジェクトが実行状態とされる。この結果、メッセージ送信元の第１のオブジェクトからメッセージ送信先の第２のオブジェクトへの、コンテキストスイッチがなされる。また、所定の条件を満たさない場合、メッセージ送信のメカニズムを実現する第３のオブジェクトが用いられ、第１のオブジェクトから第３のオブジェクトへ実行制御が切り替えられ、第１のオブジェクトから第３のオブジェクトへの、コンテキストスイッチがなされ、さらに第３のオブジェクトから第２のオブジェクトへ実行制御が切り換えられ、第３のオブジェクトから第２のオブジェクトへの、コンテキストスイッチがなされることにより、第２のオブジェクトに第１のオブジェクトからのメッセージが受け渡される。
【００１０】
また、本発明に係る記録媒体は、オペレーティングシステムが記録されたコンピュータ読み取り可能な記録媒体であって、上記オペレーティングシステムは、当該オペレーティングシステム又は当該オペレーティングシステム上で実行されるアプリケーションプログラムを構成する第１のオブジェクトから第２のオブジェクトへのメッセージ送信の処理を行う際に、所定の条件を満たす場合には、メッセージ送信元の上記第１のオブジェクトの実行を中断するとともに、当該オブジェクトの実行を中断したことを示すように上記第１のオブジェクトに対応するコンテキストデータを書き換えた後、メッセージ送信に関する手続きが記述された所定のモジュールを呼び出して、当該モジュールに記述された手続きの中から上記メソッドに対応した手続きを実行することにより、メッセージ送信先の上記第２のオブジェクトに対応するコンテキストデータを検索し、上記検索により見つかったコンテキストデータを、当該コンテキストデータに対応する上記第２のオブジェクトが実行中であることを示すように書き換えるとともに、当該オブジェクトにメッセージ送信元のオブジェクトからのメッセージを受け渡し、上記所定の条件を満たさない場合には、メッセージ送信のメカニズムを実現する第３のオブジェクトを用い、上記第１のオブジェクトから上記第３のオブジェクトへ実行制御を切り替え、さらに上記第３のオブジェクトから上記第２のオブジェクトへ実行制御を切り換えることにより、上記第２のオブジェクトに上記第１のオブジェクトからのメッセージを受け渡すことを特徴としている。
【００１１】
この記録媒体に記録されたオペレーティングシステムを用いた場合には、メッセージ送信時に所定の条件を満たすときに、先ず、メッセージ送信元の第１のオブジェクトの実行が中断されるとともに、第１のオブジェクトの実行を中断したことを示すように第１のオブジェクトに対応するコンテキストデータが書き換えられる。その後、メッセージ送信に関する手続きが記述されたモジュールに記述された手続きが実行され、メッセージ送信先の第２のオブジェクトに対応するコンテキストデータが検索される。そして、この検索により見つかったコンテキストデータが、当該コンテキストデータに対応する第２のオブジェクトが実行中であることを示すように書き換えられ、メッセージ送信先の第２のオブジェクトが実行状態とされる。この結果、メッセージ送信元の第１のオブジェクトからメッセージ送信先の第２のオブジェクトへの、コンテキストスイッチがなされる。また、所定の条件を満たさない場合、メッセージ送信のメカニズムを実現する第３のオブジェクトが用いられ、第１のオブジェクトから第３のオブジェクトへ実行制御が切り替えられ、第１のオブジェクトから第３のオブジェクトへの、コンテキストスイッチがなされ、さらに第３のオブジェクトから第２のオブジェクトへ実行制御が切り換えられ、第３のオブジェクトから第２のオブジェクトへの、コンテキストスイッチがなされることにより、第２のオブジェクトに第１のオブジェクトからのメッセージが受け渡される。
【００１２】
また、本発明に係るデータ処理装置は、オペレーティングシステムが記録された記録媒体を備えたデータ処理装置であって、上記オペレーティングシステムは、当該オペレーティングシステム又は当該オペレーティングシステム上で実行されるアプリケーションプログラムを構成する第１のオブジェクトから第２のオブジェクトへのメッセージ送信の処理を行う際に、所定の条件を満たす場合には、メッセージ送信元の上記第１のオブジェクトの実行を中断するとともに、上記第１のオブジェクトの実行を中断したことを示すように上記第１のオブジェクトに対応するコンテキストデータを書き換えた後、メッセージ送信に関する手続きが記述された所定のモジュールを呼び出して、当該モジュールに記述された手続きの中から上記メソッドに対応した手続きを実行することにより、メッセージ送信先の上記第２のオブジェクトに対応するコンテキストデータを検索し、上記検索により見つかったコンテキストデータを、当該コンテキストデータに対応する上記第２のオブジェクトが実行中であることを示すように書き換えるとともに、当該オブジェクトにメッセージ送信元の上記第１のオブジェクトからのメッセージを受け渡し、上記所定の条件を満たさない場合には、メッセージ送信のメカニズムを実現する第３のオブジェクトを用い、上記第１のオブジェクトから上記第３のオブジェクトへ実行制御を切り替え、さらに上記第３のオブジェクトから上記第２のオブジェクトへ実行制御を切り換えることにより、上記第２のオブジェクトに上記第１のオブジェクトからのメッセージを受け渡すことを特徴としている。
【００１３】
このデータ処理装置に備えられた記録媒体に記録されたオペレーティングシステムを用いた場合には、メッセージ送信時に所定の条件を満たすときに、先ず、メッセージ送信元の第１のオブジェクトの実行が中断されるとともに、第１のオブジェクトの実行を中断したことを示すように第１のオブジェクトに対応するコンテキストデータが書き換えられる。その後、メッセージ送信に関する手続きが記述されたモジュールに記述された手続きが実行され、メッセージ送信先の第２のオブジェクトに対応するコンテキストデータが検索される。そして、この検索により見つかったコンテキストデータが、当該コンテキストデータに対応する第２のオブジェクトが実行中であることを示すように書き換えられ、メッセージ送信先の第２のオブジェクトが実行状態とされる。この結果、メッセージ送信元の第１のオブジェクトからメッセージ送信先の第２のオブジェクトへの、コンテキストスイッチがなされる。また、所定の条件を満たさない場合、メッセージ送信のメカニズムを実現する第３のオブジェクトが用いられ、第１のオブジェクトから第３のオブジェクトへ実行制御が切り替えられ、第１のオブジェクトから第３のオブジェクトへの、コンテキストスイッチがなされ、さらに第３のオブジェクトから第２のオブジェクトへ実行制御が切り換えられ、第３のオブジェクトから第２のオブジェクトへの、コンテキストスイッチがなされることにより、第２のオブジェクトに第１のオブジェクトからのメッセージが受け渡される。
【００１４】
【発明の実施の形態】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
【００１５】
１．ハードウェア環境
まず、本発明が適用されるハードウェア構成の一例について、図１を参照して説明する。なお、ここでは、本発明の実施の形態の一例として、テレビ装置に本発明を適用した例を挙げるが、当然の事ながら、本発明は、その他のデータ処理装置にも適用可能である。すなわち、本発明は、オペレーティングシステムが搭載されるデータ処理装置に広く適用可能であり、例えば、テレビ装置以外のオーディオ・ビジュアル機器（いわゆるＡＶ機器）や、各種の事務機器や、一般のコンピュータ装置等にも適応可能である。
【００１６】
本発明が適用されたデータ処理装置である図１に示すテレビ装置は、アンテナ又はケーブル等によって放送局からの信号を受信し、当該信号に基づいて、ブラウン管又は液晶等の画像表示装置に映像を表示すると共にスピーカから音声を出力する。
【００１７】
このテレビ装置は、通常のテレビ機能を備えているだけでなく、外部からプログラムやデータを受けとることが可能となっており、図１に示すように、バス／ＩＯブリッジ１を介してバス２に接続されたテレビ機能部３と、バス／メモリブリッジ４を介してバス２に接続されたプロセッサ５と、バス／メモリブリッジ４を介してプロセッサ５に接続されたＲＯＭ（Read Only Memory）６及びＲＡＭ（Random Access Memory）７と、バス２に接続された操作パネル８、外部記憶装置９及び通信装置１０とを備えている。
【００１８】
テレビ機能部３は、アンテナ又はケーブル等によって受信した信号に基づいて、映像や音声を再生する機能を備えている。このテレビ機能部３は、バス／ＩＯブリッジ１を介してバス２に接続されており、これにより、他の部分との信号のやり取りが可能となっている。
【００１９】
プロセッサ５は、このテレビ装置の各部の制御を行うものであり、バス／メモリブリッジ４を介してバス２に接続されている。また、プロセッサ５には、バス／メモリブリッジ４を介してＲＯＭ６及びＲＡＭ７が接続されている。ＲＯＭ６は、プロセッサ５による制御を行うためのオペレーティングシステムやアプリケーションプログラムを記憶している。ＲＡＭ７は、プロセッサ５のワークエリアとして使われる。すなわち、プロセッサ５は、ＲＯＭ６に記憶されているオペレーティングシステムやアプリケーションプログラムを、ＲＡＭ７をワークエリアとして使用して実行することにより、このテレビ装置を構成する各部を制御する。
【００２０】
操作パネル８は、ユーザからの操作入力を受け付けるための入力装置であり、この操作パネル８から、例えば、テレビのチャンネルやボリューム等の切り換えを指示する信号が入力される。この操作パネル８は、具体的には、各種信号を入力するための複数のボタンを備えた入力装置や、いわゆるマウスと称されるようなポインティングデバイス等からなる。この操作パネル８によって入力された信号は、バス２及びバス／メモリブリッジ４を介してプロセッサ５に入力される。そして、プロセッサ５は、操作パネル８によって入力された信号に基づいて、所定の演算処理を行って各部を制御する。
【００２１】
外部記憶装置９は、例えばハードディスク装置からなり、画像データ、制御データ、又は外部から通信装置１０を介してダウンロードされたプログラム等を記録するのに使われる。また、通信装置１０は、外部との間でデータ通信を行うための入出力部であり、例えばモデムやターミナルアダプター等からなる。
【００２２】
このテレビ装置は、テレビ機能部３によって提供される通常のテレビ機能を備えているだけでなく、通信装置１０を介して、外部からプログラムやデータを受け取ることが可能となっている。例えば、このテレビ装置では、オペレーティングシステムのバージョンアップを行う際に、外部のネットワークから通信装置１０を介して新規ソフトウェアモジュールを受け取り、これにより、オペレーティングシステムのバージョンアップを行うことが可能となっている。
【００２３】
また、このテレビ装置では、プロセッサ５によって、ＲＯＭ６に記憶されているオペレーティングシステムを実行し、このオペレーティングシステム上で、ＲＯＭ６や外部記憶装置９に記憶されているアプリケーションプログラムを実行することにより、各部の制御を行う。すなわち、このテレビ装置は、オペレーティングシステムが記録されたコンピュータ読み取り可能な記録媒体として、ＲＯＭ６を備えている。なお、オペレーティングシステムは、ＲＡＭ７や外部記憶装置９に記録しておくようにしてもよい。特に、オペレーティングシステムの書き換えを行えるようにしたい場合には、ＲＡＭ７や外部記憶装置９に記録しておいたほうが好ましい。
【００２４】
本例におけるオペレーティングシステムは、純オブジェクト指向型オペレーティングシステムである。そして、このオペレーティングシステム上で、例えば、テレビ機能部３に動画像を表示するためのアプリケーションプログラムや、操作パネル８を制御するためのグラフィカル・ユーザ・インターフェース（ＧＵＩ）を実現するアプリケーションプログラムが実行される。
【００２５】
２．ソフトウェア環境
つぎに、図１に示したようなテレビ装置で使用される、本発明を適用したオペレーティングシステムについて詳細に説明する。
【００２６】
２−１  オペレーティングシステムの構成
このオペレーティングシステムは、オペレーティングシステムの基本部分であるメタコア（MetaCore）と、その他のオブジェクト群とから構成される。ここで、メタコアは、オブジェクトとしては定義できない部分であり、オブジェクト間の実行制御の切り替えを実行する処理部、すなわちコンテキストスイッチを実行するコンテキストスイッチ処理部である。
【００２７】
また、メタコアは、ユーザプログラムにより変更が困難な部分であり、一方、その他のオブジェクト群は、ユーザプログラムにより変更が容易な部分である。なお、ここでの「変更」とは、当該変更をオペレーティングシステムに反映させるためには、全てのアプリケーションプログラムを停止して、オペレーティングシステムを再起動させる必要があるような、オペレーティングシステムの変更のことである。
【００２８】
このオペレーティングシステムは、純オブジェクト指向オペレーティングシステムであり、オペレーティングシステム上で実行されるアプリケーションプログラムを構成するオブジェクトと、オペレーティングシステムを構成するオブジェクトとが、同様な実行機構を持つオペレーティングシステムである。したがって、オブジェクト間のコンテキストスイッチは、サービスの依頼と提供という観点から考えると、次の２種類に集約できる。
【００２９】
（１）サービス依頼者からサービス提供者に実行制御が移る。
【００３０】
（２）サービス提供者からサービス依頼者に実行制御が戻る。
【００３１】
ここで、オペレーティングシステムによって提供されるサービスを依頼する側であるサービス依頼者のオブジェクトのことを、「ベースレベルオブジェクト」と称する。また、オペレーティングシステムによって提供されるサービスを提供する側であるサービス提供者のオブジェクトのことを、「メタオブジェクト」と称する。また、メタオブジェクトにより提供されるサービスのことを、「メタオペレーション」と称する。また、サービス依頼者とサービス提供者との間の関係のことを、「ベース／メタの関係」と呼ぶ。このとき、オペレーティングシステム内の全ての動作は、オブジェクト間のベース／メタの関係で表現することができる。
【００３２】
そして、このオペレーティングシステムでは、上記２種類のコンテキストスイッチを行うコンテキストスイッチ処理部が、メタコアとして提供される。すなわち、このオペレーティングシステムでは、オペレーティングシステムを構築するための必要最低限の機構が、メタコアによって提供される。
【００３３】
すなわち、このオペレーティングシステムは、コンテキストデータの書き換えを伴うコンテキストスイッチの処理を担うコンテキストスイッチ処理部として、メタコアを備えている。そして、このメタコアの内容を変更することなく、当該オペレーティングシステムを構成するオブジェクトの内容変更が可能とされている。
【００３４】
このオペレーティングシステムでは、ユーザが変更困難な部分は最小化され、様々なハードウェア環境やユーザの要求に対して、容易に対応が可能な、柔軟性が高いシステムを実現できる。すなわち、例えば、オブジェクト間でメッセージをやり取りするオブジェクト間通信を担う部分を交換したり更新したりするようなことが、オペレーティングシステムを再起動させること無く行うことができる。したがって、オブジェクト間通信を担う部分のバグの修正や、新デバイスの追加に対する新機能の追加といったことを、非常に容易に行うことが可能である。また、プロセッサのアーキテクチャに依存する部分を、メタコアに集中させることにより、他のシステム構成要素の移植性を高めることもできる。
【００３５】
２−２  インターフェース
このオペレーティングシステムにおいて、メタコアは、上記２種類のコンテキストスイッチを実現する２つのインタフェースを提供する。ここで、サービス依頼者からサービス提供者に実行制御が移る際に使用されるインターフェースのことを、「Ｍインターフェース」と称する。また、サービス提供者からサービス依頼者に実行制御が戻る際に使用されるインターフェースのことを、「Ｒインターフェース」と称する。なお、Ｍインターフェースの「Ｍ」は、Meta Callを意味しており、Ｒインターフェースの「Ｒ」は、Reflectを意味している。
【００３６】
そして、ベースレベルオブジェクトからメタオブジェクトへのコンテキストスイッチを行う際には、メタコアによって提供されるＭインターフェースが使用され、また、メタオブジェクトからベースレベルオブジェクトへのコンテキストスイッチを行う際には、メタコアによって提供されるＲインターフェースが使用される。
【００３７】
また、このオペレーティングシステムでは、コンテキストスイッチの回数を減らして、実行性能を高めるために、ＭインターフェースやＲインターフェースの他に、オブジェクト間のメッセージ通信の際にだけ使用されるインターフェースを提供する。このインターフェースのことを、「Ｆインターフェース」と称する。なお、Ｆインターフェースの「Ｆ」は、Fast Sendを意味している。
【００３８】
２−３  コンテキストデータとメタディスクリプタ
Ｍ，Ｒ，Ｆの各インターフェースについて説明する前に、コンテキストスイッチの際に書き換えられるコンテキストデータと、コンテキストデータの一部であるメタディスクリプタについて、以下に説明する。
【００３９】
２−３−１  コンテキストデータ
オブジェクトの実行は、コンテキストデータと呼ばれる構造体で管理される。換言すれば、オブジェクトの実行状況等についての情報は、各オブジェクト毎に、コンテキストデータと呼ばれる構造体に記録されており、このコンテキストデータを参照することにより、当該オブジェクトの実行状況が分かるようになっている。そして、コンテキストスイッチのときには、実行制御の変更の対象となったオブジェクトに対応するコンテキストデータが書き換えられる。
【００４０】
このコンテキストデータには、オブジェクトの実行に関する情報として、現在のオブジェクトの状態、メタディスクリプタ（MetaDescriptor）、実行モード、割り込みマスク、実行スタック、直前に実行中だったオブジェクト、レジスタ待避領域、メソッドのエントリテーブル等についての情報が記録される。
【００４１】
現在のオブジェクトの状態とは、スケジュール管理を行うオブジェクトであるスケジューラと連動した状態遷移に基づいた状態のことであり、例えば、「実行中」「メッセージを送出してその返事を待っている状態」「割り込み処理が入って待ちの状態」等がある。
【００４２】
メタディスクリプタは、メタオペレーションに関する情報が記述された構造体であり、ベースレベルオブジェクトとメタオブジェクトとの相対関係を示す。このメタディスクリプタには、例えば、メッセージ通信のときに用いるオブジェクトが、「メイラオブジェクト」であるというような情報が含まれる。なお、このメタディスクリプタについては、後で詳細に説明する。
【００４３】
実行モードとは、プロセッサに依存したモードのことである。実行モードには、例えば、アプリケーションプログラムが実行されるユーザモードと、オペレーティングシステムが実行されるカーネルモードとがある。通常、プロセッサに定義されているインストラクションには、オペレーティングシステムだけが使える命令（いわゆる特権命令）と、アプリケーションプログラムも使える命令とがあり、実行モードを切り換えることにより、これらを区別する。なお、多くの場合、アプリケーションプログラムを構成するオブジェクトからオペレーティングシステムを構成するオブジェクトへのコンテキストスイッチが生じると、実行モードはユーザモードからカーネルモードへと切り換わり、また、オペレーティングシステムを構成するオブジェクトからアプリケーションプログラムを構成するオブジェクトへのコンテキストスイッチが生じると、実行モードはカーネルモードからユーザモードへと切り換わる。
【００４４】
割り込みマスクは、予め定義された割り込みに対してプライオリティをつけるためのものである。すなわち、割り込みマスクには、例えば、「外部記憶装置から割り込みがあるときには通信装置からの割り込みが入れないようにする」というような、割り込みのプライオリティについての情報が含まれる。
【００４５】
実行スタックは、実行中の処理に応じて、一時的にデータが保存される領域であり、例えば、オブジェクト間でメッセージのやり取りを行うメッセージ通信のときに、やり取りされるメッセージが保存される。或いは、例えば、計算処理を行っているときに、計算の途中結果の値が保存される。
【００４６】
直前に実行中だったオブジェクトについての情報とは、具体的には、直前に実行中だったオブジェクトのコンテキストデータを指し示す情報である。例えば、メタオブジェクトがベースレベルオブジェクトからの要求によりメタオペレーションを実行する際に、このメタオブジェクトに対応したコンテキストデータには、直前に実行中だったオブジェクトについての情報として、要求を出したベースレベルオブジェクトのコンテキストデータを指し示す情報が保存される。そして、この情報は、例えば、Ｍインターフェースにより、ベースレベルオブジェクトからメタオブジェクトへのコンテキストスイッチを行った後、Ｒインターフェースにより、そのメタオブジェクトから元のベースレベルオブジェクトへのコンテキストスイッチを行うような場合に、戻り先となるベースレベルオブジェクトを指し示す情報として使用される。なお、以下の説明では、この「直前に実行中だったオブジェクトについての情報」のことを「直前実行コンテキスト」と称する。
【００４７】
レジスタ待避領域は、オブジェクトの処理が中断されたような場合に、そのオブジェクトの再開に必要なデータを一時的に保存しておく領域である。
【００４８】
メソッドのエントリテーブルとは、実行可能なメソッドの一覧表が記録されたテーブルである。なお、メソッドとは、オブジェクトが実行できる関数のことであり、メソッドのエントリテーブルには、インデックスと、当該インデックスに対応したメソッドへのポインタとが記録される。
【００４９】
コンテキストデータには、以上のような情報が記録されており、上述したように、コンテキストスイッチのときには、このようなコンテキストデータが書き換えられる。また、コンテキストスイッチの際、必要に応じて、コンテキストデータに記録されている情報がプロセッサに供給される。
【００５０】
２−３−２  メタディスクリプタ
メタディスクリプタは、メタオペレーションに関する情報が記述された構造体である。換言すれば、ベース／メタの関係を実現するのに必要な情報が、このメタディスクリプタと称される構造体に記録される。メタディスクリプタは、全てのベースレベルオブジェクトに対して一つ設定されるものであり、メタオブジェクトによって提供されるメソッドのうち、ベースオブジェクトでどのメソッドを使用するかが、予めメタディスクリプタに記述される。
【００５１】
具体的には、各メタディスクリプタは、図２に示すように、「メタオペレーションの種類」と、「メタオブジェクトとして起動されるオブジェクト」と、「実行されるメソッドのインデックス」との３つ組の配列からなる。ここで、「メタオペレーションの種類」の欄には、メタオペレーションを指し示す情報として、具体的には、メタオペレーションのインデックスが記述される。また、「メタオブジェクトとして起動されるオブジェクト」の欄には、対象となるメタオブジェクトのコンテキストデータを指し示す情報が記述される。また、「実行されるメソッドのインデックス」の欄には、上述したメソッドのエントリテーブルに含まれるインデックスに対応した値が記述される。
【００５２】
そして、例えば、オブジェクトＡがメッセージ送信のメタオペレーションと、メモリ割り当てのメタオペレーションとの両方を必要としており、メッセージ送信のメタオペレーションは、メイラオブジェクトのＳｅｎｄメソッドによって実行され、メモリ割り当てのメタオペレーションは、メモリマネージャオブジェクトのＮｅｗメソッドによって実行されるとき、オブジェクトＡのメタディスクリプタは、図３のようになる。
【００５３】
図３の例では、「メタオペレーションの種類」として、「メッセージ送信」と「メモリ割り当て」とが登録されている。そして、「メッセージ送信」に対応して、「メタオブジェクトとして起動されるオブジェクト」に「メイラオブジェクト」が登録され、「実行されるメソッドのインデックス」に「Ｓｅｎｄメソッドのインデックス」が登録されている。また、「メモリ割り当て」に対応して、「メタオブジェクトとして起動されるオブジェクト」に「メモリマネージャオブジェクト」が登録され、「実行されるメソッドのインデックス」に「Ｎｅｗメソッドのインデックス」が登録されている。
【００５４】
２−４  ＭインターフェースとＲインターフェース
２−４−１  Ｍ／Ｒインターフェースを用いたメッセージ送信
図４に、Ｓｅｎｄオペレーションにより、オブジェクトＡからオブジェクトＢへのメッセージ送信を、ＭインターフェースとＲインターフェースを用いて実現する例を示す。
【００５５】
図４の例では、メッセージ送信の具体的なメカニズムを実現するオブジェクトとして、メイラオブジェクトがあるものとしている。オブジェクトＡ及びオブジェクトＢから見ると、メイラオブジェクトはメタオブジェクトとなる。逆に、メイラオブジェクトから見ると、オブジェクトＡ及びオブジェクトＢはベースレベルオブジェクトとなる。
【００５６】
オブジェクトＡでメッセージ送信の要求が起こり、メッセージ送信を要求するメタオペレーションであるＳｅｎｄオペレーションが呼び出されると、Ｍインターフェースによるコンテキストスイッチが起こる。すなわち、オブジェクトＡからメイラオブジェクトに、コンテキストスイッチする。このコンテキストスイッチにより実行中となったメイラオブジェクトは、スケジュール管理を担うスケジューラオブジェクトに対して、スケジューリングを依頼するといった動作を行う。その過程でメイラオブジェクトは、オブジェクトＢに対してコンテキストスイッチをするべきであることを認識する。その結果、メイラオブジェクトからオブジェクトＢに対してＲインターフェースによるコンテキストスイッチが起こる。すなわち、メイラオブジェクトからオブジェクトＢにコンテキストスイッチする。以上の動作により、オブジェクトＡからオブジェクトＢへのメッセージ送信がなされる。
【００５７】
そして、これらの動作において、Ｍインターフェースによるコンテキストスイッチ、及びＲインターフェースによるコンテキストスイッチが起こるとき、それらのコンテキストスイッチに関わる処理は、メタコアによって実行される。
【００５８】
２−４−２  Ｍ／Ｒインターフェースを用いたメモリ割り当て
図５に、Ｎｅｗオペレーションにより、オブジェクトＡによるメモリ割り当てを、ＭインターフェースとＲインターフェースを用いて実現する例を示す。
【００５９】
図５の例では、メモリ割り当ての具体的なメカニズムを実現するオブジェクトとして、メモリマネージャオブジェクトがあるものとしている。オブジェクトＡから見ると、メモリマネージャオブジェクトはメタオブジェクトとなる。逆に、メモリマネージャオブジェクトから見ると、オブジェクトＡはベースレベルオブジェクトとなる。
【００６０】
オブジェクトＡでメモリ割り当ての要求が起こり、メモリ割り当てを要求するメタオペレーションであるＮｅｗオペレーションが呼び出されると、Ｍインターフェースによるコンテキストスイッチが起こる。すなわち、オブジェクトＡからメモリマネージャオブジェクトに、コンテキストスイッチする。このコンテキストスイッチにより実行中となったメモリマネージャは、オブジェクトＡにメモリを割り当てる処理を行う。その後、Ｒインターフェースによるコンテキストスイッチが起こる。すなわち、メモリマネージャオブジェクトからオブジェクトＡに、コンテキストスイッチする。以上の動作により、オブジェクトＡへのメモリ割り当ての処理がなされる。
【００６１】
そして、これらの動作においても、Ｍインターフェースによるコンテキストスイッチ、及びＲインターフェースによるコンテキストスイッチが起こるとき、それらのコンテキストスイッチに関わる処理は、メタコアによって実行される。
【００６２】
２−４−３  Ｍインターフェースの定義
図４及び図５に示したようにＭインターフェースやＲインターフェースによりコンテキストスイッチを行う際、メタコアは、メタオペレーションの特定のために、メタディスクリプタを参照する。そして、メタディスクリプタの構造に基づき、Ｍインタフェースは次のように定義される。
【００６３】
MetaCore::M(in currentContext，in metaOperation，in parameters)
「currentContext」は、現在実行中のオブジェクトのコンテキストデータを示す。すなわち、「currentContext」は、Ｍインターフェースによるコンテキストスイッチの要求があったとき、その要求を出したベースレベルオブジェクトのコンテキストデータを示す。
【００６４】
「metaOperation」は、要求するメタオペレーションの種類を示す。この「metaOperation」は、メタディスクリプタの「メタオペレーションの種類」の欄の値に相当する。具体的には、例えば、メッセージ送信の場合には、メッセージ送信を示すメタオペレーションのインデックスが記述される。
【００６５】
「parameters」は、メタオペレーションに渡されるパラメータである。この「parameters」は、メタオペレーションの種類により異なる。具体的には、例えば、メッセージ送信の場合には、送信しようとするメッセージが保存してある記憶領域のアドレスが記述される。
【００６６】
２−４−４  Ｒインターフェースの定義
図４及び図５に示したようにＭインターフェースやＲインターフェースによりコンテキストスイッチを行う際、メタコアは、メタオペレーションの特定のために、メタディスクリプタを参照する。そして、メタディスクリプタの構造に基づき、Ｒインタフェースは次のように定義される。
【００６７】
MetaCore::R(in currentContext，in selector，in parameters)
「currentContext」は、現在実行中のオブジェクトのコンテキストデータを示す。すなわち、「currentContext」は、Ｒインターフェースによるコンテキストスイッチの要求があったとき、その要求を出したメタオブジェクトのコンテキストデータを示す。
【００６８】
「selector」は、Ｒインターフェースによるコンテキストスイッチによりベースレベルオブジェクトに実行制御が移ったときに、そのベースレベルオブジェクトで実行されるメソッドのインデックスを示す。すなわち、「selector」には、Ｒインターフェースによるコンテキストスイッチでの戻り先のメソッドを特定するインデックスが記述される。なお、メタオペレーションが実行される直前の状態から、ベースレベルオブジェクトが実行再開される場合、「selector」はブランクとなり、何も記述されない。換言すれば、戻り先のメソッドを特定する必要がない場合、「selector」には何も記述されない。
【００６９】
「parameters」は、Ｒインターフェースによるコンテキストスイッチによりベースレベルオブジェクトに実行制御が移ったときに、そのベースレベルオブジェクトで実行されるメソッドに渡されるパラメータである。なお、メタオペレーションが実行される直前の状態から、ベースレベルオブジェクトが実行再開される場合には、「parameters」には何も記述されない。換言すれば、戻り先のメソッドにパラメータを渡す必要がない場合、「parameters」には何も記述されない。
【００７０】
２−４−５  Ｍインターフェースによるコンテキストスイッチ
図６を参照して、Ｍインターフェースによるコンテキストスイッチの手続きについて説明する。なお、Ｍインターフェースによるコンテキストスイッチのとき、当該コンテキストスイッチの手続きには、上述のＭインターフェースの定義で説明したように、「currentContext」「metaOperation」「parameters」が入力される。
【００７１】
Ｍインターフェースによるコンテキストスイッチの要求が起きた場合には、図６に示すように、先ず、ステップＳ１において、現在実行中のベースレベルオブジェクトのコンテキストデータをレジスタから待避させる。
【００７２】
次に、ステップＳ２において、「currentContext」が示すコンテキストデータのメタディスクリプタから、「metaOperation」で指定されたメタオペレーションを提供するメタオブジェクトのコンテキストデータと、当該メタオペレーションに対応するメソッドのインデックスとを検索する。
【００７３】
次に、ステップＳ３において、ステップＳ２での検索の結果、メタオブジェクトのコンテキストデータと、メソッドのインデックスとが見つかったか否かを判別する。そして、見つからなかった場合には、処理を中断して所定のエラー処理を行い、見つかった場合には、ステップＳ４へ進む。
【００７４】
ステップＳ４において、ステップＳ２での検索により見つかったメタオブジェクトのコンテキストデータを、当該メタオブジェクトが実行中であることを示すように書き換える。また、当該メタオブジェクトのコンテキストデータの直前実行コンテキストとして「currentContext」を保存する。
【００７５】
次に、ステップＳ５において、「parametaers」をレジスタにセットして、ステップＳ２での検索により見つかったインデックスで示されるメソッド、すなわち「metaOperation」で指定されたメタオペレーションを提供するメタオブジェクトのメソッドを実行する。
【００７６】
以上の処理により、ベースレベルオブジェクトからメタオブジェクトへの、Ｍインターフェースによるコンテキストスイッチが完了する。
【００７７】
２−４−６  Ｒインターフェースによるコンテキストスイッチ
図７を参照して、Ｒインターフェースによるコンテキストスイッチの手続きについて説明する。なお、Ｒインターフェースによるコンテキストスイッチのとき、当該コンテキストスイッチの手続きには、上述のＲインターフェースの定義で説明したように、「currentContext」「selector」「parameters」が入力される。
【００７８】
Ｒインターフェースによるコンテキストスイッチの要求が起きた場合には、図７に示すように、先ず、ステップＳ１１において、「currentContext」が示すコンテキストデータの直前実行コンテキスト、すなわち現在実行中のメタオブジェクトのコンテキストデータの直前実行コンテキストを、実行制御を移す先のベースレベルオブジェクトのコンテキストデータとして指定する。
【００７９】
次に、ステップＳ１２において、「selector」に値が設定されているか否かを判別する。そして、設定されている場合には、ステップＳ１３へ進み、設定されていない場合には、ステップＳ１４へ進む。
【００８０】
ステップＳ１３では、ステップＳ１１で指定されたコンテキストデータに対応するベースレベルオブジェクトによる処理が中断された時点に戻って、当該ベースレベルオブジェクトによる処理を再開する。すなわち、メタオペレーションが実行される直前の状態から、ベースレベルオブジェクトの実行を再開する。これにより、メタオブジェクトからベースレベルオブジェクトへの、Ｒインターフェースによるコンテキストスイッチがなされる。
【００８１】
一方、ステップＳ１４では、「Selector」に基づいて、このコンテキストスイッチによって実行制御を移す先のベースレベルオブジェクトのコンテキストデータと、このコンテキストスイッチによって実行制御を移したときに実行するメソッドのインデックスとを検索する。そして、ステップＳ１５において、ステップＳ１４で検索されたコンテキストデータを、当該コンテキストデータに対応するベースレベルオブジェクトが実行中であることを示すように書き換えるとともに、ステップＳ１４で検索されたインデックスが指し示すメソッドを実行する。これにより、メタオブジェクトからベースレベルオブジェクトへの、Ｒインターフェースによるコンテキストスイッチがなされる。
【００８２】
２−５  Ｆインターフェース
以上のようにＭインターフェース及びＲインターフェースを用いてオペレーティングシステムの全ての機能を実現すると、オペレーティングシステムの実行性能の観点から問題がある。なぜならば、オブジェクト指向オペレーティングシステム以外のオペレーティングシステムで実現されているオペレーションに比較して、上記オペレーティングシステムでは、ＭインターフェースやＲインターフェースによるコンテキストスイッチの回数分だけ、実行コストが高くなるからである。特にオブジェクト間でメッセージのやり取りを行うメッセージ通信機構にも、ＭインターフェースによるコンテキストスイッチとＲインターフェースによるコンテキストスイッチとが必要となるので、オブジェクト間通信が多いオブジェクト指向プログラムを実行したときの実行コストが非常に高くなってしまう。
【００８３】
そこで、メッセージ通信の際には必ずしもメタオブジェクトの実行が必要でないことに注目して、以下に説明するような、処理の最適化を図る機構を導入する。なお、以下の説明では、この最適化機構のことを「FastSend機構」と称する。そして、この「FastSend機構」を実現するインターフェースとして、Ｆインターフェースを導入する。
【００８４】
２−５−１  FastSend機構の適用条件
FastSend機構では、メッセージ通信の際には必ずしもメタオブジェクトの実行が必要でないことに注目して、処理の最適化を図る。したがって、FastSend機構の適用が可能なのは、２つのオブジェクト間のメッセージ通信の際にメタオブジェクトの実行が必要でない場合である。
【００８５】
そして、２つのオブジェクトの間のメッセージ通信の際にメタオブジェクトの実行が不要なのは、それら２つのオブジェクトの間に、実行の遂次性がある場合であり、具体的には、下記の２つの条件を満たす場合である。なお、ここでは、メッセージ送信側のオブジェクトをオブジェクトＡと称し、メッセージ受信側のオブジェクトをオブジェクトＢと称する。
【００８６】
第１の条件は、オブジェクトＡからオブジェクトＢへメッセージが送信された時点で、オブジェクトＡとオブジェクトＢとが並行動作する必要がないという条件である。オブジェクトＡとオブジェクトＢとを並行動作させるためには、メッセージキュー操作やスケジューリング管理等の処理が必要となるので、メイラオブジェクトやスケジューラオブジェクトといったメタオブジェクトの実行が必要になる。したがって、オブジェクトＡからオブジェクトＢにメッセージが送信された時点で、オブジェクトＡが並行動作する必要があるような場合には、FastSend機構は適用できない。なお、この第１の条件を満たすのは、例えば、オブジェクトＡがオブジェクトＢにメッセージを送信した後、オブジェクトＡが処理を中断して、オブジェクトＢからの返事を待つようなときである。
【００８７】
第２の条件は、オブジェクトＡからオブジェクトＢへメッセージを送信するときに、オブジェクトＢが他のメッセージに基づく処理を行っていないという条件である。オブジェクトＢが他のメッセージに基づく処理を行っているならば、メッセージキュー操作やスケジューリング管理等の処理が必要となるので、メイラオブジェクトやスケジューラオブジェクトといったメタオブジェクトの実行が必要になる。したがって、オブジェクトＡからオブジェクトＢにメッセージが送信された時点で、オブジェクトＢが他のメッセージに基づく処理を行っているような場合には、FastSend機構は適用できない。
【００８８】
以上のような２つの条件を満たしている場合、すなわち、メッセージ送信元のオブジェクトＡからメッセージ送信先のオブジェクトＢにメッセージが送信された時点において、それらのオブジェクトＡ，Ｂが並行動作する必要がなく、且つ、メッセージ送信元のオブジェクトＡからメッセージ送信先のオブジェクトＢにメッセージを送信するときに、メッセージ送信先のオブジェクトＢが他のオブジェクトからのメッセージに基づく処理を実行していない場合には、FastSend機構を適用して処理の最適化を図ることができる。
【００８９】
そして、このFastSend機構による処理の最適化では、以上のような２つの条件を満たしており、通信し合うオブジェクト間に実行遂次性がある場合に、メッセージ通信に必要なメッセージキュー操作やスケジューリング管理等の処理を省略することにより、メタオブジェクトの呼び出しに要するコストを削減する。
【００９０】
２−５−２  Ｆインターフェースと「MessageHandler」
FastSend機構に必要な具体的なメカニズムには、次の２つが含まれる。
【００９１】
（１）Ｆインタフェース
（２）「MessageHandler」
Ｆインタフェースは、ＭインターフェースやＲインターフェースに次ぐ、メタコアの第３のインタフェースであり、Ｍインターフェースと同様に、メタオペレーションの起動に用いられる。Ｍインターフェースとの違いは、メッセージ通信を、メタオブジェクトを起動すること無く、メタコア内の手続きで処理することである。
【００９２】
「MessageHandler」は、メタコアの一部であり、メタコア内で処理されるメッセージ通信の手続きを定義する機構である。換言すれば、「MessageHandler」は、メタコアを構成するモジュールのうち、メッセージ送信に関する手続きが記述されたモジュールである。「MessageHandler」で定義される手続きは、メイラオブジェクトで定義される手続きに似ている。類似点は、メッセージの送信先を特定する機能を持つことである。相違点は、メッセージキュー操作やスケジューリング管理のためのスケジューラオブジェクトを呼び出すような機構を持たないことであり、このようなスケジューラオブジェクトの呼び出し機構等については、「MessageHandler」による処理の範囲外とされる。
【００９３】
なお、メッセージ送信に関する手続きが記述されたモジュールである「MessageHandler」は、オブジェクトとして構成してもよいし、手続き型のプログラムモジュールとして構成してもよい。
【００９４】
２−５−３  Ｆインターフェースを用いたメッセージ送信
図８に、ＳｅｎｄオペレーションによりオブジェクトＡからオブジェクトＢへメッセージを送信する動作を、FastSend機構によりＦインターフェースを用いて実現する例を示す。
【００９５】
図８に示すように、FastSend機構によりメッセージ送信を行うときは、メッセージ送信の具体的なメカニズムとして、「MessageHandler」を使用する。
【００９６】
そして、FastSend機構によるメッセージ送信の要求がオブジェクトＡで起こり、Ｆインターフェースを用いたメタオペレーションとして、メッセージ送信を要求するメタオペレーションであるＳｅｎｄオペレーションが呼び出されると、Ｆインターフェースによるコンテキストスイッチが起こる。
【００９７】
具体的には、メイラオブジェクトのようなメタオブジェクトにコンテキストスイッチすることなく、メタコアの一部である「MessageHandler」が呼び出されて、この「MessageHandler」に記述された手続きを実行することにより、オブジェクトＡからオブジェクトＢへとコンテキストスイッチがなされる。
【００９８】
なお、ここでは、上述した２つの条件が満たされているものとしている。すなわち、オブジェクトＡとオブジェクトＢの間に実行遂次性があり、これら２つのオブジェクトＡ，Ｂは並行実行されず、且つ、オブジェクトＢが呼び出されるときにオブジェクトＢが他のオブジェクトからのメッセージに基づく処理を実行中ではないものとしている。
【００９９】
図４で示したようなＭ／Ｒインターフェースを用いたメッセージ送信では、少なくともオブジェクトＡからメイラオブジェクトへのＭインターフェースによるコンテキストスイッチと、メイラオブジェクトからオブジェクトＢへのＲインターフェースによるコンテキストスイッチとの２回のコンテキストスイッチが必要であった。
【０１００】
これに対して、図８に示したように、Ｆインターフェースを用いてメッセージ送信を行うことにより、コンテキストスイッチが、オブジェクトＡからオブジェクトＢへのＦインターフェースによるコンテキストスイッチの１回だけで済んでいる。
【０１０１】
したがって、図８に示したようなＦインターフェースを用いてメッセージ送信を行うようにすることにより、コンテキストスイッチの回数を低減でき、オペレーティングシステムの実行性能を高めることができる。
【０１０２】
２−５−４  Ｆインターフェースの定義
図８に示したようにＦインターフェースによりコンテキストスイッチを行う際、メタコアは、メタオペレーションの特定のために、メタディスクリプタを参照する。そして、メタディスクリプタの構造に基づき、Ｆインタフェースは次のように定義される。
【０１０３】
MetaCore::F(in currentContext，in metaOperation，in parameters)
「currentContext」は、現在実行中のオブジェクトのコンテキストデータを示す。すなわち、「currentContext」は、Ｆインターフェースによるコンテキストスイッチの要求があったとき、その要求を出したベースレベルオブジェクト（すなわち、メッセージの送信元のオブジェクト）のコンテキストデータを示す。
【０１０４】
「metaOperation」は、メタディスクリプタの「メタオペレーションの種類」の欄に予め登録されたインデックスに対応しており、要求するメタオペレーションの種類を示している。換言すれば、「metaOperation」は、使用するメタオペレーションを特定するための情報である。なお、「metaOperation」で使用されるインデックスは、後述する「MessageHandler」のインターフェースに対応したインデックスである。
【０１０５】
「parameters」は、メタオペレーションに渡されるパラメータである。この「parameters」は、メタオペレーションの種類により異なる。具体的には、例えば、メッセージ送信の場合には、送信しようとするメッセージが保存してある記憶領域のアドレスが記述される。
【０１０６】
以上にように、Ｆインターフェースによりコンテキストスイッチを行うために「MessageHandler」を呼び出す際は、メッセージ送信元のオブジェクトのコンテキストデータについての情報である「currentContext」と、使用するメタオペレーションについての情報である「metaOperation」と、当該メタオペレーションを実行する上で必要なパラメータである「parameters」とが、メッセージ送信元のオブジェクトから「MessageHandler」へ受け渡される。
【０１０７】
２−５−５  Ｆインターフェースによるコンテキストスイッチ
図９を参照して、あるオブジェクトから他のオブジェクトへメッセージを送信する際に行われる、Ｆインターフェースによるコンテキストスイッチの手続きについて説明する。なお、以下の説明では、メッセージ送信元のオブジェクトを送信オブジェクト、メッセージ受信側のオブジェクトを受信オブジェクトと称する。
【０１０８】
Ｆインターフェースによるコンテキストスイッチのとき、当該コンテキストスイッチの手続きには、上述のＦインターフェースの定義で説明したように、「currentContext」「metaOperation」「parameters」が入力される。
【０１０９】
Ｆインターフェースによるコンテキストスイッチの要求が起きた場合には、図９に示すように、先ず、ステップＳ２１において、現在実行中のオブジェクト、すなわち送信オブジェクトの実行を中断するとともに、当該送信オブジェクトの実行を中断したことを示すようにコンテキストデータを書き換えた上で、この送信オブジェクトのコンテキストデータをレジスタから待避させる。
【０１１０】
次に、ステップＳ２２において、「currentContext」が示すコンテキストデータのメタディスクリプタの内容を参照して、「metaOperation」に基づいて、「MessageHandler」の実行状況についての情報が記録されたコンテキストデータを検索するとともに、「MessageHandler」に記述されているメソッドのインデックスのうち、「metaOperation」に対応したメソッドのインデックスを検索する。
【０１１１】
次に、ステップＳ２３において、ステップＳ２２での検索の結果、「MessageHandler」のコンテキストデータとメソッドのインデックスとが見つかったか否かを判別する。そして、見つからなかった場合には、処理を中断して所定のエラー処理を行い、見つかった場合には、ステップＳ２４へ進む。
【０１１２】
ステップＳ２４において、ステップＳ２３での検索結果に基づいて、「MessageHandler」を呼び出して、「metaOperation」に対応した処理を実行する。すなわち、メッセージ送信に関する手続きが記述されたモジュールである「MessageHandler」を呼び出し、この「MessageHandler」に記述されたメソッドの中から、「metaOperation」に対応したメソッドを呼び出して実行し、これにより、受信オブジェクトのコンテキストデータと、受信オブジェクトにコンテキストスイッチを行ったときに実行するメソッドのインデックスとを検索する。
【０１１３】
次に、ステップＳ２５において、ステップＳ２４での検索の結果、受信オブジェクトのコンテキストデータとメソッドのインデックスとが見つかったかを判別する。そして、それらが見つからなかった場合には、処理を中断して所定のエラー処理を行い、見つかった場合には、ステップＳ２６へ進む。
【０１１４】
ステップＳ２６では、「parametaers」をレジスタにセットして、ステップＳ２４で見つけたインデックスで示されるメソッド、すなわち受信オブジェクトのメソッドを実行する。換言すれば、受信オブジェクトのコンテキストデータを当該受信オブジェクトが実行中であることを示すように書き換えるとともに、当該受信オブジェクトに送信オブジェクトからのメッセージを受け渡して、当該メッセージよって指定されたメソッドを実行する。
【０１１５】
以上の処理により、送信オブジェクトから受信オブジェクトへの、Ｆインターフェースによるコンテキストスイッチが完了する。
【０１１６】
ところで、図９に示した例は、送信オブジェクトと受信オブジェクトとの間で実行遂次性が保証されていることを仮定している。しかしながら、遂次性がない時点でメタコアの一部である「MessageHandler」が呼び出される場合もあり得る。したがって、上記ステップＳ２４における「MessageHandler」の処理において、遂次性がない時点で「MessageHandler」が呼び出された場合を考慮した例外処理が必要である。
【０１１７】
このような例外処理を含む「MessageHandler」の処理の一例を図１０に示す。図１０は、Ｓｅｎｄオペレーションを行うときの「MessageHandler」の処理を示している。この図１０に示す例では、上記例外処理として、受信オブジェクトの状態が実行中のときには、FastSend機構による処理を中止して、通常のメタオブジェクト呼び出しを行う手続き（すなわち上述したＭ／Ｒインターフェースを用いてメッセージ送信を行う手続き）を行うようにしている。なお、「MessageHandler」のインタフェースは、このような通常のメタオブジェクト呼び出しを想定して、通常のメタオブジェクト呼び出しに使用する引数も渡すようにしておく必要がある。これらの引数の種類は、メタオブジェクトの要求に従い適宜設定するようにしておけばよい。
【０１１８】
以下、図１０を参照して、Ｓｅｎｄオペレーションの場合における、上記ステップＳ２４に対応する「MessageHandler」の処理について説明する。
【０１１９】
図１０に示すように、先ず、ステップＳ３１において、受信オブジェクトのコンテキストデータと、受信オブジェクトにコンテキストスイッチしたときに実行するメソッドのインデックスとを検索する。
【０１２０】
次に、ステップＳ３２において、受信オブジェクトの状態が実行中であるか否かを判別する。そして、実行中であれば、ステップＳ３４へ進み、通常のメタオブジェクトを用いた処理を呼び出す。換言すれば、受信オブジェクトの状態が実行中である場合には、FastSend機構を適用する条件を満たしていないので、上述したＭ／Ｒインターフェースを用いてメッセージ送信を行う手続きを行う。
【０１２１】
一方、受信オブジェクトの状態が実行中でない場合には、ステップＳ３３へ進む。このステップＳ３３では、「MessageHandler」のコンテキストデータに、「currentContext」を直前実行コンテキストとして保存する。換言すれば、「MessageHandler」のコンテキストデータの直前実行コンテキストが指し示すコンテキストデータが、送信オブジェクトのコンテキストデータとされる。なお、この直前実行コンテキストは、例えば、Ｓｅｎｄオペレーションによるメッセージ送信の後、受信オブジェクトから送信オブジェクトへ返答を返すようなときに、送信オブジェクトを特定するために参照される。
【０１２２】
そして、以上の処理が完了したら、オブジェクト「MessageHandler」の処理を終了して、図９に示したステップＳ２５の処理へと進むこととなる。
【０１２３】
２−５−６  オブジェクト「MessageHandler」のインターフェースの定義
最後に、以上のようなFastSend機構で使用される「MessageHandler」のインターフェースについて説明する。FastSend機構を採用して、Ｆインターフェースによるコンテキストスイッチを行う際は、「Ｓｅｎｄ」「Ｃａｌｌ」「Ｒｅｐｌｙ」「ＷａｉｔＦｏｒ」のいずれかにより、「MessageHandler」に記述された、メッセージ送信に関するメソッドを呼び出して実行する。
【０１２４】
「Ｓｅｎｄ」は、メッセージを非同期的に受信オブジェクトに送信する手続き、すなわちメッセージの返答を待つこと無く受信オブジェクトにメッセージを送信するメソッドを呼び出す。そして、「Ｓｅｎｄ」のインターフェースは下記のように定義される。
【０１２５】
0003823468.tif 000002
ここで、「metaContext」は、「MessageHandler」のコンテキストデータを示す。「receiverObject」は、受信オブジェクトの識別子である。「receiverSelector」は、受信オブジェクトによって実行されるメソッドのインデックスである。「receiverFuture」は、受信オブジェクトで使われるメッセージ毎に設定される同期用識別子である。「baseContext」は、送信オブジェクトのコンテキストデータを示す。
【０１２６】
「Ｃａｌｌ」は、メッセージを同期的に受信オブジェクトに送信する手続き、すなわちメッセージを送信する毎に当該メッセージの返答を待ちながら受信オブジェクトにメッセージを送信する手続きを呼び出す。このとき、送信オブジェクトの実行は、受信オブジェクトからの返答があるまで中断される。そして、「Ｃａｌｌ」のインターフェースは下記のように定義される。
【０１２７】
0003823468.tif 000003
ここで、「metaContext」は、「MessageHandler」のコンテキストデータを示す。「receiverObject」は、受信オブジェクトの識別子である。「receiverSelector」は、受信オブジェクトに実行されるメソッドのインデックスである。「receiverFuture」は、受信オブジェクトに渡されるパラメータである。「baseContext」は、メッセージ送信オブジェクトのコンテキストデータを示す。
【０１２８】
「Ｒｅｐｌｙ」は、メッセージを受信した受信オブジェクトが送信オブジェクトへ返答を返す手続きを呼び出す。そして、「Ｒｅｐｌｙ」のインターフェースは下記のように定義される。
【０１２９】
MessageHandler::Reply(in metaContext,in replyMssage,in baseContext)
ここで、「metaContext」は、「MessageHandler」のコンテキストデータを示す。「replyMessage」は、送信オブジェクトに渡されるパラメータである。「baseContext」は、送信オブジェクトのコンテキストデータを示す。
【０１３０】
「ＷａｉｔＦｏｒ」は、メッセージを送信した送信オブジェクトが受信オブジェクトからの返答を待つ手続きを呼び出す。そして、「ＷａｉｔＦｏｒ」のインターフェースは下記のように定義される。
【０１３１】
0003823468.tif 000004
ここで、「metaContext」は、オブジェクト「MessageHandler」のコンテキストデータを示す。「receiverFuture」は、受信オブジェクトのコンテキストデータを示す。
【０１３２】
【発明の効果】
以上、詳細に説明したように、本発明によれば、コンテキストスイッチの回数が少なくて済み、優れた実行性能が得られる純オブジェクト指向オペレーティングシステムを実現することができる。
【図面の簡単な説明】
【図１】本発明を適用したテレビ装置に一例について、その概略構成を示す図である。
【図２】メタディスクリプタの定義を示す図である。
【図３】メタディスクリプタの一例を示す図である。
【図４】Ｍ／Ｒインターフェースを用いた、オブジェクトＡからオブジェクトＢへのメッセージ送信を示す図である。
【図５】Ｍ／Ｒインターフェースを用いた、オブジェクトＡにおけるメモリ割り当てを示す図である。
【図６】Ｍインターフェースによるコンテキストスイッチの手続きを示すフローチャートである。
【図７】Ｒインターフェースによるコンテキストスイッチの手続きを示すフローチャートである。
【図８】Ｆインターフェースを用いた、オブジェクトＡからオブジェクトＢへのメッセージ送信を示す図である。
【図９】Ｆインターフェースによるコンテキストスイッチの手続きを示すフローチャートである。
【図１０】Ｓｅｎｄオペレーションのときの「MessageHandler」の処理を示すフローチャートである。
【符号の説明】
１  バス／ＩＯブリッジ、  ２  バス、  ３  テレビ機能部、  ４  バス／メモリブリッジ、  ５  プロセッサ、  ６  ＲＯＭ、  ７  ＲＡＭ、  ８  操作パネル、  ９  外部記憶装置、  １０  通信装置
【図１】
0003823468.tif 000005
【図２】
0003823468.tif 000006
【図３】
0003823468.tif 000007
【図４】
0003823468.tif 000008
【図５】
0003823468.tif 000009
【図６】
0003823468.tif 000010
【図７】
0003823468.tif 000011
【図８】
0003823468.tif 000012
【図９】
0003823468.tif 000013
【図１０】
0003823468.tif 000014