説明

情報処理装置及びその制御方法

【課題】仮想メモリ領域を管理するオペレーティングシステムを実行する第1制御手段と第1制御手段と通信可能な第2制御手段を有する情報処理装置において、オペレーティングシステムにより管理される仮想メモリ領域の管理外の記憶手段に記憶されたデータ対して、第1制御手段が高速にアクセスする。
【解決手段】第1のCPU201は、キャッシュに対応する物理メモリの仕様情報を作成して第2のCPU221へ転送し(S904)、第2のCPU221は、その仕様情報に従って第1のCPU201が参照するキャッシュに対応する物理メモリ203に対して、デバイスに記録されているデータを転送する(S910)。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数のCPUを搭載した情報処理装置及びその制御方法に関するものである。
【背景技術】
【0002】
情報処理装置に用いられる記憶装置としてフラッシュメモリ等に代表される不揮発メモリがある。不揮発メモリは、電源供給が遮断されても記憶しているデータを保持できるため、組み込み機器等において不意な電源断等に対処するように使用される。
【0003】
特許文献1には、主メモリ上へキャッシュを応用した発明が記載されている。また特許文献2には、アクセス速度が高速なバッファと低速な不揮発メモリと制御コントローラとを有するユニットで、アクセス速度が低速な不揮発メモリに記憶されたデータをアクセス速度が高速なバッファにキャッシュすることで、高速に不揮発メモリに記憶されたデータを読み出す技術が開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2001−147855号公報
【特許文献2】特開平7−244614号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、第1制御手段と第2制御手段とを有し、第1制御手段が仮想メモリ領域を管理するオペレーティングシステムで制御されている場合、第2制御手段は仮想メモリ領域に直接アクセスすることができない。このため、第1制御手段により実行されるオペレーティングシステムが、仮想メモリ領域を使用する場合には、第2制御手段が第1制御手段が定義したキャッシュ領域へデータを転送することができない事態が発生する。
【0006】
本発明は、上述した従来技術の問題点を解決するためになされたものである。
【0007】
本発明の目的は、仮想メモリ領域を管理するオペレーティングシステムを実行する第1制御手段と第1制御手段と通信可能な第2制御手段を有する情報処理装置において、オペレーティングシステムにより管理される仮想メモリ領域の管理外の記憶手段に記憶されたデータ対して、第1制御手段が高速にアクセスできる技術を提供することにある。
【課題を解決するための手段】
【0008】
上記目的を達成するために本発明の一態様に係る情報処理装置は以下のような構成を備える。即ち、
データを記憶する第1記憶手段と、
データを記憶する第2記憶手段と、
前記第1記憶手段と第1バスを介して接続され、前記第2記憶手段に対する第1キャッシュ領域を含む仮想メモリ領域を管理するオペレーティングシステムを実行し、前記第1キャッシュ領域にアクセスすることで前記第2記憶手段に記憶されたデータを取得する第1制御手段と、
前記第2記憶手段と第2バスを介して接続され、前記第1制御手段と通信可能な第2制御手段と、
前記オペレーティングシステムを起動する際に、前記第1キャッシュ領域と前記第1記憶手段に設けられた前記第2記憶手段に対する第2キャッシュ領域との対応関係を示す仕様情報を作成する作成手段を有し、
前記第1制御手段は、前記第2制御手段からの要求に応じて前記第2キャッシュ領域を示す領域情報を前記第2制御手段へ転送し、
前記第2制御手段は、前記領域情報に基づいて前記第2記憶手段に記憶されたデータを前記第2キャッシュ領域へ転送することを特徴とする。
【発明の効果】
【0009】
本発明によれば、仮想メモリ領域を管理するオペレーティングシステムを実行する第1制御手段と第1制御手段と通信可能な第2制御手段を有する情報処理装置において、オペレーティングシステムにより管理される仮想メモリ領域の管理外の記憶手段に記憶されたデータ対して、第1制御手段が高速にアクセスできる技術を提供することができる。
【図面の簡単な説明】
【0010】
【図1】本発明の実施形態に係るコントローラが搭載された画像入出力装置(情報処理装置)の機能構成を示すブロック図である。
【図2】本実施形態に係る画像入出力装置のコントローラ3のハードウェア構成を説明するブロック図である。
【図3】本実施形態に係る画像入出力装置の2つのCPUのブートシーケンスを説明するフローチャートである。
【図4】本実施形態に係る画像入出力装置の記憶部に格納されているデータのイメージを示す図である。
【図5】本実施形態に係る画像入出力装置のメインCPUのメモリアクセス速度を説明するための図である。
【図6】本実施形態に係るメインCPUが不揮発メモリをハンドリングする方法を説明する図である。
【図7】本実施形態に係るバスコントローラが管理するメモリ空間を説明する図である。
【図8】本実施形態に係る物理メモリのブロック仕様の一例を示す図である。
【図9】本実施形態に係る画像入出力装置の2つのCPUによるブート処理を説明するフローチャートである。
【図10】本実施形態に係る画像入出力装置の2つのCPUによる不揮発メモリの書き換え処理を説明するフローチャートである。
【図11】本実施形態に係る2つのCPUの動作を説明するタイミング図である。
【発明を実施するための形態】
【0011】
以下、添付図面を参照して本発明の実施形態を詳しく説明する。尚、以下の実施形態は特許請求の範囲に係る本発明を限定するものでなく、また本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。
【0012】
図1は、本発明の実施形態に係るコントローラが搭載された画像入出力装置(情報処理装置)100の機能構成を示すブロック図である。尚、この実施例では、この画像入出力装置は、コピー機能、ファクシミリ機能、プリンタ機能等を有する複合機の場合で説明するが、本発明はこれに限定されるものではない。
【0013】
この画像入出力装置100は、イーサネット(登録商標)等のLAN8を介してホストコンピュータ9に接続されている。この画像入出力装置100は、画像データの読取処理を行うリーダ装置(リーダ部)2と、画像データの印刷処理を行うプリンタ装置(プリンタ部)4、操作部5、画像記憶部(ハードディスク)6及びこれらを制御するコントローラ(制御装置)3とを有している。操作部5は、画像データの入出力操作を行うキーボード及び画像データや各種機能の表示/設定などを行う液晶パネルとを備える。記憶部(HDD)6は、リーダ部2を制御して読み込んだ画像データや、LAN8を介してホストコンピュータ9より受信したコードデータから生成される画像データを格納する。コントローラ3は、これら各構成要素に接続され、これら構成要素を制御する。
【0014】
リーダ部2は、原稿を搬送する原稿給紙ユニット21と、その原稿を光学的に読み取って電気信号としての画像データに変換するスキャナユニット22とを有している。FAXユニット7は、電話回線10を介してファクシミリデータを送受信する。またプリンタ部4は、シートを収容する複数段の給紙カセットを備えた給紙ユニット42と、画像データをシートに転写して定着するマーキングユニット41を有している。更に、印刷されたシートにソート処理やステイプル処理を施して外部に排出する排紙ユニット43を有している。
【0015】
コントローラ3は、リーダ部2を制御して原稿の画像データを読込み、プリンタ部4を制御して、その画像データをシートに印刷するコピー機能を提供する。また、リーダ部2で読取った画像データをコードデータに変換し、ネットワーク8を介してホストコンピュータ9へ送信するスキャナ機能を有している。またホストコンピュータ9からネットワーク8を介して受信したコードデータを画像データに変換し、プリンタ部4に出力して印刷するプリンタ機能やその他の機能ブロックを有している。
【0016】
以上の構成を有する画像入出力装置100は、大きく分けて複写機能、画像送信機能、画像保存機能及び画像印刷機能を有している。複写機能は、リーダ部2から入力した画像データを記憶部6に記憶するとともに、プリンタ部4により印刷するものである。画像送信機能は、リーダ部2から入力した画像データをLAN8を介してコンピュータ9に送信する機能である。画像保存機能は、リーダ部2から入力した画像データを記憶部6に記憶し、必要に応じて画像データの送信や印刷を行なう機能である。また画像印刷機能は、コンピュータ9から送信された例えばページ記述言語を解析し、プリンタ部4で印刷する機能である。
【0017】
図2は、本実施形態に係る画像入出力装置100のコントローラ3のハードウェア構成を説明するブロック図である。尚、図1と共通する部分は同じ記号で示している。
【0018】
このコントローラ3は、メインボード200と、サブボード220とを具備している。メインボード200は所謂汎用のCPUシステムで、ボード200全体を制御するメインCPU201(第1制御手段)、ブートプログラムが含まれるブートロム202、CPU201がワークメモリとして使用するメモリ203(第1記憶手段)を有している。また、外部バスとのブリッジ機能を持つバスコントローラ204、不揮発メモリ225(バッテリ等によりバックアップされたメモリであっても良い)を含む。更に、記憶部6を制御するディスクコントローラ206と、半導体デバイスで構成された比較的小容量なストレージ装置であるフラッシュディスク(SSD等)207、USBメモリ209を制御するUSBコントローラ208等を含む。このメインボード200は、USBメモリ209、操作部5、記憶部6を接続している。
【0019】
サブボード220は、比較的小さな汎用CPUシステムと、画像処理用のハードウエアで構成される。サブボード220はCPU221(第2制御手段)、CPU221がワークメモリとして使用するメモリ223、外部バスとのブリッジ機能を持つバスコントローラ224、不揮発メモリ225(第2記憶手段)を有している。更に、リアルタイムでデジタル画像処理を行なう画像処理部227とデバイスコントローラ226を有する。前述したリーダ部2とプリンタ部4は、デバイスコントローラ226を介して画像処理部227との間でデジタル画像データの受け渡しを行なう。FAXユニット7は、CPU221が直接制御する。
【0020】
尚、図2は簡略化して示している。例えばCPU201、CPU221等にはチップセット、バスブリッジ、クロックジェネレータ等のCPU周辺ハードウェアが多数含まれているが、簡略化のためにこれらを省略して記述している。
【0021】
次に複写機能を例にして、コントローラ3の動作を説明する。
【0022】
ユーザが操作部5から複写を指示すると、CPU201がCPU221を介してリーダ部2に画像読み取り命令を送る。これによりリーダ部2は、原稿を光学的にスキャンしてデジタル画像データに変換してデバイスコントローラ226を介して画像処理部227に入力する。画像処理部227はCPU221を介してメモリ223にDMAにより画像データを保存する。
【0023】
CPU201はデジタル画像データがメモリ223に一定量もしくは全て記憶されたことが確認すると、CPU221を介してプリンタ部4に印刷指示を出す。CPU221は画像処理部227にメモリ223の画像データの位置を教える。そしてプリンタ部4からの同期信号に従ってメモリ223上の画像データは、画像処理部227とデバイスコントローラ226を介してプリンタ部4に送信され、プリンタ部4によりシート上に印刷される。
【0024】
複数部の印刷を行なう場合、CPU201がメモリ223の画像データを記憶部6に対して保存する。これにより2部目以降は、その記憶部6から画像データを読み出してプリンタ部4に出力して印刷する。
【0025】
図3は、本実施形態に係る画像入出力装置100の2つのCPUのブートシーケンスを説明するフローチャートである。本実施形態に係る画像入出力装置100はマルチコアシステムを採用しているため、ブートシーケンスは各CPUの制御プログラムで実行される。このフローチャートは、CPU201が図4のCPU201制御プログラム406を実行するまで、またCPU221が図4のCPU221制御プログラム407を実行するまでの処理を示している。一般的には、このような複数のボード構成におけるブートシーケンスは、各CPUがブートのためのROMを持っている。しかしそのように構成すると、制御プログラムは複数のCPU間で同一バージョンのものを利用する必要があり、またストレージ装置を2つ持つことによりコストアップの原因となる。そのため本実施形態では、マスタ側(メインボード200)が最初に起動し、次にメインボード200がスレーブ側(サブボード220)を起動するというシーケンスを採用している。
【0026】
この処理は、メインボード200に電源が供給されることにより開始される。電源オンでリセット回路が動作しCPUの周辺ICの初期化を行う。この初期化が完了するとCPU201のリセットが解除されてCPU201が起動する。これによりステップS301で、CPU201のブートシーケンスを開始する。ここではCPU201は一般的なX86アーキテクチャによるものと仮定して説明し、ここでのブートデバイスは、HDDである記憶部6とする。この時の記憶部6データを図4に示す。
【0027】
図4は、本実施形態に係る画像入出力装置100の記憶部6に格納されているデータのイメージを示す図である。以下の説明では、この図4のプログラムが参照されている。
【0028】
次にステップS302に進み、CPU201はリセット例外における例外実行が発生しブートロム202(例えばBIOS)のプログラムコードを実行する。このブートプログラムは、CPU201のチップセット等の周辺デバイスを逐次初期化し、起動デバイスである記憶部6のMBR401をディスクコントローラ206を介して読み込んで実行する。このMBR(Master Boot record)401(図4)に記述可能なプログラムは非常に短いものであり、カーネルローダ1(KernelLoader1)402を記憶部6から読んで実行に移すだけである。次にステップS304に進み、KernelLoader1(402)に制御が移る。本実施形態に係るX86はレガシー互換モードを持っており、メモリアクセス制限やCPUの命令実行制限等がある。従って、ここでは最低限のデバイス周りの初期化を行い、レガシー互換で動作しているCPU201のモードを高性能の出る最新のモードへと切り替える。そしてステップS305で、カーネルローダ2(KernelLoader2)403を記憶部6から読み込みジャンプする。次にステップS306に進み、KernelLoader2(403)は、カーネル(kernel)404を記憶部6から読み込んで、そのKernelの実行ルーチンにジャンプする。
【0029】
ここまでの処理は、カーネルが起動する前の状態である。記憶部6等の現在主流とされているストレージ装置は、LBA(Logical Block Addressing)と呼ばれる論理アドレスを指定して、セクタ単位でデータの入出力を行なう。しかしプログラマは、膨大な論理アドレスを指定して管理や制御をできないため、カーネル上でファイルという概念を作り出し、そのファイルに対する操作からLBAを求めて所定のデータにアクセスする、という手法を取る。
【0030】
一般的にストレージ装置に対するアクセスは、全てカーネルのファイルシステムを介して行なわれているといっても良い。また、カーネル上で動作するアプリケーションはファイルシステムで管理されたファイルシステム領域405(図4)にしかアクセスできないと考えてよい。
【0031】
また、ディスクコントローラ206では、例えばATAPIやSATA等の規定の標準インターフェースが定義されており、フラッシュディスク207や記憶部6はCPU201が意識することなくアクセスできる。また非互換のインターフェースの場合でも、カーネルが起動してしまえば共通のインターフェースとなるようにソフトウエアで対応することが容易に可能となる。こうしてステップS306でカーネルが起動すると、CPU201はファイルシステムを使用できるようになる。そしてカーネルの起動時に各デバイスに対するデバイスドライバが組み込まれる。これによりCPU201に接続されているほぼ全てのデバイスはアクセス可能な状態となる。
【0032】
次にステップS307に進み、バスコントローラ204を介してCPU221内のメモリコントローラを設定する。これによりCPU201は、メモリ223に対してアクセス可能な状態を作りだす。次にCPU221の制御プログラム407(図4)をファイルシステムを介して記憶部6からメモリ223にロードする。ここでCPU221の制御プログラム407は、CPU221のリセット例外からのプログラムを含むようにしておく。そしてCPU201がCPU221のリセット解除を行なうと、CPU221にリセット例外が発生し、リセットベクタからプログラムを実行する。CPU221の起動の説明は後述する。
【0033】
次にステップS308に進み、CPU201は、自分の制御プログラムであるCPU201の制御プログラム406を記憶部6からメモリ203にロードして、そこにジャンプする。次にステップS309に進み、その制御プログラムに実行が移ってアプリケーションの初期化を行ない、ステップS310でアイドル状態となる。
【0034】
次にリセットが解除されてステップS321で開始するCPU221の処理を説明する。このような2つの独立したCPUを具備する装置では、一般的には、小規模なリアルタイムシステムを想定している。X86が過去互換を保つために持つ特別なブートシーケンスと異なり、通常の組み込み用途のCPUは非常にシンプルな起動シーケンスを持つ。
【0035】
まずステップS322で、CPU221はリセットベクタのプログラムを実行する。リセットベクタでは、最低限のハードウェアの初期化を行いカーネルのアドレスへジャンプする。こうしてカーネルの起動が完了すると、ステップS323に進んで制御プログラム407の初期化を行う。そしてステップS324でアイドル状態となる。
【0036】
以上説明したように、2つのCPUがそれぞれ異なる制御プログラムを実行することが可能となってコントローラ3が起動される。
【0037】
図5は、本実施形態に係る画像入出力装置100のメインCPU201のメモリアクセス速度を説明するための図である。
【0038】
年々CPUの性能が向上し、CPUコア内のクロックは主メモリバスの10倍以上の周波数であるCPUも存在する。これは主メモリにアクセスせずにCPU内のキャッシュだけで動作すれば約10倍の速度で動作できることを示す。そのため各CPUはキャッシュを多く搭載し、CPUの処理能力の向上を図っている。
【0039】
また、プログラムはシーケンシャルに実行する必要があるため、CPUキャッシュと比べて遅い主メモリのデータアクセスに際して、CPU内部の実行パイプラインにより、遅い主メモリへのアクセス中であっても近傍の他命令を並行して実行している。これにより、よりCPUの処理能力を向上させている。このように主メモリの遅さをカバーするように最適化された設計をチップセットとCPUで実現している。
【0040】
一方で、例えばPCIバスに代表される汎用バスが存在し、バス拡張することで、CPUが様々なデバイスにアクセスできるようになっている。しかしながら、これらバスは主メモリの速度とは比較とならないほど遅い。このように主メモリに最適化することでCPUの総合的な処理能力を向上させているにも拘らず、拡張されたバスに対する遅いデバイスにCPUがアクセスすることで、CPUのパイプラインでは吸収できない現象が発生する。この場合CPUはストールし、何も行なえない状態となる。組み込み等の機器では、拡張バスに対して独自のデバイスを拡張する場合がある。その場合、その拡張バスに対して高頻度でCPUがアクセスしている間、CPUの能力の1%も使用できないような状況となる場合もある。
【0041】
次に図2のブロック図の一部と図5とを用いて説明する。
【0042】
図5において、CPU201は、内部にCPUコア5004、一次キャッシュ5002、二次キャッシュ5003、バスブリッジ5001を有している。CPU201は、システムバス5014(第1バス)を介してメモリ203と接続されている。CPUコア5004がバスアクセスによるデータの読み込みが必要となったとき、おおよそ5010〜5013で示すようなアクセスパターンが考えられる。尚、図5の下部に各々の読み込み時間の概略をグラフで記載する。
【0043】
5010は最も高速なアクセスを示し、一次キャッシュ5002にデータが存在した場合を示す。5011は、その次に高速なアクセスを示し、二次キャッシュ5003にデータが存在した場合を示す。ここ数年、半導体プロセスの高密度化に伴って二次キャッシュの容量は、4KB〜6MBまでの変化を遂げてきている。5012はメインメモリであるメモリ203へのバスアクセスを示し、CPU内のキャッシュにヒットしなかった場合のアクセスである。この場合は、CPUコア5004のクロックでは動作できす、メモリバスのクロックに応じて処理速度が低下することになる。厳密には、メモリ203から一次キャッシュ5002、二次キャッシュ5003へバーストリードした後にCPU201がそれを参照する。
【0044】
本実施形態が対象としているのは、5013で示す外部バス経由の遅いアクセスである。本実施形態では、CPU201が、PCIバスを介してCPU221のバスブリッジ(本実施形態ではCPU221内に実装)経由で、例えば不揮発メモリ225等の遅い記録デバイスにアクセスする場合の対処方法を説明する。5013で示す遅いアクセスは、バスブリッジ5001、PCIバス(204/224)を介してCPU221が不揮発メモリ225からデータを読み込み、同一の経路を通ってCPU201へ届けられるパスを示す。なお、CPU221は、システムバス5015(第2バス)を介して不揮発メモリ225と接続されている。
【0045】
5012で示すデータのリードが連続した場合、CPU201のクロックとパイプラインの構成にもよるが、CPUコア5004では、メモリリード待ちの多少のストールが発生する。これに対して、5013で示す外部バスアクセスは、5010〜5013で示すようなコア内及びローカルバスのアクセスとは比較とならない程の読み込み時間が必要となる。よって、CPU201のパイプラインがどんなに大きくなったとしても、同一アドレスに対するメモリリードとメモリライトの命令が連続した場合、データの読み込みが完了しない限り次の書き込み処理が行えない。このためパイプラインはロックし、ほぼ、図5の5014で示すようなアクセス時間と等価なCPU201のストールが発生すると考えられる。
【0046】
従って、高性能なCPUを採用しても、このような遅いバスに接続された、デバイスに対するバスアクセスによるCPUアクセスは、マルチタスク、マルチプロセス環境においてCPUの平均処理能力を大きく低下させる結果となる。
【0047】
以下にこの問題を解決する手法を説明する。
【0048】
本実施形態では、複合機などの画像入出力装置を例に挙げて、遅いデバイスとして不揮発メモリを利用した場合で説明する。
【0049】
図2において、CPU201が高性能なCPUであり、例えばLinux等の仮想メモリをサポートするカーネルを動作させるシステムとし、CPU221がRTOS等のカーネルを動作させリアルタイム性に特化したシステムとする。このときCPU201は高性能であるため、メモリ203に対して高速にアクセスできる。しかし、不揮発メモリ225に対してはバスコントローラ204,224と、CPU221内のバスブリッジを経由してアクセスする必要があるため、不揮発メモリ225は、CPU201にとって十分低速なデバイスとなる。
【0050】
図6は、本実施形態に係るメインCPU201が不揮発メモリ225をハンドリングする方法を説明する図である。
【0051】
図において、6001はCPU201のソフトウエアイメージを示す。メモリ203はCPU201のメインメモリである。6002はCPU201の仮想メモリ空間(領域)を示し、仮想メモリをサポートするOS(オペレーティングシステム)がCPU201のハードウエア上でソフトウエア的に構築している。この仮想メモリ空間は、物理的なメモリ203の領域よりもより多くのメモリを仮想的に搭載している如く動作させる技術であり、そのとき本当に必要なメモリだけを物理メモリ上を使用し、必要の無いメモリは記憶部6等に待避する。これによりソフトウエアに対して実際に搭載しているメモリ(物理メモリサイズ)以上のメモリをサービスする仕組みである。ここでは、カーネルは例えば4KB等のページ単位に物理メモリを分割して管理し、それをCPU201の機能である例えばMMUを利用して、必要な物理メモリをページ単位で仮想メモリ空間上に貼り付けることで再利用している。この結果、仮想メモリ空間6002のメモリアドレスと、物理メモリ空間上のアドレスが一致しなくなるが、通常ソフトウエアはこれを意識しなくても良い構成になっている。
【0052】
不揮発メモリ225は通常アクセスが遅いため、このような遅いデバイスに対してはCPU201に近い位置にバッファを持つのが通常の使用方法となる。そのためこのバッファを管理するための不揮発ドライバ6004が必要となる。不揮発ドライバ6004は、カーネルに対して、例えばmalloc( )等のシステムコールを発行し、メモリ203に不揮発メモリバッファを要求する。その結果、カーネルは仮想メモリ空間6002上に不揮発メモリバッファ6003を作成し、そのアドレスポインタを返す。不揮発ドライバ6004は、不揮発メモリ225から経路6011を介してデータをロードし、経路6012で不揮発メモリバッファ6003にコピーする。これにより不揮発メモリバッファ6003には不揮発メモリ225のデータが記憶されているため、不揮発メモリ225のリード要求に対しては不揮発メモリバッファ6003にキャッシュしてあるデータを読めば良い。また不揮発メモリ225へのデータの書き込み要求が発生した場合、不揮発メモリ225のデータを更新した後、その更新したデータを不揮発メモリ225に転送すれば良い。これらは一般的なキャッシュ技術であり、遅いデバイスに対して、通常、このようなキャッシュシステムを構築してCPUのストールを防いでいる。
【0053】
本実施形態で着目するのは、図6において、不揮発ドライバ6004が行なう経路6011で示すCPUアクセスであり、不揮発メモリ225に対するCPU201のアクセスのストールを改善するのが目的となる。この解決方法として、CPU201が高速であるため効率が大きく落ちるため、他のデバイスによる転送を行なうことが考えられる。一般的にはDMACが考えられる。HDD等のストレージデバイスは高速なDMAが搭載されており、CPUとバス権を取り合いながら低速なデバイスとメモリ203との間でデータの転送を行う。この際にCPU201のストールは発生しない(厳密にはメモリバスが混めば若干のメモリ待ちが発生する場合もある)。
【0054】
図2のような2つのCPU201,221を有する構成では、CPU221による代理転送が考えられる。しかし、CPU201が仮想メモリ空間をサポートしている場合、6001で示すCPU201のソフトウェア空間でカーネルが構築する仮想メモリ空間6002のページ配置はカーネルが管理している。このため、他のシステムからこ仮想のメモリ空間6002にアクセスする手段が無い。つまりCPU221は、仮想メモリ空間6002にアクセスする手段を持っておらず、不揮発メモリバッファ6003に対して代理転送を行なうことができないことになる。
【0055】
一方、CPU221は、不揮発メモリ225にアクセスが可能であり、バスコントローラ204,224を経由してメモリ203にアクセスできる。
【0056】
図7は、本実施形態に係るバスコントローラが管理するメモリ空間を説明する図である。
【0057】
仮想メモリ空間6002は、CPU201により実行されるOSのカーネルが管理している仮想メモリ空間である。メモリ203のメモリ空間は6005で示している。ここで、仮想メモリ空間6002にはメモリ203の物理メモリ空間(6005〜6009)が含まれている。また1203は、バスコントローラ204,224上のメモリ空間である。本実施形態では、汎用バスとして一般的なPCIバスを例に説明する。1204は、CPU221のメモリ空間を示している。PCIメモリ空間1203は、設定を行なうことで用途ごとに複数のウインドウを作成することが可能であり、このウインドウを介して各CPUは異なるバスシステムに対してアクセスが可能となる。例えば、メモリ空間1204にマップされている領域1206は、バスコントローラ204,224のメモリ空間1203を介して物理メモリ空間6005にアクセス可能となる。同様にCPU201は、領域1208を介してCPU221のバスシステムに接続されている不揮発メモリ225に、ローカルバスに接続されているようにアクセスすることができる。但し、この経路が長くなればバスウエイトが入ることになる。
【0058】
このように、CPU221は仮想メモリ空間6002にアクセスできないが、物理メモリ空間6005にはアクセスできる。本実施形態では、この特徴を利用している。
【0059】
仮想メモリ空間上に連続した領域を確保する方法として一般的なものにmalloc( )がある。カーネルの種類によって制御が異なるが、例えば一般的なLinuxの場合、カーネルmalloc( )した時点では仮想メモリ空間上に領域を作成するだけである。そして実際にアクセスが発生した際に、そのとき利用可能な物理空間を動的に割り当て、ゼロ初期化した状態で関連付ける。一度関連付けられた物理メモリは、free( )されない限りその値を保持しなければならないので物理メモリ空間上に存在することになる。しかし使用頻度が低い場合や、他の処理により物理メモリが必要になった場合にスワップアウトされ外部記憶装置上に一時待避される。この待避された状態で再度仮想メモリ空間へのアクセスが発生した場合、ページ例外が発行され、ページ例外処理で空き物理メモリを探し、外部記憶装置から確保した新しい物理メモリへ復元し、これを仮想メモリに接続する。このような仮想メモリの仕組みにより、ユーザプロセスは常に同じ仮想メモリ領域にアクセスすることで、常にそこで自分のデータにアクセスすることが可能となる。
【0060】
再び、図6を参照して説明する。
【0061】
仮想メモリ空間6002の連続したメモリブロックは、カーネルがページングを行って物理メモリ上のバッファ6005〜6009等の分割されたブロックで確保されている。仮想メモリ空間と物理メモリ空間のメモリブロックの関連は、カーネルのシステムコールを利用することで知ることができる。またシステムコールを発行することで、スワップ非対象とすることも可能である。スワップ非対象とした場合、カーネルが再起動しない限り仮想メモリ空間6002と物理メモリ空間6005のバッファ6006〜6009とは普遍的に関連付けられることになる。
【0062】
本実施形態では、他のバスに接続された異なるカーネルを持つCPU221が、高速なCPU201に変わってデータを転送することを特徴とする。CPU221は、メモリ203の物理メモリ空間にはバス的な接続があればアクセスできる。しかし前述したように、仮想メモリシステムを用いたカーネルでは、仮想メモリ空間に対応する物理メモリのデータの配置がシステムの起動毎に異なる。このため、CPU221が代替して、その仮想メモリ空間に対応する物理メモリ空間に代替送信することができない。
【0063】
本実施形態では、仮想メモリ空間6002の不揮発メモリバッファ6003のA,B,C,Dの領域(第1キャッシュ領域)と、物理メモリ空間6005のバッファ6006〜6009(第2キャッシュ領域)を対応付ける情報により物理メモリブロック仕様を作成する。
【0064】
図8は、本実施形態に係る物理メモリのブロック仕様の一例を示す図である。
【0065】
図において、800は、不揮発メモリバッファ6003の領域A,B,C,Dの情報である仮想メモリアドレスを示す。801は、領域A,B,C,Dに対応した物理メモリ203のバッファ6006、6007、6008、6009のアドレスを示す。802は、バッファA,B,C,Dに対応する不揮発メモリ225の各記録領域(ブロック)のアドレスa,b,c,dを示す。803は、バッファA,B,C,Dのサイズ(メモリ容量)である。これら情報は、不揮発ドライバ6004がカーネルの情報を収集して作成可能な仕様情報であり、不揮発メモリバッファ6003を確保した直後に生成される。
【0066】
この物理メモリブロック仕様に基づいてCPU221が先に述べたようなバスアクセスにより、メモリ203のバッファ6006〜6009にアクセスできる。これにより、図6に示す経路6011による不揮発メモリ225へのアクセスをなくすことができ、高性能なCPU201を効率的に使用することが可能となる。
【0067】
図9は、本実施形態に係る画像入出力装置100の2つのCPU201,221によるブート処理を説明するフローチャートである。尚、前述の図3と共通する部分は同じ記号で示している。
【0068】
前述ステップS307で、CPU201がCPU221を起動した後、ステップS901に進む。ステップS901で、CPU201はオペレーティングシステムのカーネルを起動する。これによりCPU221は、ステップS322でオペレーティングシステムのカーネルを初期化する。そしてステップS910に進んで、CPU201から指示される物理メモリブロックの仕様情報の受信を待つ。
【0069】
一方、CPU201は、ステップS901に続いてステップS902に進み、仮想メモリ空間6002に不揮発メモリバッファ6003を獲得する。このときメモリ203の物理メモリ空間6005で実メモリエリアを確保し、そのエリアをロックすることでロック解除が行なわれるまで、その実メモリエリアが利用されないようにする。次にステップS903に進み、図8に示すような物理メモリブロックの仕様情報を作成する(仕様作成)。そしてステップS904に進み、その物理メモリブロックの仕様情報をCPU221へ転送する(仕様データ転送)。そしてステップS905に進み、デバイスドライバの初期化を行なう。
【0070】
これによりCPU221は、ステップS910で、CPU201から受信した物理メモリブロックの仕様情報を解析する。そして、その仕様情報に従って、不揮発メモリ225の各ブロックの内容をメモリ203のバッファ(6006乃至6009)にコピーする(デバイスデータ転送)。そしてステップS911で、不揮発メモリ225の全てのブロックa〜dをメモリ203のバッファ6006〜6009にコピーするとステップS912に進み、CPU201に不揮発メモリ225のデータのコピーが完了したことを通知する。そしてステップS913に進み、アプリケーションの初期化を実行してアイドル状態となる。つまり、アプリケーションの実行は、OSのカーネルの起動が完了し、不揮発メモリ225の全てのブロックa〜dをメモリ203のバッファ6006〜6009にコピーした場合に開始される。
【0071】
これによりCPU201は、ステップS906でCPU221からの処理の完了を待ちを抜けて、ステップS907に進み、CPU201はアプリケーションの初期化を行ってアイドル状態となる。これによりCPU201は、仮想メモリ空間6002で不揮発メモリ225にアクセスできるため、不揮発メモリ225へのアクセスを高速にできるようになる。
【0072】
次に本実施形態において、不揮発メモリ225の内容を変更する際の処理について説明する。
【0073】
前述の説明では、遅い不揮発メモリ225のためにメモリ203のメモリ空間6002に不揮発メモリバッファ6003を作成する例を説明した。この場合は、不揮発メモリ225からのデータの読み込みに対してはキャッシュ(不揮発メモリバッファ6003)を参照すれば良い。しかし不揮発メモリ225への書き込みイベント(同期イベント)が発生した場合は、不揮発メモリバッファ6003を書き換えて、不揮発メモリ225も書き換える必要がある。この場合は、例えばブロック毎に行なう、或いは一定時間ごとに行なう等、様々な手法が考えられている。
【0074】
図10は、本実施形態に係る画像入出力装置100の2つのCPUによる不揮発メモリ225の書き換え処理を説明するフローチャートである。
【0075】
まずステップS1011で、不揮発メモリ225へのデータ書き込みのイベントの発生を待ち、イベントが発生するとステップS1012に進む。ステップS1012では、CPU201は、そのデータをメモリ203の対応するバッファに書き込み、前述の物理メモリブロックの仕様情報をCPU221に通知してCPU221に不揮発メモリ225の更新を依頼する。尚、ここでは、仕様情報をCPU221に通知する前に、メモリ203のバッファ6006〜6009をロックしてカーネルが再利用されないようにする必要がある。尚、ここでは、ロックしたまま運用しても良いし、CPU221に転送を依頼している間だけロックしても良い。これによりCPU221は、ステップS1021の処理に進み、CPU201により送られた物理メモリブロックの仕様情報に基づき、メモリ203のデータを読み出して不揮発メモリ225にデータを書き込む。
【0076】
図11は、本実施形態に係る2つのCPUの動作を説明するタイミング図である。尚、図11では、図9のフローチャートの処理と共通する個所には同じ記号を付している。
【0077】
図11に示すように、CPU221は、CPU201から仕様情報を受信すると不揮発メモリ225の内容をブロック単位にメモリ203に転送して格納する(S910,S911)。これによりCPU201は、図11の1100以降の処理で、仮想メモリ空間6002で不揮発メモリ225にアクセスすることができる。1101,1102は、図10で説明したように、不揮発メモリ225へのデータの書き込み要求が発生した場合を示す。これによりCPU221は、その書き込まれたデータを不揮発メモリ225のブロックに格納することができる。
【0078】
尚、本実施形態では、不揮発メモリ225を例に説明したが、図2ではメモリ223も外部バス先に接続されており、CPU221からは高速にアクセスできても、CPU201からは遅いデバイスとなる。
【0079】
従って上述した実施形態のように、アクセスの遅いデバイスを不揮発メモリに限定するものではなく、外部バス先に接続されたCPU221がバスアクセス可能なデバイスであれば、前述の実施形態と同様に動作できる。
【0080】
以上説明したように本実施形態によれば、高性能なCPUが、異なるバスに接続されたアクセスの遅いデバイスに対するアクセス時間を短縮できる。また仮想メモリをサポートしたカーネルにおいて、仮想メモリを有効にしながらも、CPUの駆動効率を上げることができる。
【0081】
(他の実施形態)
以上、本発明の実施形態について詳述したが、本発明は、複数の機器から構成されるシステムに適用しても良いし、また一つの機器からなる装置に適用しても良い。
【0082】
なお、本発明は、前述した実施形態の機能を実現するソフトウェアのプログラムを、システム或いは装置に各種記憶媒体を介して或いは遠隔から供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムを読み出して実行することによっても達成され得る。その場合、プログラムの機能を有していれば、形態は、プログラムである必要はない。

【特許請求の範囲】
【請求項1】
データを記憶する第1記憶手段と、
データを記憶する第2記憶手段と、
前記第1記憶手段と第1バスを介して接続され、前記第2記憶手段に対する第1キャッシュ領域を含む仮想メモリ領域を管理するオペレーティングシステムを実行し、前記第1キャッシュ領域にアクセスすることで前記第2記憶手段に記憶されたデータを取得する第1制御手段と、
前記第2記憶手段と第2バスを介して接続され、前記第1制御手段と通信可能な第2制御手段と、
前記オペレーティングシステムを起動する際に、前記第1キャッシュ領域と前記第1記憶手段に設けられた前記第2記憶手段に対する第2キャッシュ領域との対応関係を示す仕様情報を作成する作成手段を有し、
前記第1制御手段は、前記第2制御手段からの要求に応じて前記第2キャッシュ領域を示す領域情報を前記第2制御手段へ転送し、
前記第2制御手段は、前記領域情報に基づいて前記第2記憶手段に記憶されたデータを前記第2キャッシュ領域へ転送することを特徴とする情報処理装置。
【請求項2】
前記仕様情報は、前記第2キャッシュ領域を複数のブロックに分割して管理するための情報を含み、前記第2制御手段は、各ブロックごとにデータを転送することを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記第1制御手段は、前記オペレーティングシステムの起動が完了し、前記第2制御手段による前記第2キャッシュ領域へのデータの転送が完了した場合に、アプリケーションの実行を開始することを特徴とする請求項1に記載の情報処理装置。
【請求項4】
前記第2制御手段は、前記第1記憶手段に記憶されるキャッシュデータと前記第2記憶手段に記憶されるデータを同期させる同期イベントの発行に伴って前記第2キャッシュ領域へのデータの転送を実行することを特徴とする請求項1に記載の情報処理装置。
【請求項5】
データを記憶する第1記憶手段と、データを記憶する第2記憶手段と、前記第1記憶手段と第1バスを介して接続され、前記第2記憶手段に対する第1キャッシュ領域を含む仮想メモリ領域を管理するオペレーティングシステムを実行し、前記第1キャッシュ領域にアクセスすることで前記第2記憶手段に記憶されたデータを取得する第1制御手段と、前記第2記憶手段と第2バスを介して接続され、前記第1制御手段と通信可能な第2制御手段とを有する情報処理装置の制御方法であって、
前記オペレーティングシステムを起動する際に、前記第1キャッシュ領域と前記第1記憶手段に設けられた前記第2記憶手段に対する第2キャッシュ領域との対応関係を示す仕様情報を作成する作成工程と、
前記第1制御手段が、前記第2制御手段からの要求に応じて前記第2キャッシュ領域を示す領域情報を前記第2制御手段へ転送する第1転送工程と、
前記第2制御手段が、前記領域情報に基づいて前記第2記憶手段に記憶されたデータを前記第2キャッシュ領域へ転送する第2転送工程とを有することを特徴とする情報処理装置の制御方法。
【請求項6】
前記仕様情報は、前記第2キャッシュ領域を複数のブロックに分割して管理するための情報を含み、前記第2転送工程は、各ブロックごとにデータを転送することを特徴とする請求項5に記載の情報処理装置の制御方法。
【請求項7】
前記第2転送工程、前記第1記憶手段に記憶されるキャッシュデータと前記第2記憶手段に記憶されるデータを同期させる同期イベントの発行に伴って前記第2キャッシュ領域へのデータの転送を実行することを特徴とする請求項5に記載の情報処理装置の制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate


【公開番号】特開2010−191818(P2010−191818A)
【公開日】平成22年9月2日(2010.9.2)
【国際特許分類】
【出願番号】特願2009−37056(P2009−37056)
【出願日】平成21年2月19日(2009.2.19)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Linux
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】