説明

レジスタウィンドウアーキテクチャ内においてユーザコードから機密データを保護するためのシステム

【課題】プロセッサのレジスタウィンドウアーキテクチャ内でスーパーバイザモードデータをユーザコードから保護するための優れたシステムを得る。
【解決手段】プロセッサのレジスタウィンドウアーキテクチャ内でスーパーバイザモードデータをユーザコードから保護するためのシステムが提供される。このシステムは、スーパーバイザモードからユーザモードに遷移する際、無効ウィンドウマスクの確保されたウィンドウのために設定される無効ウィンドウビットに加えて、少なくとも1つの無効ウィンドウビットをアーキテクチャの無効ウィンドウマスク内に設定する。その追加のビットは、スーパーバイザデータウィンドウとユーザデータウィンドウとの間の遷移ウィンドウのために設定される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、組込型コンピュータシステムを有する電子装置に関する。本発明は、装置メーカーのソフトウェア設計の下流における柔軟性を依然として持たせたまま、主にセキュリティを改善し、コンピュータシステムをソフトウェアの悪質な不正使用から保護するために開発された。
【0002】
[関連出願の相互参照]
本発明に関する様々な方法、システム、及び装置は、本発明の出願人又は譲受人によって出願された、以下の米国特許/米国特許出願に開示されている。
【表1】


【表2】


【表3】


これらの出願及び特許の開示を、参照により本明細書に組み込む。
【背景技術】
【0003】
現在、組込型コンピュータシステムを有する電子装置は日常生活の一部である。このような装置の例には、現金自動預払機(automatic teller machines:ATMs)、移動電話、プリンタ、コピー機、手持ち式計算機、電子レンジ、テレビ、DVDプレイヤー、洗濯機、手持ち式ゲーム機などがある。概して、組込型コンピュータシステムは、それ自体はコンピュータではない機能を提供するのが特徴である。
【0004】
一般に、組込型システムは、特殊用途ハードウェアと、リアルタイムオペレーティングシステム(real−time operating system:RTOS)をサポートするプロセッサ(CPU)とを含む。このシステムは、特定のシステムのための要求を満たすように適合された特殊用途ソフトウェアでプログラムされる。典型的には、組込型システムのために書かれたソフトウェアは「ファームウェア」と呼ばれる。電子装置はエラーなしに長年継続して動作することが期待されるので、ファームウェアはコンピュータ用のソフトウェアよりも通常厳格に開発されテストされる。
【0005】
組込型コンピュータシステムの明らかな操作上の諸利点の他に、様々な製品ラインの製造と販売に関して提供される多くの利点がある。新しい製品が市場に出されると、それぞれのバージョンが、その特定のバージョンに見合う価格を有する異なるバージョンの製品を発売することがしばしば望ましい。例えば、第1の製品は機能Xを有することができ、第2の製品は機能X,Y,及びZを有することができる。
【0006】
製造について言えば、第1の製品専用の生産ラインを設け、また第2の製品専用の別の生産ラインを設けることは割高である。すべての製品内に、機能X、Y、及びZをサポートするための必要なハードウェアを含む、単一の製品タイプを製造する方が割安である。この場合、様々な製品ラインが、その組込型ファームウェアによって差別化されうる。ハードウェアと比較して、ファームウェアは様々な製品間を差別化するための更に割安な手段を提供する。更に、ファームウェアによって、ユーザは新しい装置を買わずに自分の装置をアップグレードできようになる。例えば、アップグレードを提供するために、許可されたインターネットダウンロードをパーソナルコンピュータ経由で使用でき、それにより購入当初は機能Xしかなかった製品内で機能YとZができるようになる。
【0007】
しかし、組込型ファームウェア特有の問題は、ハッカー、又は不正なファームウェアアップグレードを持ちかける意図的な著作権侵害者からの悪質な攻撃を受けやすいことである。例えば、不正なファームウェアアップグレードはインターネット上で自由に配布されることがあり、ユーザは自分の装置を無料でアップグレードできる。
【0008】
この問題を回避する1つの方法は、アップグレードを提供するためにファームウェア自体を介するのではなく、装置内の認証チップを介することである。プリンタ環境における認証チップ(「QAチップ」)の使用は、以下に記載の我々の以前の出願において説明されており、その内容を参照により本明細書に組み込む。
【表4】


我々の以前の出願において説明したように、プリンタプラットフォーム内のQAチップは、安全な環境で数々の機能を実行する。印刷カートリッジ内のQAチップは、許可された方法でのみプリンタの操作を許可するように使用されうる。例えば、プリンタAは1分あたり10ページを印刷するよう許可され、プリンタBは1分あたり30ページを印刷するよう許可されうる。それぞれのプリンタ内のハードウェアは同一だが、QAチップがそれぞれのプリンタを差別化することができる。更に、QAチップがそれぞれのプリンタのデータを安全で認証された方法で格納するので、信頼できる供給源によってしかアップグレード又は置き換えできない。したがって、QAチップは無許可のユーザからの攻撃に対する保護を提供する。
【0009】
インクカートリッジに装着されたQAチップは、カートリッジ内に含まれるインクが特定の供給源からのもの、又は特定の品質であって、それにより印字ヘッドを傷める不正インクは確実に使用され得ないことを保証するために使用されうる。同様に、同じQAチップが、カートリッジ内の最初のインク量と、そのインクを使用して印刷されたドット数とを参照して決定された、カートリッジ内に残っている「バーチャルインク」の量を、そのメモリ内に動的に格納するために使用されうる。「バーチャルインク」の量は、プリンタのためにセキュリティ機構を提供し、インクカートリッジの不正な補充を防ぐ。つまり、印刷する前にプリンタ内のファームウェアがインクカートリッジのQAチップと通信し、「バーチャルインク」の量が不十分な場合、プリンタは印刷しない。このようにして、インクの質を保証することができ、不正な補充による低品質のインクを使用して印字ヘッドを傷める危険性が最小限になる。
【0010】
QAチップは、電子装置の不正使用を防ぐための優れた手段を提供する。しかし、QAチップのセキュリティは、チップと通信する組込型システム内のファームウェアに依存する。最も果敢なハッカーがファームウェアを変更し、装置内のQAチップとの通信を無効にできることが考えられる。この場合、QAチップによって提供されるセキュリティは危険にさらされてしまう。上述の例では、インクカートリッジ上のQAチップの存在に関係なく、インクカートリッジの不正な補充が可能である。
【0011】
組込型コンピュータシステムに対してこのような果敢な攻撃が行われることはなさそうに見えるかもしれない。しかし、プリンタ市場において、詰め替え用不正インクの売上高は数百万ドル産業になりつつあり、プリンタに内蔵されたどのようなセキュリティシステムに対する悪質な攻撃へのかなりの動機をも与えている。プリンタメーカーの立場から言えば、プリンタで低品質のインクを使用すると、印刷の質が悪くなり印字ヘッドの寿命を縮め、プリンタ市場における信用と評判に計り知れない損害を与える可能性がある。
【0012】
したがって、悪質な攻撃からのセキュリティを改善した組込型コンピュータシステムを有する電子装置を提供することが望ましい。
【0013】
ファームウェアアップグレードを行うための、又は代替の中核RTOSを装置メーカーの下流でインストールさえするための柔軟性を持たせることができる電子装置を提供することが更に望ましい。
【0014】
ピクトブリッジプリンタ内のファームウェアをアップグレードするための簡単な方法を提供することが更に望ましい。
【先行技術文献】
【特許文献】
【0015】
【特許文献1】米国特許出願第11/014769号(2004年12月12日出願)
【発明の概要】
【0016】
第1の態様では、組込型コンピュータシステムを備える電子装置が提供され、前記装置がリアルタイムオペレーティングシステム(RTOS)をサポートするプロセッサを備え、前記プロセッサがユーザモード及びスーパーバイザモードをサポートし、前記コンピュータシステムが、前記装置内の必須のハードウェアを直接制御するコード部分だけがスーパーバイザモードで実行されるようにプログラムされている。
【0017】
本明細書では、「必須のハードウェア」は、装置が重要な機能を実行するために必須のハードウェアコンポーネントを意味するために使用される。例えば、プリンタの場合、必須のハードウェアは、印字ヘッド内のノズル作動装置を作動させるための駆動回路を含むことができるが、LCDディスプレイはプリンタが印刷できるために必須ではないので、プリンタ上のLCDディスプレイは含まない。
【0018】
本明細書では、「コード部分」という用語は、特定の機能を実行するコードの何らかの部分を意味するために使用される。コード部分は、スレッド又はプロセスの一部の場合がある。
【0019】
ユーザモード及びスーパーバイザモードをサポートするプロセッサは、コンピュータ分野ではよく知られている。スーパーバイザモード内で実行しているコードは、もともとそのコードを書いた人など、特権を持った人によってのみアクセスされうる。一方、ユーザモード内で実行しているコードは、特権に関係なく誰によってもアクセス及び修正されうる。
【0020】
ユーザモード及びスーパーバイザモードをサポートするプロセッサの例には、SPARC(商標)プロセッサがある。このようなプロセッサは、コンピュータ上で実行している、バグの出る可能性のあるアプリケーションから、オペレーティングシステムの中核(又はカーネル)を保護するように設計されている。オペレーティングシステムの中核がスーパーバイザモードで実行していると、ユーザモードで実行している特定のアプリケーションがたとえクラッシュしても、そのオペレーティングシステムは実行し続けることができる。これにより、ユーザモードで実行している他のアプリケーションが、オペレーティングシステム上で実行し続けることができることが確実になる。このようにオペレーティングシステムの中核を保護することによって、バグの出るアプリケーションでコンピュータ全体がクラッシュする危険性が最小限になる。つまり、アプリケーションとオペレーティングシステムの中核との間に分離がある。
【0021】
本発明では、ユーザモード及びスーパーバイザモードをサポートするプロセッサが、非組込型コンピュータシステムにおける従来の使用とは異なる方法で用いられる。本発明の組込型コンピュータシステムは、装置内の必須のハードウェアを直接制御するコード部分だけがスーパーバイザモードで実行され、残りのコード部分がユーザモードで実行されるようにプログラムされる。
【0022】
特定のコード部分(装置内の必須のハードウェアを制御する)をスーパーバイザモードで実行することの主な利点は、これらのコード部分は、装置メーカーによって一度ファイナライズされると修正できないことである。したがって、メーカー又はライセンシーは、装置がどのように操作されうるかの最終的な制御を保有する。
【0023】
例えば、プリンタメーカーは、印字ヘッドと給紙機構を直接制御するコード部分に、プリンタが1分あたり10ページだけを印刷するようにプログラムできる。このコード部分はスーパーバイザモードで保護されているので、ハッカーがコードを修正し、自分のプリンタをアップグレードすることは不可能である。
【0024】
任意選択で、コンピュータシステムは、前記装置内の必須のハードウェアを直接制御しないコード部分が、ユーザモードで実行されるようにプログラムされる。任意選択で、RTOSの中核がユーザモードで実行される。このように組込型コンピュータシステムをプログラミングすることの利点は2つある。まず、スーパーバイザモード内のコード量が最小限に維持され、この不変のコード内に存在するバグの危険性を最小限にする。次に、RTOSと必須でないアプリケーションをユーザモードで実行させることによって、認可を受けたプリンタメーカー又は販売代理店、元のプリンタメーカーの下流部門が、自分が選択したオペレーティングシステム上の自分の要求に特化した、独自のファームウェアを開発する機会がある。例えば、認可を受けたプリンタメーカーは、LCDディスプレイのフォーマットを変更し、好ましいオペレーティングシステムを使用してこれをプログラムしたい場合がある。本発明によれば、認可を受けたプリンタメーカーは、装置内のQAシステムのセキュリティが脅かされることなく、これを行う柔軟性を有する。
【0025】
任意選択で、必須のハードウェアを直接制御するコード部分を、そのコード部分を識別するトラップを介して、ユーザモードで実行しているアプリケーションから呼び出せるように、コンピュータシステムがプログラムされる。それぞれが個々の必須のハードウェアを直接制御している複数のコード部分を、個々のコード部分を識別する個々のトラップを介して、ユーザモードで実行しているアプリケーションからそれぞれ独立に呼び出せるようにすることができる。
【0026】
特定のコード部分をユーザモードから呼び出せることの利点は、それにより特定の操作シーケンスを装置にプログラミングするのに更なる柔軟性がもたらされることである。ユーザモードアプリケーションは、認可を受けた装置メーカーによってプログラムされることもあり、或いはインターネットからダウンロードできるアップグレードを介して入手可能なことさえある。例えば、プリンタのユーザは、「5000ページ、フルカラー」を印刷するデフォルトオプションを有したい場合がある。組込型システム内にプログラムされた印刷ジョブアプリケーションはユーザモードで実行するため、このユーザは、このデフォルトオプションを有するように自分のファームウェアをアップグレードできる。
【0027】
任意選択で、必須ハードウェアを直接制御するコード部分が、ハードウェアの操作前に装置内の少なくとも1つの認証チップと通信する。認証チップ(又は「QAチップ」)が操作を許可する。例えば、コード部分が、プリンタに許可された印刷速度をQAチップに尋ねることがある。QAチップはこの情報(例えば、1分あたり10ページ)をコンピュータシステムに返し、許可された印刷速度での印刷を開始できる。このようにして、装置の許可を受けた操作は、装置内のファームウェアへの悪質な攻撃によって脅かされることなく、QAチップを介して安全に制御されうる。
【0028】
任意選択で、最初の認証チップは、前記装置の消耗コンポーネントと関連付けられる。電子装置内の消耗コンポーネントの例には、インクカートリッジ、トナー、紙、電池などがある。最初の認証チップは、消耗コンポーネントに関する静的及び/又は動的データを含むことができる。例えば、静的データは、消耗コンポーネントの供給源、バッチ番号、質(例えば、インクの色)、初期量などに関することができる。動的データは、消耗コンポーネントの現在の量(例えば、インクの残量)、又は質(例えば、温度)に関することができる。
【0029】
電子装置はいくつかの消耗コンポーネントを必要とする場合がある。したがって、装置は、それぞれが個々の消耗コンポーネントと関連付けられている複数の最初の認証チップを備えることができる。
【0030】
任意選択で、電子装置はプリンタであり、消耗コンポーネントはそれぞれの最初の認証チップを有するインクカートリッジである。インクカートリッジ上の認証チップは、特定の条件、例えば(i)関連付けられている認証チップを介して決定された通り、所定のタイプのインクカートリッジがプリンタにロードされた場合のみ印刷する、及び/又は(ii)関連付けられている認証チップを介して決定された通り、所定のインク量がインクカートリッジ内に残っている場合のみ印刷する、が満たされた場合のみ、印刷を許可するために使用されうる。前述のように、これらの認証メカニズムは、プリンタメーカーにプリンタ内で使用されるインクの質に関する保証を提供し、それによりプリンタ市場におけるメーカーの評判を保つ。
【0031】
任意選択で、第2の認証チップは、消耗コンポーネントと関連付けられていない装置の本体内に位置付けられる。例えば、第2の認証チップはプリンタの印刷エンジン内、又は印刷エンジン上に装着されうる。第2の認証チップは、所定の速度で印刷するなどの、装置の特定の操作を許可するために使用されうる。
【0032】
第2の態様では、ピクトブリッジプリンタ内のファームウェアをアップグレードするためのシステムが提供され、そのシステムは、
組込型コンピュータシステムを有するピクトブリッジプリンタと、
前記組込型コンピュータシステムと通信するためのメモリスティックとを備え、前記メモリスティックは、前記組込型コンピュータシステムのためのファームウェアアップグレードを含む。
【0033】
第3の態様では、ピクトブリッジプリンタの組込型コンピュータシステムのためのファームウェアアップグレードを含むメモリスティックが提供される。
【0034】
第4の態様では、ピクトブリッジプリンタ内のファームウェアをアップグレードするためのシステムが提供され、前記システムが、
組込型コンピュータシステムを有するピクトブリッジプリンタと、
前記組込型コンピュータシステムと通信するためのデジタルカメラとを備え、前記カメラが前記組込型コンピュータシステムのためのファームウェアアップグレードを含む。
【0035】
第5の態様では、ピクトブリッジプリンタの組込型コンピュータシステムのためのファームウェアアップグレードを含むデジタルカメラが提供される。
【0036】
ピクトブリッジは、カメラ映像機器工業会(Camera & Imaging Products Association:CIPA)からの、直接印刷のための業界のオープンスタンダードである。ピクトブリッジによって、カメラをコンピュータに接続せずに、デジタルカメラからプリンタで映像を直接印刷することが可能になる。単一のUSBケーブルを使用して、ピクトブリッジ対応のプリンタをピクトブリッジ対応のカメラに接続することによって、ユーザは自分のカメラを使用して簡単に印刷設定を制御し、パーソナルコンピュータを使用せずに高画質の写真を得られる。ピクトブリッジ印刷の主な利点は、ユーザ、及び特に複雑な写真アプリケーションソフトウェアが障壁になる場合があるユーザにとって簡単であることである。
【0037】
ピクトブリッジは、カメラ内の組込型コンピュータシステムとプリンタとの間の通信に依存する。これらの組込型コンピュータシステムは、パーソナルコンピュータの写真アプリケーションに効果的に取って代わり、更に、ユーザにとって操作を簡単にする。
【0038】
時々、ピクトブリッジプリンタ内のファームウェアをアップグレードする必要がある場合がある。例えば、追加の印刷オプションが要求される場合もあり、販売中の新しいピクトブリッジ対応カメラと互換性を持つようにファームウェアをアップグレードする必要がある場合もある。
【0039】
従来のデジタルカメラシステムでは、パーソナルコンピュータの写真アプリケーションのためのソフトウェアアップグレードは、インターネットからのダウンロード、又はCDを介して提供される。しかし、多くのピクトブリッジプリンタユーザは、そもそもコンピュータを所有していない場合がある。コンピュータを所有するユーザにとっては、インターネットから自分のパーソナルコンピュータに新しいソフトウェアをダウンロードし、ピクトブリッジプリンタを自分のパーソナルコンピュータに接続することによってピクトブリッジプリンタをアップグレードする複雑さは、重大な障壁になる可能性が高い。結局ピクトブリッジユーザは一般に、その簡単さのためと、パーソナルコンピュータを必要としないために、このシステムに魅力を感じるのである。
【0040】
本発明の主な利点は、ユーザにとって簡単なことである。メモリスティックをピクトブリッジプリンタのUSBポートに差し込むのに、コンピュータスキルは必要ない。したがって、プリンタのファームウェアアップグレードは、プリンタを不正確にアップグレードするリスク又は怖れなしに、誰にでも自信を持って実行されうる。
【0041】
本明細書では、「メモリスティック」という用語は、どのような携帯型不揮発性デジタルメモリ装置をも意味するために使用される。
【0042】
メモリスティック又はカメラは、標準的なUSBコネクタを介して組込型コンピュータシステムと通信できる。
【0043】
任意選択で、メモリスティック又はカメラは、プリンタがまだあるアップグレードを有していないことを検出すると、そのファームウェアアップグレードをプリンタに自動的にダウンロードするように構成される。
【0044】
任意選択で、携帯型不揮発性デジタルメモリ装置は、メモリスティックである。
【0045】
カメラは、ファームウェアアップグレードがすでにメモリ内にプログラムされた状態で販売されている場合がある。或いは、カメラは外部の供給源からファームウェアアップグレードを受信することができる。例えば、次に接続されるときにカメラがプリンタをアップグレードできるように、ファームウェアアップグレードをカメラにダウンロードするために、メモリスティックを使用することができる。
【0046】
第6の態様では、第1の態様のプロセッサなど、プロセッサのレジスタウィンドウアーキテクチャ内でスーパーバイザモードデータをユーザコードから保護するためのシステムが提供され、このシステムは、スーパーバイザモードからユーザモードに遷移する際、無効ウィンドウマスクの確保されたウィンドウのために設定される無効ウィンドウビットに加えて、少なくとも1つの無効ウィンドウビットをアーキテクチャの無効ウィンドウマスク内に設定するステップを含み、その追加のビットは、スーパーバイザデータウィンドウとユーザデータウィンドウとの間の遷移ウィンドウのために設定される。
【0047】
無効ウィンドウマスク内の追加の無効ウィンドウビットの位置は、遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローとは無関係に維持される。
【0048】
別々のスーパーバイザモードスタック及びユーザモードスタックが提供されてよく、別々のスーパーバイザモードスタック及びユーザモードスタックは、スーパーバイザモードだけがアクセス可能なメモリ、及びユーザモードがアクセス可能なメモリ内に、それぞれ別々に格納される。
【0049】
現在のスタックポインタは、ユーザモードからスーパーバイザモードへ、及びスーパーバイザモードからユーザモードへの遷移が発生するたびに、スーパーバイザスタックとユーザスタックとの間をスイッチされうる。
【0050】
任意選択で、遷移ウィンドウに関する情報は、遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、スーパーバイザスタック内に記録される。
【0051】
任意選択で、ウィンドウスタックは、スーパーバイザモードだけがアクセス可能なメモリ内に格納され、遷移ウィンドウに関する情報は、遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、ウィンドウスタック内に記録される。
【0052】
任意選択で、非遷移ウィンドウの情報は、非遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、ウィンドウスタック内に記録される。
【0053】
任意選択で、それぞれのレジスタウィンドウに、ゼロから始まりセーブするたびに単調に増加する一意の数値ラベルが割り当てられる。確保されたウィンドウに割り当てられた現在のラベルのレコードは、確保されたウィンドウのローカルレジスタ内で保持され、そのレコードは、確保されたウィンドウでウィンドウオーバーフロー及びアンダーフローが発生するとアップデートされる。ラベルは現在のウィンドウポインタに基づいて計算されうる。
【0054】
任意選択で、確保されたウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、ラベルは少なくともウィンドウスタック内の確保されたウィンドウのスタックポインタのレコードにインデックスを付けるために使用される。
【0055】
任意選択で、ラベルは、それぞれのウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、ウィンドウスタック内のそれぞれのウィンドウのスタックポインタのレコードにインデックスを付けるために使用される。
【0056】
スーパーバイザコードからユーザコードへ遷移する際、呼出し関数は現在のウィンドウポインタを、遷移ウィンドウの後ろに位置するユーザウィンドウに動かし、少なくとも現在のウィンドウから確保されたウィンドウまでのスーパーバイザコードデータを含むウィンドウ内のレジスタを上書きするためにセーブを発行できる。
【0057】
呼出し関数は、現在のウィンドウから確保されたウィンドウまでのすべてのウィンドウ、又はスーパーバイザコードデータを含むプロセッサのすべてのレジスタ内のレジスタを上書きできる。遷移ウィンドウ内のレジスタは、遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、上書きされうる。
【0058】
ユーザコードからスーパーバイザコードに遷移する場合、ウィンドウアンダーフロートラップルーチンが、現在のウィンドウポインタを遷移ウィンドウより前にあるスーパーバイザウィンドウに動かすために復元を発行できる。
【図面の簡単な説明】
【0059】
【図1】組込型コンピュータシステムを有するプリンタの透視図である。
【図2】組込型コンピュータシステムの様々な構成要素とプリンタハードウェアとの間の相互関係を示す図である。
【図3】組込型コンピュータシステムのプロセッサによって実装されたレジスタウィンドウアーキテクチャを示す図である。
【図4】スーパーバイザモードとユーザモードとの間のモードスイッチを示す図である。
【図5】遷移ウィンドウを使用しているスーパーバイザモードとユーザモードとの間のモードスイッチを示す図である。
【発明を実施するための形態】
【0060】
以下、本発明の具体的な実施形態を、図面を参照して詳細に説明する。
ユーザモード及びスーパーバイザモードを有する組込型システム
図1は本発明を実施するプリンタ2を示す。メディア供給トレイ3は、印刷エンジン(プリンタケーシング内に隠されている)によって印刷されるように、メディア8を支えて供給する。メディア8の印刷されたシートは、印刷エンジンから送られ、メディア出力トレイ4に集められる。ユーザインターフェース5はLCDタッチスクリーンであり、ユーザがプリンタ2の操作を制御できるようにする。プリンタ2は、プリンタの操作全体を制御する組込型コンピュータシステム(図示せず)を備える。
【0061】
図2を参照すると、組込型コンピュータシステム10、並びに組込型コンピュータシステム10とプリンタハードウェア及び他の外部構成要素との相互関係が概略的に示してある。組込型コンピュータシステム10は、ユーザモード及びスーパーバイザモードをサポートするプロセッサ11を備える。プロセッサ11は、必須の印刷ハードウェア13を制御するコード部分12をスーパーバイザモードでのみ実行する。必須の印刷ハードウェア13としては、ノズル作動装置を作動させるための駆動回路、供給機構を駆動するモータなどを含むことができる。中核のRTOS14を含む他のすべてのコードはユーザモードで実行される。
【0062】
ユーザモードで実行しているアプリケーション15は、コード部分12を呼び出すトラップを介してプリンタ動作を間接的に制御する。このようにして、プリンタが正確にどのように操作されるかについて、多少の柔軟性をなお許容しながら、コード部分12の保全性が保護される。
【0063】
コード部分12は、プリンタ内の印刷エンジンQAチップ16a、及び1つ又は複数のインクカートリッジQAチップ16bと通信している。必須の印刷ハードウェア13の何らかの操作の前に、その操作の許可を要求するために、コード部分12がQAチップ16a及び16bと通信する。
【0064】
印刷エンジンQAチップ16aは、許可された印刷速度(例えば、1分あたり30ページ)をプログラムされている。この情報はコード部分12に返され、必須の印刷ハードウェア13は許可された印刷速度に従って操作される。
【0065】
インクカートリッジQAチップ16bは、インクの残量を含む、インクに関する情報をプログラムされている。例えば、インクカートリッジQAチップ16bがカートリッジ内にインクが残っていないという情報を返すと、コード部分12は必須の印刷ハードウェア13を操作することを許可されず、印刷が中止される。
【0066】
コード部分12はスーパーバイザモードでのみ実行されるので、権限のない人がこれらのコード部分を修正することは不可能であり、したがって、必須の印刷ハードウェア13の操作を変更すること、又はQAチップ16a及び16bによって提供されるセキュリティを無効にすることは不可能である。
【0067】
一方、LCDディスプレイ5などの必須でないハードウェア18を制御するコード部分17は、ユーザモードで実行される。コード部分17は、中核のRTOS14とともに、必須でないハードウェアの操作における柔軟性、及び所望のオペレーティングシステムを選択する際の柔軟性さえも提供するために、いかなる許可特権もなしに修正されうる。
【0068】
組込型システム10を前述の通り配置すると、すべてのプリンタアップグレード及びインク補充がQAチップ16a及び16bを介して確実に制御されうる。印刷エンジンQAチップ16aは、許可されたインターネットダウンロード又はメモリスティックを介して印刷速度アップグレード19を受信できる。同様に、インク補充QAチップ20は、許可されたインク補充の間インクカートリッジQAチップ16bと通信できるので、インクカートリッジQAチップ16bは信頼できる供給源からの補充が行われたことがわかる。許可されたインク補充動作は、特許文献1に詳細に説明されており、その内容を参照により本明細書に組み込む。
【0069】
ファームウェアアップグレード
前述の通り、プリンタ2のための組込型システム10内のファームウェアの大半は、許可されたプリンタ操作のセキュリティを脅かすことなく修正又はアップグレードできる。一部のファームウェアアップグレードは、ユーザによって行うことができる。
【0070】
図2を参照すると、メモリスティック30又はカメラ31によってファームウェアアップグレードを行うことができる。メモリスティック30又はカメラ31は、そのメモリ内にファームウェアアップグレードを含み、組込型システムがアップグレードを必要とすることを検出すると、自動的にアップグレードを組込型システム10にダウンロードする。
【0071】
メモリスティック30の場合、ユーザはメモリスティックをピクトブリッジプリンタのUSBポートに差し込むだけである。
【0072】
カメラ31の場合、ユーザは、カメラをピクトブリッジプリンタのUSBポートを介して正常にピクトブリッジプリンタに接続するだけである。アップグレードがメモリ内に備えられた状態でカメラを購入した場合、ユーザはファームウェアアップグレードが行われたことにさえ気付かないかもしれない。或いは、ファームウェアアップグレードをカメラのメモリ内にダウンロードするためにメモリスティック30を使用することができ、カメラ31は、次にプリンタ2に接続されるときに、組込型システム10内のファームウェアをアップグレードするために使用することができる。
【0073】
ユーザコード及びスーパーバイザコードのための無効ウィンドウマスク構成
すべてのスーパーバイザコードをユーザコードから保護することによって、更なるセキュリティが提供される。これにより、ユーザコードが機密データを読み取り、コンピュータシステムにスーパーバイザモード内の任意のコードを実行させ、プリンタの作動用ハードウェア及びソフトウェアへの不正なアクセス及び修正ができるようになる可能性が排除される。
【0074】
プロセッサ11はデータを操作するためのレジスタウィンドウアーキテクチャを実装する。例えば、プロセッサはSPARC(商標)アーキテクチャを実装しているLEON CPUである。プロセッサ11内では、ユーザコードは、整数ユニットワーキングレジスタ(「r」レジスタ)、乗除算レジスタ(Yレジスタ)、プログラムカウンタ(PC及びnPC)、及びハードウェアウォッチポイントにアクセス可能である。したがって、これらのレジスタは、スーパーバイザモードとユーザモードとの間のどちらの方向の遷移においても機密データを保持してはいけない。
【0075】
印刷エンジンの「r」レジスタは、8個のグローバル32ビットレジスタ及び各セット内に16個の32ビットレジスタがある8セットのレジスタを有する。レジスタセットは、プロセッサ11がレジスタのうちの24個を見るウィンドウを有するように配置されている。閲覧されている現在のウィンドウは、CWP(Current Window Pointer)などの、そのウィンドウへのポインタによって決定される。上記の数のレジスタ及びレジスタセットは例示的なものに過ぎず、異なる数のレジスタ及びレジスタセットが使用されうることが理解されるべきである。例えば、SPARC(商標)アーキテクチャは、2から32までの数のレジスタセットの設定が可能である。
【0076】
ウィンドウが8個のみの場合、この深さ以上の関数呼出し及びトラップはレジスタウィンドウにオーバーフローを引き起こし、このオーバーフローは、無効ウィンドウマスク並びにオーバーフロー及びアンダーフロートラップの組合せを使用することによって処理される。例えば、無効ウィンドウマスクは、SPARC(商標)アーキテクチャで使用されるWIM(Windows Invalid Mask)のこともある。オーバーフロー及びアンダーフローハンドラは、無限の数のレジスタウィンドウの錯覚を与えるために使用される。
【0077】
従来、無効ウィンドウマスクは、1ウィンドウあたり1ビットを含み、ビットセットを有する新しいウィンドウに移動するための命令が発行されるとオーバーフロー及びアンダーフロートラップが生成され、その新しいウィンドウを無効と指定する。
【0078】
例えば、現在のウィンドウをウィンドウNからウィンドウ(N−1)に移動するためのセーブ命令が発行されると、プロセッサはまず無効ウィンドウマスクのビット(N−1)を検査する。そのビットが設定されると、そのウィンドウは無効であり、したがってプロセッサはウィンドウを変更せずウィンドウオーバーフロートラップを生成する。同様に、現在のウィンドウをウィンドウNからウィンドウ(N+1)に移動するための復元命令が発行されると、プロセッサはまず無効ウィンドウマスクのビット(N+1)を検査する。そのビットが設定されると、そのウィンドウは無効であり、したがってプロセッサはウィンドウを変更せずウィンドウアンダーフロートラップを生成する。
【0079】
割り込みなどのトラップが発生するとそのマスクは無視されるため、構わずウィンドウを回転させ、トラップが発生する際、使用したレジスタが確実に上書きされないようにするために1つのウィンドウを無効として確保するのが通常である。したがって、従来、無効ウィンドウマスクは利用可能なウィンドウ、即ち本実施形態では7個、の終端を示す1ビットセットの値を有し、1つのウィンドウをトラップのために確保する。
【0080】
例えば、現在のウィンドウを確保されたウィンドウに回転させるセーブ命令の結果、オーバーフロートラップが取られると、トラップハンドラが最も古いウィンドウをメモリに保存し、無効マスクをセーブされたウィンドウの現在の地点に回転させ、それにより以前確保されたウィンドウを使用のために解放する。例えば、現在のウィンドウを確保されたウィンドウに回転させる復元命令の結果としてアンダーフロートラップが取られると、その逆が発生する。
【0081】
それぞれのレジスタセットは16個のレジスタを有し、8個の「内部」レジスタと8個の「ローカル」レジスタを備える。しかし、ウィンドウは24個のレジスタを見るので、残りのレジスタは8個の「外部」レジスタである。したがって、ウィンドウはそのセットを通じて循環するときに、プロセッサ11は近傍のセットからいくつかのレジスタを見る。これは図3に示してあり、その図では「外部」レジスタは次に低いウィンドウの「内部」レジスタに対応する。したがって、たとえオーバーフロー及びアンダーフローの際でも、所与のウィンドウは次に高いウィンドウの「外部」レジスタ、及び次に低いウィンドウの「内部」レジスタを修正できる。
【0082】
したがって、適切な処置を講じない限り、ユーザモードウィンドウは、スーパーバイザモードウィンドウを含む近傍のウィンドウのデータの一部を読み取り修正することができる。ユーザコードがレジスタウィンドウ内を通じて循環し、値を読み取り修正することさえできる可能性がある。これは図4に示してあり、この図ではスーパーバイザモードからユーザモードへのスイッチが示してある。図に示すように、スーパーバイザコードはユーザコードを呼び出す前にウィンドウ7及び6を使用していたが、後ろに移動してスーパーバイザデータを読み取り/修正するためにユーザコードが複数の命令を発行することを止めるものが何もない。
【0083】
場合によっては、これは、スーパーバイザコードのレジスタをユーザがアクセス可能なメモリ内に格納する場合、ユーザコードはそれらの値を容易に上書きしてレジスタが復元される際スーパーバイザコードが見る値を調整し、又は、たとえスーパーバイザコードのレジスタがスーパーバイザだけがアクセス可能なメモリ内に格納されても、ユーザコードは「外部」レジスタの値を修正し、場合によってはコードをだまして不適切な位置からレジスタを復元させる、などの例につながる場合がある。
【0084】
本実施形態では、スーパーバイザコード、ひいては機密データへのこれらの潜在的なセキュリティ脅威が、少なくとも1つの追加ビットを設定するための無効ウィンドウマスクを構成するプロセッサ11によって実装されたシステムを提供することによって最小限になる。これは、追加のオーバーフロー及びアンダーフロートラップを、即ちスーパーバイザモードとユーザモードとの間の遷移において生成させる、従来の確保されたウィンドウの後ろの無効ウィンドウを示す。
【0085】
これらの追加トラップを容易にするために、スーパーバイザコードデータ及びユーザコードデータのために別々のスタックが使用される。遷移が発生すると、現在のスタックポインタ、例えば%o6は、スーパーバイザスタックとユーザスタックとの間でスイッチされる。スーパーバイザスタックはスーパーバイザモードだけがアクセス可能なメモリ内に格納され、ユーザスタックはユーザモードがアクセス可能な、又はユーザモードだけがアクセス可能なメモリ内に格納される。
【0086】
追加ビットの設定は、スーパーバイザウィンドウとユーザウィンドウとの間に遷移ウィンドウを提供し、スーパーバイザレジスタ内に格納された機密データがユーザコードによってアクセス可能でないことを確実にする。これは図5に示してあり、この図では、ユーザコードを呼び出す前にスーパーバイザコードが追加の2つのウィンドウ分下に移動し、中間ウィンドウを無効ウィンドウマスク内で無効と示した。このウィンドウは、ユーザコードがウィンドウを通じて後ろに移動するために複数の命令を発行する場合、ウィンドウ5で無効ウィンドウにヒットするとトラップを生成するので、遷移における障壁を示す。
【0087】
遷移ウィンドウ(複数の場合がある)の位置は、オーバーフロー及びアンダーフローが発生するときに維持される。これは、トラップが発生したときに遷移ウィンドウに関する情報をスーパーバイザスタック内に格納することによって、又はこの同じ情報を、スーパーバイザモードだけがアクセス可能なメモリ内に維持される別々のウィンドウスタック内に格納することによって行われる。このようにして、遷移ウィンドウに関する情報は無効ウィンドウマスク内、又は遷移ウィンドウ自体のレジスタ内には格納されない。したがって、この情報はユーザコードによってアクセスされることはできず、それにより、遷移ウィンドウの「外部」又は「内部」レジスタ内に格納されたスーパーバイザコードデータを保護する。
【0088】
スーパーバイザモードが入力されるたびにオーバーフローが発生する可能性が、スーパーバイザスタックのオーバーフローを防ぐために検査され、それにより他のスーパーバイザコードデータの上書きを防ぐ。このようなオーバーフローは、同じトラップを発行するトラップによって呼び出される関数をユーザがインストールする結果として発生する場合があるので、場合によっては大きなネスティング、又は、実行するためのチックの期間よりも長い時間のかかる、タイマーチックで呼び出される関数を引き起こし、それにより継続的な割り込みのネスティングを引き起こす。
【0089】
例えば、呼出し関数及びユーザコードがスーパーバイザコードを呼び出すためにトラップを発行するため、確保されたウィンドウがスーパーバイザウィンドウの最上位で回転される場合、スーパーバイザコードデータの更なる保護が必要である。新しい確保されたウィンドウ内のすべての「内部」及び「ローカル」レジスタを、そのレジスタを以前の状態のためにメモリに保存後、トラップが0(例えば、%g0)で上書きするように構成することよって、及び、トラップがすべての使用済みレジスタウィンドウを後の状態のために返す前に上書きするように構成することによって、この保護が達成される。
【0090】
すべての使用済みレジスタウィンドウを上書きすることに関して、トラップから返されたコードの共通のピースが使用されてよく、そこでコードが、現在のウィンドウから(及び、現在のウィンドウを含む)確保されたウィンドウ(すでに上書きされた)まで(しかし、確保されたウィンドウを含まない)、すべてのレジスタウィンドウを上書きする。或いは、使用されるとわかっている、又はスーパーバイザコードデータを含むとわかっているウィンドウの数を上書きするコードが使用されうる。
【0091】
ユーザコードがスーパーバイザモードをトラップ経由で呼び出すので、関連付けられているトラップルーチンは、トラップからの戻りアドレスを記憶するように構成される。SPARC(商標)アーキテクチャが採用される場合、トラップルーチンは、以前のプロセッサ状態レジスタ(processor state register:PSR)を記憶することもできる。これは、トラップルーチンのために割り当てられた新しいレジスタウィンドウの「ローカル」レジスタ内で行われる。このため、隣接する遷移ウィンドウが2つあるということは決してなく、即ち、それぞれの遷移ウィンドウは少なくとも1つのスーパーバイザウィンドウ、即ち、トラップからの戻りアドレスを保持するために使用されるウィンドウによって先行される。
【0092】
ハードウェア又はファームウェア内のどちらかで実行される、オーバーフロー及び遷移ウィンドウのスタックを維持する例示的なシステムを、SPARC(商標)アーキテクチャを採用するプロセッサ11に関連して説明する(同様のシステムがアンダーフローにも適用可能である)。
【0093】
1.それぞれのスレッドが、遷移ウィンドウについての情報を格納するための関連付けられたスタックを有する。
【0094】
2.スーパーバイザコードは、ユーザコードを呼び出したいときはいつでも、関数(callUserFunction)への呼出し命令を発行し、以下の引数をとる:
(i)呼び出される関数のアドレスは、%o0内:
(ii)現在のユーザ(スーパーバイザではない)スタックポインタは%o1内で、呼出し元は正確なユーザスタックポインタを渡すよう準備しなければならない:
・ ここで割り込みルーチンがユーザ関数を呼び出し、トラップルーチンは、現在のスレッドコンテキストから読み取るユーザスタックポインタを使用するか、又は割り込みのための、別個の専用ユーザスタックが使用される。後者の場合、共通のスタックを共用する場合スレッド間のコンテキストスイッチは不可能なので、コンテキストスイッチ呼出しはこれらの呼出しの間は使用禁止である;
・ ここで非割り込みトラップルーチンがユーザ関数を呼び出し、そのトラップルーチンが、現在のスレッドコンテキストから読み出したユーザスタックポインタを使用する。
【0095】
(iii)%o2から%o5で、最大4つのパラメータがユーザ関数に渡される。%o6は現在のフレームポインタを(スーパーバイザスタック上に)含み、現在のフレームポインタは、オーバーフローが発生した場合以前のスーパーバイザウィンドウが保存される場所なので、維持されなければならない。したがって、callUserFunctionは以下のように構成される:
・ セーブを発行し、CWPを遷移ウィンドウに動かす。これは関数の引数が、遷移ウィンドウの%i7が、callUserFunctionを呼び出した、呼出し命令のアドレスを含む(呼出し命令がそこに置いたため)、「内部」レジスタ内にあることも意味する;
・ 引数を含む「内部」レジスタを、呼び出される関数及びユーザスタックポインタを含む「外部」レジスタにコピーする;
・ 現在のウィンドウ(遷移ウィンドウになっている)を、WIM内で無効としてマークする;
・ %yレジスタ及びグローバルレジスタを、この遷移ウィンドウ内の「ローカル」及び「内部」レジスタ内に保存する;
・ 他のセーブ、例えば「セーブ%i1、−104、%o6」を発行し、遷移ウィンドウの後ろの現在のウィンドウを動かし、前述のコピーされた引数は現在「内部」レジスタにあることを意味する;
・ 現在のウィンドウから(すでに上書きされた)確保されたウィンドウまで(しかし確保されたウィンドウは含まない)すべてのウィンドウを上書きする。しかし、現在のウィンドウを上書きする際、引数のために使用される「内部」レジスタは上書きされない;
・ いかなる古いスーパーバイザデータも保護する、%yレジスタ及びグローバルレジスタを上書きする;
・ ユーザモードにスイッチする;
・ 要求されたユーザ関数の引数を%i2〜%i5から%o0〜%o3にコピーする;
・ ユーザ関数を呼び出す;
・ ユーザ関数が戻った後、ユーザ関数からの戻り値であり、現在は遷移ウィンドウの%o0内にある、現在のウィンドウの%o0を%i0にコピーする;
・ %o0をコピーしたので、復元を発行し、これは遷移ウィンドウのためのWIMの無効ビットセットにヒットすることになり、アンダーフロートラップルーチンが引き継ぐことを意味する。復元命令後のコードは、その復元がトラップを引き起こしたはずなので、実行されるべきではない。そのコードが実行されるべき場合、ユーザコードはすべての保存命令が復元命令と一致しないことを意味する。これは、バグ又は悪質な攻撃のためである。したがって、プロセッサ11はリセット又はコードが復元命令まで再び分岐されるまで停止され、予期されるトラップに出会うまでレジスタウィンドウを連続的に展開する。
【0096】
3.ウィンドウオーバーフロートラップルーチンが、メモリに保存されるべきウィンドウがWIM内ですでに無効として示されているかどうかを決定する:
・ 無効と示されていない場合、それはノーマルウィンドウであることを意味する。したがって、トラップルーチンはウィンドウのレジスタをノーマルとしてメモリに保存し、スタックオーバーフローの検査後(前述の通り)、「ノーマル」レコードをウィンドウスタックに積む。このレコードは、これが「ノーマル」レコードであることを示す単一のフラッグであることだけが必要である:
・ 無効と示されている場合、それは遷移ウィンドウであることを意味する。この場合、トラップルーチンはどのレジスタもメモリに保存する必要はない。しかし、トラップルーチンが「遷移」レコードをウィンドウスタックに積む。このレコードは以下のものを含まなければならない:
・ これが「遷移」レコードであることを示すフラッグ、及び;
・ 遷移ウィンドウのフレームポインタ、即ち、%i6、遷移ウィンドウの%i7から読み取られるcallUserFunctionからの戻りアドレス、及び遷移ウィンドウ内に保存された%yレジスタとグローバルレジスタの値。%i6、%i7、%y、及びグローバルレジスタは、遷移ウィンドウが保存された後必ずしもその遷移ウィンドウ内に維持されないので、ウィンドウスタック上に保存されなければならない。これらの保存を行った後、遷移ウィンドウのレジスタは上書きされなければならない(前述の通り)。
【0097】
4.ウィンドウアンダーフロートラップルーチンは以下のことを行う:
・ 複数のビットが設定されているか確認するためにWIMを調べる。複数のビットが設定されている場合、そのウィンドウがちょうど出会ったのは遷移ウィンドウであることを意味する。これは、確保されたウィンドウは常に、下方向において最初の無効ウィンドウだからであり、したがって、上方向において異なる無効ウィンドウに出会うことはそのウィンドウは遷移ウィンドウであることだけを意味しうる。この場合、トラップルーチンは以下のことを行うように構成される:
・ 遷移ウィンドウをWIM内で有効と示す;
・ 遷移ウィンドウの%o0を、ユーザ関数からの戻り値である%i0にコピーする;
・ 遷移ウィンドウのローカルレジスタからの%yとグローバルレジスタを復元する;
・ 現在のウィンドウポインタを、遷移ウィンドウに先立ってウィンドウに動かす。これが他の無効ウィンドウにヒットする場合、前述の通り、連続する遷移ウィンドウは不可能なので、そのウィンドウは確保されたウィンドウでなければならない。この場合、その無効ウィンドウはメモリから復元され、関連付けられているノーマルレコードがウィンドウスタックから取り出される;
・ 最初にcallUserFunctionを呼び出したスーパーバイザコードにジャンプし、そのアドレスは現在のウィンドウの%o7(この場合、遷移ウィンドウはオーバーフローによって上書きされていないので、即ち、遷移ウィンドウの%i7)を介して入手できる。
【0098】
・ WIMが1つのビットセットだけを有する場合、行き当たったのは確保されたウィンドウであり、トラップはウィンドウスタックからレコードを取り出さなければならない。そのレコードが、復元されるべきウィンドウが遷移ウィンドウかどうかを示すはずである。遷移ウィンドウではない場合、トラップルーチンは単にそのウィンドウをメモリから復元し、CWPを調整し、確保されたウィンドウビットをWIM内で適切にシャッフルする。遷移ウィンドウの場合、トラップルーチンは以下のことを行うように構成される:
・ 遷移ウィンドウの%i6及び%i7、並びにスタックから取り出した遷移レコードからの%y及びグローバルレジスタを復元する;
・ 遷移ウィンドウの%o0を、ユーザ関数からの戻り値である%i0にコピーする;
・ 現在のウィンドウポインタを、遷移ウィンドウに先立ってウィンドウに動かし、確保されたウィンドウビットをWIM内で適切にシャッフルする。これによりCWPを遷移ウィンドウより前にスーパーバイザウィンドウに動かし、上記で「内部」レジスタに書かれた値が現在「外部」レジスタにあることを意味する。このウィンドウは、この時点ではまだメモリ内にあるはずである点に注意されたい;このウィンドウは復元される必要がある;
・ 保存されたスーパーバイザウィンドウに対応する「ノーマル」レコードである、次のレコードをウィンドウスタックから取り出す;
・ 「内部」及び「ローカル」レジスタを復元する、保存されたスーパーバイザウィンドウを復元する。「外部」レジスタ内の値(上からの戻り値など)は上書きされない;
・ 最初にcallUserFunctionを呼び出したスーパーバイザコードにジャンプし、そのアドレスは復元されたスーパーバイザウィンドウの%o7を介して入手できる。
【0099】
上記の例では、ウィンドウスタックが、格納されているウィンドウのタイプ、即ち、遷移ウィンドウのための「遷移」レコード及び非遷移ウィンドウのための「ノーマル」レコードに関連するフラッグを記録するために使用される。このようにして、遷移ウィンドウの位置がオーバーフロー及びアンダーフローを通じて維持され、スーパーバイザモードとユーザモードとの間の遷移の結果、機密データがユーザコードにとってアクセス可能になるということはない。これは、トラップから返す前にすべてのレジスタウィンドウを上書きすることによって更に確実にされる。
【0100】
或いは、又は更に、それぞれの使用済みレジスタウィンドウがラベルを付けられ、対応する復元のために使用されるために、%o6値がレジスタオーバーフロー上に格納される。このようにして、オーバーフロー及びアンダーフローが発生すると、%o6値を検査及び確認して、レジスタウィンドウがユーザモードに属しているか、又はスーパーバイザモードに属しているかがわかる。
【0101】
例えば、ラベルは、実行のスレッドのための可能性のあるあらゆるレジスタウィンドウ用の一意の数値ラベルとして割り当てられ、ゼロから始まりセーブ及び/又は関数ごとに単調に増加する。ラベルは、オーバーフロー及びアンダーフローが発生するときにラベルの場所のレコードを付けることによって、前述のフラッグレコードと同様に使用される。
【0102】
即ち、確保されたウィンドウに割り当てられた現在のラベル、及び確保されたウィンドウのウィンドウ番号のレコードを付けることができる。これは、オーバーフロー及びアンダーフロールーチンが確保されたウィンドウをシフトするたびにアップデートされ、オーバーフローはラベルを増加させ、アンダーフローはラベルを減少させる。
【0103】
例えば、スレッド初期設定時に確保されたウィンドウのラベルが8に設定され、ウィンドウ番号が0に設定される。このレコードは、何らかのスレッド特有のスーパーバイザRAM内に保持されるか、又は確保されたウィンドウ(ユーザコードはアクセスできない)の「ローカル」レジスタ内に保留されうる。この場合、アンダーフロー及びオーバーフロートラップが、確保されたウィンドウをシフトするにつれて、値をシフトする。次いで、現在のウィンドウのラベル(L)は、L=確保されたウィンドウラベル−((CWP−確保されたウィンドウ番号);(N−1)とビット単位でAND演算、Nはレジスタウィンドウの番号)として計算されうる。
【0104】
ラベルは、オーバーフロー及びアンダーフローイベント時にそれぞれのレジスタウィンドウのための追加の状態にアクセスするためにも使用されうる。追加の状態は、保存されたスタックポインタ、例えば%o6を、ウィンドウ及びウィンドウのモードのために含む。モードはウィンドウがスーパーバイザモードで実行しているかどうか識別し、更にウィンドウが割り込み及びモード変化で実行しているかどうか識別できる。前述のフラッグレコード同様、これによりレジスタウィンドウがユーザモード又はスーパーバイザモードのどちらに属しているかに関するレコードが提供される。この場合、現在のウィンドウのためのラベルは、L=保存すべき次のラベル+((CWP+保存すべき次のラベル)N−1;(N−1)とビット単位でAND演算、Nはレジスタウィンドウの番号)として計算することができ、ここでは、「保存すべき次のラベル」変数は、次のレジスタウィンドウがオーバーフローするためのラベルを含み、オーバーフロー及びアンダーフローの順序正しい処理を補助する。
【0105】
追加の状態の情報は、オーバーフロー及びアンダーフローがラベルレコードの一部として発生するときに、ウィンドウスタック内のスタックポインタ及びモードのレコードにインデックスを付けることによってアクセスされる。これは、前述の通り、確保されたウィンドウのためだけに、又はすべてのレジスタウィンドウのために行われうる。このようにして、ユーザモードとスーパーバイザモードとの間の遷移を越える復元が識別され、例えば前述の方法でユーザモード内に残るものを復元するのとは異なる方法で処理されうる。したがって、スーパーバイザモードの機密データをユーザコードのアクセスから保護する。
【0106】
当然、本発明は単に例として説明されており、添付の特許請求の範囲によって定義される本発明の範囲内で詳細の修正がされてよいことが理解されるであろう。

【特許請求の範囲】
【請求項1】
プロセッサのレジスタウィンドウアーキテクチャ内でスーパーバイザモードデータをユーザコードから保護するためのシステムであって、
スーパーバイザモードからユーザモードに遷移する際、無効ウィンドウマスクの確保されたウィンドウのために設定される無効ウィンドウビットに加えて、少なくとも1つの無効ウィンドウビットを前記アーキテクチャの前記無効ウィンドウマスク内に追加設定することを特徴とし、
前記追加設定されるビットは、スーパーバイザデータウィンドウとユーザデータウィンドウとの間の遷移ウィンドウのために設定される、システム。
【請求項2】
前記プロセッサの前記レジスタウィンドウアーキテクチャがSPARC(商標)レジスタウィンドウアーキテクチャである、請求項1に記載のシステム。
【請求項3】
前記プロセッサがプリンタのための印刷エンジン内に組み込まれている、請求項1に記載のシステム。
【請求項4】
前記無効ウィンドウマスク内の追加の無効ウィンドウビットの位置が、前記遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローとは独立して維持されている、請求項1に記載のシステム。
【請求項5】
前記システムは、さらに、スーパーバイザモードスタックとユーザモードスタックとを別々に備える、請求項1に記載のシステム。
【請求項6】
前記スーパーバイザモードスタックは、スーパーバイザモードだけがアクセス可能なメモリ内に格納され、前記ユーザモードスタックは、ユーザモードがアクセス可能なメモリ内に格納される、請求項5に記載のシステム。
【請求項7】
ユーザモードからスーパーバイザモードへの遷移が発生するたびに、現在のスタックポインタがスーパーバイザスタックにスイッチされ、
スーパーバイザモードからユーザモードへの遷移が発生するたびに、前記現在のスタックポインタがユーザスタックにスイッチされる、
請求項6に記載のシステム。
【請求項8】
前記遷移ウィンドウに関する情報が、前記遷移ウィンドウでのウィンドウオーバーフロー及びアンダーフローの際、前記スーパーバイザスタック内に記録される、請求項6に記載のシステム。
【請求項9】
前記システムは、さらに、前記スーパーバイザモードだけがアクセス可能なメモリ内に格納されたウィンドウスタックを備え、
前記遷移ウィンドウに関する情報が、前記遷移ウィンドウでのウィンドウオーバーフロー及びアンダーフローの際、前記ウィンドウスタック内に記録される、請求項6に記載のシステム。
【請求項10】
非遷移ウィンドウに関する情報が、前記非遷移ウィンドウでのウィンドウオーバーフロー及びアンダーフローの際、前記ウィンドウスタック内に記録される、請求項9に記載のシステム。
【請求項11】
それぞれのレジスタウィンドウに、ゼロから始まりセーブするたびに単調に増加する一意の数値ラベルが割り当てられる、請求項6に記載のシステム。
【請求項12】
前記確保されたウィンドウに割り当てられた現在のラベルのレコードは前記確保されたウィンドウのローカルレジスタ内で保持され、そのレコードが、前記確保されたウィンドウでウィンドウオーバーフロー及びアンダーフローが発生するとアップデートされる、請求項11に記載のシステム。
【請求項13】
前記スーパーバイザモードだけがアクセス可能なメモリ内に格納されたウィンドウスタックを更に備え、前記ラベルが、前記確保されたウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、少なくとも前記ウィンドウスタック内の前記確保されたウィンドウの前記スタックポインタのレコードにインデックスを付けるために使用される、請求項11に記載のシステム。
【請求項14】
前記ラベルが、それぞれのウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際、前記ウィンドウスタック内のそれぞれのウィンドウの前記スタックポインタのレコードにインデックスを付けるために使用される、請求項13に記載のシステム。
【請求項15】
前記ラベルが現在のウィンドウポインタに基づいて計算される、請求項11に記載のシステム。
【請求項16】
スーパーバイザコードからユーザコードに遷移する際、呼出し関数が、前記現在のウィンドウポインタを前記遷移ウィンドウの後ろに位置する前記ユーザウィンドウに動かすためにセーブを発行し、少なくとも前記現在のウィンドウから前記確保されたウィンドウまでのスーパーバイザコードデータを含む前記ウィンドウ内の前記レジスタを上書きする、請求項1に記載のシステム。
【請求項17】
前記呼出し関数が前記現在のウィンドウから前記確保されたウィンドウまでのすべてのウィンドウ内の前記レジスタを上書きする、請求項16に記載のシステム。
【請求項18】
前記呼出し関数がスーパーバイザコードデータを含む前記プロセッサのすべてのレジスタを上書きする、請求項17に記載のシステム。
【請求項19】
前記遷移ウィンドウ内の前記レジスタが、前記遷移ウィンドウにおけるウィンドウオーバーフロー及びアンダーフローの際に上書きされる、請求項1に記載のシステム。
【請求項20】
ユーザコードからスーパーバイザコードに遷移する際、ウィンドウアンダーフロートラップルーチンが、前記現在のウィンドウポインタを、前記遷移ウィンドウに先立って前記スーパーバイザウィンドウに動かすために復元を発行する、請求項1に記載のシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公表番号】特表2009−543234(P2009−543234A)
【公表日】平成21年12月3日(2009.12.3)
【国際特許分類】
【出願番号】特願2009−518674(P2009−518674)
【出願日】平成18年7月10日(2006.7.10)
【国際出願番号】PCT/AU2006/000971
【国際公開番号】WO2008/006130
【国際公開日】平成20年1月17日(2008.1.17)
【出願人】(303024600)シルバーブルック リサーチ ピーティワイ リミテッド (150)
【Fターム(参考)】