説明

情報処理装置

【課題】動作速度の異なる主記憶装置を効率よく利用する。
【解決手段】画像形成装置100は、RAM105と、RAM105よりも高速に動作するSRAM103と、ROM104とを有する。ROM104は、ブートローダと、第1の実行プログラムと、第2の実行プログラムとを記憶する。ブートローダは、画像形成装置100の起動直後、第1の実行プログラムをRAM105に、第2の実行プログラムをSRAM103にロードする。第1の実行プログラム及び第2の実行プログラムは、画像形成装置100の組み込み制御プログラムである。第2の実行プログラムが前記組み込み制御プログラムを構成する要素のうち所定のマーキングがされた要素だけで構成され、第1の実行プログラムが残りの要素で構成される。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置に関し、特に、動作速度の異なる主記憶装置を備える装置において当該主記憶装置を効率よく利用する技術に関する。
【背景技術】
【0002】
特許文献1には、複数種類のメモリを搭載する画像形成装置における高速メモリの使用方法に関する方法が開示されている。しかしながら、この特許文献1の方法では、高速メモリに配置されるプログラムは、性能に大きく影響を与える部分だけではなく、性能への寄与が小さい部分も高速メモリに配置されてしまうため、高速メモリを効率よく使用できているとは言えなかった。
【0003】
また、特許文献2には、スワップアウトの制御を行う方法が開示されている。しかしながら、大容量メモリを搭載しない場合にはそのような制御をそもそも実施することができない。
【0004】
また、特許文献3には、メモリデバイスの制御方法とDMAコントローラの制御方法に関する提案がなされているが、既存の高速メモリの有効活用を行うものではなかった。
【発明の概要】
【発明が解決しようとする課題】
【0005】
画像形成装置のような組み込み機器の開発において、新しい機器を出す毎に高機能化、高性能化の要求が高まっている。一方で、価格への要求も強いため、高性能化するからといって高価格な部品をふんだんに使用することは難しい。そのため、いかに機器に搭載されている部品の性能を引き出すか、効率よく使用するかが機器開発における課題となっている。
【0006】
機器に搭載されている部品の中でも、メモリ(主記憶装置)の効率的な使用が高性能化に大きく寄与する。高速なメモリデバイスだけを用いると容量が足りず低速な二次記憶装置へのアクセスが必要となる。そこで動作速度が低速なメモリデバイスも具備するが、その場合、性能への寄与が小さいプログラムを高速なメモリに配置するというような非効率的なメモリの使用が起きてしまうという課題がある。
【0007】
本発明は、上記課題に鑑みてなされたものであって、動作速度の異なる主記憶装置を備える情報処理装置において当該主記憶装置を効率よく利用することが可能な情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【0008】
上記目的を達成するために本発明は、第1の主記憶装置と、前記第1の主記憶装置よりも高速に動作する第2の主記憶装置と、二次記憶装置とを有する情報処理装置であって、前記二次記憶装置は、ブートローダと、第1の実行プログラムと、第2の実行プログラムとを記憶し、前記ブートローダは、前記情報処理装置の起動直後、前記第1の実行プログラムを前記第1の主記憶装置に、前記第2の実行プログラムを前記第2の主記憶装置にロードし、前記第1及び第2の実行プログラムは、前記情報処理装置の組み込み制御プログラムであり、前記第2の実行プログラムが前記組み込み制御プログラムを構成する要素のうち所定のマーキングがされた要素だけで構成されたものであり、前記第1の実行プログラムが残りの要素で構成されたものであることを特徴とする情報処理装置を提供する。
【発明の効果】
【0009】
本発明によれば、動作速度の異なる主記憶装置を備える情報処理装置において当該主記憶装置を効率よく利用することが可能な情報処理装置を提供することが可能となる。
【図面の簡単な説明】
【0010】
【図1】本発明の実施形態のハードウェア構成を示すブロック図である。
【図2】図1のROM104の記憶内容を示すブロック図である。
【図3】図1の画像形成装置100の制御プログラムのC言語ソースコード例である。
【図4】上記実施形態のelfフォーマット形式の概念図である。
【図5】上記実施形態における実行プログラムの生成工程の流れを示す図である。
【図6】図5のリンカによる実行プログラム生成部分を詳細に示す図である。
【図7】上記実施形態におけるリンカスクリプトの内容の一部を示す図である。
【図8】図7のリンカスクリプトにおいて、マーキングされた関数等を集約するための記述が追加されたリンカスクリプトの内容の一部を示す図である。
【図9】上記実施形態において、実行プログラムから実行プログラム1及び実行プログラム2を生成するコマンドを示す図である。
【図10】上記実施形態におけるメモリ空間と実行プログラムの配置に関する概念図である。
【図11】上記実施形態の変形例1において、実行プログラムから実行プログラム1及び実行プログラム2を生成するコマンドを示す図である。
【図12】上記実施形態の変形例2における画像形成装置100の制御プログラムのC言語ソースコード例である。
【図13】上記実施形態の変形例2において、マーキングに優先度が設定されており、関数のみをSRAMに配置する場合のSRAM配置用リンカスクリプトの内容の一部を示す図である。
【発明を実施するための形態】
【0011】
図1に、本実施形態に係る組み込み機器としての画像形成装置100のハードウェア構成を示す。組み込み機器としての画像形成装置100は、システムバスを介してSoC(System-on-a-Chip)101とROM(読み出し専用メモリ)104とRAM(ランダムアクセスメモリ)105が接続されており、SoC101は、チップ上にCPU(中央演算装置)102とSRAM(Static RAM)103を備える。図示の他に、大容量の記憶装置を備えてもよい。
【0012】
図2に、ROM104の記憶内容を示す。ROM104には、画像形成装置100への電源投入時に最初に実行されるソフトウェアプログラムであるブートローダと、実行プログラム1と、実行プログラム2が保存されている。実行プログラム1と実行プログラム2は、圧縮された状態で保存されていてもよい。また、ブートローダは、圧縮ファイルを展開する機能を備えている。
【0013】
実行プログラム1と実行プログラム2は、画像形成装置100の組み込み制御プログラムである。これらが実行される際には、短期的な記憶装置上にプログラムが配置される。実行プログラム1が比較的安価なRAM105に配置される一方、実行プログラム2が高価であるが高速なSRAM103に配置される。このような起動時の動作の説明の前に、まず、実行プログラム1と実行プログラム2の生成工程を以下に説明する。
【0014】
(実行プログラムの生成工程)
実行プログラムの生成(プログラミングやコンパイル等)は、画像形成装置100で行ってもよいが、図示しない汎用のコンピュータで行ってもよい。以下では、画像形成装置100で行うものとする。
【0015】
図3は画像形成装置の実行プログラムのC言語ソースコード例である。ソースコードは、アセンブリ言語、C言語、C++言語にて記述されることが多いが、他の言語を使用することもある。実行プログラム2に含めたい関数には、図中下線部のように関数のマーキングを行う。マーキングには、GCCの拡張機能である関数や変数の属性設定機能(attribute)を使用する。図3にて示されているのは、関数をfast_memセクションに配置するという属性の設定である。
【0016】
ソースコードはコンパイラによってオブジェクトファイルに変換される。このオブジェクトファイルはelfというフォーマットをとっており、複数のセクションから構成されている。図4に、elfフォーマット形式の概念図を示す。
【0017】
図4に示すように、elfフォーマット形式には、代表的には、プログラムの実行コードを含むtextセクション、初期化済みの変数を含むdataセクション、未初期化のデータを含むbssセクションがある。関数属性の設定を行っていない関数は通常textセクションに含まれる。
【0018】
図3中に示される関数のように、関数属性の設定によりfasttextセクションを指定した関数はfasttextセクションに配置される。また、fastdataセクションを指定した関数はfastdataセクションに配置される。
【0019】
図5は、画像形成装置100の実行プログラムの生成の全体のフローである。図5に示すように、ソースコードは、コンパイラ(アセンブラ処理までを含む)によってオブジェクトファイルに変換される。ここで生成されたオブジェクトファイルは、先述の通りelfフォーマットのものであり、元になったソースコードにマーキングを施された関数があれば、その関数はfasttextセクションに配置されている。コンパイラはそれぞれのソースコードに対して処理を行い、オブジェクトファイルを生成する。
【0020】
実行プログラムを生成するために必要なオブジェクトファイルの生成が完了すると、次にリンカによるリンク処理を行うことで実行プログラムが生成される。図6は、図5中のリンク処理に関して拡大して詳細に示すものである。
【0021】
リンカはプログラムを構成する1つ又は複数のオブジェクトファイル並びにライブラリを入力として受け取り、実行プログラムを出力する。リンカは各入力ファイルに含まれる、それぞれのセクションをまとめたものを実行プログラムのセクションとして生成する。この時、リンカにはリンカスクリプトを使用して、入力となるオブジェクトファイル内の情報をどのように配置して実行プログラムを生成するかを指示することができる。
【0022】
図7は、リンカスクリプトの内容の一部である。図7に図示したスクリプトでは先頭から、実行コードの配置される.textセクション、読み出し専用データの配置される.rodataセクション、初期化済みデータの配置される.dataセクションなどが記載されている。その他、実行プログラムを構成するために必要なセクションの配置に関する記述がつづく。マーキングされた関数群を一連の領域に集約して実行プログラムを生成する工程は、リンカスクリプトを使用して実現される。
【0023】
図8は、実行プログラム生成のために使用するオブジェクトファイルに含まれるfasttextセクション、fastdataセクション、及びfastbssセクションに含まれる関数を一カ所に集約するための記述を追加したスクリプトである。この記述により、リンカは入力となる各オブジェクトファイル内にfasttext、fastdata、fastbssの各セクションが存在した場合にはその内容を実行プログラム中のfast_memセクションに配置して実行プログラムを生成する。
【0024】
図9は、実行プログラムから実行プログラム1及び実行プログラム2を生成するコマンドである。実行プログラム1はソースコードにて、マーキングされていなかった関数や変数の集合である。実行プログラム2はソースコードにて、マーキングを行った関数や変数の集合である。ここで使用するobjcopyコマンドは、実行プログラムをelfフォーマットから他の形式に変換したり、実行プログラムの一部だけを取り出す機能を持っている。その両方を同時に行うことも可能である。
【0025】
実行プログラムから実行プログラム1を生成するためにはobjcopyコマンドを使用し、.fast_memセクション以外のセクションを取り出し、主メモリに配置された形式に変換を行う。同様に、実行プログラム2を生成するためにはobjcopyコマンドを使用し、.fast_memセクションのみを取り出す。この工程により、実行プログラムより実行プログラム1及び実行プログラム2が生成される。
【0026】
(画像形成装置の起動時の動作)
図10は、画像形成装置100における実行プログラム1、実行プログラム2、ブートローダの配置と、画像形成装置100の動作時のメモリ空間に関する図である。画像形成装置100は恒久的な記憶装置としてROM104、短期的な記憶装置としてRAM105とSRAM103を持つ(図1)。画像形成装置には通常、高価なSRAMは少量の搭載であり、安価なRAMは多量に搭載されている。実行プログラム1、実行プログラム2、ブートローダは画像形成装置100に搭載のROM104に保存されている(図2)。
【0027】
ブートローダはROM104上にて実行される。
実行プログラム1、実行プログラム2はブートローダにより、それぞれRAM105、SRAM103にロードされる。したがって、図10中における「RAM実行プログラム」が実行プログラム1であり、「SRAM実行プログラム」が実行プログラム2である。ブートローダは実行プログラム1をロードした位置にジャンプし実行プログラム1の実行を開始する。
【0028】
これらの工程を踏まえた実行プログラムの生成工程により、容易に実行プログラム内の各関数や変数の配置をRAM、SRAMで切り替えできるようになり、また、RAM、SRAM上で動作させたいものだけをSRAM上に配置するため、SRAM容量を効率的に使用できるようになる。
【0029】
すなわち、本実施形態によれば、画像形成装置の組み込み制御プログラムのうち高速に動作させたい部分だけを高速に動作する主記憶上に配置することが容易にできるようになるので、高価なメモリを効率的に使用することができ、また、製品価格を抑えたまま製品の高性能化を図ることができる。
【0030】
(非動作時の実行プログラム1、2を圧縮する場合)
実行プログラム1、2が圧縮されている場合の、画像形成装置100の起動時の動作は次のようになる。このとき、実行プログラム1、実行プログラム2が圧縮された形式で画像形成装置100の二次記憶装置であるROM104に保存されている。実行プログラム1、実行プログラム2の生成にいたる工程は上述の工程の通りである。
【0031】
objdcopyコマンドにより生成された実行プログラム1、実行プログラム2は、それぞれファイル圧縮コマンドにより圧縮され、ROM104に保存される。ファイルの圧縮はzip方式やbzip方式など一般的に使用されるものが使用できる。図10に示されるように、ブートローダ、実行プログラム1、実行プログラム2は画像形成装置100に搭載のROM104に保存される。このとき、実行プログラム1および実行プログラム2は先述のとおり、圧縮された状態で保存される。
【0032】
画像形成装置100の電源投入により、ROM104に保存されたブートローダが実行される。ブートローダは図2に示すように圧縮ファイルの展開機能を備える。ブートローダは実行プログラム1をROM104より読み出し、実行プログラム1が圧縮されていれば自身の持つ圧縮ファイル展開機能を使用し、実行プログラム1を展開する。展開した実行プログラム1は主メモリであるRAM105に配置される。
【0033】
次にブートローダは実行プログラム2を読み出し、実行プログラム2が圧縮されていれば同様に圧縮ファイル展開機能を使用し、実行プログラム2を展開する。展開した実行プログラム2はサブメモリであるSRAM103に配置される。ブートローダは実行プログラム1をロードした位置にジャンプし実行プログラム1の実行を開始する。
【0034】
このように非動作時の実行プログラム1、2を圧縮した形式で記憶する場合においては、実行プログラム1、実行プログラム2が圧縮された状態でROM104に保存されているため、保存に必要なROM104の容量が小さくなり、画像形成装置100の価格を下げることができるようになる。
【0035】
(上記実施形態の変形例1)
上述した実施形態は、以下の変形例1、2のように変形して実施することもできる。本変形例1においては、実行プログラム2をマーキングした関数のみで構成する例を示す。
【0036】
実行プログラムを生成するまでの手順に関しては、上記実施形態の通りである。実行プログラムには、マーキングされていない関数、変数、マーキングされた関数、変数がelf形式にて含まれている。実行プログラム1には、マーキングされていない関数、変数、マーキングされた変数を含むので、図11(1)のコマンドにてマーキングされた関数以外の部分を抽出し、メモリに配置した際の形式で作成する。実行プログラム2には、マーキングされた関数のみを含むので、図11(2)のコマンドにてマーキングされた関数のみを抽出し、メモリに配置した際の形式で作成する。
【0037】
上記手順にて作成した実行プログラム1及び実行プログラム2をそのまま画像形成装置100のROM104に保存する場合、プログラム生成後の流れは上記実施形態の通りである。また、実行プログラム1及び実行プログラム2のどちらか一方、もしくは両方を圧縮して画像形成装置100のROM104に保存する場合、プログラム生成後の流れは上記実施形態における「非動作時の実行プログラム1、2を圧縮する場合」の通りである。
【0038】
この変形例1によれば、マーキングした関数及び変数の中から、実行プログラム2の作成を関数のみで作成するので、限られた高速メモリをどのように使用すればより効率的かを検証することが容易に行えるようになる。
【0039】
(上記実施形態の変形例2)
本変形例2においては、上記実施形態におけるマーキングに優先度を持たせる。画像形成装置100の性能向上のためにSRAM103に配置したい関数や変数には、それぞれをSRAM103に配置したときの効果が異なっている。つまり、それぞれどのぐらいの性能向上が見込まれるかが異なっている。
【0040】
性能向上のためにSRAM103に配置したいものの中でも優先度があるため、図12のように、マーキングにも複数種類を準備することができる。図12は、本変形例2における画像形成装置100の組み込み制御プログラム(実行プログラム)のC言語のソースコード例である。関数や変数に対してマーキングを行う際には、それぞれの効果の大きさから優先度を割り振ったマーキングを適用する。図12においては、数字の小さいマークを優先度が高いものとしている。
【0041】
図13に、マーキングに優先度が設定されており、関数のみをSRAMに配置する場合のSRAM配置用リンカスクリプトを示す。リンカは、リンカスクリプトにのっとり各優先度毎に、入力されたオブジェクトファイルから各セクションを収集する。図12と図13に示した例では、.fasttextセクションには、優先度3のものまでが収集され、実行プログラムが生成される。生成された実行プログラムから、実行プログラム1、実行プログラム2を生成する手順からそれ以後の手順に関しては先述の実施形態の通りである。
【0042】
本変形例2によれば、優先度により高速メモリに配置する関数や変数を変更することができるので、高速メモリの容量変化の際の対応が容易になる。
【0043】
なお、上述した実施形態(変形例を含む)では、高速動作する主記憶装置としてSoC101が内蔵するSRAM103を利用した。高速動作する主記憶装置としてSoC101が内蔵するSRAM103を利用することで、別部品として高価なメモリを搭載する必要がなくなり、製品に搭載の部品を有効活用することができる。
【符号の説明】
【0044】
100 画像形成装置
101 SoC
102 CPU
103 SRAM
104 ROM
105 RAM
【先行技術文献】
【特許文献】
【0045】
【特許文献1】特開平11−194973号公報
【特許文献2】特開2010−003076号公報
【特許文献3】特開2005−025724号公報

【特許請求の範囲】
【請求項1】
第1の主記憶装置と、
前記第1の主記憶装置よりも高速に動作する第2の主記憶装置と、
二次記憶装置とを有する情報処理装置であって、
前記二次記憶装置は、ブートローダと、第1の実行プログラムと、第2の実行プログラムとを記憶し、
前記ブートローダは、前記情報処理装置の起動直後、前記第1の実行プログラムを前記第1の主記憶装置に、前記第2の実行プログラムを前記第2の主記憶装置にロードし、
前記第1及び第2の実行プログラムは、前記情報処理装置の組み込み制御プログラムであり、前記第2の実行プログラムが前記組み込み制御プログラムを構成する要素のうち所定のマーキングがされた要素だけで構成されたものであり、前記第1の実行プログラムが残りの要素で構成されたものである
ことを特徴とする情報処理装置。
【請求項2】
前記第1及び第2の実行プログラムは、前記組み込み制御プログラムのソースコードに記載されている前記要素のうち前記第2の実行プログラムに組み入れる要素に前記所定のマーキングが施された後、コンパイラがコンパイルし、リンカがリンク処理をして生成され、
前記リンカは、前記所定のマーキングが施された要素をまとめて前記第2の実行プログラムを生成し、残りから前記第1の実行プログラムを生成することを特徴とする請求項1記載の情報処理装置。
【請求項3】
前記所定のマーキングには、優先度が設定され、
前記リンカは、前記第2の主記憶装置の容量に合わせて、前記優先度の高いマーキングが施された要素を優先して前記第2の実行プログラムを生成することを特徴とする請求項2記載の情報処理装置。
【請求項4】
前記第1及び第2の実行プログラムは、前記二次記憶装置に圧縮された状態で記憶されており、
前記ブートローダは、圧縮ファイルの展開機能を備え、前記情報処理装置の起動時に、前記圧縮ファイルの展開機能により圧縮された状態の前記第1及び第2の実行プログラムを展開して、前記第1の実行プログラムを前記第1の主記憶装置に、前記第2の実行プログラムを前記第2の主記憶装置にロードすることを特徴とする請求項1から3のいずれか1項記載の情報処理装置。
【請求項5】
前記要素が、複数の関数及び複数の変数の集合であり、前記第2の実行プログラムは、前記要素のうち、前記所定のマーキングがされた前記関数だけで構成されたものであることを特徴とする請求項1から4のいずれか1項記載の情報処理装置。
【請求項6】
前記第2の主記憶装置がSoCに内蔵のSRAMであることを特徴とする請求項1から5のいずれか1項記載の情報処理装置。

【図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

【図12】
image rotate

【図13】
image rotate