(57)【要約】【課題】ブート・コードのサイズがランダムアクセス可能なバッファの記憶容量を超える場合でもＣＰＵが直接読み込んで実行可能とする。【解決手段】ＮＡＮＤ型フラッシュ・メモリ１００のストレージ部１１０から、このフラッシュ・メモリ１００に設けられＣＰＵ２００からランダムアクセス可能なバッファ部１２０に、コードＢ０を読み込む。そして、バッファ部１２０に読み込まれたコードＢ０を実行することにより、コードＢ１をキャッシュ・メモリ２１０に保持する。そして、キャッシュされたコードＢ１を実行することにより、ブート・コードであるコードＡＰＰをストレージ部１１０からバッファ部１２０に読み込み、ベース・アドレスを変更してキャッシュ・メモリに保持する。そして、コードＢ１からコードＡＰＰにジャンプし、キャッシュされたコードＡＰＰを順次実行する。【選択図】図１１
2010134741.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータがプログラムを実行する方法であって、
所定の記録装置の記録媒体から、当該記録装置に設けられ前記コンピュータからランダムアクセス可能なバッファに、第１コードを読み込むステップと、
前記バッファに読み込まれた前記第１コードを実行することにより、第２コードをキャッシュ・メモリに保持するステップと、
前記キャッシュ・メモリに保持された前記第２コードを実行することにより、第３コードを前記記録媒体から前記バッファに読み込み、当該第３コードのベース・アドレスを前記第２コードのベース・アドレスとは異なるアドレスに変更して前記キャッシュ・メモリに保持するステップと、
を含む、方法。
【請求項２】
前記コンピュータは、前記第１コードを実行することにより前記第２コードを前記キャッシュ・メモリに保持した際および当該第２コードを実行することにより前記第３コードを当該キャッシュ・メモリに保持した際に、当該コードを当該キャッシュ・メモリにロックする、請求項１に記載の方法。
【請求項３】
前記第２コードを実行することにより前記第３コードを前記キャッシュ・メモリに保持した後、当該キャッシュ・メモリに保持された当該第３コードを実行するステップをさらに含む、請求項１または請求項２に記載の方法。
【請求項４】
コンピュータがプログラムを実行する方法であって、
ＮＡＮＤ型フラッシュ・メモリのストレージ部から、当該ＮＡＮＤ型フラッシュ・メモリに設けられ前記コンピュータからランダムアクセス可能なバッファに、第１コードを読み込むステップと、
前記バッファに読み込まれた前記第１コードを実行することにより、第２コードをキャッシュ・メモリに保持してロックするステップと、
前記キャッシュ・メモリに保持された前記第２コードを実行することにより、第３コードを前記ストレージ部から前記バッファに読み込み、当該第３コードのベース・アドレスを前記第２コードのベース・アドレスとは異なるアドレスに変更して前記キャッシュ・メモリに保持してロックするステップと、
前記キャッシュ・メモリに保持された前記第３コードを実行するステップと、
を含む、方法。
【請求項５】
プログラムを格納したフラッシュ・メモリと、
前記フラッシュ・メモリに格納されているプログラムを読み込んで実行するプロセッサとを備え、
前記フラッシュ・メモリは、
前記プログラムを保持するストレージ部と、
前記プログラムを前記ストレージ部から読み込んで一時的に保持するバッファ部とを備え、
前記プロセッサは、前記プログラムを、前記フラッシュ・メモリの前記バッファ部に読み込まれた部分ごとに異なるベース・アドレスを設定してキャッシュ・メモリに保持する、システム。
【請求項６】
前記プロセッサは、前記フラッシュ・メモリの前記バッファ部から最初にキャッシュ・メモリに保持したプログラムを実行することにより、前記バッファ部に読み込まれる前記プログラムを、前記ベース・アドレスを変更して前記キャッシュ・メモリに保持する、請求項５に記載のシステム。
【請求項７】
前記プロセッサは、電源を投入されたときに、前記フラッシュ・メモリの前記バッファ部に読み込まれたプログラムを実行する、請求項５または請求項６に記載のシステム。
【請求項８】
コンピュータに、
プログラムを読み込ませてキャッシュ・メモリに保持させる機能と、
前記キャッシュ・メモリに保持される当該プログラムのベース・アドレスを、既に当該キャッシュ・メモリに保持されている他のプログラムのベース・アドレスとは異なるように変更する機能と、
を実現させる、プログラム。
【請求項９】
プログラムを保持するストレージ部と、
コンピュータがランダムアクセス可能なバッファ部とを備え、
前記ストレージ部は、
電源を投入されたときに、最初に前記ストレージ部から前記バッファ部に読み込まれ、前記コンピュータに、他のプログラムを当該コンピュータのキャッシュ・メモリに保持させる第１プログラムと、
前記コンピュータが前記第１プログラムを実行することにより当該コンピュータのキャッシュ・メモリに保持され、前記コンピュータに、さらに他のプログラムを、既に当該キャッシュ・メモリに保持されているプログラムのベース・アドレスとは異なるように変更して当該キャッシュ・メモリに保持させる第２プログラムと、
前記コンピュータが前記第２プログラムを実行することにより当該コンピュータのキャッシュ・メモリに保持される第３プログラムと、
を保持する、記録装置。
【請求項１０】
前記第２プログラムは、前記第３プログラムが前記キャッシュ・メモリに保持された後、前記コンピュータに、当該第３プログラムを実行させる、請求項９に記載の記録装置。
【請求項１１】
前記ストレージ部は、ＮＡＮＤ型フラッシュ・メモリで構成された、請求項９または請求項１０に記載の記録装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、起動時等の電源が投入された際に、コンピュータがプログラムを読み込んで実行する方法およびこの方法を行うシステム等に関する。
【背景技術】
【０００２】
コンピュータの起動時には、ハードウェアの初期化および検査が行われた後、外部記憶装置に格納されているオペレーティングシステム（ＯＳ）をメイン・メモリに読み込んでＣＰＵ（Central Processing Unit）が実行できるようにするための一連の手順による処理が実行される。一般に、ＣＰＵは、メモリ上の実行コードしか実行できないため、まず不揮発性メモリに格納された小さなプログラムを読み込んで実行する。そして、このプログラムを実行することにより、より大きなプログラムあるいはＯＳ自体をメイン・メモリに読み込む。以下、このようなコンピュータの起動時に多段階でプログラムを読み込む処理をブート処理と呼び、最初に読み込まれるプログラムをブート・コードと呼ぶ。
【０００３】
ブート・コードを格納する不揮発性メモリとしては、従来、ＲＯＭ（Read Only Memory、ＥＰＲＯＭ、ＥＥＰＲＯＭ等も含む）が用いられていたが、近年、フラッシュ・メモリも普及しつつある。ブート・コードの格納媒体としてフラッシュ・メモリを用いる場合、ＲＯＭと同様にランダムアクセスが容易で格納しているコードを直接実行可能なＮＯＲ型フラッシュ・メモリが用いられるのが一般的であった。これに対し、集積度に優れ、安価なＮＡＮＤ型フラッシュ・メモリをブート・コードの格納媒体として用いるための技術も存在する（例えば、特許文献１参照）。
【０００４】
特許文献１には、データ・レジスタを備え、フラッシュ・メモリに格納されたブート・ハンドラ・コードおよびブート・ストラップ・ローダ・コードをデータ・レジスタにローディングし、中央処理装置がデータ・レジスタにローディングされたブート・ハンドラ・コードを実行し、ブート・ストラップ・ローダ・コードをデータ・レジスタからシステム・メモリにローディングする技術が開示されている。この技術では、コードを一度、データ・レジスタにローディングすることで、ＣＰＵによる直接実行が可能となっている。
【０００５】
【特許文献１】特開２００４−１１８８２６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
フラッシュ・メモリにＣＰＵがランダムアクセス可能なバッファ（上記特許文献１ではデータ・レジスタ）を設け、このバッファにブート・コードを置くことによって、ＮＡＮＤ型フラッシュ・メモリをブート・コードの格納媒体として用いた場合でも、特別なハードウェア・モジュールを必要とせずにブート処理を行うことが可能となる。
【０００７】
しかし、この構成では、最初にＣＰＵに読み込まれるブート・コードのデータ・サイズは、バッファの記憶容量以下でなければならない。ブート・コードを実行することで実現される機能には、上記のハードウェアの初期化および検査が含まれる。コンピュータのハードウェア構成によっては、この初期化および検査の処理を行うために必要なプログラムのサイズが大きく、バッファの記憶容量を超えてしまうことが考えられる。例えば、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）等の高速なメモリは、電源起動時にアクセスタイミングの調整を行わなければならないため、この調整を含む初期化処理のために一定量のプログラムが必要である。そして、ブート・コードのサイズがバッファの記憶容量を超えてしまうと、上記の構成でブート・コードをＣＰＵが直接読み込んで実行することはできない。
【０００８】
本発明は、上記の課題を解決し、ブート・コードのサイズがバッファの記憶容量を超える場合でもＣＰＵが直接読み込んで実行可能とすることを目的とする。
【課題を解決するための手段】
【０００９】
上記の目的を達成するため、本発明は、次のようなプログラム実行方法として実現される。この方法は、ＮＡＮＤ型フラッシュ・メモリのストレージ部から、このＮＡＮＤ型フラッシュ・メモリに設けられコンピュータからランダムアクセス可能なバッファに、第１コードを読み込むステップと、バッファに読み込まれた第１コードを実行することにより、第２コードをキャッシュ・メモリに保持してロックするステップと、キャッシュ・メモリに保持された第２コードを実行することにより、第３コードをストレージ部からバッファに読み込み、この第３コードのベース・アドレスを第２コードのベース・アドレスとは異なるアドレスに変更してキャッシュ・メモリに保持してロックするステップと、第３コードを実行するステップと、を含む。
【００１０】
また、本発明は、プログラムを格納したフラッシュ・メモリと、フラッシュ・メモリに格納されているプログラムを読み込んで実行するプロセッサとを備えたシステムとしても実現される。このシステムにおいて、フラッシュ・メモリは、プログラムを保持するストレージ部と、プログラムをストレージ部から読み込んで一時的に保持するバッファ部とを備える。そして、プロセッサは、プログラムを、フラッシュ・メモリのバッファ部に読み込まれた部分ごとに異なるベース・アドレスを設定してキャッシュ・メモリに保持する。
【００１１】
また、本発明は、コンピュータに、プログラムを読み込ませてキャッシュ・メモリに保持させる機能と、キャッシュ・メモリに保持されるプログラムのベース・アドレスを、既にキャッシュ・メモリに保持されている他のプログラムのベース・アドレスとは異なるように変更する機能と、を実現させるプログラムとしても実現される。
【００１２】
さらに本発明は、プログラムを保持するストレージ部と、コンピュータがランダムアクセス可能なバッファ部とを備えた記録装置としても実現される。この記録装置において、ストレージ部は、次のような第１コード（プログラム）、第２コード（プログラム）、第３コード（プログラム）を保持する。第１コードは、電源を投入されたときに、最初にストレージ部からバッファ部に読み込まれ、コンピュータに、他のプログラムを当該コンピュータのキャッシュ・メモリに保持させる。第２コードは、コンピュータが第１コードを実行することによりコンピュータのキャッシュ・メモリに保持され、コンピュータに、さらに他のプログラムを、既にキャッシュ・メモリに保持されているプログラムのベース・アドレスとは異なるように変更してキャッシュ・メモリに保持させる。第３コードは、コンピュータが第２コードを実行することによりコンピュータのキャッシュ・メモリに保持される。
【発明の効果】
【００１３】
本発明によれば、ブート・コードのサイズがバッファの記憶容量を超える場合でもＣＰＵが直接読み込んで実行することができる。
【発明を実施するための最良の形態】
【００１４】
以下、添付図面を参照して、本発明の実施形態について詳細に説明する。
＜システム構成＞
図１は、本実施形態が適用されるプログラム実行システムの構成例を示す図である。
図１に示すように、本実施形態のプログラム実行システムは、プログラムを格納したフラッシュ・メモリ１００と、フラッシュ・メモリ１００からプログラムを読み出して実行するＣＰＵ２００とを備える。
【００１５】
フラッシュ・メモリ１００は、データを格納しているストレージ部１１０と、ＣＰＵ２００によるランダムアクセスが可能なバッファ部１２０とを備える。ストレージ部１１０は、フラッシュ・メモリ１００のメモリ・セル・アレイで構成される。ストレージ部１１０に格納されるプログラムにはブート・コードが含まれる。ストレージ部１１０の記憶領域にはいくつかのベース・アドレスが設定されている。ストレージ部１１０に格納されているプログラムは、このベース・アドレスと、ベース・アドレスからの相対的な位置を表すオフセット・アドレスとを用いて特定される。
【００１６】
バッファ部１２０は、例えば、ＳＲＡＭ（Static Random Access Memory）で構成される。コンピュータの起動時には、ブート・コードがストレージ部１１０からバッファ部１２０に読み込まれ、ＣＰＵ２００がバッファ部１２０から直接、ブート・コードを読み取って実行する。バッファ部１２０の記憶容量は特に制限されないが、実際にはコストや物理サイズの制約のため、それほど大容量のメモリを用いることはできない。この種の既存のフラッシュ・メモリでは、通常、１ＫＢ（キロバイト）から４ＫＢ程度のメモリが用いられている。
【００１７】
ＣＰＵ２００は、キャッシュ・メモリ２１０と、ベース・アドレス・レジスタ２２０とを備える。キャッシュ・メモリ２１０は、例えば、ＳＲＡＭで構成される。このキャッシュ・メモリ２１０は、ラインと呼ばれる小領域単位でデータを管理する。キャッシュ・メモリ２１０における個々のラインは、フラッシュ・メモリ１００のストレージ部１１０のベース・アドレスに対応付けられる。そして、同一のベース・アドレスから読み出されたデータは、キャッシュ・メモリ２１０において同一のラインに保持される。キャッシュ・メモリ２１０のラインとフラッシュ・メモリ１００のストレージ部１１０のベース・アドレスとの対応関係は、ベース・アドレス・レジスタ２２０に保持される。
【００１８】
＜ブート・コードの構成と機能＞
次に、フラッシュ・メモリ１００のストレージ部１１０に格納されるブート・コードの構成および機能について説明する。
図２は、本実施形態のブート・コードの構成例を示す図である。
本実施形態では、コードＢ０、コードＢ１、コードＡＰＰの３種類のコードが用意される。第１コードであるコードＢ０と第２コードであるコードＢ１とは、両方合わせたサイズが、フラッシュ・メモリ１００のバッファ部１２０の記憶容量以下である。そして、これらのプログラム（コードＢ０およびコードＢ１）は、フラッシュ・メモリ１００に電源が投入された際に、最初にバッファ部１２０に読み込まれる。第３コードであるコードＡＰＰは、バッファ部１２０の記憶容量を超えるサイズであり、バッファ部１２０の記憶容量に対応するサイズごとにｎ個（＃１〜＃ｎ）に分けられている。
【００１９】
コードＢ０は、フラッシュ・メモリ１００のバッファ部１２０に保持された状態で、ＣＰＵ２００により直接実行される。ＣＰＵ２００は、コードＢ０を実行することにより、コードＢ０と共にバッファ部１２０に保持されているコードＢ１をＣＰＵ２００のキャッシュ・メモリ２１０に保持し、ロックする。そして、キャッシュしたコードＢ１を実行する。
【００２０】
コードＢ１は、キャッシュ・メモリ２１０に保持された状態でＣＰＵ２００により実行される。ＣＰＵ２００は、コードＢ１を実行することにより、コードＡＰＰ＃１〜＃ｎをストレージ部１１０からバッファ部１２０に順次読み込み、ベース・アドレスを変更してキャッシュ・メモリ２１０に保持し、ロックする。すなわち、コードＡＰＰ＃１〜＃ｎの各々は、コードＢ１および他のコードＡＰＰと異なるベース・アドレスに設定されてキャッシュされる。上記のように、キャッシュ・メモリ２１０のラインは、フラッシュ・メモリ１００のストレージ部１１０のベース・アドレスに対応付けられる。したがって、各コードＡＰＰ＃１〜＃ｎのベース・アドレスが異なるように操作してキャッシュすることで、コードＡＰＰ＃１〜＃ｎを全てキャッシュすることができる。また、コードＢ１は、データコードＡＰＰ＃１〜＃ｎが全てキャッシュされた後、これらを順次実行する。
【００２１】
コードＡＰＰ＃１〜＃ｎは、既存のシステムにおけるブート・コードに相当する部分である。ただし、本実施形態において、ＣＰＵ２００がコードＢ１を実行することによってキャッシュされるときには、このコードは単なるデータとして扱われるため、コードＡＰＰと呼ぶ。コードＡＰＰの全体のサイズは、バッファ部１２０の記憶容量よりも大きく、キャッシュ・メモリ２１０の記憶容量以下である。コードＡＰＰ＃１からコードＡＰＰ＃ｎまで全てキャッシュ・メモリ２１０に保持された後、ブート・コードとして順次実行される。
【００２２】
＜ブート処理の手順＞
次に、本実施形態によるブート処理の手順について説明する。
図３乃至図１０は、上述した本実施形態のブート・コードがバッファ部１２０に読み込まれ、キャッシュされる様子を示す図である
図３乃至図１０に示す例では、コードＡＰＰにおいてｎ＝２の場合、すなわちコードＡＰＰ＃１とコードＡＰＰ＃２がキャッシュされる場合について説明する。
【００２３】
フラッシュ・メモリ１００に電源が投入されると、図３に示すように、まず、コードＢ０およびコードＢ１がバッファ部１２０に読み込まれる。ＣＰＵ２００は、バッファ部１２０に保持されたコードＢ０を実行して、コードＢ１をキャッシュ・メモリ２１０に保持し、ロックする。そして、コードＢ０からコードＢ１へジャンプし、コードＢ１を実行する。
【００２４】
次に、ＣＰＵ２００は、コードＢ１を実行することにより、図４に示すように、バッファ部１２０のベース・アドレスを変更する。そして、図５に示すように、ベース・アドレスが変更されたバッファ部１２０にコードＡＰＰ＃１を読み込む。次に、ＣＰＵ２００は、図６に示すように、コードＡＰＰ＃１をキャッシュ・メモリ２１０に保持し、ロックする。
【００２５】
次に、ＣＰＵ２００は、コードＢ１を実行することにより、図７に示すように、バッファ部１２０のベース・アドレスを変更する。そして、図８に示すように、ベース・アドレスが変更されたバッファ部１２０にコードＡＰＰ＃２を読み込む。次に、ＣＰＵ２００は、図９に示すように、コードＡＰＰ＃２をキャッシュ・メモリ２１０に保持し、ロックする。
【００２６】
コードＡＰＰが全て（ここではコードＡＰＰ＃１、＃２）キャッシュされると、ＣＰＵ２００は、図１０に示すように、コードＢ１からコードＡＰＰ＃１へジャンプし、コードＡＰＰ＃１、＃２を、ブート・コードとして順に実行する。
【００２７】
図１１は、本実施形態によるブート処理におけるＣＰＵ２００の動作を示すフローチャートである。
図１１に示すように、ＣＰＵ２００は、まずフラッシュ・メモリ１００のバッファ部１２０に保持されているコードＢ０を実行する（ステップ１１０１）。これにより、コードＢ１がキャッシュされる。次に、ＣＰＵ２００は、キャッシュしたコードＢ１を実行する（ステップ１１０２）。これにより、コードＡＰＰ＃１〜＃ｎに対して、以下のステップ１１０３からステップ１１０５までの処理が行われる。
【００２８】
ＣＰＵ２００は、まず、バッファ部１２０のベース・アドレスを変更する（ステップ１１０３）。そして、対象のコードＡＰＰをバッファ部１２０に読み込み（ステップ１１０４）、キャッシュ・メモリ２１０に保持する（ステップ１１０５）。
【００２９】
全てのコードＡＰＰ＃１〜＃ｎがキャッシュされた後、ＣＰＵ２００は、コードＢ１からコードＡＰＰ＃１へジャンプし（ステップ１１０６）、キャッシュされているコードＡＰＰ＃１〜＃ｎを順に実行する（ステップ１１０７）。
【００３０】
以上、本実施形態について説明したが、本発明の技術的範囲は上記実施形態に記載の範囲には限定されない。例えば、上記実施形態では、キャッシュ・メモリ２１０として命令キャッシュ（Instruction Cache）を用い、ブート・コードをキャッシュして実行する例について説明したが、キャッシュ・メモリ２１０としてデータ・キャッシュ（Data Cache）を用いてデータをキャッシュする場合にも適用できる。この場合、本実施形態のコードＡＰＰに対応するデータがデータ・キャッシュに保持されることとなる。そして、コードＢ１は、上記実施形態と同様に命令キャッシュに保持されるので、データ・キャッシュには保持されない。またこの場合、キャッシュされるデータは、実際にはブート・コードであるコードＡＰＰと異なり、プログラムの実行に伴って呼び出されるものであるので、コードＢ１からジャンプして順次実行されることはない。
【００３１】
また、上記実施形態では、ブート・コードであるコードＡＰＰのサイズがキャッシュ・メモリ２１０の記憶容量以下であり、コードＡＰＰが全てキャッシュ・メモリ２１０に保持されるものとして説明した。これに対し、コードＡＰＰのサイズがキャッシュ・メモリ２１０の記憶容量を超える場合、キャッシュ・メモリ２１０に蓄積されたブート・コードを実行した後に、新たなコードＡＰＰをキャッシュするようにベース・アドレスの設定を制御することで対応することが可能である。その他、上記実施形態に、種々の変更または改良を加えたものも、本発明の技術的範囲に含まれることは、特許請求の範囲の記載から明らかである。
【図面の簡単な説明】
【００３２】
【図１】本実施形態が適用されるプログラム実行システムの構成例を示す図である。
【図２】本実施形態のブート・コードの構成例を示す図である。
【図３】本実施形態のブート・コードがバッファ部に読み込まれ、キャッシュされる様子を示す図であり、コードＢ１をキャッシュする様子を示す図である。
【図４】本実施形態のブート・コードがバッファ部に読み込まれ、キャッシュされる様子を示す図であり、ベース・アドレスを変更する様子を示す図である。
【図５】本実施形態のブート・コードがバッファ部に読み込まれ、キャッシュされる様子を示す図であり、コードＡＰＰ＃１をバッファ部に読み込む様子を示す図である。
【図６】本実施形態のブート・コードがバッファ部に読み込まれ、キャッシュされる様子を示す図であり、コードＡＰＰ＃１をキャッシュする様子を示す図である。
【図７】本実施形態のブート・コードがバッファ部に読み込まれ、キャッシュされる様子を示す図であり、ベース・アドレスを変更する様子を示す図である。
【図８】本実施形態のブート・コードがバッファ部に読み込まれ、キャッシュされる様子を示す図であり、コードＡＰＰ＃２をバッファ部に読み込む様子を示す図である。
【図９】本実施形態のブート・コードがバッファ部に読み込まれ、キャッシュされる様子を示す図であり、コードＡＰＰ＃２をキャッシュする様子を示す図である。
【図１０】本実施形態において、キャッシュされたコードＡＰＰが実行される様子を示す図である。
【図１１】本実施形態によるブート処理におけるＣＰＵの動作を示すフローチャートである。
【符号の説明】
【００３３】
１００…フラッシュ・メモリ、１１０…ストレージ部、１２０…バッファ部、２００…ＣＰＵ、２１０…キャッシュ・メモリ、２２０…ベース・アドレス・レジスタ
【図１】
2010134741.tif 000003
【図２】
2010134741.tif 000004
【図３】
2010134741.tif 000005
【図４】
2010134741.tif 000006
【図５】
2010134741.tif 000007
【図６】
2010134741.tif 000008
【図７】
2010134741.tif 000009
【図８】
2010134741.tif 000010
【図９】
2010134741.tif 000011
【図１０】
2010134741.tif 000012
【図１１】
2010134741.tif 000013