【実施例1】
【0016】
[画像形成装置]
図1は、画像形成装置の概略構成を示すブロック図である。
【0017】
図1の画像形成装置1は、例えばコピー機、プリンター、それらの複合機からなり、画像形成部3とパネル表示部5とを備えている。画像形成部3は、入力されたデータに基づいて用紙上へ画像形成を行うものである。パネル表示部5は、タッチパネル式の液晶画面等からなり、画像形成装置1に対する操作入力や操作状態の表示を行う。
【0018】
この画像形成装置1では、主制御部7、主記憶部9、デバイス制御部11等を備え、画像形成部3及びパネル表示部5が並列制御される構成となっている。
【0019】
主制御部7は、例えばSoC(System-on-a-chip)として構成され、同一の半導体チップ上にプロセッサー13と、拡張バスコントローラー15と、ローカルバスコントローラー17と、RAMコントローラー19とを搭載し、各部がシステムバス21によって接続されている。
【0020】
プロセッサー13は、マルチコアプロセッサーからなり、複数の演算部である第1コア23及び第2コア25を備えている。第1コア23は、プログラムの実行により、パネル表示部5を制御するパネルコントローラーシステムを構成する。第2コア25は、プログラムの実行により、主として画像形成部3を制御するメインコントローラーシステムを構成する。
【0021】
拡張バスコントローラー15は、PCIe(Peripheral Component Interconnect Express)コントローラーであり、デバイス制御部11に対するルートコンプレックスを構成してデータの入出力を行う。
【0022】
ローカルバスコントローラー17は、ローカルバスを制御するコントローラーであり、NANDコントローラー27を有する。NANDコントローラー27は、NANDフラッシュ29に対するデータの読み書きを行うNAND型用のメモリーコントローラーである。
【0023】
RAMコントローラー19は、DDR−SDRAM(Double-Data-Rate Synchronous Dynamic Random Access Memory)コントローラーからなり、RAM(Read only Memory)31に対するデータの入出力を行うDDR−SDRAM用のメモリーコントローラーである。
【0024】
主記憶部9は、第1メモリーであるNANDフラッシュ29、第2メモリーであるRAM31を備えている。
【0025】
NANDフラッシュ29は、NAND型のフラッシュメモリーであり、画像形成装置1の各種の制御用プログラム等を保持している。このNANDフラッシュ29には、NANDコントローラー27を介して単一のコアのみがアクセス可能となっている。つまり、NANDフラッシュ29は、複数のコアが同時にアクセスできないようになっている。
【0026】
NANDフラッシュ29には、パネルコントローラーシステム及びメインコントローラーシステムのプログラムとして、パネルコントローラーオペレーティングシステム(以下、「パネルコントローラーOS」と称する)、パネルアプリケーション(以下、「パネルアプリ」と称する)、メインコントローラーオペレーティングシステム(以下、「メインコントローラーOS」と称する)、メインアプリケーション(以下、「メインアプリ」と称する)が保持されている。
【0027】
RAM31は、DDR−SDRAMからなり、プログラムや各種データを一時的に記憶して作業領域等として用いられる。
【0028】
デバイス制御部11は、ASIC(Application Specific Integrated Circuit)として構成され、拡張バスインターフェース33と、パネルコントローラー35と、ビデオコントローラー37とを備えている。
【0029】
拡張バスインターフェース33は、PCIeバスインターフェースであり、主制御部7側の拡張バスコントローラー15に対するエンドポイントとなってデータの入出力を行う。
【0030】
パネルコントローラー35は、パネルコントローラーシステムの制御によって、入力されたデータに基づくパネル表示部5に対する実際の制御を行う。ビデオコントローラー37は、メインコントローラーシステムの制御によって、入力されたデータに基づく画像形成部3に対する実際の制御を行う。
【0031】
このように本実施例の画像形成装置1では、第1コア23及び第2コア25がパネルコントローラーシステム及びメインコントローラーシステムを構成することで、パネル表示部5及び画像形成部3を並列制御することができる。
【0032】
本実施例の画像形成装置1では、かかる並列制御においてNANDフラッシュ29へのアクセスに対する排他制御を行う。
[メモリー排他制御システム]
図2は、
図1の画像形成装置に適用されるメモリー排他制御システムを示すブロック図、
図3は、
図2のメモリー排他制御システムの第1コア及び第2コアとRAMとの関係を示す概念図、
図4は、
図2のメモリー排他制御システムによるメモリー排他制御時の概念図である。
【0033】
メモリー排他制御システム39は、
図2〜
図4のように、主記憶部9のRAM31に排他フラグ41を保持し、排他フラグ41を取得した第1コア23及び第2コア25の何れか一方のみが主記憶部9のNANDフラッシュ29にアクセス可能となる排他制御を行う。
【0034】
第1コア23は、上述のようにパネルコントローラーシステム43を構成し、パネル表示部5の制御に必要な各種のパネルアプリ45をパネルコントローラーOS47上で動作させる。このパネルコントローラーOS47は、NANDフラッシュ29に対する制御を行うデバイスドライバー49を備える。
【0035】
第2コア25は、上述のようにメインコントローラーシステム51を構成し、画像形成部3の制御に必要な各種のメインアプリ53をメインコントローラーOS55上で動作させる。メインコントローラーOS55も、パネルコントローラーOS47と同様、NANDフラッシュ29に対する制御を行うデバイスドライバー57を備える。
【0036】
これら第1コア23及び第2コア25は、パネルコントローラーOS47及びメインコントローラーOS55のデバイスドライバー49,57を通じ、スピンロックによってRAM31内の排他フラグ41を取得する。
【0037】
RAM31は、パネルコントローラーOS47用のパネルOS領域59、メインコントローラーOS55用のメインOS領域61、パネルコントローラーOS47及びメインコントローラーOS55の共有領域63がマッピングにより割り当てられている(
図2及び
図3)。このRAM31の共有領域63内に排他フラグ41が保持されている。
【0038】
排他フラグ41は、第1コア23及び第2コア25の一方が取得すると同他方から取得不能となる。具体的には、第1コア23及び第2コア25は、RAM31の共有領域63内の排他フラグ41が取得可能か否かを監視する。取得可能な場合は、
図4の第2コア25のように排他フラグ41を取得して、取得不能な場合は、
図4の第1コア23のようにビジーウェイト状態となってループによる排他フラグ41の監視を続ける。
【0039】
なお、本実施例では、第1コア23及び第2コア25がそれぞれキャッシュ65,67を有し、キャッシュ65,67の値によってビジーウェイト状態での排他フラグ41に対する監視を行う。このため、キャッシュ65,67とRAM31との間では、コヒーレンシーを合わせる、つまりデータ内容を一致させる必要がある。これは、キャッシュ65,67のフラッシュやインバリデート処理等によって行うことができる。
【0040】
排他フラグ41の取得は、例えばRead-Modify-Writeにより、排他フラグ41が「0」になった瞬間に「1」を書き込んで取得を確保した後、排他フラグ41を「0」を書き込むことで開放する等のようになる。この排他フラグ41の取得はAtomic操作(不可分操作)によって行われ、排他フラグ情報をRead後、Writeまでの間に、他方のコアからのWriteによる不整合を抑制するためである。
【0041】
排他フラグ41を取得した第1コア23及び第2コア25の一方は、NANDフラッシュ29に対するアクセスが可能となる。
図4の例では、排他フラグ41を取得した第2コア25がNANDフラッシュ29にアクセスすることができる。
[メモリー排他制御]
以下、本実施例のメモリー排他制御について
図5のフローチャートにより説明する。
図5のフローチャートは、
図2のメモリー排他制御システムによるメモリー排他制御を示す。なお、画像形成装置1及びメモリー排他制御システム39の構成については
図1〜
図4を参照する。
【0042】
メモリー排他制御では、まずステップS1において「RAMへのアクセス」が行われる。第1コア23(パネルコントローラーOS47)又は第2コア25(メインコントローラーOS55)は、自身のデバイスドライバー49又は57の制御を通じてRAM31の共有領域63にアクセスする。これによりステップS1が完了してステップS2へ移行する。
【0043】
ステップS2では、「排他フラグ取得可能?」の処理が行われる。この処理では、第1コア23又は第2コア25がRAM31の共有領域63内の排他フラグ41が取得可能か否かを判断する。
【0044】
図4の例では、第2コア25の場合に排他フラグ41が取得可能であり、第1コア23の場合に排他フラグ41が取得不能となっている。
【0045】
排他フラグ41が取得可能な場合はステップS3へ移行し(YES)、取得不能な場合はステップS2の処理を繰り返す(NO)。なお、ステップS2を再度行う場合は、ビジーウェイト状態となっているから、第1コア23又は第2コア25がキャッシュ65又は67に対してループによる排他フラグ41の監視を続ける。
【0046】
ステップS3では、「排他フラグ取得」が行われる。すなわち、第1コア23及び第2コア25の一方は、RAM31の共有領域63内の排他フラグ41の取得を行う。この取得により、第1コア23及び第2コア25の他方は、排他フラグ41の取得が不能となる。
【0047】
図4の例では、第2コア25が排他フラグ41の取得を行い、ステップS2で説明したように第1コア23が排他フラグ41を取得不能となる。
【0048】
こうしてステップS3が完了してステップS4へ移行する。
【0049】
ステップS4では、「NANDフラッシュへのアクセス」が行われる。すなわち、排他フラグ41を取得した第1コア23及び第2コア25の一方は、NANDコントローラー27(
図1)を介してNANDフラッシュ29にアクセスする。これにより、第1コア23及び第2コア25の一方は、NANDフラッシュ29に対するデータの読み書きを行うことができる。
図4の例では、第2コア25がNANDフラッシュ29にアクセスしてデータの読み書きを行うことになる。
【0050】
こうしてステップS4が完了してステップS5へ移行する。
【0051】
ステップS5では、「排他フラグの開放」を行う。第1コア23及び第2コア25の一方は、NANDフラッシュ29へのアクセスが終了するとRAM31の共有領域63内の排他フラグ41を開放する。これにより、第1コア23及び第2コア25の他方が排他フラグ41を取得できるようになる。
図4の例では、ビジーウェイト状態であった第1コア23が排他フラグ41を取得可能となる。
[実施例1の効果]
本実施例のメモリー排他制御システム39は、異なる演算処理が可能な第1コア23及び第2コア25と、第1コア23及び第2コア25からアクセス可能な共有領域63を有するRAM31と、第1コア23及び第2コア25の内の何れか一つがアクセス可能なNANDフラッシュ29とを備え、RAM31が共有領域63に第1コア23及び第2コア25の何れか一方が取得すると同他方から取得不能となる排他フラグ41を保持し、排他フラグ41を取得した第1コア23及び第2コア25の何れか一方のみがNANDフラッシュ29にアクセスする。
【0052】
従って、本実施例では、複数のコアが同時にアクセスできないNANDフラッシュ29に対する排他制御を簡単且つ確実に行うことが可能となる。これにより、NANDフラッシュ29を効率良く使用でき、各コアの待ち時間等も減少することができる。
【実施例2】
【0053】
図6は、画像形成装置に適用されるメモリー排他制御システムを示すブロックである。なお、本実施例は、上記実施例1と基本構成が共通するため、対応する構成部分に同符号又は同符号にAを付加したものを用いて重複した説明を省略する。
【0054】
本実施例のメモリー排他制御システム39Aは、パネルコントローラーOS47及びメインコントローラーOS55の起動時の排他制御を軽減するものである。
【0055】
このメモリー排他制御システム39Aでは、画像形成装置1のシステム起動時に、第1コア23AがNANDフラッシュ29内等のプログラムを実行してブートローダー69を構成する。
【0056】
ブートローダー69は、パネルコントローラーOS47及びメインコントローラーOS55を起動するブート処理を行うものである。ブートローダー69は、NANDフラッシュ29に対する制御を行うデバイスドライバー71を備える。
【0057】
このデバイスドライバー71を通じ、ブートローダー69は、パネルコントローラーOS47及びメインコントローラーOS55の起動に必要なパネル起動用プログラム及びメイン起動用プログラムをNANDフラッシュ29からRAM31上に読み込む。このとき、ブートローダー69は、パネルアプリ45もパネル起動用プログラムと共にRAM31上に読み込む。このパネルアプリ45の読み込みの概念図を
図7に示す。
【0058】
なお、パネル起動用プログラムは、パネルカーネルプログラム及びパネルデバイスツリープログラム等であり、メイン起動用プログラムは、メインカーネルプログラム及びメインデバイスツリープログラム等である(
図9参照)。
【0059】
ブートローダー69は、第1コア23A及び第2コア25に対し、読み込んだパネル起動用プログラム及びメイン起動用プログラムによってパネルコントローラーOS47及びメインコントローラーOS55の起動を行わせる。
【0060】
この起動としては、第1コア23A及び第2コア25がパネルコントローラーOS47及びメインコントローラーOS55の初期化を行ってからパネルアプリ45及びメインアプリ53の読み込みを行う。パネルアプリ45は、RAM31上から読み込まれ、メインアプリ53は、NANDフラッシュ29から読み込まれる。
【0061】
図8は、RAM及びNANDフラッシュに対する読み込みを示す概念図である。
【0062】
第1コア23Aは、起動したパネルコントローラーOS47によりRAM31に対するデバイスドライバー49Aを備え、RAM31をパネルアプリ45のRAMディスクとして使用する。
【0063】
具体的には、第1コア23Aは、デバイスドライバー49Aの制御を通じ、RAM31内のパネルアプリ45を同RAM31のパネルOSHeap73上に読み込んで実行する。これにより、パネルアプリ45の読み込みに際してNANDフラッシュ29へのアクセスを省略できる。
【0064】
すなわち、パネルコントローラーOS47でのデマンドページングによるNANDアクセスを無くし、メインコントローラOS55にNAND排他待ちが発生しないようにする。
【0065】
この結果、本実施例では、パネルアプリ45の読み込みが、第2コア25でのメインコントローラーOS55の初期化と並行して行われる(
図9参照)。なお、第1コア23AがNANDフラッシュ29へアクセスして書き込みを行うこともあるが、その場合にのみ上述の実施例1と同様に排他制御を行えばよい。
【0066】
第2コア25は、起動したメインコントローラーOS55によりNANDフラッシュ29に対するデバイスドライバー57を備え、NANDフラッシュ29にアクセスしてメインアプリ53等の処理に必要なデータをRAM31上のメインOSHeap75に読み込んで実行する。
【0067】
図9は、
図6のブートローダーによるブート処理を示すシーケンス図である。
【0068】
図9のように、第1コア23A上で実行されたブートローダー69は、まずメイン起動用プログラムであるメインカーネルプログラム、メインデバイスツリープログラムを順次読み込む(SQ1及びSQ2)。
【0069】
次いで、ブートローダー69は、
図7で説明したようにパネルアプリ45をRAM31上に読み込んで保持しておく(SQ3)。
【0070】
次いで、ブートローダー69は、パネル起動用プログラムであるパネルカーネルプログラム、パネルデバイスツリープログラムを順次読み込む(SQ4及びSQ5)。
【0071】
こうしてメイン起動用プログラムとパネル起動用プログラムの読み込みが完了すると、第2コア25上でメインコントローラーOS55を起動させると共に第1コア23A上でパネルコントローラーOS47にジャンプして起動させる(SQ6及びSQ7)。
【0072】
これにより、第1コア23Aは、パネルコントローラーOS47の初期化を行い、第2コア25は、メインコントローラーOS55の初期化を行う(SQ8及びSQ9)。
【0073】
パネルコントローラー35の初期化後は、上述のようにメインコントローラーOS55の初期化と並列して、第1コア23AがRAM31内のパネルアプリ45をRAM31のパネルOSHeap73上に読み込んで実行する(
図8参照)。
【0074】
一方、第2コア25は、メインコントローラーOS55の初期化後に上述のようにNANDフラッシュ29にアクセスしてメインアプリ53をRAM31上に読み込んで実行する(SQ10及び
図8参照)。
[実施例2の効果]
本実施例のメモリー排他制御システム39では、第1コア23AがNANDフラッシュ29へアクセスし、必要なデータ(パネル起動用プログラム)を読み込んで処理を実行すると共に処理とは分離した他の処理に必要なデータ(パネルアプリ45)を読み込んでRAM31に保持させる。
【0075】
このため、本実施例では、第2コア25がNANDフラッシュ29へアクセスしている間も、第1コア23AがRAM31内に保持したデータによって処理を実行することができる。
【0076】
結果として、本実施例では、第1コア23A及び第2コア25のNANDフラッシュ29へのアクセスに対する排他制御を軽減することができる。同時に、より効率良くNANDフラッシュ29を使用でき、各コアの待ち時間等も減少することができる。
【0077】
本実施例のメモリー排他制御システム39では、第1コア23Aがブートローダー69として機能してNANDフラッシュ29へアクセスし、パネルコントローラーOS47及びメインコントローラーOS55に必要なパネル側及びメイン起動用プログラムを読み込んで起動処理を実行すると共に起動処理とは分離した処理に必要なパネルアプリ45を読み込んでRAM31に保持させる。
【0078】
このため、本実施例では、パネルコントローラーOS47及びメインコントローラーOS55の起動処理においても、排他制御を軽減、より効率の良いNANDフラッシュ29の使用並びに各コアの待ち時間の減少を図ることができ、且つ起動時間の短縮効果もある。
【0079】
特に、本実施例では、パネルアプリ45のRAM31からの読み込みを、第2コア25によるメインコントローラーOS55の初期化と並行して行うことができるので、より確実に排他制御を軽減、効率の良いNANDフラッシュ29の使用、各コアの待ち時間等の減少、並びに起動時間の短縮を図ることが可能となる。
【0080】
その他、本実施例においても、上記実施例1と同様の作用効果を奏することができる。
[変形例]
図9のシーケンスは、
図10のように変更することも可能である。
図10は、変形例に係るブートローダーによるブート処理を示すシーケンス図である。
【0081】
本変形例では、
図10のように、パネルアプリ45及びパネル起動用プログラムの読み込みに並行してメインコントローラーOS55の初期化を行わせる。
【0082】
すなわち、メイン起動用プログラムであるメインカーネルプログラム、メインデバイスツリープログラムを順次読み込むと(SQ1及びSQ2)、メインコントローラーOS55の起動を行う(SQ6)。
【0083】
第2コア25上でメインコントローラーOS55の初期化が行われると(SQ9)、これと並行してパネルアプリ45及びパネル起動用プログラムの読み込みが行われる(SQ3〜SQ5)。
【0084】
メインコントローラーOS55の初期化は、カーネル、各デバイスドライバーの初期化処理が多く実行されるため、NANDフラッシュ29にアクセスしていない非アクセス時間も多く存在する。
【0085】
この非アクセス時間を利用して、第1コア23A上のブートローダー69は、パネルアプリ45及びパネル起動用プログラムをNANDフラッシュ29から効率的に読み込むことができる。
【0086】
この際、ブートローダー69とメインコントローラーOS55との間は、上記実施例1と同様のNANDフラッシュ29のアクセスに対する排他制御を行うことになる。
【0087】
こうしてメインコントローラーOS55の初期化が完了すると、第2コア25は、メインアプリ53の読み込みを行う(SQ10)。一方、第1コア23は、パネルコントローラーOS47にジャンプして起動させ(SQ7)、パネルコントローラーOS47の初期化を行う(SQ8)。
【0088】
かかる変形例では、第1コア23Aがブートローダー69によりメインコントローラーOS55及びパネルコントローラーOS47の起動用プログラムを順次読み込んで起動処理を行わせ、第2コア25が少なくとも第1コア23AでのパネルコントローラーOS47の起動用プログラムの読み込みに並行してメインコントローラーOS55の起動処理を行う。
【0089】
従って、全てのプログラムを読み込んだ後にメイン及びパネル双方のOS47及び55を起動する場合と比較して、メインコントローラOS55の起動待ちによる時間のロスを無くすことができる。
【0090】
すなわち、変形例では、メインコントローラーOS55の起動処理、特に初期化のための非アクセス時間を利用して、第1コア23A上のブートローダー69がパネル起動用プログラムをNANDフラッシュ29から効率的に読み込むことができる。
【0091】
その他、変形例においても、上記実施例2と同様の作用効果を奏することができる。
[その他]
実施例2では、パネルアプリ45をRAM31上に予め読み込んでいたが、これを省略して実施例1と同様にしてブートローダー69とメインコントローラーOS55の起動処理とを並列して行うことも可能である。
【0092】
また、上記実施例では、プロセッサー13を、単一のマルチコアプロセッサーとしていたが、例えば複数のシングルコアプロセッサーやマルチコアプロセッサーを適宜組み合わせた構成とすることも可能である。