(57)【要約】【課題】プロセッサのレジスタウィンドウアーキテクチャ内でスーパーバイザモードデータをユーザコードから保護するための優れたシステムを得る。【解決手段】プロセッサのレジスタウィンドウアーキテクチャ内でスーパーバイザモードデータをユーザコードから保護するためのシステムが提供される。このシステムは、スーパーバイザモードからユーザモードに遷移する際、無効ウィンドウマスクの確保されたウィンドウのために設定される無効ウィンドウビットに加えて、少なくとも１つの無効ウィンドウビットをアーキテクチャの無効ウィンドウマスク内に設定する。その追加のビットは、スーパーバイザデータウィンドウとユーザデータウィンドウとの間の遷移ウィンドウのために設定される。【選択図】図５
2009543234.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサのレジスタウィンドウアーキテクチャ内でスーパーバイザモードデータをユーザコードから保護するためのシステムであって、
スーパーバイザモードからユーザモードに遷移する際、無効ウィンドウマスクの確保されたウィンドウのために設定される無効ウィンドウビットに加えて、少なくとも１つの無効ウィンドウビットを前記アーキテクチャの前記無効ウィンドウマスク内に追加設定することを特徴とし、
前記追加設定されるビットは、スーパーバイザデータウィンドウとユーザデータウィンドウとの間の遷移ウィンドウのために設定される、システム。
【請求項２】
前記プロセッサの前記レジスタウィンドウアーキテクチャがＳＰＡＲＣ（商標）レジスタウィンドウアーキテクチャである、請求項１に記載のシステム。
【請求項３】
前記プロセッサがプリンタのための印刷エンジン内に組み込まれている、請求項１に記載のシステム。
【請求項４】
前記無効ウィンドウマスク内の追加の無効ウィンドウビットの位置が、前記遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローとは独立して維持されている、請求項１に記載のシステム。
【請求項５】
前記システムは、さらに、スーパーバイザモードスタックとユーザモードスタックとを別々に備える、請求項１に記載のシステム。
【請求項６】
前記スーパーバイザモードスタックは、スーパーバイザモードだけがアクセス可能なメモリ内に格納され、前記ユーザモードスタックは、ユーザモードがアクセス可能なメモリ内に格納される、請求項５に記載のシステム。
【請求項７】
ユーザモードからスーパーバイザモードへの遷移が発生するたびに、現在のスタックポインタがスーパーバイザスタックにスイッチされ、
スーパーバイザモードからユーザモードへの遷移が発生するたびに、前記現在のスタックポインタがユーザスタックにスイッチされる、
請求項６に記載のシステム。
【請求項８】
前記遷移ウィンドウに関する情報が、前記遷移ウィンドウでのウィンドウオーバーフロー及びアンダーフローの際、前記スーパーバイザスタック内に記録される、請求項６に記載のシステム。
【請求項９】
前記システムは、さらに、前記スーパーバイザモードだけがアクセス可能なメモリ内に格納されたウィンドウスタックを備え、
前記遷移ウィンドウに関する情報が、前記遷移ウィンドウでのウィンドウオーバーフロー及びアンダーフローの際、前記ウィンドウスタック内に記録される、請求項６に記載のシステム。
【請求項１０】
非遷移ウィンドウに関する情報が、前記非遷移ウィンドウでのウィンドウオーバーフロー及びアンダーフローの際、前記ウィンドウスタック内に記録される、請求項９に記載のシステム。
【請求項１１】
それぞれのレジスタウィンドウに、ゼロから始まりセーブするたびに単調に増加する一意の数値ラベルが割り当てられる、請求項６に記載のシステム。
【請求項１２】
前記確保されたウィンドウに割り当てられた現在のラベルのレコードは前記確保されたウィンドウのローカルレジスタ内で保持され、そのレコードが、前記確保されたウィンドウでウィンドウオーバーフロー及びアンダーフローが発生するとアップデートされる、請求項１１に記載のシステム。
【請求項１３】
前記スーパーバイザモードだけがアクセス可能なメモリ内に格納されたウィンドウスタックを更に備え、前記ラベルが、前記確保されたウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、少なくとも前記ウィンドウスタック内の前記確保されたウィンドウの前記スタックポインタのレコードにインデックスを付けるために使用される、請求項１１に記載のシステム。
【請求項１４】
前記ラベルが、それぞれのウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、前記ウィンドウスタック内のそれぞれのウィンドウの前記スタックポインタのレコードにインデックスを付けるために使用される、請求項１３に記載のシステム。
【請求項１５】
前記ラベルが現在のウィンドウポインタに基づいて計算される、請求項１１に記載のシステム。
【請求項１６】
スーパーバイザコードからユーザコードに遷移する際、呼出し関数が、前記現在のウィンドウポインタを前記遷移ウィンドウの後ろに位置する前記ユーザウィンドウに動かすためにセーブを発行し、少なくとも前記現在のウィンドウから前記確保されたウィンドウまでのスーパーバイザコードデータを含む前記ウィンドウ内の前記レジスタを上書きする、請求項１に記載のシステム。
【請求項１７】
前記呼出し関数が前記現在のウィンドウから前記確保されたウィンドウまでのすべてのウィンドウ内の前記レジスタを上書きする、請求項１６に記載のシステム。
【請求項１８】
前記呼出し関数がスーパーバイザコードデータを含む前記プロセッサのすべてのレジスタを上書きする、請求項１７に記載のシステム。
【請求項１９】
前記遷移ウィンドウ内の前記レジスタが、前記遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際に上書きされる、請求項１に記載のシステム。
【請求項２０】
ユーザコードからスーパーバイザコードに遷移する際、ウィンドウアンダーフロートラップルーチンが、前記現在のウィンドウポインタを、前記遷移ウィンドウに先立って前記スーパーバイザウィンドウに動かすために復元を発行する、請求項１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組込型コンピュータシステムを有する電子装置に関する。本発明は、装置メーカーのソフトウェア設計の下流における柔軟性を依然として持たせたまま、主にセキュリティを改善し、コンピュータシステムをソフトウェアの悪質な不正使用から保護するために開発された。
【０００２】
［関連出願の相互参照］
本発明に関する様々な方法、システム、及び装置は、本発明の出願人又は譲受人によって出願された、以下の米国特許／米国特許出願に開示されている。
【表１】
2009543234.tif 000003
【表２】
2009543234.tif 000004
【表３】
2009543234.tif 000005
これらの出願及び特許の開示を、参照により本明細書に組み込む。
【背景技術】
【０００３】
現在、組込型コンピュータシステムを有する電子装置は日常生活の一部である。このような装置の例には、現金自動預払機（ａｕｔｏｍａｔｉｃ  ｔｅｌｌｅｒ  ｍａｃｈｉｎｅｓ：ＡＴＭｓ）、移動電話、プリンタ、コピー機、手持ち式計算機、電子レンジ、テレビ、ＤＶＤプレイヤー、洗濯機、手持ち式ゲーム機などがある。概して、組込型コンピュータシステムは、それ自体はコンピュータではない機能を提供するのが特徴である。
【０００４】
一般に、組込型システムは、特殊用途ハードウェアと、リアルタイムオペレーティングシステム（ｒｅａｌ−ｔｉｍｅ  ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ：ＲＴＯＳ）をサポートするプロセッサ（ＣＰＵ）とを含む。このシステムは、特定のシステムのための要求を満たすように適合された特殊用途ソフトウェアでプログラムされる。典型的には、組込型システムのために書かれたソフトウェアは「ファームウェア」と呼ばれる。電子装置はエラーなしに長年継続して動作することが期待されるので、ファームウェアはコンピュータ用のソフトウェアよりも通常厳格に開発されテストされる。
【０００５】
組込型コンピュータシステムの明らかな操作上の諸利点の他に、様々な製品ラインの製造と販売に関して提供される多くの利点がある。新しい製品が市場に出されると、それぞれのバージョンが、その特定のバージョンに見合う価格を有する異なるバージョンの製品を発売することがしばしば望ましい。例えば、第１の製品は機能Ｘを有することができ、第２の製品は機能Ｘ，Ｙ，及びＺを有することができる。
【０００６】
製造について言えば、第１の製品専用の生産ラインを設け、また第２の製品専用の別の生産ラインを設けることは割高である。すべての製品内に、機能Ｘ、Ｙ、及びＺをサポートするための必要なハードウェアを含む、単一の製品タイプを製造する方が割安である。この場合、様々な製品ラインが、その組込型ファームウェアによって差別化されうる。ハードウェアと比較して、ファームウェアは様々な製品間を差別化するための更に割安な手段を提供する。更に、ファームウェアによって、ユーザは新しい装置を買わずに自分の装置をアップグレードできようになる。例えば、アップグレードを提供するために、許可されたインターネットダウンロードをパーソナルコンピュータ経由で使用でき、それにより購入当初は機能Ｘしかなかった製品内で機能ＹとＺができるようになる。
【０００７】
しかし、組込型ファームウェア特有の問題は、ハッカー、又は不正なファームウェアアップグレードを持ちかける意図的な著作権侵害者からの悪質な攻撃を受けやすいことである。例えば、不正なファームウェアアップグレードはインターネット上で自由に配布されることがあり、ユーザは自分の装置を無料でアップグレードできる。
【０００８】
この問題を回避する１つの方法は、アップグレードを提供するためにファームウェア自体を介するのではなく、装置内の認証チップを介することである。プリンタ環境における認証チップ（「ＱＡチップ」）の使用は、以下に記載の我々の以前の出願において説明されており、その内容を参照により本明細書に組み込む。
【表４】
2009543234.tif 000006
我々の以前の出願において説明したように、プリンタプラットフォーム内のＱＡチップは、安全な環境で数々の機能を実行する。印刷カートリッジ内のＱＡチップは、許可された方法でのみプリンタの操作を許可するように使用されうる。例えば、プリンタＡは１分あたり１０ページを印刷するよう許可され、プリンタＢは１分あたり３０ページを印刷するよう許可されうる。それぞれのプリンタ内のハードウェアは同一だが、ＱＡチップがそれぞれのプリンタを差別化することができる。更に、ＱＡチップがそれぞれのプリンタのデータを安全で認証された方法で格納するので、信頼できる供給源によってしかアップグレード又は置き換えできない。したがって、ＱＡチップは無許可のユーザからの攻撃に対する保護を提供する。
【０００９】
インクカートリッジに装着されたＱＡチップは、カートリッジ内に含まれるインクが特定の供給源からのもの、又は特定の品質であって、それにより印字ヘッドを傷める不正インクは確実に使用され得ないことを保証するために使用されうる。同様に、同じＱＡチップが、カートリッジ内の最初のインク量と、そのインクを使用して印刷されたドット数とを参照して決定された、カートリッジ内に残っている「バーチャルインク」の量を、そのメモリ内に動的に格納するために使用されうる。「バーチャルインク」の量は、プリンタのためにセキュリティ機構を提供し、インクカートリッジの不正な補充を防ぐ。つまり、印刷する前にプリンタ内のファームウェアがインクカートリッジのＱＡチップと通信し、「バーチャルインク」の量が不十分な場合、プリンタは印刷しない。このようにして、インクの質を保証することができ、不正な補充による低品質のインクを使用して印字ヘッドを傷める危険性が最小限になる。
【００１０】
ＱＡチップは、電子装置の不正使用を防ぐための優れた手段を提供する。しかし、ＱＡチップのセキュリティは、チップと通信する組込型システム内のファームウェアに依存する。最も果敢なハッカーがファームウェアを変更し、装置内のＱＡチップとの通信を無効にできることが考えられる。この場合、ＱＡチップによって提供されるセキュリティは危険にさらされてしまう。上述の例では、インクカートリッジ上のＱＡチップの存在に関係なく、インクカートリッジの不正な補充が可能である。
【００１１】
組込型コンピュータシステムに対してこのような果敢な攻撃が行われることはなさそうに見えるかもしれない。しかし、プリンタ市場において、詰め替え用不正インクの売上高は数百万ドル産業になりつつあり、プリンタに内蔵されたどのようなセキュリティシステムに対する悪質な攻撃へのかなりの動機をも与えている。プリンタメーカーの立場から言えば、プリンタで低品質のインクを使用すると、印刷の質が悪くなり印字ヘッドの寿命を縮め、プリンタ市場における信用と評判に計り知れない損害を与える可能性がある。
【００１２】
したがって、悪質な攻撃からのセキュリティを改善した組込型コンピュータシステムを有する電子装置を提供することが望ましい。
【００１３】
ファームウェアアップグレードを行うための、又は代替の中核ＲＴＯＳを装置メーカーの下流でインストールさえするための柔軟性を持たせることができる電子装置を提供することが更に望ましい。
【００１４】
ピクトブリッジプリンタ内のファームウェアをアップグレードするための簡単な方法を提供することが更に望ましい。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】米国特許出願第１１／０１４７６９号（２００４年１２月１２日出願）
【発明の概要】
【００１６】
第１の態様では、組込型コンピュータシステムを備える電子装置が提供され、前記装置がリアルタイムオペレーティングシステム（ＲＴＯＳ）をサポートするプロセッサを備え、前記プロセッサがユーザモード及びスーパーバイザモードをサポートし、前記コンピュータシステムが、前記装置内の必須のハードウェアを直接制御するコード部分だけがスーパーバイザモードで実行されるようにプログラムされている。
【００１７】
本明細書では、「必須のハードウェア」は、装置が重要な機能を実行するために必須のハードウェアコンポーネントを意味するために使用される。例えば、プリンタの場合、必須のハードウェアは、印字ヘッド内のノズル作動装置を作動させるための駆動回路を含むことができるが、ＬＣＤディスプレイはプリンタが印刷できるために必須ではないので、プリンタ上のＬＣＤディスプレイは含まない。
【００１８】
本明細書では、「コード部分」という用語は、特定の機能を実行するコードの何らかの部分を意味するために使用される。コード部分は、スレッド又はプロセスの一部の場合がある。
【００１９】
ユーザモード及びスーパーバイザモードをサポートするプロセッサは、コンピュータ分野ではよく知られている。スーパーバイザモード内で実行しているコードは、もともとそのコードを書いた人など、特権を持った人によってのみアクセスされうる。一方、ユーザモード内で実行しているコードは、特権に関係なく誰によってもアクセス及び修正されうる。
【００２０】
ユーザモード及びスーパーバイザモードをサポートするプロセッサの例には、ＳＰＡＲＣ（商標）プロセッサがある。このようなプロセッサは、コンピュータ上で実行している、バグの出る可能性のあるアプリケーションから、オペレーティングシステムの中核（又はカーネル）を保護するように設計されている。オペレーティングシステムの中核がスーパーバイザモードで実行していると、ユーザモードで実行している特定のアプリケーションがたとえクラッシュしても、そのオペレーティングシステムは実行し続けることができる。これにより、ユーザモードで実行している他のアプリケーションが、オペレーティングシステム上で実行し続けることができることが確実になる。このようにオペレーティングシステムの中核を保護することによって、バグの出るアプリケーションでコンピュータ全体がクラッシュする危険性が最小限になる。つまり、アプリケーションとオペレーティングシステムの中核との間に分離がある。
【００２１】
本発明では、ユーザモード及びスーパーバイザモードをサポートするプロセッサが、非組込型コンピュータシステムにおける従来の使用とは異なる方法で用いられる。本発明の組込型コンピュータシステムは、装置内の必須のハードウェアを直接制御するコード部分だけがスーパーバイザモードで実行され、残りのコード部分がユーザモードで実行されるようにプログラムされる。
【００２２】
特定のコード部分（装置内の必須のハードウェアを制御する）をスーパーバイザモードで実行することの主な利点は、これらのコード部分は、装置メーカーによって一度ファイナライズされると修正できないことである。したがって、メーカー又はライセンシーは、装置がどのように操作されうるかの最終的な制御を保有する。
【００２３】
例えば、プリンタメーカーは、印字ヘッドと給紙機構を直接制御するコード部分に、プリンタが１分あたり１０ページだけを印刷するようにプログラムできる。このコード部分はスーパーバイザモードで保護されているので、ハッカーがコードを修正し、自分のプリンタをアップグレードすることは不可能である。
【００２４】
任意選択で、コンピュータシステムは、前記装置内の必須のハードウェアを直接制御しないコード部分が、ユーザモードで実行されるようにプログラムされる。任意選択で、ＲＴＯＳの中核がユーザモードで実行される。このように組込型コンピュータシステムをプログラミングすることの利点は２つある。まず、スーパーバイザモード内のコード量が最小限に維持され、この不変のコード内に存在するバグの危険性を最小限にする。次に、ＲＴＯＳと必須でないアプリケーションをユーザモードで実行させることによって、認可を受けたプリンタメーカー又は販売代理店、元のプリンタメーカーの下流部門が、自分が選択したオペレーティングシステム上の自分の要求に特化した、独自のファームウェアを開発する機会がある。例えば、認可を受けたプリンタメーカーは、ＬＣＤディスプレイのフォーマットを変更し、好ましいオペレーティングシステムを使用してこれをプログラムしたい場合がある。本発明によれば、認可を受けたプリンタメーカーは、装置内のＱＡシステムのセキュリティが脅かされることなく、これを行う柔軟性を有する。
【００２５】
任意選択で、必須のハードウェアを直接制御するコード部分を、そのコード部分を識別するトラップを介して、ユーザモードで実行しているアプリケーションから呼び出せるように、コンピュータシステムがプログラムされる。それぞれが個々の必須のハードウェアを直接制御している複数のコード部分を、個々のコード部分を識別する個々のトラップを介して、ユーザモードで実行しているアプリケーションからそれぞれ独立に呼び出せるようにすることができる。
【００２６】
特定のコード部分をユーザモードから呼び出せることの利点は、それにより特定の操作シーケンスを装置にプログラミングするのに更なる柔軟性がもたらされることである。ユーザモードアプリケーションは、認可を受けた装置メーカーによってプログラムされることもあり、或いはインターネットからダウンロードできるアップグレードを介して入手可能なことさえある。例えば、プリンタのユーザは、「５０００ページ、フルカラー」を印刷するデフォルトオプションを有したい場合がある。組込型システム内にプログラムされた印刷ジョブアプリケーションはユーザモードで実行するため、このユーザは、このデフォルトオプションを有するように自分のファームウェアをアップグレードできる。
【００２７】
任意選択で、必須ハードウェアを直接制御するコード部分が、ハードウェアの操作前に装置内の少なくとも１つの認証チップと通信する。認証チップ（又は「ＱＡチップ」）が操作を許可する。例えば、コード部分が、プリンタに許可された印刷速度をＱＡチップに尋ねることがある。ＱＡチップはこの情報（例えば、１分あたり１０ページ）をコンピュータシステムに返し、許可された印刷速度での印刷を開始できる。このようにして、装置の許可を受けた操作は、装置内のファームウェアへの悪質な攻撃によって脅かされることなく、ＱＡチップを介して安全に制御されうる。
【００２８】
任意選択で、最初の認証チップは、前記装置の消耗コンポーネントと関連付けられる。電子装置内の消耗コンポーネントの例には、インクカートリッジ、トナー、紙、電池などがある。最初の認証チップは、消耗コンポーネントに関する静的及び／又は動的データを含むことができる。例えば、静的データは、消耗コンポーネントの供給源、バッチ番号、質（例えば、インクの色）、初期量などに関することができる。動的データは、消耗コンポーネントの現在の量（例えば、インクの残量）、又は質（例えば、温度）に関することができる。
【００２９】
電子装置はいくつかの消耗コンポーネントを必要とする場合がある。したがって、装置は、それぞれが個々の消耗コンポーネントと関連付けられている複数の最初の認証チップを備えることができる。
【００３０】
任意選択で、電子装置はプリンタであり、消耗コンポーネントはそれぞれの最初の認証チップを有するインクカートリッジである。インクカートリッジ上の認証チップは、特定の条件、例えば（ｉ）関連付けられている認証チップを介して決定された通り、所定のタイプのインクカートリッジがプリンタにロードされた場合のみ印刷する、及び／又は（ｉｉ）関連付けられている認証チップを介して決定された通り、所定のインク量がインクカートリッジ内に残っている場合のみ印刷する、が満たされた場合のみ、印刷を許可するために使用されうる。前述のように、これらの認証メカニズムは、プリンタメーカーにプリンタ内で使用されるインクの質に関する保証を提供し、それによりプリンタ市場におけるメーカーの評判を保つ。
【００３１】
任意選択で、第２の認証チップは、消耗コンポーネントと関連付けられていない装置の本体内に位置付けられる。例えば、第２の認証チップはプリンタの印刷エンジン内、又は印刷エンジン上に装着されうる。第２の認証チップは、所定の速度で印刷するなどの、装置の特定の操作を許可するために使用されうる。
【００３２】
第２の態様では、ピクトブリッジプリンタ内のファームウェアをアップグレードするためのシステムが提供され、そのシステムは、
組込型コンピュータシステムを有するピクトブリッジプリンタと、
前記組込型コンピュータシステムと通信するためのメモリスティックとを備え、前記メモリスティックは、前記組込型コンピュータシステムのためのファームウェアアップグレードを含む。
【００３３】
第３の態様では、ピクトブリッジプリンタの組込型コンピュータシステムのためのファームウェアアップグレードを含むメモリスティックが提供される。
【００３４】
第４の態様では、ピクトブリッジプリンタ内のファームウェアをアップグレードするためのシステムが提供され、前記システムが、
組込型コンピュータシステムを有するピクトブリッジプリンタと、
前記組込型コンピュータシステムと通信するためのデジタルカメラとを備え、前記カメラが前記組込型コンピュータシステムのためのファームウェアアップグレードを含む。
【００３５】
第５の態様では、ピクトブリッジプリンタの組込型コンピュータシステムのためのファームウェアアップグレードを含むデジタルカメラが提供される。
【００３６】
ピクトブリッジは、カメラ映像機器工業会（Ｃａｍｅｒａ  ＆  Ｉｍａｇｉｎｇ  Ｐｒｏｄｕｃｔｓ  Ａｓｓｏｃｉａｔｉｏｎ：ＣＩＰＡ）からの、直接印刷のための業界のオープンスタンダードである。ピクトブリッジによって、カメラをコンピュータに接続せずに、デジタルカメラからプリンタで映像を直接印刷することが可能になる。単一のＵＳＢケーブルを使用して、ピクトブリッジ対応のプリンタをピクトブリッジ対応のカメラに接続することによって、ユーザは自分のカメラを使用して簡単に印刷設定を制御し、パーソナルコンピュータを使用せずに高画質の写真を得られる。ピクトブリッジ印刷の主な利点は、ユーザ、及び特に複雑な写真アプリケーションソフトウェアが障壁になる場合があるユーザにとって簡単であることである。
【００３７】
ピクトブリッジは、カメラ内の組込型コンピュータシステムとプリンタとの間の通信に依存する。これらの組込型コンピュータシステムは、パーソナルコンピュータの写真アプリケーションに効果的に取って代わり、更に、ユーザにとって操作を簡単にする。
【００３８】
時々、ピクトブリッジプリンタ内のファームウェアをアップグレードする必要がある場合がある。例えば、追加の印刷オプションが要求される場合もあり、販売中の新しいピクトブリッジ対応カメラと互換性を持つようにファームウェアをアップグレードする必要がある場合もある。
【００３９】
従来のデジタルカメラシステムでは、パーソナルコンピュータの写真アプリケーションのためのソフトウェアアップグレードは、インターネットからのダウンロード、又はＣＤを介して提供される。しかし、多くのピクトブリッジプリンタユーザは、そもそもコンピュータを所有していない場合がある。コンピュータを所有するユーザにとっては、インターネットから自分のパーソナルコンピュータに新しいソフトウェアをダウンロードし、ピクトブリッジプリンタを自分のパーソナルコンピュータに接続することによってピクトブリッジプリンタをアップグレードする複雑さは、重大な障壁になる可能性が高い。結局ピクトブリッジユーザは一般に、その簡単さのためと、パーソナルコンピュータを必要としないために、このシステムに魅力を感じるのである。
【００４０】
本発明の主な利点は、ユーザにとって簡単なことである。メモリスティックをピクトブリッジプリンタのＵＳＢポートに差し込むのに、コンピュータスキルは必要ない。したがって、プリンタのファームウェアアップグレードは、プリンタを不正確にアップグレードするリスク又は怖れなしに、誰にでも自信を持って実行されうる。
【００４１】
本明細書では、「メモリスティック」という用語は、どのような携帯型不揮発性デジタルメモリ装置をも意味するために使用される。
【００４２】
メモリスティック又はカメラは、標準的なＵＳＢコネクタを介して組込型コンピュータシステムと通信できる。
【００４３】
任意選択で、メモリスティック又はカメラは、プリンタがまだあるアップグレードを有していないことを検出すると、そのファームウェアアップグレードをプリンタに自動的にダウンロードするように構成される。
【００４４】
任意選択で、携帯型不揮発性デジタルメモリ装置は、メモリスティックである。
【００４５】
カメラは、ファームウェアアップグレードがすでにメモリ内にプログラムされた状態で販売されている場合がある。或いは、カメラは外部の供給源からファームウェアアップグレードを受信することができる。例えば、次に接続されるときにカメラがプリンタをアップグレードできるように、ファームウェアアップグレードをカメラにダウンロードするために、メモリスティックを使用することができる。
【００４６】
第６の態様では、第１の態様のプロセッサなど、プロセッサのレジスタウィンドウアーキテクチャ内でスーパーバイザモードデータをユーザコードから保護するためのシステムが提供され、このシステムは、スーパーバイザモードからユーザモードに遷移する際、無効ウィンドウマスクの確保されたウィンドウのために設定される無効ウィンドウビットに加えて、少なくとも１つの無効ウィンドウビットをアーキテクチャの無効ウィンドウマスク内に設定するステップを含み、その追加のビットは、スーパーバイザデータウィンドウとユーザデータウィンドウとの間の遷移ウィンドウのために設定される。
【００４７】
無効ウィンドウマスク内の追加の無効ウィンドウビットの位置は、遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローとは無関係に維持される。
【００４８】
別々のスーパーバイザモードスタック及びユーザモードスタックが提供されてよく、別々のスーパーバイザモードスタック及びユーザモードスタックは、スーパーバイザモードだけがアクセス可能なメモリ、及びユーザモードがアクセス可能なメモリ内に、それぞれ別々に格納される。
【００４９】
現在のスタックポインタは、ユーザモードからスーパーバイザモードへ、及びスーパーバイザモードからユーザモードへの遷移が発生するたびに、スーパーバイザスタックとユーザスタックとの間をスイッチされうる。
【００５０】
任意選択で、遷移ウィンドウに関する情報は、遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、スーパーバイザスタック内に記録される。
【００５１】
任意選択で、ウィンドウスタックは、スーパーバイザモードだけがアクセス可能なメモリ内に格納され、遷移ウィンドウに関する情報は、遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、ウィンドウスタック内に記録される。
【００５２】
任意選択で、非遷移ウィンドウの情報は、非遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、ウィンドウスタック内に記録される。
【００５３】
任意選択で、それぞれのレジスタウィンドウに、ゼロから始まりセーブするたびに単調に増加する一意の数値ラベルが割り当てられる。確保されたウィンドウに割り当てられた現在のラベルのレコードは、確保されたウィンドウのローカルレジスタ内で保持され、そのレコードは、確保されたウィンドウでウィンドウオーバーフロー及びアンダーフローが発生するとアップデートされる。ラベルは現在のウィンドウポインタに基づいて計算されうる。
【００５４】
任意選択で、確保されたウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、ラベルは少なくともウィンドウスタック内の確保されたウィンドウのスタックポインタのレコードにインデックスを付けるために使用される。
【００５５】
任意選択で、ラベルは、それぞれのウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、ウィンドウスタック内のそれぞれのウィンドウのスタックポインタのレコードにインデックスを付けるために使用される。
【００５６】
スーパーバイザコードからユーザコードへ遷移する際、呼出し関数は現在のウィンドウポインタを、遷移ウィンドウの後ろに位置するユーザウィンドウに動かし、少なくとも現在のウィンドウから確保されたウィンドウまでのスーパーバイザコードデータを含むウィンドウ内のレジスタを上書きするためにセーブを発行できる。
【００５７】
呼出し関数は、現在のウィンドウから確保されたウィンドウまでのすべてのウィンドウ、又はスーパーバイザコードデータを含むプロセッサのすべてのレジスタ内のレジスタを上書きできる。遷移ウィンドウ内のレジスタは、遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、上書きされうる。
【００５８】
ユーザコードからスーパーバイザコードに遷移する場合、ウィンドウアンダーフロートラップルーチンが、現在のウィンドウポインタを遷移ウィンドウより前にあるスーパーバイザウィンドウに動かすために復元を発行できる。
【図面の簡単な説明】
【００５９】
【図１】組込型コンピュータシステムを有するプリンタの透視図である。
【図２】組込型コンピュータシステムの様々な構成要素とプリンタハードウェアとの間の相互関係を示す図である。
【図３】組込型コンピュータシステムのプロセッサによって実装されたレジスタウィンドウアーキテクチャを示す図である。
【図４】スーパーバイザモードとユーザモードとの間のモードスイッチを示す図である。
【図５】遷移ウィンドウを使用しているスーパーバイザモードとユーザモードとの間のモードスイッチを示す図である。
【発明を実施するための形態】
【００６０】
以下、本発明の具体的な実施形態を、図面を参照して詳細に説明する。
ユーザモード及びスーパーバイザモードを有する組込型システム
図１は本発明を実施するプリンタ２を示す。メディア供給トレイ３は、印刷エンジン（プリンタケーシング内に隠されている）によって印刷されるように、メディア８を支えて供給する。メディア８の印刷されたシートは、印刷エンジンから送られ、メディア出力トレイ４に集められる。ユーザインターフェース５はＬＣＤタッチスクリーンであり、ユーザがプリンタ２の操作を制御できるようにする。プリンタ２は、プリンタの操作全体を制御する組込型コンピュータシステム（図示せず）を備える。
【００６１】
図２を参照すると、組込型コンピュータシステム１０、並びに組込型コンピュータシステム１０とプリンタハードウェア及び他の外部構成要素との相互関係が概略的に示してある。組込型コンピュータシステム１０は、ユーザモード及びスーパーバイザモードをサポートするプロセッサ１１を備える。プロセッサ１１は、必須の印刷ハードウェア１３を制御するコード部分１２をスーパーバイザモードでのみ実行する。必須の印刷ハードウェア１３としては、ノズル作動装置を作動させるための駆動回路、供給機構を駆動するモータなどを含むことができる。中核のＲＴＯＳ１４を含む他のすべてのコードはユーザモードで実行される。
【００６２】
ユーザモードで実行しているアプリケーション１５は、コード部分１２を呼び出すトラップを介してプリンタ動作を間接的に制御する。このようにして、プリンタが正確にどのように操作されるかについて、多少の柔軟性をなお許容しながら、コード部分１２の保全性が保護される。
【００６３】
コード部分１２は、プリンタ内の印刷エンジンＱＡチップ１６ａ、及び１つ又は複数のインクカートリッジＱＡチップ１６ｂと通信している。必須の印刷ハードウェア１３の何らかの操作の前に、その操作の許可を要求するために、コード部分１２がＱＡチップ１６ａ及び１６ｂと通信する。
【００６４】
印刷エンジンＱＡチップ１６ａは、許可された印刷速度（例えば、１分あたり３０ページ）をプログラムされている。この情報はコード部分１２に返され、必須の印刷ハードウェア１３は許可された印刷速度に従って操作される。
【００６５】
インクカートリッジＱＡチップ１６ｂは、インクの残量を含む、インクに関する情報をプログラムされている。例えば、インクカートリッジＱＡチップ１６ｂがカートリッジ内にインクが残っていないという情報を返すと、コード部分１２は必須の印刷ハードウェア１３を操作することを許可されず、印刷が中止される。
【００６６】
コード部分１２はスーパーバイザモードでのみ実行されるので、権限のない人がこれらのコード部分を修正することは不可能であり、したがって、必須の印刷ハードウェア１３の操作を変更すること、又はＱＡチップ１６ａ及び１６ｂによって提供されるセキュリティを無効にすることは不可能である。
【００６７】
一方、ＬＣＤディスプレイ５などの必須でないハードウェア１８を制御するコード部分１７は、ユーザモードで実行される。コード部分１７は、中核のＲＴＯＳ１４とともに、必須でないハードウェアの操作における柔軟性、及び所望のオペレーティングシステムを選択する際の柔軟性さえも提供するために、いかなる許可特権もなしに修正されうる。
【００６８】
組込型システム１０を前述の通り配置すると、すべてのプリンタアップグレード及びインク補充がＱＡチップ１６ａ及び１６ｂを介して確実に制御されうる。印刷エンジンＱＡチップ１６ａは、許可されたインターネットダウンロード又はメモリスティックを介して印刷速度アップグレード１９を受信できる。同様に、インク補充ＱＡチップ２０は、許可されたインク補充の間インクカートリッジＱＡチップ１６ｂと通信できるので、インクカートリッジＱＡチップ１６ｂは信頼できる供給源からの補充が行われたことがわかる。許可されたインク補充動作は、特許文献１に詳細に説明されており、その内容を参照により本明細書に組み込む。
【００６９】
ファームウェアアップグレード
前述の通り、プリンタ２のための組込型システム１０内のファームウェアの大半は、許可されたプリンタ操作のセキュリティを脅かすことなく修正又はアップグレードできる。一部のファームウェアアップグレードは、ユーザによって行うことができる。
【００７０】
図２を参照すると、メモリスティック３０又はカメラ３１によってファームウェアアップグレードを行うことができる。メモリスティック３０又はカメラ３１は、そのメモリ内にファームウェアアップグレードを含み、組込型システムがアップグレードを必要とすることを検出すると、自動的にアップグレードを組込型システム１０にダウンロードする。
【００７１】
メモリスティック３０の場合、ユーザはメモリスティックをピクトブリッジプリンタのＵＳＢポートに差し込むだけである。
【００７２】
カメラ３１の場合、ユーザは、カメラをピクトブリッジプリンタのＵＳＢポートを介して正常にピクトブリッジプリンタに接続するだけである。アップグレードがメモリ内に備えられた状態でカメラを購入した場合、ユーザはファームウェアアップグレードが行われたことにさえ気付かないかもしれない。或いは、ファームウェアアップグレードをカメラのメモリ内にダウンロードするためにメモリスティック３０を使用することができ、カメラ３１は、次にプリンタ２に接続されるときに、組込型システム１０内のファームウェアをアップグレードするために使用することができる。
【００７３】
ユーザコード及びスーパーバイザコードのための無効ウィンドウマスク構成
すべてのスーパーバイザコードをユーザコードから保護することによって、更なるセキュリティが提供される。これにより、ユーザコードが機密データを読み取り、コンピュータシステムにスーパーバイザモード内の任意のコードを実行させ、プリンタの作動用ハードウェア及びソフトウェアへの不正なアクセス及び修正ができるようになる可能性が排除される。
【００７４】
プロセッサ１１はデータを操作するためのレジスタウィンドウアーキテクチャを実装する。例えば、プロセッサはＳＰＡＲＣ（商標）アーキテクチャを実装しているＬＥＯＮ  ＣＰＵである。プロセッサ１１内では、ユーザコードは、整数ユニットワーキングレジスタ（「ｒ」レジスタ）、乗除算レジスタ（Ｙレジスタ）、プログラムカウンタ（ＰＣ及びｎＰＣ）、及びハードウェアウォッチポイントにアクセス可能である。したがって、これらのレジスタは、スーパーバイザモードとユーザモードとの間のどちらの方向の遷移においても機密データを保持してはいけない。
【００７５】
印刷エンジンの「ｒ」レジスタは、８個のグローバル３２ビットレジスタ及び各セット内に１６個の３２ビットレジスタがある８セットのレジスタを有する。レジスタセットは、プロセッサ１１がレジスタのうちの２４個を見るウィンドウを有するように配置されている。閲覧されている現在のウィンドウは、ＣＷＰ（Ｃｕｒｒｅｎｔ  Ｗｉｎｄｏｗ  Ｐｏｉｎｔｅｒ）などの、そのウィンドウへのポインタによって決定される。上記の数のレジスタ及びレジスタセットは例示的なものに過ぎず、異なる数のレジスタ及びレジスタセットが使用されうることが理解されるべきである。例えば、ＳＰＡＲＣ（商標）アーキテクチャは、２から３２までの数のレジスタセットの設定が可能である。
【００７６】
ウィンドウが８個のみの場合、この深さ以上の関数呼出し及びトラップはレジスタウィンドウにオーバーフローを引き起こし、このオーバーフローは、無効ウィンドウマスク並びにオーバーフロー及びアンダーフロートラップの組合せを使用することによって処理される。例えば、無効ウィンドウマスクは、ＳＰＡＲＣ（商標）アーキテクチャで使用されるＷＩＭ（Ｗｉｎｄｏｗｓ  Ｉｎｖａｌｉｄ  Ｍａｓｋ）のこともある。オーバーフロー及びアンダーフローハンドラは、無限の数のレジスタウィンドウの錯覚を与えるために使用される。
【００７７】
従来、無効ウィンドウマスクは、１ウィンドウあたり１ビットを含み、ビットセットを有する新しいウィンドウに移動するための命令が発行されるとオーバーフロー及びアンダーフロートラップが生成され、その新しいウィンドウを無効と指定する。
【００７８】
例えば、現在のウィンドウをウィンドウＮからウィンドウ（Ｎ−１）に移動するためのセーブ命令が発行されると、プロセッサはまず無効ウィンドウマスクのビット（Ｎ−１）を検査する。そのビットが設定されると、そのウィンドウは無効であり、したがってプロセッサはウィンドウを変更せずウィンドウオーバーフロートラップを生成する。同様に、現在のウィンドウをウィンドウＮからウィンドウ（Ｎ＋１）に移動するための復元命令が発行されると、プロセッサはまず無効ウィンドウマスクのビット（Ｎ＋１）を検査する。そのビットが設定されると、そのウィンドウは無効であり、したがってプロセッサはウィンドウを変更せずウィンドウアンダーフロートラップを生成する。
【００７９】
割り込みなどのトラップが発生するとそのマスクは無視されるため、構わずウィンドウを回転させ、トラップが発生する際、使用したレジスタが確実に上書きされないようにするために１つのウィンドウを無効として確保するのが通常である。したがって、従来、無効ウィンドウマスクは利用可能なウィンドウ、即ち本実施形態では７個、の終端を示す１ビットセットの値を有し、１つのウィンドウをトラップのために確保する。
【００８０】
例えば、現在のウィンドウを確保されたウィンドウに回転させるセーブ命令の結果、オーバーフロートラップが取られると、トラップハンドラが最も古いウィンドウをメモリに保存し、無効マスクをセーブされたウィンドウの現在の地点に回転させ、それにより以前確保されたウィンドウを使用のために解放する。例えば、現在のウィンドウを確保されたウィンドウに回転させる復元命令の結果としてアンダーフロートラップが取られると、その逆が発生する。
【００８１】
それぞれのレジスタセットは１６個のレジスタを有し、８個の「内部」レジスタと８個の「ローカル」レジスタを備える。しかし、ウィンドウは２４個のレジスタを見るので、残りのレジスタは８個の「外部」レジスタである。したがって、ウィンドウはそのセットを通じて循環するときに、プロセッサ１１は近傍のセットからいくつかのレジスタを見る。これは図３に示してあり、その図では「外部」レジスタは次に低いウィンドウの「内部」レジスタに対応する。したがって、たとえオーバーフロー及びアンダーフローの際でも、所与のウィンドウは次に高いウィンドウの「外部」レジスタ、及び次に低いウィンドウの「内部」レジスタを修正できる。
【００８２】
したがって、適切な処置を講じない限り、ユーザモードウィンドウは、スーパーバイザモードウィンドウを含む近傍のウィンドウのデータの一部を読み取り修正することができる。ユーザコードがレジスタウィンドウ内を通じて循環し、値を読み取り修正することさえできる可能性がある。これは図４に示してあり、この図ではスーパーバイザモードからユーザモードへのスイッチが示してある。図に示すように、スーパーバイザコードはユーザコードを呼び出す前にウィンドウ７及び６を使用していたが、後ろに移動してスーパーバイザデータを読み取り／修正するためにユーザコードが複数の命令を発行することを止めるものが何もない。
【００８３】
場合によっては、これは、スーパーバイザコードのレジスタをユーザがアクセス可能なメモリ内に格納する場合、ユーザコードはそれらの値を容易に上書きしてレジスタが復元される際スーパーバイザコードが見る値を調整し、又は、たとえスーパーバイザコードのレジスタがスーパーバイザだけがアクセス可能なメモリ内に格納されても、ユーザコードは「外部」レジスタの値を修正し、場合によってはコードをだまして不適切な位置からレジスタを復元させる、などの例につながる場合がある。
【００８４】
本実施形態では、スーパーバイザコード、ひいては機密データへのこれらの潜在的なセキュリティ脅威が、少なくとも１つの追加ビットを設定するための無効ウィンドウマスクを構成するプロセッサ１１によって実装されたシステムを提供することによって最小限になる。これは、追加のオーバーフロー及びアンダーフロートラップを、即ちスーパーバイザモードとユーザモードとの間の遷移において生成させる、従来の確保されたウィンドウの後ろの無効ウィンドウを示す。
【００８５】
これらの追加トラップを容易にするために、スーパーバイザコードデータ及びユーザコードデータのために別々のスタックが使用される。遷移が発生すると、現在のスタックポインタ、例えば％ｏ６は、スーパーバイザスタックとユーザスタックとの間でスイッチされる。スーパーバイザスタックはスーパーバイザモードだけがアクセス可能なメモリ内に格納され、ユーザスタックはユーザモードがアクセス可能な、又はユーザモードだけがアクセス可能なメモリ内に格納される。
【００８６】
追加ビットの設定は、スーパーバイザウィンドウとユーザウィンドウとの間に遷移ウィンドウを提供し、スーパーバイザレジスタ内に格納された機密データがユーザコードによってアクセス可能でないことを確実にする。これは図５に示してあり、この図では、ユーザコードを呼び出す前にスーパーバイザコードが追加の２つのウィンドウ分下に移動し、中間ウィンドウを無効ウィンドウマスク内で無効と示した。このウィンドウは、ユーザコードがウィンドウを通じて後ろに移動するために複数の命令を発行する場合、ウィンドウ５で無効ウィンドウにヒットするとトラップを生成するので、遷移における障壁を示す。
【００８７】
遷移ウィンドウ（複数の場合がある）の位置は、オーバーフロー及びアンダーフローが発生するときに維持される。これは、トラップが発生したときに遷移ウィンドウに関する情報をスーパーバイザスタック内に格納することによって、又はこの同じ情報を、スーパーバイザモードだけがアクセス可能なメモリ内に維持される別々のウィンドウスタック内に格納することによって行われる。このようにして、遷移ウィンドウに関する情報は無効ウィンドウマスク内、又は遷移ウィンドウ自体のレジスタ内には格納されない。したがって、この情報はユーザコードによってアクセスされることはできず、それにより、遷移ウィンドウの「外部」又は「内部」レジスタ内に格納されたスーパーバイザコードデータを保護する。
【００８８】
スーパーバイザモードが入力されるたびにオーバーフローが発生する可能性が、スーパーバイザスタックのオーバーフローを防ぐために検査され、それにより他のスーパーバイザコードデータの上書きを防ぐ。このようなオーバーフローは、同じトラップを発行するトラップによって呼び出される関数をユーザがインストールする結果として発生する場合があるので、場合によっては大きなネスティング、又は、実行するためのチックの期間よりも長い時間のかかる、タイマーチックで呼び出される関数を引き起こし、それにより継続的な割り込みのネスティングを引き起こす。
【００８９】
例えば、呼出し関数及びユーザコードがスーパーバイザコードを呼び出すためにトラップを発行するため、確保されたウィンドウがスーパーバイザウィンドウの最上位で回転される場合、スーパーバイザコードデータの更なる保護が必要である。新しい確保されたウィンドウ内のすべての「内部」及び「ローカル」レジスタを、そのレジスタを以前の状態のためにメモリに保存後、トラップが０（例えば、％ｇ０）で上書きするように構成することよって、及び、トラップがすべての使用済みレジスタウィンドウを後の状態のために返す前に上書きするように構成することによって、この保護が達成される。
【００９０】
すべての使用済みレジスタウィンドウを上書きすることに関して、トラップから返されたコードの共通のピースが使用されてよく、そこでコードが、現在のウィンドウから（及び、現在のウィンドウを含む）確保されたウィンドウ（すでに上書きされた）まで（しかし、確保されたウィンドウを含まない）、すべてのレジスタウィンドウを上書きする。或いは、使用されるとわかっている、又はスーパーバイザコードデータを含むとわかっているウィンドウの数を上書きするコードが使用されうる。
【００９１】
ユーザコードがスーパーバイザモードをトラップ経由で呼び出すので、関連付けられているトラップルーチンは、トラップからの戻りアドレスを記憶するように構成される。ＳＰＡＲＣ（商標）アーキテクチャが採用される場合、トラップルーチンは、以前のプロセッサ状態レジスタ（ｐｒｏｃｅｓｓｏｒ  ｓｔａｔｅ  ｒｅｇｉｓｔｅｒ：ＰＳＲ）を記憶することもできる。これは、トラップルーチンのために割り当てられた新しいレジスタウィンドウの「ローカル」レジスタ内で行われる。このため、隣接する遷移ウィンドウが２つあるということは決してなく、即ち、それぞれの遷移ウィンドウは少なくとも１つのスーパーバイザウィンドウ、即ち、トラップからの戻りアドレスを保持するために使用されるウィンドウによって先行される。
【００９２】
ハードウェア又はファームウェア内のどちらかで実行される、オーバーフロー及び遷移ウィンドウのスタックを維持する例示的なシステムを、ＳＰＡＲＣ（商標）アーキテクチャを採用するプロセッサ１１に関連して説明する（同様のシステムがアンダーフローにも適用可能である）。
【００９３】
１．それぞれのスレッドが、遷移ウィンドウについての情報を格納するための関連付けられたスタックを有する。
【００９４】
２．スーパーバイザコードは、ユーザコードを呼び出したいときはいつでも、関数（ｃａｌｌＵｓｅｒＦｕｎｃｔｉｏｎ）への呼出し命令を発行し、以下の引数をとる：
（ｉ）呼び出される関数のアドレスは、％ｏ０内：
（ｉｉ）現在のユーザ（スーパーバイザではない）スタックポインタは％ｏ１内で、呼出し元は正確なユーザスタックポインタを渡すよう準備しなければならない：
・  ここで割り込みルーチンがユーザ関数を呼び出し、トラップルーチンは、現在のスレッドコンテキストから読み取るユーザスタックポインタを使用するか、又は割り込みのための、別個の専用ユーザスタックが使用される。後者の場合、共通のスタックを共用する場合スレッド間のコンテキストスイッチは不可能なので、コンテキストスイッチ呼出しはこれらの呼出しの間は使用禁止である；
・  ここで非割り込みトラップルーチンがユーザ関数を呼び出し、そのトラップルーチンが、現在のスレッドコンテキストから読み出したユーザスタックポインタを使用する。
【００９５】
（ｉｉｉ）％ｏ２から％ｏ５で、最大４つのパラメータがユーザ関数に渡される。％ｏ６は現在のフレームポインタを（スーパーバイザスタック上に）含み、現在のフレームポインタは、オーバーフローが発生した場合以前のスーパーバイザウィンドウが保存される場所なので、維持されなければならない。したがって、ｃａｌｌＵｓｅｒＦｕｎｃｔｉｏｎは以下のように構成される：
・  セーブを発行し、ＣＷＰを遷移ウィンドウに動かす。これは関数の引数が、遷移ウィンドウの％ｉ７が、ｃａｌｌＵｓｅｒＦｕｎｃｔｉｏｎを呼び出した、呼出し命令のアドレスを含む（呼出し命令がそこに置いたため）、「内部」レジスタ内にあることも意味する；
・  引数を含む「内部」レジスタを、呼び出される関数及びユーザスタックポインタを含む「外部」レジスタにコピーする；
・  現在のウィンドウ（遷移ウィンドウになっている）を、ＷＩＭ内で無効としてマークする；
・  ％ｙレジスタ及びグローバルレジスタを、この遷移ウィンドウ内の「ローカル」及び「内部」レジスタ内に保存する；
・  他のセーブ、例えば「セーブ％ｉ１、−１０４、％ｏ６」を発行し、遷移ウィンドウの後ろの現在のウィンドウを動かし、前述のコピーされた引数は現在「内部」レジスタにあることを意味する；
・  現在のウィンドウから（すでに上書きされた）確保されたウィンドウまで（しかし確保されたウィンドウは含まない）すべてのウィンドウを上書きする。しかし、現在のウィンドウを上書きする際、引数のために使用される「内部」レジスタは上書きされない；
・  いかなる古いスーパーバイザデータも保護する、％ｙレジスタ及びグローバルレジスタを上書きする；
・  ユーザモードにスイッチする；
・  要求されたユーザ関数の引数を％ｉ２〜％ｉ５から％ｏ０〜％ｏ３にコピーする；
・  ユーザ関数を呼び出す；
・  ユーザ関数が戻った後、ユーザ関数からの戻り値であり、現在は遷移ウィンドウの％ｏ０内にある、現在のウィンドウの％ｏ０を％ｉ０にコピーする；
・  ％ｏ０をコピーしたので、復元を発行し、これは遷移ウィンドウのためのＷＩＭの無効ビットセットにヒットすることになり、アンダーフロートラップルーチンが引き継ぐことを意味する。復元命令後のコードは、その復元がトラップを引き起こしたはずなので、実行されるべきではない。そのコードが実行されるべき場合、ユーザコードはすべての保存命令が復元命令と一致しないことを意味する。これは、バグ又は悪質な攻撃のためである。したがって、プロセッサ１１はリセット又はコードが復元命令まで再び分岐されるまで停止され、予期されるトラップに出会うまでレジスタウィンドウを連続的に展開する。
【００９６】
３．ウィンドウオーバーフロートラップルーチンが、メモリに保存されるべきウィンドウがＷＩＭ内ですでに無効として示されているかどうかを決定する：
・  無効と示されていない場合、それはノーマルウィンドウであることを意味する。したがって、トラップルーチンはウィンドウのレジスタをノーマルとしてメモリに保存し、スタックオーバーフローの検査後（前述の通り）、「ノーマル」レコードをウィンドウスタックに積む。このレコードは、これが「ノーマル」レコードであることを示す単一のフラッグであることだけが必要である：
・  無効と示されている場合、それは遷移ウィンドウであることを意味する。この場合、トラップルーチンはどのレジスタもメモリに保存する必要はない。しかし、トラップルーチンが「遷移」レコードをウィンドウスタックに積む。このレコードは以下のものを含まなければならない：
・  これが「遷移」レコードであることを示すフラッグ、及び；
・  遷移ウィンドウのフレームポインタ、即ち、％ｉ６、遷移ウィンドウの％ｉ７から読み取られるｃａｌｌＵｓｅｒＦｕｎｃｔｉｏｎからの戻りアドレス、及び遷移ウィンドウ内に保存された％ｙレジスタとグローバルレジスタの値。％ｉ６、％ｉ７、％ｙ、及びグローバルレジスタは、遷移ウィンドウが保存された後必ずしもその遷移ウィンドウ内に維持されないので、ウィンドウスタック上に保存されなければならない。これらの保存を行った後、遷移ウィンドウのレジスタは上書きされなければならない（前述の通り）。
【００９７】
４．ウィンドウアンダーフロートラップルーチンは以下のことを行う：
・  複数のビットが設定されているか確認するためにＷＩＭを調べる。複数のビットが設定されている場合、そのウィンドウがちょうど出会ったのは遷移ウィンドウであることを意味する。これは、確保されたウィンドウは常に、下方向において最初の無効ウィンドウだからであり、したがって、上方向において異なる無効ウィンドウに出会うことはそのウィンドウは遷移ウィンドウであることだけを意味しうる。この場合、トラップルーチンは以下のことを行うように構成される：
・  遷移ウィンドウをＷＩＭ内で有効と示す；
・  遷移ウィンドウの％ｏ０を、ユーザ関数からの戻り値である％ｉ０にコピーする；
・  遷移ウィンドウのローカルレジスタからの％ｙとグローバルレジスタを復元する；
・  現在のウィンドウポインタを、遷移ウィンドウに先立ってウィンドウに動かす。これが他の無効ウィンドウにヒットする場合、前述の通り、連続する遷移ウィンドウは不可能なので、そのウィンドウは確保されたウィンドウでなければならない。この場合、その無効ウィンドウはメモリから復元され、関連付けられているノーマルレコードがウィンドウスタックから取り出される；
・  最初にｃａｌｌＵｓｅｒＦｕｎｃｔｉｏｎを呼び出したスーパーバイザコードにジャンプし、そのアドレスは現在のウィンドウの％ｏ７（この場合、遷移ウィンドウはオーバーフローによって上書きされていないので、即ち、遷移ウィンドウの％ｉ７）を介して入手できる。
【００９８】
・  ＷＩＭが１つのビットセットだけを有する場合、行き当たったのは確保されたウィンドウであり、トラップはウィンドウスタックからレコードを取り出さなければならない。そのレコードが、復元されるべきウィンドウが遷移ウィンドウかどうかを示すはずである。遷移ウィンドウではない場合、トラップルーチンは単にそのウィンドウをメモリから復元し、ＣＷＰを調整し、確保されたウィンドウビットをＷＩＭ内で適切にシャッフルする。遷移ウィンドウの場合、トラップルーチンは以下のことを行うように構成される：
・  遷移ウィンドウの％ｉ６及び％ｉ７、並びにスタックから取り出した遷移レコードからの％ｙ及びグローバルレジスタを復元する；
・  遷移ウィンドウの％ｏ０を、ユーザ関数からの戻り値である％ｉ０にコピーする；
・  現在のウィンドウポインタを、遷移ウィンドウに先立ってウィンドウに動かし、確保されたウィンドウビットをＷＩＭ内で適切にシャッフルする。これによりＣＷＰを遷移ウィンドウより前にスーパーバイザウィンドウに動かし、上記で「内部」レジスタに書かれた値が現在「外部」レジスタにあることを意味する。このウィンドウは、この時点ではまだメモリ内にあるはずである点に注意されたい；このウィンドウは復元される必要がある；
・  保存されたスーパーバイザウィンドウに対応する「ノーマル」レコードである、次のレコードをウィンドウスタックから取り出す；
・  「内部」及び「ローカル」レジスタを復元する、保存されたスーパーバイザウィンドウを復元する。「外部」レジスタ内の値（上からの戻り値など）は上書きされない；
・  最初にｃａｌｌＵｓｅｒＦｕｎｃｔｉｏｎを呼び出したスーパーバイザコードにジャンプし、そのアドレスは復元されたスーパーバイザウィンドウの％ｏ７を介して入手できる。
【００９９】
上記の例では、ウィンドウスタックが、格納されているウィンドウのタイプ、即ち、遷移ウィンドウのための「遷移」レコード及び非遷移ウィンドウのための「ノーマル」レコードに関連するフラッグを記録するために使用される。このようにして、遷移ウィンドウの位置がオーバーフロー及びアンダーフローを通じて維持され、スーパーバイザモードとユーザモードとの間の遷移の結果、機密データがユーザコードにとってアクセス可能になるということはない。これは、トラップから返す前にすべてのレジスタウィンドウを上書きすることによって更に確実にされる。
【０１００】
或いは、又は更に、それぞれの使用済みレジスタウィンドウがラベルを付けられ、対応する復元のために使用されるために、％ｏ６値がレジスタオーバーフロー上に格納される。このようにして、オーバーフロー及びアンダーフローが発生すると、％ｏ６値を検査及び確認して、レジスタウィンドウがユーザモードに属しているか、又はスーパーバイザモードに属しているかがわかる。
【０１０１】
例えば、ラベルは、実行のスレッドのための可能性のあるあらゆるレジスタウィンドウ用の一意の数値ラベルとして割り当てられ、ゼロから始まりセーブ及び／又は関数ごとに単調に増加する。ラベルは、オーバーフロー及びアンダーフローが発生するときにラベルの場所のレコードを付けることによって、前述のフラッグレコードと同様に使用される。
【０１０２】
即ち、確保されたウィンドウに割り当てられた現在のラベル、及び確保されたウィンドウのウィンドウ番号のレコードを付けることができる。これは、オーバーフロー及びアンダーフロールーチンが確保されたウィンドウをシフトするたびにアップデートされ、オーバーフローはラベルを増加させ、アンダーフローはラベルを減少させる。
【０１０３】
例えば、スレッド初期設定時に確保されたウィンドウのラベルが８に設定され、ウィンドウ番号が０に設定される。このレコードは、何らかのスレッド特有のスーパーバイザＲＡＭ内に保持されるか、又は確保されたウィンドウ（ユーザコードはアクセスできない）の「ローカル」レジスタ内に保留されうる。この場合、アンダーフロー及びオーバーフロートラップが、確保されたウィンドウをシフトするにつれて、値をシフトする。次いで、現在のウィンドウのラベル（Ｌ）は、Ｌ＝確保されたウィンドウラベル−（（ＣＷＰ−確保されたウィンドウ番号）；（Ｎ−１）とビット単位でＡＮＤ演算、Ｎはレジスタウィンドウの番号）として計算されうる。
【０１０４】
ラベルは、オーバーフロー及びアンダーフローイベント時にそれぞれのレジスタウィンドウのための追加の状態にアクセスするためにも使用されうる。追加の状態は、保存されたスタックポインタ、例えば％ｏ６を、ウィンドウ及びウィンドウのモードのために含む。モードはウィンドウがスーパーバイザモードで実行しているかどうか識別し、更にウィンドウが割り込み及びモード変化で実行しているかどうか識別できる。前述のフラッグレコード同様、これによりレジスタウィンドウがユーザモード又はスーパーバイザモードのどちらに属しているかに関するレコードが提供される。この場合、現在のウィンドウのためのラベルは、Ｌ＝保存すべき次のラベル＋（（ＣＷＰ＋保存すべき次のラベル）Ｎ−１；（Ｎ−１）とビット単位でＡＮＤ演算、Ｎはレジスタウィンドウの番号）として計算することができ、ここでは、「保存すべき次のラベル」変数は、次のレジスタウィンドウがオーバーフローするためのラベルを含み、オーバーフロー及びアンダーフローの順序正しい処理を補助する。
【０１０５】
追加の状態の情報は、オーバーフロー及びアンダーフローがラベルレコードの一部として発生するときに、ウィンドウスタック内のスタックポインタ及びモードのレコードにインデックスを付けることによってアクセスされる。これは、前述の通り、確保されたウィンドウのためだけに、又はすべてのレジスタウィンドウのために行われうる。このようにして、ユーザモードとスーパーバイザモードとの間の遷移を越える復元が識別され、例えば前述の方法でユーザモード内に残るものを復元するのとは異なる方法で処理されうる。したがって、スーパーバイザモードの機密データをユーザコードのアクセスから保護する。
【０１０６】
当然、本発明は単に例として説明されており、添付の特許請求の範囲によって定義される本発明の範囲内で詳細の修正がされてよいことが理解されるであろう。
【図１】
2009543234.tif 000007
【図２】
2009543234.tif 000008
【図３】
2009543234.tif 000009
【図４】
2009543234.tif 000010
【図５】
2009543234.tif 000011
【手続補正書】
【提出日】平成21年2月13日(2009.2.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサのレジスタウィンドウアーキテクチャ内でスーパーバイザモードデータをユーザコードから保護するためのシステムであって、
スーパーバイザモードからユーザモードに遷移する際、無効ウィンドウマスクの確保されたウィンドウのために設定される無効ウィンドウビットに加えて、少なくとも１つの無効ウィンドウビットを前記アーキテクチャの前記無効ウィンドウマスク内に追加設定することを特徴とし、
前記追加設定されるビットは、スーパーバイザデータウィンドウとユーザデータウィンドウとの間の遷移ウィンドウのために設定される、システム。
【請求項２】
前記プロセッサの前記レジスタウィンドウアーキテクチャがＳＰＡＲＣ（商標）レジスタウィンドウアーキテクチャである、請求項１に記載のシステム。
【請求項３】
前記プロセッサがプリンタのための印刷エンジン内に組み込まれている、請求項１に記載のシステム。
【請求項４】
前記無効ウィンドウマスク内の追加の無効ウィンドウビットの位置が、前記遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローとは独立して維持されている、請求項１に記載のシステム。
【請求項５】
前記システムは、さらに、スーパーバイザモードスタックとユーザモードスタックとを別々に備える、請求項１に記載のシステム。
【請求項６】
前記スーパーバイザモードスタックは、スーパーバイザモードだけがアクセス可能なメモリ内に格納され、前記ユーザモードスタックは、ユーザモードがアクセス可能なメモリ内に格納される、請求項５に記載のシステム。
【請求項７】
ユーザモードからスーパーバイザモードへの遷移が発生するたびに、現在のスタックポインタがスーパーバイザスタックにスイッチされ、
スーパーバイザモードからユーザモードへの遷移が発生するたびに、前記現在のスタックポインタがユーザスタックにスイッチされる、
請求項６に記載のシステム。
【請求項８】
前記遷移ウィンドウに関する情報が、前記遷移ウィンドウでのウィンドウオーバーフロー及びアンダーフローの際、前記スーパーバイザスタック内に記録される、請求項６に記載のシステム。
【請求項９】
前記システムは、さらに、前記スーパーバイザモードだけがアクセス可能なメモリ内に格納されたウィンドウスタックを備え、
前記遷移ウィンドウに関する情報が、前記遷移ウィンドウでのウィンドウオーバーフロー及びアンダーフローの際、前記ウィンドウスタック内に記録される、請求項６に記載のシステム。
【請求項１０】
非遷移ウィンドウに関する情報が、前記非遷移ウィンドウでのウィンドウオーバーフロー及びアンダーフローの際、前記ウィンドウスタック内に記録される、請求項９に記載のシステム。
【国際調査報告】
2009543234.tif 000012
2009543234.tif 000013