(57)【要約】【課題】特定の外部装置に負荷が集中するのを抑制する。【解決手段】フラッシュＲＯＭ（ＲＯＭ）をそれぞれ備えたユニット（外部装置）１０〜４０と相互通信可能な電子制御装置は、各ユニット１０〜４０について、ＲＯＭの空き領域及びＲＯＭへの格納対象のデータの容量に基づいて、格納対象のデータの容量が大きい順に、当該データの格納先をユニット１０〜４０に分散させるように決定する。その際、電子制御装置は、各データについて、δ（＝空き領域（≧容量）−容量）が最も小さいＲＯＭを備えたユニットを選定し、選定したユニットが先に決定した格納先と重複しない場合は選定したユニットを格納先に決定する一方、重複する場合は選定したユニットを除外してユニットを選定し直す。そして、電子制御装置は、格納対象のそれぞれのデータについて決定した格納先のユニットに当該格納対象のデータを格納させる。【選択図】図６
2020154853.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリをそれぞれ備えた複数の外部装置と相互通信可能に接続された電子制御装置であって、
各外部装置について、前記不揮発性メモリのデータ格納状態及び前記不揮発性メモリへの格納対象のデータの容量に基づいて、前記格納対象のデータの格納先を前記複数の外部装置に分散させるように決定し、
前記格納対象のそれぞれのデータについて決定した格納先の外部装置に当該格納対象のデータを格納させる、電子制御装置。
【請求項２】
前記格納対象のそれぞれのデータの格納先を容量が大きい順に決定する、請求項１に記載の電子制御装置。
【請求項３】
前記格納対象のそれぞれのデータについて、その容量以上の空き領域を有する不揮発性メモリを備えた外部装置の中から前記空き領域と前記容量との差が最も小さい不揮発性メモリを備えた外部装置を選定する、請求項２に記載の電子制御装置。
【請求項４】
前記格納対象のそれぞれのデータについて、その容量以上の空き領域を有する不揮発性メモリを備えた外部装置の中から前記空き領域が最も大きい不揮発性メモリを備えた外部装置を選定する、請求項２に記載の電子制御装置。
【請求項５】
前記不揮発性メモリは、所定サイズのブロックごとにデータを消去可能なフラッシュＲＯＭであり、
前記不揮発性メモリに格納された過去数回分のデータのうち新たに格納先を決定したデータよりも所定回数だけ過去に格納先を決定したデータを消去可能と判定し、
消去可能と判定されたデータのみを格納する第１のブロックの空き領域が第１の閾値以下のときに、前記第１のブロックを有する外部装置に当該第１のブロックのデータを消去させる、請求項１〜請求項４のいずれか１つに記載の電子制御装置。
【請求項６】
消去可能と判定されたデータ及び消去可能と判定されていないデータを格納する第２のブロックのデータ格納領域から前記消去可能と判定されたデータの容量を減算した値が前記第１の閾値以下の場合において、
前記第２のブロックを有する外部装置を格納先に決定したデータの容量に前記消去可能と判定されていないデータの容量を加算した値が第２の閾値以下のときに、前記第２のブロックを有する外部装置に前記消去可能と判定されていないデータを他のブロックへコピーさせて前記第２のブロックのデータを消去させる、請求項５に記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の外部装置と相互通信可能に接続された電子制御装置に関する。
【背景技術】
【０００２】
特許文献１には、不揮発性メモリをそれぞれ備えると共に相互通信可能に接続された複数の電子制御装置の少なくとも１つが、不揮発性メモリの空き領域不足のため自装置内に格納できないデータを有するとき、このデータを他の電子制御装置に送信して格納させることが記載されている。その際、データの格納先は、他の電子制御装置のうち空き領域が最も大きい不揮発性メモリを備えた電子制御装置に決定される。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１３−８４２８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、特許文献１では、例えば、自装置内に格納できないデータを有する電子制御装置が複数存在する場合には、空き領域が最も大きい不揮発性メモリを備えた１つの電子制御装置に複数のデータが集中して送信されるおそれがあった。したがって、複数のデータの格納先に決定された電子制御装置では、受信した複数のデータを不揮発性メモリに順次書き込んで格納するため、書き込み時間が長くなるなど処理負荷が高くなるおそれがあった。
【０００５】
そこで、本発明は、特定の外部装置に負荷が集中するのを抑制することのできる電子制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
そのため、不揮発性メモリをそれぞれ備えた複数の外部装置と相互通信可能に接続された電子制御装置は、各外部装置について、不揮発性メモリのデータ格納状態及び不揮発性メモリへの格納対象のデータの容量に基づいて、格納対象のデータの格納先を複数の外部装置に分散させるように決定し、
格納対象のそれぞれのデータについて決定した格納先の外部装置に当該格納対象のデータを格納させる。
【発明の効果】
【０００７】
電子制御装置によれば、特定の外部装置に負荷が集中するのを抑制することができる。
【図面の簡単な説明】
【０００８】
【図１】複数のコントロールユニットを含む電子制御システムの一例を示すシステム構成図である。
【図２】あるコントロールユニット内でのデータの移動を説明するための図である。
【図３】コントロールユニット間でのデータの移動を説明するための図である。
【図４】電子制御システムの管理ユニットが実行するセルフシャットオフ処理の一例を示すフローチャートである。
【図５】管理ユニットが作成するテーブルの一例を示す図である。
【図６】管理ユニットが実行する第１の格納先決定処理の一例を説明するための図である。
【図７】第１の格納先決定処理の一例を説明するための図である。
【図８】第１の格納先決定処理の一例を示すフローチャートである。
【図９】第１の格納先決定処理の一例を示すフローチャートである。
【図１０】第２の格納先決定処理の変形例を説明するための図である。
【図１１】第２の格納先決定処理の変形例を説明するための図である。
【図１２】セルフシャットオフ処理の変形例を示すフローチャートである。
【図１３】管理ユニットが実行する消去処理の一例を示すフローチャートである。
【図１４】消去処理の一例を説明するための図である。
【図１５】消去処理の一例を説明するための図である。
【発明を実施するための形態】
【０００９】
以下、添付図面を参照しつつ本発明を実施するための実施形態について説明する。
図１は、車両に搭載された電子制御システムの一例を示すシステム構成図である。
【００１０】
電子制御システム１は、車載機器を電子制御するための複数のコントロールユニットを備えている。車載機器としては、例えば、内燃機関（エンジン）に設けられた燃料噴射装置、点火装置、吸気バルブ又は排気バルブの開閉タイミングを変更する可変バルブタイミング機構（ＶＴＣ：Valve Timing Control）用のアクチュエータ、エンジンの圧縮比を変更する可変圧縮比機構（ＶＣＲ：Variable Compression Ratio）用のアクチュエータなどのエンジン周辺の車載機器が挙げられる。
【００１１】
上述のコントロールユニットの一例として、燃料噴射装置及び点火装置を制御するコントロールユニット１０について説明する。コントロールユニット１０は、例えば、他の車載機器を制御するコントロールユニット２０、３０、４０とＣＡＮ（Controller Area Network）５０を介して通信可能に接続されている。但し、これに限るものではなく、ＣＡＮ５０に代えて、ＦｌｅｘＲａｙ（登録商標）、ＭＯＳＴ（Media Oriented System Transport）（登録商標）などのネットワークが用いられてもよい。
【００１２】
また、コントロールユニット１０（以下、単に「ユニット１０」という）は、各種制御プログラムを実行する処理装置であるＣＰＵ（Central Processing Unit）１０Ａと、制御プログラムなどが格納されると共に各種データを格納して保持可能な第１の不揮発性メモリであるＥＥＰＲＯＭ（Electrically Erasable Programmable Read Only Memory）１０Ｂと、一時的な記憶領域となるＲＡＭ（Random Access Memory）１０Ｃと、各種データを格納して保持可能な第２の不揮発性メモリであるフラッシュＲＯＭ（Read Only Memory）１０Ｄと、ＣＡＮ５０などのネットワークに接続するためのＣＡＮトランシーバである通信回路１０Ｅと、これらを相互に接続するバス１０Ｆと、を備えている。ここで、フラッシュＲＯＭ１０Ｄとしては、ＥＥＰＲＯＭ１０Ｂよりもデータ格納領域が大きいものが用いられている。
【００１３】
さらに、ユニット１０には、例えば、図示省略の入出力ポート又は入出力回路を介して、エンジン回転速度を検出する回転速度センサ（図示省略）や吸気流量などのエンジン負荷を検出する負荷センサ（図示省略）などの各種センサが接続されている。
【００１４】
また、ＣＰＵ１０Ａは、制御プログラムを読み出してこれを実行することで、各種センサからの信号に基づいて燃料噴射装置及び点火装置を電子制御するための信号を生成する。そして、生成した信号が燃料噴射装置及び点火装置に出力されることにより、燃料噴射装置の燃料噴射量及び噴射時期や点火装置の点火時期が電子制御される。
【００１５】
また、ユニット１０は、例えば、燃料噴射装置及び点火装置や上述の各種センサなどの各デバイスの異常の有無を検出する自己診断機能（ＯＢＤ：On Board Diagnosis）を有している。ＣＰＵ１０Ａは、所定の演算処理を実行することで、各デバイスの故障情報（例えば、各デバイスの異常診断結果や故障警告灯（ＭＩＬ：Malfunction Indication Lamp）のオン／オフなど）、及び、自動車整備工場用の汎用スキャンツール（外部診断ツール）で表示するための情報（診断ツール表示用の情報）を生成する。
【００１６】
上述した演算結果である、故障情報及び診断ツール表示用の情報などのデータは、車両走行中、ＲＡＭ１０Ｃに一時的に記憶された後、ＥＥＰＲＯＭ１０Ｂに移動され格納される。例えば、図２に示すように、ＥＥＰＲＯＭ１０Ｂには、古いデータから順にデータ１、２が既に格納されており、ＲＡＭ１０Ｃに一時的に記憶された最新のデータ３がＥＥＰＲＯＭ１０Ｂに移動され格納される。
【００１７】
ＥＥＰＲＯＭ１０Ｂに格納されるデータとしては、上述した故障情報及び診断ツール表示用の情報の他、例えば、ＦＦＤ（Freeze Frame Data）やＯＢＳ（On Board Snapshot）などの各デバイスの故障（又は異常）発生時の回転速度及び負荷などの情報や、燃料噴射装置及び点火装置を制御するときに学習した学習値が挙げられる。
【００１８】
ここで、ＥＥＰＲＯＭ１０Ｂ及びフラッシュＲＯＭ１０Ｄは、電源供給を遮断しても格納されたデータが消えない不揮発性メモリである点で共通しているが、ＥＥＰＲＯＭ１０ＢはフラッシュＲＯＭ１０Ｄと比較して単価が高い。そこで、ＥＥＰＲＯＭ１０Ｂのデータ格納領域を抑えることでコストを削減している。
【００１９】
しかし、ＥＥＰＲＯＭ１０Ｂのデータ格納領域を抑えることで、データの蓄積によりＥＥＰＲＯＭ１０Ｂの空き領域が早期に少なくなり、保持しておくべきデータを保持することができないおそれがある。そこで、ＥＥＰＲＯＭ１０Ｂのデータ格納領域を補うべく、上述したように、ＥＥＰＲＯＭ１０Ｂよりもデータ格納領域が大きいフラッシュＲＯＭ１０Ｄが別途設けられている。そして、ＥＥＰＲＯＭ１０Ｂの空き領域が少なくなると、ＥＥＰＲＯＭ１０Ｂに格納されたデータのうち格納した時期が最も古いデータはフラッシュＲＯＭ１０Ｄに移動される。
【００２０】
図２は、ＥＥＰＲＯＭ１０Ｂの最も古いデータ１がフラッシュＲＯＭ１０Ｄに移動される例を示している。これにより、ＥＥＰＲＯＭ１０Ｂに格納されていたデータを保持すると共にＥＥＰＲＯＭ１０Ｂの空き領域を増やすことが可能となる。ここで、ＥＥＰＲＯＭ１０ＢからフラッシュＲＯＭ１０Ｄへのデータの移動は、イグニッションスイッチがオフとなってから所定時間経過後に電源を遮断するユニット１０のセルフシャットオフ処理中にのみ実行することができる。
【００２１】
また、フラッシュＲＯＭ１０Ｄは、所定バイト（例えば、３２Ｋバイト、６４Ｋバイトなど）で構成される複数の消去ブロックに区画されている。また、各消去ブロックは、所定バイト（例えば、２５６バイト）で構成される複数の書込ブロックに区画されている。ここで、消去ブロックは、データを消去する最小単位を規定し、書込ブロックは、データを書き込む最小単位を規定する。そして、ＥＥＰＲＯＭ１０ＢからフラッシュＲＯＭ１０Ｄにデータを移動する場合など、フラッシュＲＯＭ１０Ｄの所定の書込ブロックのデータを書き換える場合、その書込ブロックが属する消去ブロックのデータをすべて消去した後、データを消去した消去ブロックに属する書込ブロックにデータを書き込む、という手順を経るようになっている。  
【００２２】
他のコントロールユニット２０〜４０（以下、それぞれ、「ユニット２０」、「ユニット３０」、「ユニット４０」という）も、上述したユニット１０と同様、ＣＰＵ２０Ａ〜４０Ａ、ＥＥＰＲＯＭ２０Ｂ〜４０Ｂ、ＲＡＭ２０Ｃ〜４０Ｃ、フラッシュＲＯＭ２０Ｄ〜４０Ｄ、通信回路（図示省略）及びバス（図示省略）を備えており、それぞれ、各ユニット２０〜４０に対応付けられた車載機器を電子制御する。また、ＥＥＰＲＯＭ２０Ｂ〜４０ＢからフラッシュＲＯＭ２０Ｄ〜４０Ｄへのデータの移動についても、ユニット１０について説明したのと同様に、各ユニット２０〜４０のセルフシャットオフ処理中にのみ実行することができる。
【００２３】
ここで、図３に示すように、ユニット１０において、フラッシュＲＯＭ１０Ｄの空き領域が少なくなってくると、ＥＥＰＲＯＭ１０ＢからフラッシュＲＯＭ１０Ｄへの移動予定のデータの容量がフラッシュＲＯＭ１０Ｄの空き領域よりも大きくなることがある。この場合、ユニット１０において、ＥＥＰＲＯＭ１０Ｂに格納された保持しておくべきデータを、ＥＥＰＲＯＭ１０ＢからフラッシュＲＯＭ１０Ｄに移動できない。このような保持しておくべきデータを自ユニット内のフラッシュＲＯＭに移動できない問題は、他のユニット２０〜４０においても同様に生じるおそれがある。
【００２４】
上述した問題を解決すべく、各ユニット１０〜４０は、ＣＡＮ５０を介して、ＥＥＰＲＯＭ１０Ｂ〜４０Ｂに格納されたデータを相互に送受信可能なように構成されている。したがって、電子制御システム１では、例えば、図３に示すように、ユニット１０のＥＥＰＲＯＭ１０Ｂのデータを自ユニット内のフラッシュＲＯＭ１０Ｄに格納できない場合であっても、他のユニット２０〜４０のフラッシュＲＯＭ２０Ｄ〜４０Ｄのいずれかが十分な空き領域を有していれば、ＥＥＰＲＯＭ１０Ｂのデータを他のユニット２０〜４０のフラッシュＲＯＭ２０Ｄ〜４０Ｄのいずれかに移動して格納することが可能となっている。
【００２５】
そして、電子制御システム１は、図１に示すように、ＥＥＰＲＯＭ１０Ｂ〜４０Ｂに格納されたデータの移動先（格納先）を決定してセルフシャットオフ処理中のユニット１０〜４０のデータ格納動作を管理するコントロールユニット１００を更に備えている。コントロールユニット１００（以下、「管理ユニット１００」という）は、ＣＡＮ５０を介して、ユニット１０〜４０と相互通信可能に接続されている。したがって、管理ユニット１００が、電子制御装置の一例として挙げられ、ユニット１０〜４０が複数の外部装置の一例として挙げられる。但し、管理ユニット１００は、別途設けられることに限るものではなく、ユニット１０〜４０のいずれか１つが管理ユニットとしての機能を有していてもよい。また、フラッシュＲＯＭ１０Ｄ〜４０Ｄが不揮発性メモリの一例として挙げられる。
【００２６】
管理ユニット１００は、ユニット１０〜４０と同様、ＣＰＵ１００Ａ、ＥＥＰＲＯＭ１００Ｂ、ＲＡＭ１００Ｃ、フラッシュＲＯＭ１００Ｄ、通信回路１００Ｅ及びバス１００Ｆを備えている。
【００２７】
ここで、ユニット１０〜４０のＣＰＵ１０Ａ〜４０Ａは、それぞれ、セルフシャットオフ処理中に、自ユニット内のＥＥＰＲＯＭ１０Ｂ〜４０Ｂ及びフラッシュＲＯＭ１０Ｄ〜４０Ｄの空き領域をそれぞれ算出する。
【００２８】
また、ＣＰＵ１０Ａ〜４０Ａは、ＥＥＰＲＯＭ１０Ｂ〜４０Ｂの空き領域を算出すると、例えば、ＥＥＰＲＯＭ１０Ｂ〜４０Ｂの空き領域が所定値（例えば、各ＥＥＰＲＯＭ１０Ｂ〜４０Ｂのデータ格納領域の２０％）以下であるか否かを判定する。そして、ＣＰＵ１０Ａ〜４０Ａは、ＥＥＰＲＯＭ１０Ｂ〜４０Ｂの空き領域が所定値以下であると判定すると、ＥＥＰＲＯＭ１０Ｂ〜４０Ｂに格納されたデータのうち格納時期が最も古いデータ、すなわち、セルフシャットオフ処理中にＥＥＰＲＯＭ１０Ｂ〜４０ＢからフラッシュＲＯＭ１０Ｄ〜４０Ｄへの移動予定のデータ（以下、単に「格納対象のデータ」という）の容量を算出する。
【００２９】
そして、ＣＰＵ１０Ａ〜４０Ａは、セルフシャットオフ処理中に、フラッシュＲＯＭ１０Ｄ〜４０Ｄの空き領域を示す第１の情報に加えて、ＥＥＰＲＯＭ１０Ｂ〜４０Ｂの空き領域が所定値以下であると判定した場合は格納対象のそれぞれのデータの容量を示す第２の情報を管理ユニット１００に送信する。
【００３０】
管理ユニット１００は、少なくとも第１の情報及び第２の情報に基づいて、格納対象のそれぞれのデータの格納先をユニット１０〜４０の中から決定する。
【００３１】
以下、管理ユニット１００が実行する初回のセルフシャットオフ処理の詳細について、図４を参照して説明する。また、以下では、フラッシュＲＯＭ１０Ｄ〜４０Ｄ及びフラッシュＲＯＭ１００Ｄを、単に「ＲＯＭ１０Ｄ〜４０Ｄ及びＲＯＭ１００Ｄ」という。
【００３２】
ステップ１０では、管理ユニット１００のＣＰＵ１００Ａは、ユニット１０〜４０から上述の第１の情報及び第２の情報を入力する。但し、第１の情報及び第２の情報は、セルフシャットオフ処理中、すなわち、イグニッションスイッチがオフとなってから入力されることに限るものではない。例えば、各ユニット１０〜４０が、イグニッションスイッチがオンの場合であって処理負荷が小さいバックグラウンドタスクの実行中に、第１の情報及び第２の情報を算出し、第１の情報及び第２の情報を管理ユニット１００に送信してもよい。この場合、管理ユニット１００では、例えば、各ユニット１０〜４０から受信した第１の情報及び第２の情報をＲＡＭ１００Ｃに記憶するようにして、イグニッションスイッチがオフとなったときにこれらの情報を読み出すようになっていてもよい。
【００３３】
ステップ１２では、ＣＰＵ１００Ａは、各ユニット１０〜４０においてユニット内格納を優先するように設定されているか否かを判定する。ここで、本明細書において、「ユニット内格納」とは、ユニット１０〜４０のそれぞれが、自ユニット内の格納対象のデータを自ユニット内のＲＯＭ１０Ｄ〜４０Ｄに移動して格納することを意味する。
【００３４】
ステップ１２の判定は、例えば、管理ユニット１００のＥＥＰＲＯＭ１００Ｂ又はＲＯＭ１００Ｄに予め保存された、各ユニット１０〜４０のユニット内格納を優先するか否かを示す設定情報をＣＰＵ１００Ａが読み込むことにより実行される。但し、各ユニット１０〜４０の設定情報は、それぞれ、自ユニット内のＥＥＰＲＯＭ１０Ｂ〜４０Ｂ又はＲＯＭ１０Ｄ〜４０Ｄに予め保存されていてもよい。この場合、各ユニット１０〜４０は、この設定情報を管理ユニット１００に送信する。すなわち、管理ユニット１００は、ステップ１０において第１の情報及び第２の情報に加えて各ユニット１０〜４０から上述した設定情報を入力するようになっていてもよい。
【００３５】
ステップ１２において、ＣＰＵ１００Ａは、ユニット１０〜４０がユニット内格納を優先するように設定されていると判定すると、処理をステップ１４に進める。
【００３６】
ステップ１４では、ＣＰＵ１００Ａは、第１の情報及び第２の情報に基づいて、ユニット１０〜４０のうち、ユニット内格納不可なユニットが少なくとも１つ存在するか否かを判定する。例えば、ＣＰＵ１００Ａは、ユニット１０〜４０毎に、自ユニット内のＲＯＭの空き領域が自ユニット内の格納対象のデータの容量以上であるか否かを判定する。そして、ＣＰＵ１００Ａは、ユニット１０〜４０の少なくとも１つにおいて、自ユニット内のＲＯＭの空き領域が自ユニット内の格納対象のデータの容量未満である場合、ユニット内格納不可なユニットが少なくとも１つ存在すると判定して（ＹＥＳ）、処理をステップ１６に進める。
【００３７】
処理がステップ１６に進んだ場合、ステップ１４でユニット内格納不可なユニットが少なくとも１つ存在すると判定されている。例えば、ユニット１０のみにおいてユニット内格納不可となっている場合、ユニット１０の格納対象のデータを保持するためには、他のユニット２０〜４０に送信して格納させる必要がある。そこで、ステップ１６では、第１の情報及び第２の情報に基づいた後述するステップ２０の処理である第１の格納先決定処理の実行のために、ＣＰＵ１００Ａは、まず、ユニット１０〜４０のデータ数を把握する。すなわち、ステップ１６では、ＣＰＵ１００Ａは、ＥＥＰＲＯＭ１０Ｂ〜４０ＢからＲＯＭ１０Ｄ〜４０Ｄへの移動予定のデータ数（＝Ｎ）を把握する。例えば、ＣＰＵ１０Ａ〜４０Ａの全てがＥＥＰＲＯＭ１０Ｂ〜４０Ｂの空き領域が所定値以下と判定していれば、ステップ１０で入力される第２の情報、すなわち、データの容量を示す情報は４個であるので、Ｎは４となる（Ｎ＝４）。但し、このフローチャートは、Ｎ＝４に限るものではなく、格納対象のデータ数が１以上であり且つ各データの格納先となり得るユニットの数以下であればいかなる数であっても適用可能である。例えば、ユニット１０〜４０のうち、ユニット４０のみにおいてＥＥＰＲＯＭ４０Ｂの空き領域が所定値以下でないと判定されていれば、Ｎ＝３（１≦Ｎ≦ユニット数＝４）となる。同様に、このフローチャートは、ユニット数が４個である場合に限るものではなく、ユニット数は２個以上であればいかなる数であっても適用可能である。
【００３８】
ステップ１８では、ＣＰＵ１００Ａは、Ｎ個のデータの容量同士を比較して各データに優先順位を付け、優先順位が第１位〜第Ｎ位のデータの容量ＲｎをそれぞれＲ１〜ＲＮにセットする。尚、各データについて容量が同じものがある場合、例えば、ユニット１０〜４０に、それぞれが制御する車載機器の重要度などに基づいた優先順位を予め付けておき、この優先順位に応じて格納対象のデータに優先順位を付けてもよい。そして、ステップ２０では、ＣＰＵ１００Ａは、詳細を後述する第１の格納先決定処理を実行する。尚、第１の格納先決定処理は、ユニット１０〜４０がユニット内格納を優先するように設定されている場合の格納先決定処理である。
【００３９】
また、ステップ１２において、ＣＰＵ１００Ａは、全てのユニット１０〜４０がユニット内格納を優先するように設定されていないと判定した場合、処理をステップ２２に進める。ステップ２２及びこれに続くステップ２４の処理は、それぞれ、上述のステップ１６及びステップ１８の処理と同様であり、説明を省略する。ステップ２６では、ＣＰＵ１００Ａは、詳細を後述する第２の格納先決定処理を実行する。第２の格納先決定処理は、ユニット１０〜４０がユニット内格納を優先するように設定されていない場合の格納先決定処理である。
【００４０】
一方、ステップ１４において、ＣＰＵ１００Ａは、ユニット１０〜４０の全てにおいて、自ユニット内のＲＯＭの空き領域が自ユニット内の格納対象のデータの容量以上である場合、全てのユニット１０〜４０がユニット内格納可能であると判定して（ＮＯ）、処理をステップ２８に進める。
【００４１】
ステップ２８では、ＣＰＵ１００Ａは、全てのユニット１０〜４０にユニット内格納させるべく、各ユニット１０〜４０の格納対象のデータの格納先を自ユニットに決定する。
【００４２】
ステップ２０の第１の格納先決定処理、ステップ２６の第２の格納先決定処理及びステップ２８の処理では、ＣＰＵ１００Ａは、例えば、図５に示すテーブルを作成する。
【００４３】
図５に示すテーブルは、作成回数、ユニット名、データＩＤ、容量、空き領域、及び、格納先ＩＤの関係を示している。作成回数は、このテーブルの作成回数であり、第１の格納先決定処理又は第２の格納先決定処理の実行回数とステップ２８の処理の実行回数との合計を意味する。初回の処理では、作成回数は「ｔ＝１」となり、その後、例えば、第１の格納先決定処理又は第２の格納先決定処理とステップ２８の処理とが合計３回実行された場合、作成回数は、「ｔ＝４」となる。ユニット名Ａ、Ｂ、Ｃ、Ｄは、それぞれ、ユニット１０、ユニット２０、ユニット３０、ユニット４０に対応している。データＩＤは、ＥＥＰＲＯＭ１０Ｂ〜４０ＢからＲＯＭ１０Ｄ〜４０Ｄへの移動予定のデータ、すなわち、各ユニット１０〜４０の格納対象のデータのデータ名に対応している。例えば、ｔ＝１におけるユニット１０の格納対象のデータのデータ名を、ユニット１０のユニット名と作成回数とを組み合わせた「Ａ−１」としている。容量は、各ユニット１０〜４０の格納対象のデータの容量に対応している。空き領域は、ＲＯＭ１０Ｄ〜４０Ｄの空き領域に対応している。格納先ＩＤは、第１の格納先決定処理、第２の格納先決定処理又はステップ２０の処理で格納先に決定されたユニットのユニット名と、格納先のユニットが備えるＲＯＭ１０Ｄ〜４０Ｄのブロック番号（より詳細には、格納対象のデータを書き込む予定の書込ブロックが属する消去ブロックのブロック番号）とを組み合わせたものに対応している。図５では、例えば、データＩＤ「Ｂ−１」、すなわち、ユニット２０の格納対象のデータの格納先がユニット４０のＲＯＭ４０Ｄのブロック番号「００１」に決定され、格納先ＩＤが「Ｄ＿００１」となっている。
【００４４】
また、図５に示すｔ＝１のテーブルは、例えば、データＩＤ「Ｃ−１」（すなわち、ユニット３０の格納対象のデータ）の格納先が「Ａ＿００１」（すなわち、ユニット１０のＲＯＭ１０Ｄのブロック番号００１）となっているなど、各ユニット１０〜４０において、自ユニット内の格納対象のデータの格納先が他のユニットに決定された場合を示している。
【００４５】
一方、図５に示すｔ＝４のテーブルは、ユニット１０〜４０の全てにおいて、自ユニット内の格納対象のデータの格納先が自ユニットに決定された場合、すなわち、ステップ２８の処理が実行された例を示している。また、処理がステップ１２からステップ２２に進んで第２の格納先決定処理が実行された場合においても、ユニット内格納不可なユニットの有無に関わらず各データの格納先が決定されるため、第２の格納先決定処理の結果がステップ２８と同じ結果となる場合がある。
【００４６】
ＣＰＵ１００Ａは、ステップ２０、ステップ２６又はステップ２８の処理で格納先を決定すると、処理をステップ３０に進める。ステップ３０では、ＣＰＵ１００Ａは、ユニット１０〜４０のＣＰＵ１０Ａ〜４０Ａに対して、自ユニット内の格納対象のデータをステップ２０、ステップ２６又はステップ２８で決定した格納先が備えるＲＯＭ１０Ｄ〜４０Ｄに格納するように指示する。要するに、管理ユニット１００は、格納対象のそれぞれのデータについて決定した格納先のユニット１０〜４０に当該格納対象のデータを格納させる。
【００４７】
より詳細には、処理がステップ２０又はステップ２６からステップ３０に進んだ場合、ＣＰＵ１００Ａは、ＣＰＵ１０Ａ〜４０Ａのそれぞれに対して、自ユニット内の格納対象のデータをステップ２０又はステップ２６で決定した格納先のユニットに送信するように指示すると共に、格納先のユニットのＣＰＵ１０Ａ〜４０Ａのそれぞれに対して、データを受信して格納するように指示する。例えば、図５において、作成回数「ｔ＝１」のデータＩＤ「Ｄ−１」（すなわち、ユニット４０の格納対象のデータ）の格納先は、格納先ＩＤ「Ｂ＿００１」（すなわち、ユニット２０のＲＯＭ２０Ｄのブロック番号００１）に決定されている。したがって、ＣＰＵ１００Ａから指示を受けたユニット４０のＣＰＵ４０Ａは、自ユニット内の格納対象のデータをユニット２０に送信する。次いで、ユニット２０のＣＰＵ２０Ａは、受信したデータをＲＯＭ２０Ｄのブロック番号００１に属する所定の書込ブロックに書き込む（ブロック番号００１の消去ブロックを書き換える）。
【００４８】
但し、処理がステップ１２からステップ２２に進んだ後にステップ２６の第２の格納先決定処理が実行された場合は、自ユニット内の格納対象のデータの格納先が自ユニットに決定されることもある。例えば、ユニット１０の格納対象のデータの格納先がユニット１０に決定された場合、ＣＰＵ１００Ａは、ユニット１０に対して、自ユニット内の格納対象のデータをＲＯＭ１０Ｄに格納するように指示する。
【００４９】
一方、処理がステップ２８からステップ３０に進んだ場合、全てのユニット１０〜４０がユニット内格納可能であるので、ＣＰＵ１００Ａは、ユニット１０〜４０のそれぞれに対して、自ユニット内の格納対象のデータを自ユニット内のＲＯＭに格納するように指示する。
【００５０】
ステップ３２では、ＣＰＵ１００Ａは、格納対象のデータの格納が完了した否かを判定する。格納対象のデータの格納には、各ＲＯＭ１０Ｄ〜４０Ｄの書き換え速度（消去ブロックの消去速度及び当該消去ブロックに属する全ての書込ブロックへの書き込み速度）と格納対象のそれぞれのデータの容量との関係からある程度の時間を要する。そのため、ステップ３０でデータを受信したＣＰＵ１０Ａ〜４０Ａ又はユニット内格納を実行するＣＰＵ１０Ａ〜４０Ａは、ＲＯＭ１０Ｄ〜４０Ｄへのデータの格納が完了したことを示す信号（格納完了信号）をＣＰＵ１００Ａに送信する。
【００５１】
ステップ３２において、ＣＰＵ１００Ａは、ＣＰＵ１０Ａ〜４０Ａから格納完了信号を受信すると、格納が完了したと判定し、処理をステップ３４に進める。一方、ＣＰＵ１００Ａは、格納対象のデータの格納を実行するＣＰＵ１０Ａ〜４０Ａの少なくとも１つから格納完了信号を受信していない場合、格納が完了していないと判定し、格納対象のデータの格納を実行するＣＰＵ１０Ａ〜４０Ａの全てから格納完了信号を受信するまでステップ３２の処理を続ける。
【００５２】
ステップ３４では、ＣＰＵ１００Ａは、管理情報を作成して保存し、処理を終了させる。すなわち、管理ユニット１００及びユニット１０〜４０は、電源を遮断する。これにより、管理ユニット１００及びユニット１０〜４０の初回のセルフシャットオフ処理が終了する。ここで、管理情報とは、例えば、データＩＤの所在情報、すなわち、格納対象のそれぞれのデータをどのＲＯＭ１０Ｄ〜４０Ｄのどのブロック番号に格納したかを示す情報、格納対象のデータの容量を示す情報、及び、データ格納前のＲＯＭ１０Ｄ〜４０Ｄの空き領域から格納したデータの容量を減算して求めたデータ格納後のＲＯＭ１０Ｄ〜４０Ｄの空き領域を示す情報を含む、ＲＯＭ１０Ｄ〜４０Ｄのデータ格納状態を意味する。
【００５３】
以下、ステップ２０の第１の格納先決定処理及びステップ２６の第２の格納先決定処理の詳細について、図６、７に示す例を参照して説明する。第１の格納先決定処理は、可能な限りユニット内格納を優先するように格納先を決定する点で第２の格納先決定処理とは異なる。これは、自ユニットに格納した方が他のユニットのＲＯＭにデータを書き込むことで格納する場合よりも処理時間を短縮させることができるからである。但し、第１の格納先決定処理及び第２の格納先決定処理は基本的には同じ処理を行う。したがって、以下では、第１の格納先決定処理を主として説明するが、必要に応じて第２の格納先決定処理について説明する。尚、第１の格納先決定処理及び第２の格納先決定処理は、以上説明した初回のセルフシャットオフ処理だけでなく詳細を後述する２回目以降のセルフシャットオフ処理においても同様の処理を行う。
【００５４】
図６は、例えば、ユニット１０〜４０の格納対象のデータの容量のそれぞれが、１０バイト、１バイト、９バイト、５バイトであり、ＲＯＭ１０Ｄ〜４０Ｄの空き領域のそれぞれが、８バイト、５０バイト、５バイト、２０バイトである状況を示している。すなわち、図６は、ユニット１０、３０がユニット内格納不可であり、ユニット２０、４０がユニット内格納可能である例（図４に示すステップ１４で「ＹＥＳ」と判定される例）を示している。以下、ユニット１０〜４０の格納対象のデータを、単に「ユニット１０〜４０のデータ」という。
【００５５】
第１の格納先決定処理では、管理ユニット１００は、各ユニット１０〜４０について、ＲＯＭ１０Ｄ〜４０Ｄのデータ格納状態及びＲＯＭ１０Ｄ〜４０Ｄへの格納対象のデータの容量に基づいて、格納対象のデータの格納先をユニット１０〜４０に分散させるように決定する。また、ユニット１０〜４０のデータの格納先は、当該データの容量が大きい順に決定される。そのため、図４のステップ１８及び２４で説明したように、ユニット１０〜４０のデータに対しては、容量が大きいほど高くなるように優先順位が付けられている。図６では、優先順位は、ユニット１０のデータが第１位、ユニット３０のデータが第２位、ユニット４０のデータが第３位、ユニット２０のデータが第４位となる。
【００５６】
ＣＰＵ１００Ａは、ＲＯＭ１０〜４０のうち、優先順位が第１位のデータ（ユニット１０のデータ）を格納可能なＲＯＭとして、ユニット１０のデータの容量以上の空き領域を有するＲＯＭを抽出する。図６では、ユニット１０のデータについて、ＲＯＭ２０Ｄ、４０Ｄが抽出される。
【００５７】
次に、第１の格納先決定処理では、ＣＰＵ１００Ａは、ユニット１０のデータについてユニット内格納可能か否かを判定する。より詳細には、ＣＰＵ１００Ａは、抽出したＲＯＭにユニット１０のＲＯＭ１０Ｄが含まれているか否かを判定する。抽出したＲＯＭにユニット１０のＲＯＭ１０Ｄが含まれている場合、ユニット１０のデータの格納先をＲＯＭ１０Ｄに決定する。但し、図６では、ユニット１０のデータについて抽出されたＲＯＭは、ＲＯＭ２０Ｄ、４０Ｄであるので、ユニット内格納不可と判定される。
【００５８】
ユニット内格納不可の場合、ＣＰＵ１００Ａは、ユニット１０のデータの格納先候補として、抽出したＲＯＭを備えたユニットの中から空き領域とユニット１０のデータの容量との差が最も小さいＲＯＭを備えたユニットを選定する。図６では、ＲＯＭ４０Ｄの空き領域とユニット１０のデータの容量との差（１０バイト＝２０バイト−１０バイト）が、ＲＯＭ２０Ｄの空き領域とユニット１０のデータの容量との差（４０バイト＝５０バイト−１０バイト）よりも小さい。したがって、ＲＯＭ４０Ｄを備えたユニット４０が選定される。すなわち、ＣＰＵ１００Ａは、ユニット１０のデータの格納先候補として、抽出したＲＯＭを備えたユニットの中から空き領域とユニット１０のデータの容量との差が最小となる条件を満たすＲＯＭを備えたユニットを選定する。そして、ＣＰＵ１００Ａは、この条件を満たすＲＯＭ４０Ｄを備えたユニット４０であって、選定したユニット４０を、ユニット１０のデータの格納先に決定する。但し、第２の格納先決定処理では、ユニット内格納可能か否かを判定せずに、上述した条件を満たすＲＯＭを備えたユニットを選定する。この点は、以下で説明する第２位〜第４位のデータの格納先を決定する際も同様である。
【００５９】
ＣＰＵ１００Ａは、第２位〜第４位のデータの格納先候補についても、第１位のデータと同様に、まず、第２位のデータについてユニット内格納可能か否かを判定する。ユニット内格納可能な場合、自ユニットを格納先候補として選定する。しかし、第２位〜第４位のデータについては、選定したユニットが、これよりも前に決定した格納先と重複するおそれがある。そこで、ＣＰＵ１００Ａは、選定したユニットが、これよりも前に決定した格納先と重複するか否かを判定する。ＣＰＵ１００Ａは、選定したユニットがこれよりも前に決定した格納先と重複しないと判定すると、選定したユニットを格納先に決定する。一方、ＣＰＵ１００Ａは、選定したユニットがこれよりも前に決定した格納先と重複すると判定すると、上述した条件を満たすＲＯＭを備えたユニットを選定する。
【００６０】
図６において、第２位のデータ（ユニット３０のデータ）について抽出されるＲＯＭは、ＲＯＭ２０Ｄ、ＲＯＭ４０Ｄの２個である。したがって、まず、第２位のデータについてはユニット内格納不可と判定される。ここで、抽出したＲＯＭにおいて、ＲＯＭ４０Ｄの空き領域（２０バイト）とユニット３０のデータの容量（９バイト）との差が最も小さい。したがって、上述した条件を満たすＲＯＭを備えたユニットとして、ユニット４０が選定される。しかし、ユニット３０のデータの格納先候補として選定したユニット４０は、先に決定した格納先、すなわち、ユニット１０のデータの格納先と重複している。
【００６１】
このように、第２位〜第４位のデータについては、上述した条件を満たすＲＯＭを備えたユニットが、これよりも前に決定した格納先と重複するおそれがある。そこで、ＣＰＵ１００Ａは、第２位〜第４位のデータについて上述した条件を満たすＲＯＭを備えたユニットが、これよりも前に決定した格納先と重複するか否かを判定する。
【００６２】
ＣＰＵ１００Ａは、上述した条件を満たすＲＯＭを備えたユニットがこれよりも前に決定した格納先と重複すると判定すると、抽出したＲＯＭを備えたユニットの中から重複する格納先であるユニット４０を除いて空き領域と第２位のデータの容量との差が最小となる条件を満たすＲＯＭを備えたユニットを新たに選定する。この条件を満たすＲＯＭを備えたユニットとして、ユニット２０が新たに選定される。そして、ＣＰＵ１００Ａは、ユニット３０のデータの格納先を新たに選定したユニット２０に決定する。
【００６３】
第３位のデータ（ユニット４０のデータ）については、４個のＲＯＭ１０Ｄ〜４０Ｄの全てが抽出される。したがって、第３位のデータについてはユニット内格納可能と判定される。すなわち、第３位のデータの格納先候補として、まず、ユニット４０が選定される。しかし、ユニット４０は既に第１位のデータの格納先に決定されているので、重複ありと判定される。この場合も、ＣＰＵ１００Ａは、抽出したＲＯＭを備えたユニットの中から上述した条件を満たすＲＯＭを選定する。そして、上述した条件を満たすＲＯＭ、すなわち、抽出したＲＯＭのうち空き領域とユニット４０のデータの容量との差が最も小さいのはＲＯＭ３０Ｄである。したがって、ユニット４０のデータの格納先候補として、ユニット３０が選定される。選定したユニット３０は、先に決定した格納先、すなわち、それぞれ第１位及び第２位のデータの格納先であるユニット２０及びユニット４０と重複していないので、ユニット４０のデータの格納先に決定される。
【００６４】
第４位のデータ（ユニット２０のデータ）について抽出されるＲＯＭも、第３位のデータと同様、ＲＯＭ１０Ｄ〜４０Ｄの４個である。したがって、第４位のデータについてもユニット内格納と判定されるが、ユニット２０は既に第２位のデータの格納先に決定されている。このため、ユニット２０が第２位のデータの格納先から除かれる。そして、抽出したＲＯＭのうち空き領域とユニット２０のデータの容量との差が最も小さいのはＲＯＭ３０Ｄであるので、ユニット２０のデータの格納先候補として、ユニット３０が選定される。しかし、ユニット３０は、先に決定したユニット４０のデータの格納先と重複する。重複する格納先であるユニット３０のＲＯＭ３０Ｄを除いて空き領域とユニット２０のデータの容量との差が最も小さいのはＲＯＭ１０Ｄであるので、ユニット２０のデータの格納先候補として、ユニット１０が新たに選定される。ユニット１０は、先に決定した格納先と重複していないので、ＣＰＵ１００Ａは、ユニット１０をユニット２０のデータの格納先に決定する。
【００６５】
尚、図６の「格納先のユニット名」の欄には、ユニット内格納優先時の格納先のユニット名から最終的に決定した格納先のユニット名までに選定した格納先のユニットの履歴が示されている。例えば、ユニット３０のデータについての「格納先のユニット名」の欄は、ユニット内格納優先時の格納先であるユニット３０のユニット名「Ｃ」から、上述した条件を満たすが先に決定した格納先と重複するユニット４０のユニット名「Ｄ」を経て、ユニット４０を除いた格納先候補の中から新たに選定されるユニット２０のユニット名「Ｂ」に最終的に決定される様子を示している。但し、第２の格納先決定処理を実行した場合、「格納先のユニット名」の欄の最も左のユニット名が省略された状態で格納先が決定される。
【００６６】
ここで、各データの格納先を重複させずに決定することができない例について図７を参照して説明する。図７では、例えば、図６では２０バイトであったＲＯＭ４０Ｄの空き領域が６バイトとなっている。図７において、上述した第１の格納先決定処理を実行した場合について説明する。まず、第１位のデータであるユニット１０のデータの格納先は、空き領域がユニット１０のデータの容量以上で且つ上述した条件を満たすＲＯＭ２０Ｄを備えたユニット２０に決定される。
【００６７】
一方、第２位のデータであるユニット３０のデータについて抽出されるＲＯＭは、ＲＯＭ２０Ｄの１個のみである。この場合、まず、ユニット内格納不可と判定される。次に、ユニット３０のデータの格納先候補として、上述した条件を満たすＲＯＭを備えたユニットであるユニット２０が選定される。しかし、ユニット２０はユニット１０のデータの格納先と重複する。格納先を重複させずに決定するためには、上述したように、格納先候補を新たに選定する必要がある。しかし、図７では、ユニット３０のデータを格納可能なＲＯＭ、すなわち、抽出したＲＯＭは、ＲＯＭ２０Ｄの１個である。したがって、抽出したＲＯＭを備えたユニットの中からＲＯＭ２０Ｄを備えたユニット２０を除いて空き領域とユニット３０のデータの容量との差が最も小さいＲＯＭを備えたユニットを新たに選定することができない。このような状況では、ユニット３０のデータの格納先は、ユニット１０のデータを格納した後も十分な空き領域を有するＲＯＭ２０Ｄに決定される。すなわち、図７では、ユニット３０のデータを保持するために、ユニット３０のデータの格納先をユニット１０のデータの格納先と重複させる必要がある。
【００６８】
このように、優先順位を付けたデータについて、第ｎ位のデータの容量以上の空き領域を有するＲＯＭが少なくともｎ個以上存在する条件が満たされていない場合、各データの格納先を重複させずに決定することができない。抽出したＲＯＭの中から選定可能な格納先候補は、優先順位が１低くなるたびに１個消えていくからである。
【００６９】
一方、各データの格納先を重複させずに決定可能な例を示す図６では、各データについて、容量以上の空き領域を有するＲＯＭとして抽出されるＲＯＭの数が、決定した優先順位の順位数以上存在している。上述したように、第１位及び第２位のデータについて、抽出されるＲＯＭの数はそれぞれ２個であり、第３位及び第４位のデータについて、抽出されるＲＯＭの数はそれぞれ４個である。すなわち、優先順位を付けたデータ毎に、第ｎ位のデータの容量以上の空き領域を有するＲＯＭが少なくともｎ個以上存在する条件を満たしていれば、各データの格納先を重複させずに決定することができる。
【００７０】
要するに、管理ユニット１００のＣＰＵ１００Ａは、各データの容量及び各ＲＯＭ１０Ｄ〜４０Ｄの空き領域に基づいて、第ｎ位のデータの容量以上の空き領域を有するＲＯＭが少なくともｎ個以上存在する条件を第１の条件として、この第１の条件を満たすか否かを判定する。これにより、ＣＰＵ１００Ａは、各データの格納先を各ＲＯＭ１０Ｄ〜４０Ｄの中から重複させずに決定可能であるか否かを判定する。
【００７１】
より詳細には、各データの格納先を重複させずに決定可能な場合、すなわち、第１の条件を満たす場合、ＣＰＵ１００Ａは、優先順位を付けたそれぞれのデータについて、その容量以上の空き領域を有するＲＯＭを備えたユニットの中から当該空き領域と容量との差が最小となる条件（以下、「第２の条件」という）を満たすＲＯＭを備えたユニットを選定する。ここで、第１の格納先決定処理では、上述したように、第２の条件を満たすＲＯＭを備えたユニットを選定する前にユニット内格納可能か否かを判定する。ユニット内格納可能であれば、自ユニットを格納先候補として選定する。そして、自ユニットが先に決定した格納先と重複しなければ、当該自ユニットを格納先に決定する。したがって、第１の格納先決定処理では、ユニット内格納可能であっても選定した自ユニットが先に決定した格納先と重複する場合又はユニット内格納可能でない場合に第２の条件を満たすＲＯＭを備えたユニットが選定される。但し、第２の格納先決定処理では、ユニット内格納可能か否かを判定せずに、第２の条件を満たすＲＯＭを備えたユニットを選定する。そして、ＣＰＵ１００Ａは、第２の条件を満たすＲＯＭを備えたユニット、すなわち、選定したユニットが先に決定した格納先と重複するか否かを判定する。選定したユニットが先に決定した格納先と重複しない場合、ＣＰＵ１００Ａは、選定したユニットを格納先に決定する。一方、選定したユニットが先に決定した格納先と重複する場合、ＣＰＵ１００Ａは、選定したユニットを除いて第２の条件を満たすＲＯＭを備えたユニットを新たに選定する。新たに選定したユニットが先に決定した格納先と重複しないと判定されれば、新たに選定したユニットが格納先に決定される。
【００７２】
以上説明した第１及び第２の格納先決定処理を実行する管理ユニット１００によれば、格納対象のそれぞれのデータの格納先が複数のユニットに分散するように決定されるので、各データの格納先をユニット１０〜４０の中から可能な限り重複させずに決定することが可能となる。特に、各データについて第１の条件が満たされていれば、各データの格納先の重複を避けることが可能となる。これにより、１つのユニットに複数のデータが集中して送信されるのを抑制することができる。したがって、ユニット１０〜４０のそれぞれにおいて、セルフシャットオフ処理中に各データを並行して書き込むことが可能となる。これにより、例えば、複数のユニットにおける自ユニット内に格納できない複数のデータの全ての格納先が１つのユニットに決定され、格納先に決定されたユニットが他の複数のユニットから受信した複数のデータの書き込み処理を順番に実行する場合と比較して、データの書き込み時間が短くなり、セルフシャットオフ処理にかかる時間を短縮することができる。すなわち、自ユニット内に格納できない複数のデータの格納先が１つのユニットに決定される場合と比較して、特定のユニットにデータを書き込む際の処理負荷が集中するのを抑制することができる。
【００７３】
また、図７で説明した第１の条件を満たさないデータが存在する場合であっても、各データの格納先が重複するのを可能な限り避けることが可能である。例えば、図７では、第３位のデータ（ユニット４０のデータ）及び第４位のデータ（ユニット２０のデータ）については、それぞれ、容量以上の空き領域を有するＲＯＭが４個存在しており、第１の条件が満たされている。また、第１の格納先決定処理では、ユニット内格納が優先されるので、ユニット４０のデータの格納先は、自ユニットであるユニット４０であって、第１位及び第２位のデータの格納先と重複しないユニット４０に決定される。また、ユニット２０のデータの格納先については、自ユニットであるユニット２０が第１位及び第２位のデータの格納先と重複するものの、その後、第２の条件を満たす格納先候補として、第１位〜第３位の格納先と重複しないユニット３０に決定される。
【００７４】
すなわち、図７では、ユニット１０のデータの格納先とユニット３０のデータの格納先とが重複するものの、ユニット２０のデータの格納先及びユニット４０のデータの格納先のそれぞれが他の格納先と重複せずに決定される。この場合も、自ユニット内に格納できない複数のデータの格納先が１つのユニットに決定される場合と比較して、特定のユニットにデータを書き込む際の処理負荷が集中するのを抑制することができる。このように、格納対象の全てのデータについて、第２の条件を満たすＲＯＭを備えたユニットを選定し、選定したユニットが先に決定した格納先と重複するか否かを判定し、必要に応じてユニットを新たに選定し直す処理を繰り返すことで、格納先の重複を可能な限り避けることが可能となる。
【００７５】
上述した第１及び第２の格納先決定処理のうちステップ２０で実行される第１の格納先決定処理のフローチャートについて図８、９を参照して説明する。
【００７６】
ステップ１００では、ＣＰＵ１００Ａは、ｎ＝０（初期値）にセットする。ステップ１０２では、ＣＰＵ１００Ａは、ｎに１を加算する（ｎ＝ｎ＋１にセットする）。すなわち、ステップ２０の処理が開始されてから初めての処理では、ｎ＝０＋１＝１となり、容量Ｒ１を有するデータ、すなわち、優先順位が第１位のデータ（容量Ｒ１）の格納先を決定する。但し、優先順位が付けられていても各データがどのユニット内のデータであるかについて把握可能であることは勿論である。
【００７７】
ステップ１０４では、ＣＰＵ１００Ａは、ＲＯＭ１０Ｄ〜４０Ｄのうち、第ｎ位のデータを格納可能なＲＯＭが存在するか否かを判定する。例えば、ＣＰＵ１００Ａは、ＲＯＭ１０Ｄ〜４０Ｄのうち、空き領域≧Ｒｎを満たすＲＯＭが存在するか否かを判定する。ＣＰＵ１００Ａは、空き領域≧Ｒｎを満たすＲＯＭが存在すると判定すると、第ｎ位のデータを格納可能なＲＯＭが存在すると判定して処理をステップ１０６に進める。
【００７８】
ステップ１０６では、ＣＰＵ１００Ａは、Ｒｎ以上の空き領域を有するＲＯＭ数≧ｎを満たすか否かを判定することで、第ｎ位のデータを格納可能なＲＯＭがその順位数（ｎ個）以上存在するか否かを判定する。すなわち、ＣＰＵ１００Ａは、第ｎ位のデータについて、上述した第１の条件を満たすか否かを判定する。ＣＰＵ１００Ａは、第ｎ位のデータについて第１の条件を満たすと判定すると、処理をステップ１０８に進める。
【００７９】
ステップ１０８では、ＣＰＵ１００Ａは、ＲＯＭ１０Ｄ〜４０Ｄのうち、空き領域≧Ｒｎを満たすＲＯＭを抽出する。
【００８０】
ステップ１１０では、ＣＰＵ１００Ａは、第ｎ位のデータについてユニット内格納可能か否かを判定する。ＣＰＵ１００Ａは、例えば、ステップ１０８で抽出したＲＯＭの中に第ｎ位のデータを有するユニットのＲＯＭが存在するか否かを判定する。そして、ＣＰＵ１００Ａは、ステップ１０８で抽出したＲＯＭの中に第ｎ位のデータを有するユニットのＲＯＭが存在する場合、第ｎ位のデータについてユニット内格納可能と判定する（ＹＥＳ）。ＣＰＵ１００Ａは、ユニット内格納可能と判定すると、第ｎ位のデータの格納先として自ユニットを選定し、処理をステップ１１２に進める。
【００８１】
ステップ１１２では、ＣＰＵ１００Ａは、ステップ１１０で選定したユニットが先に決定したユニット、すなわち、後述するステップ１２０などで決定した格納先と重複するか否かを判定する。ここで、ｎ＝１の場合、処理は未だステップ１２０に進んでいない。したがって、第１位のデータについては、ステップ１１２において重複なしと判定される（ＹＥＳ）。ＣＰＵ１００Ａは、重複なしと判定すると、処理をステップ１２０に進める。
【００８２】
一方、ステップ１１０において、ＣＰＵ１００Ａは、ステップ１０８で抽出したＲＯＭの中に第ｎ位のデータを有するユニットのＲＯＭが存在しない場合、第ｎ位のデータについてユニット内格納可能と判定し（ＮＯ）、処理をステップ１１４に進める。
【００８３】
ステップ１１４では、ＣＰＵ１００Ａは、ステップ１１２で抽出したＲＯＭの空き領域とＲｎとの差（δ）を算出する。
【００８４】
ステップ１１６では、ＣＰＵ１００Ａは、ステップ１１２で抽出したＲＯＭを備えたユニットの中からステップ１１４で算出したδが最小となる条件（δ＝ｍｉｎ）を満たすＲＯＭを備えたユニットを第ｎ位のデータの格納先候補として選定する。すなわち、ＣＰＵ１００Ａは、第ｎ位のデータについて第２の条件を満たすＲＯＭを備えたユニットを選定する。
【００８５】
ステップ１１８では、ＣＰＵ１００Ａは、ステップ１１６で選定したユニットが先に決定したユニットと重複するか否かを判定する。第１位のデータについては、ステップ１１８において重複なしと判定される（ＹＥＳ）。ＣＰＵ１００Ａは、重複なしと判定すると、処理をステップ１２０に進める。
【００８６】
ステップ１２０では、ＣＰＵ１００Ａは、第ｎ位のデータの格納先を決定する。ｎ＝１の場合、ステップ１１２又はステップ１１８で重複なしと判定されるので、第１位のデータの格納先は、ステップ１１２又はステップ１１６で選定したユニットに決定される。
【００８７】
ステップ１２２では、ＣＰＵ１００Ａは、ｎ＝Ｎを満たすか否かを判定する。ＣＰＵ１００Ａは、ｎ＝Ｎを満たすと判定すると処理を図４のステップ３０に戻す。一方、ＣＰＵ１００Ａは、ｎ＝Ｎを満たさないと判定すると、処理をステップ１０２に戻す。例えば、格納対象のデータが４つ存在する場合、すなわち、Ｎ＝４の場合において、ｎ＝１のときはｎ＝Ｎを満たさないので、処理をステップ１０２に戻し、ｎに１を加算する。したがって、ｎ＝２となり、第２位のデータ（容量Ｒ２）の格納先を決定する。
【００８８】
ｎが２以上（ｎ≧２）で且つ処理がステップ１１２又はステップ１１８に進んだ場合、優先順位が第１位〜第ｎ−１位のデータについてステップ１２０で決定した格納先（以下、単に「第１位〜第ｎ−１位のデータの格納先」という）が既に存在している。例えば、ｎ＝２の場合、第２位のデータについてステップ１１０又はステップ１１６で選定したユニットが、第１位のデータの格納先と重複する可能性がある。すなわち、ｎ≧２の場合、ステップ１１２又はステップ１１８では、第ｎ位のデータについてステップ１１０又はステップ１１６で選定したＲＯＭが、第１位〜第ｎ−１位のデータの格納先と重複すると判定される可能性がある。但し、ｎ≧２のときであっても、ステップ１１０又はステップ１１６で選定したＲＯＭが先に決定した格納先と重複しない場合もある。この場合、ＣＰＵ１００は、ステップ１１２又はステップ１１８で重複なしと判定し、処理をステップ１２０に進め、ステップ１１０又はステップ１１６で選定したユニットを格納先に決定する。すなわち、ＣＰＵ１００Ａは、選定したユニットがこれよりも前に決定した格納先と重複しない場合、選定したユニットを格納先に決定する。
【００８９】
一方、ステップ１１２において、ＣＰＵ１００Ａは、重複ありと判定すると（ＮＯ）、処理をステップ１１４に進める。その後の処理については既に述べた通りであり、説明を省略する。また、ステップ１１８において、ＣＰＵ１００Ａは、重複ありと判定すると（ＮＯ）、処理をステップ１２４に進める。
【００９０】
ステップ１２４では、ＣＰＵ１００Ａは、第ｎ位のデータについて、ステップ１１６で選定したユニットを除いて第２の条件（δ＝ｍｉｎ）を満たすＲＯＭを備えたユニットを新たに選定する。ＣＰＵ１００Ａは、ステップ１２４でユニットを新たに選定すると、処理をステップ１１８に戻して、ステップ１２４で新たに選定したユニットが先に決定した格納先と重複するか否かを判定する。
【００９１】
ここで、ｎ＝２の場合、ステップ１２４では、第２位のデータの格納先候補として、第１位のデータの格納先以外のユニットが選定される。したがって、ｎ＝２の場合において処理がステップ１２４からステップ１１８に進んだときは、ステップ１２４で新たに選定したユニットが先に決定した格納先と重複しないと判定され、処理がステップ１２０に進む。そして、ＣＰＵ１００Ａは、ステップ１２４で新たに選定したユニットを第２位のデータの格納先に決定する。
【００９２】
一方、ｎ≧３の場合において処理がステップ１１８に進んだとき、既にｎ≦２のときにステップ１２０で決定した格納先が複数存在している。例えば、第３位のデータ（容量Ｒ３）について処理が初めてステップ１１８に進んだ場合、既に、第１位及び第２位のデータについて決定された格納先が２つ存在している。そのため、第３位のデータについて処理がステップ１２４を経てからステップ１１８に進んだ場合であっても、ステップ１２４で新たに選定したユニットが先に決定した格納先と重複する可能性がある。すなわち、ｎ＝３の場合、ステップ１１６で選定したユニット及びステップ１２４で新たに選定したユニットのそれぞれが、第１位のデータの格納先及び第２位のデータの格納先のそれぞれと重複する場合がある。この場合でも、ステップ１１０で第３位のデータを格納可能なＲＯＭが３個以上存在していると判定されているので、第１位のデータの格納先及び第２位のデータの格納先のいずれにも重複しないユニットが少なくとも１個残ることになる。したがって、処理が再びステップ１２４に進むことで、先に決定した格納先と重複しないユニットを選定することが可能となる。その後、ステップ１１８において、ＣＰＵ１００Ａは、重複なしと判定すると、処理をステップ１２０に進め、ステップ１２４で新たに選定したユニットを第３位のデータの格納先に決定する。尚、第４位のデータ（容量Ｒ４）など、ｎ≧４の場合も同様である。
【００９３】
このように、第ｎ位のデータについて第１の条件が満たされていれば（ステップ１０６で「ＹＥＳ」と判定されていれば）、ステップ１１８で複数回重複ありと判定される場合であっても、ステップ１２４において重複した格納先以外のユニットが選定することが可能である。したがって、先に決定した格納先と重複しないユニットを第ｎ位のデータの格納先に決定することできる。
【００９４】
一方、ステップ１０４において、ＣＰＵ１００Ａは、第ｎ位のデータを格納可能なＲＯＭが存在しないと判定すると、処理をステップ１２６に進める。ステップ１２６では、ＣＰＵ１００Ａは、第ｎ位のデータを有するユニットに対して当該データを消去するように指示する。ここで、第１の格納先決定処理を初めて実行する場合、各ＲＯＭ１０Ｄ〜４０Ｄは十分な空き領域を有する。また、詳細を後述するように、初回のセルフシャットオフ処理を示す図４に示すフローの一部を変更した２回目以降のセルフシャットオフ処理には、各ＲＯＭ１０Ｄ〜４０Ｄに格納されたデータを消去して空き領域を増やす消去処理が含まれている。したがって、処理がステップ１２６に進む可能性は低い。但し、例えば、上述した故障情報などの情報量が極端に多い場合など、データの容量がＲＯＭ１０Ｄ〜４０Ｄの空き領域よりも大きく、格納先を決定することができない場合は、第１の格納先決定処理が終了しないという問題が生じるおそれがある。したがって、ステップ１２６の処理は、このような問題が生じることを抑制するためのものである。尚、消去処理の詳細については、２回目以降のセルフシャットオフ処理と併せて後述する。
【００９５】
また、ステップ１０６において、ＣＰＵ１００Ａは、ｎ≧２の場合において第ｎ位のデータについて、格納可能なＲＯＭ数がｎ未満（格納可能なＲＯＭ数＜ｎ）である、すなわち、第１の条件を満たさないと判定すると、処理を図９に示すステップ１２８に進める。
【００９６】
第１の条件が満たされない場合とは、例えば、図７で説明したような空き領域が第２位のデータの容量以上であるＲＯＭの数が１個である状況など、空き領域が第ｎ位のデータの容量以上であるＲＯＭの数がｎ個未満である状況を意味する。そこで、図９に示すステップ１２８以降の処理は、第ｎ位のデータの格納先と先に決定した格納先を重複させて決定するための処理を含む。
【００９７】
ステップ１２８〜ステップ１３８の処理は、それぞれ、図８に示すステップ１０８〜１１８の処理と同様である。第ｎ位のデータについて第１の条件が満たされていない場合、ステップ１３８では、第ｎ位のデータについてステップ１３６で選定したユニットが先に決定したユニットと重複すると判定される可能性が高い。ここで、図７で説明した例のように、第２位のデータについて抽出されるＲＯＭ数が１個であり、当該ＲＯＭを備えたユニットが既に第１位のデータの格納先に決定されているとする。この場合、第２位のデータを保持するためには、第２位のデータを第１位のデータの格納先に格納する必要がある。すなわち、第１位のデータの格納先と第２位のデータの格納先とを重複させなければならない。そこで、ステップ１３８において、ＣＰＵ１００Ａは、重複ありと判定すると、ステップ１３６で選定したユニットを第ｎ位のデータの格納先候補とし、処理をステップ１４０に進める。
【００９８】
ステップ１４０では、ＣＰＵ１００Ａは、第ｎ位のデータを、ステップ１３６で選定したユニット、すなわち、格納先候補のユニットに格納可能か否かを判定する。格納先候補のユニットは、ステップ１３４で重複ありと判定されているので、既に第１位〜第ｎ−１位のデータの少なくとも１つを格納することが決定している。したがって、第ｎ位のデータを格納するためには、格納先候補のユニットのＲＯＭの空き領域から既に格納することが決定したデータの容量を減算して求められるデータ格納後の空き領域が第ｎ位のデータの容量以上である必要がある。そこで、ステップ１４０では、ＣＰＵ１００Ａは、格納先候補のユニットのＲＯＭのデータ格納後の空き領域が第ｎ位のデータの容量以上であるか否かを判定する。そして、ＣＰＵ１００Ａは、格納先候補のユニットのＲＯＭのデータ格納後の空き領域が第ｎ位のデータの容量以上であるとき、格納先候補のユニットに第ｎ位のデータを格納可能であると判定して、処理をステップ１４２に進める。
【００９９】
ステップ１４２では、ＣＰＵ１００Ａは、格納先候補のユニットと先に決定した格納先との重複を許可する。
【０１００】
ステップ１４４では、ＣＰＵ１００Ａは、重複を許可したユニットを除いて第２の条件を満たすユニットがあるか否かを判定する。例えば、図７で説明した状況では、第２位のデータについて重複を許可したユニットを除いて第２の条件を満たすＲＯＭを備えたユニットは存在しないので、ステップ１４４では、重複を許可したユニットを除いて第２の条件を満たすユニットが存在しないと判定される（ＮＯ）。ＣＰＵ１００Ａは、「ＮＯ」と判定すると、処理をステップ１５０に進める。
【０１０１】
ステップ１５０では、ＣＰＵ１００Ａは、重複を許可したユニットを第ｎ位のデータの格納先に決定し、処理を図８に示すステップ１２２に進める。すなわち、図７で説明した状況のように、第２位のデータの格納先が、第１位のデータの格納先と同じユニットに決定される。したがって、ステップ１５０で決定した格納先は、第ｎ位のデータ及びその他のデータ（第１位〜第ｎ−１位のデータの少なくとも１つ）を格納することになる。
【０１０２】
一方、ステップ１３２又はステップ１３８において、ＣＰＵ１００Ａは、重複なしと判定すると、処理をステップ１５８に進める。
【０１０３】
ステップ１５８では、ＣＰＵ１００Ａは、ステップ１３０又はステップ１３６で選定したユニットを第ｎ位のデータの格納先に決定する。ステップ１３２又はステップ１３８で重複なしと判定される状況としては、例えば、第１位のデータがステップ１２６で消去されて第１位のデータの格納先が決定されていない場合において、第２位のデータについて第１の条件が満たされていない状況が挙げられる。この状況では、第２位のデータの格納先を決定する際、たとえ第２位のデータについて抽出されるＲＯＭが１個であったとしても、ステップ１３２又はステップ１３８において重複なしと判定される。
【０１０４】
ステップ１３２又はステップ１３８で重複なしと判定される他の状況としては、例えば、第２位のデータについて第１の条件が満たされていないため、第２位のデータの格納先が第１位のデータの格納先と同じである場合において、第３位のデータについて第１の条件が満たされておらず抽出されるＲＯＭが２個である状況が挙げられる。この状況では、第３位のデータについて、ステップ１３０、又は、ステップ１３６若しくは後述するステップ１５４において第１位のデータ及び第２位のデータの格納先と重複しないユニットを選定することが可能である。このように、第ｎ位のデータについて第１の条件を満たされていない場合でも、第１位〜第ｎ−１位のデータの格納先を決定する際に実行された処理の結果次第では、第ｎ位のデータの格納先を、先に決定した格納先と重複させずに決定することが可能である。
【０１０５】
また、ステップ１４０において、ＣＰＵ１００Ａは、第ｎ位のデータを格納先候補のユニットに格納可能でないと判定すると、処理をステップ１５２に進める。
【０１０６】
ステップ１５２では、ＣＰＵ１００Ａは、格納先候補のユニット、すなわち、ステップ１３６で選定したユニットであって、ステップ１３８及びステップ１４０の両方で「ＮＯ」と判定されたユニットを除いて第２の条件を満たすＲＯＭを備えたユニットが存在するか否かを判定する。そして、ＣＰＵ１００Ａは、ステップ１３６で選定したユニットを除いて第２の条件を満たすユニットが存在すると判定すると（ＹＥＳ）、処理をステップ１５４に進める。
【０１０７】
ステップ１５２で「ＹＥＳ」と判定される状況は、例えば、第２位のデータについて第１位の条件が満たされていないため、第２位のデータの格納先が第１位のデータの格納先と重複して決定された場合において、第３位のデータについて第１の条件が満たされておらず抽出されるＲＯＭが２個である状況において生じ得る。より詳細には、この状況において、第３位のデータについてステップ１３６で選定したユニットが第１位のデータ及び第２のデータの格納先と重複しており（ステップ１３８で「ＮＯ」と判定される）、第１位のデータ及び第２位のデータの格納先のＲＯＭのデータ格納後の空き領域が第３位のデータの容量未満である場合である（ステップ１４０で「ＮＯ」と判定される）。この場合、抽出された２個のＲＯＭのうち一方のＲＯＭを備えたユニットが、未だ選定されずに残っているので、ステップ１５２で「ＹＥＳ」と判定される。
【０１０８】
ステップ１５４では、ＣＰＵ１００Ａは、格納先候補のユニットを除いて第２の条件を満たすユニットを新たに選定する。要するに、ステップ１３６で選定したユニットがステップ１４０で第ｎ位のデータを格納不可と判定されているので、ステップ１５４で選定したユニットを新たな格納先候補とする。そして、ステップ１５４において、新たな格納先候補として、ユニットを新たに選定すると、処理をステップ１３８に戻す。すなわち、ステップ１３８において、ＣＰＵ１００Ａは、新たな格納先候補のユニットが先に決定した格納先と重複するか否かを判定する。
【０１０９】
また、ステップ１４４において、ＣＰＵ１００Ａは、ステップ１４２で重複を許可したユニットを除いて第２の条件を満たすＲＯＭを備えたユニットが存在すると判定すると（ＹＥＳ）、処理をステップ１４６に進める。
【０１１０】
ステップ１４４で「ＹＥＳ」と判定される状況は、例えば、ステップ１５２で「ＹＥＳ」と判定される状況と同様の状況で生じ得る。より詳細には、この状況において、第３位のデータについてステップ１３６で選定したユニットが第１位のデータ及び第２位のデータの格納先と重複しており（ステップ１３８で「ＮＯ」と判定される）、第１位のデータ及び第２位のデータの格納先のＲＯＭのデータ格納後の空き領域が、第３位のデータの容量以上である場合である（ステップ１４０で「ＹＥＳ」と判定される）。この場合、抽出された２個のＲＯＭをそれぞれ備えたユニットのうち一方のユニットが、未だ選定されずに残っているので、ステップ１４４で「ＹＥＳ」と判定される。
【０１１１】
また、ステップ１４４で「ＹＥＳ」と判定される状況は、例えば、第４位のデータについて第１の条件が満たされておらず抽出されるＲＯＭが３個である状況でも生じ得る。より詳細には、この状況において、例えば、第４位のデータについてステップ１３６で選定したユニットが第１位〜第３位のデータの格納先のいずれかと重複しており（ステップ１３８で「ＮＯ」と判定される）、重複する格納先のＲＯＭのデータ格納後の空き領域が、第４位のデータの容量以上である場合である（ステップ１４０で「ＹＥＳ」と判定される）。この場合、抽出された３個のＲＯＭをそれぞれ備えたユニットのうち２つのユニットが、未だ選定されずに残っているので、ステップ１４４で「ＹＥＳ」と判定される。また、第４位のデータについてステップ１５４で新たにユニットを選定した場合も同様である。ステップ１５４で新たにユニットが選定される場合とは、ステップ１３６で選定したユニットがステップ１４０で「ＮＯ」と判定され且つステップ１５２で「ＹＥＳ」と判定されたことを意味し、格納先候補が既に１つ消えたことを意味している。そして、ステップ１５４での新たなユニットの選定後、処理がステップ１４４に進んだ場合には、抽出された３個のＲＯＭをそれぞれ備えたユニットのうち１つのユニットが未だ選定されずに残っていることになる。したがって、ステップ１４４で「ＹＥＳ」と判定される。
【０１１２】
ステップ１４６では、ＣＰＵ１００Ａは、重複を許可したユニットを除いて第２の条件を満たすＲＯＭを備えたユニットを新たに選定し、処理をステップ１４８に進める。
【０１１３】
ステップ１４８では、ステップ１４６で新たに選定したユニットが先に決定した格納先と重複するか否かを判定する。そして、ＣＰＵ１００Ａは、重複なしと判定すると、処理をステップ１５８に進め、ステップ１４６で新たに選定したユニットを第ｎ位のデータの格納先に決定する。一方、ステップ１４８において、ＣＰＵ１００Ａは、重複ありと判定すると、処理をステップ１５０に進める。
【０１１４】
処理がステップ１４８からステップ１５０に進んだ場合も、処理がステップ１４４からステップ１５０に進んだ場合と同様、ステップ１４２で重複を許可したユニットが第ｎ位のデータの格納先に決定される。ここで、ステップ１４６で新たに選定したユニットも先に決定した格納先と重複する場合、このユニットを第ｎ位のデータの格納先に決定するためには、ステップ１４０で説明したように、既に格納することが決定したデータのデータ格納後のＲＯＭの空き領域が第ｎ位のデータの容量以上であるか否かを判定する必要がある。これに対し、ステップ１４２で重複が許可されたユニットは、ステップ１４０で既に第ｎ位のデータを格納可能と判定されている。したがって、ステップ１４６でユニットが新たに選定された場合でもステップ１４８で重複ありと判定されたときは、新たに選定したユニットへの第ｎ位のデータの格納可否を判定せずに、ステップ１４２で重複が許可されたユニットを第ｎ位のデータの格納先に決定する。
【０１１５】
一方、ステップ１５２において、ＣＰＵ１００Ａは、ステップ１３８で格納先候補としたユニット以外で第２の条件を満たすＲＯＭを備えたユニットが存在しないと判定すると、処理をステップ１５６に進める。
【０１１６】
ステップ１５６では、ＣＰＵ１００Ａは、第ｎ位のデータを有するユニットに対して当該データを消去するように指示し、その後、処理をステップ１２２に進める。すなわち、ステップ１５６で消去される第ｎ位のデータは、その格納先を他の格納先と重複させても格納することができない。例えば、第２位のデータについて第１の条件が満たされておらず抽出されるＲＯＭが１個の場合において、抽出された１個のＲＯＭを備えたユニットが既に第１位のデータの格納先に決定されている場合について考える。この場合において、第１位のデータの格納先のＲＯＭのデータ格納後の空き領域が第２位のデータの容量未満である（ステップ１４０で「ＮＯ」と判定される）状況では、ステップ１３６で選定したユニットを除いて第２の条件を満たすＲＯＭを備えたユニットは存在しない。したがって、ステップ１５２で「ＮＯ」と判定される。このような状況では、図８に示すステップ１２６で説明したのと同様、第ｎ位のデータの格納先を決定することができず、第１の格納先決定処理を終了させることができない問題が生じる。したがって、格納先を決定することのできないデータを消去することで処理が終了しない問題に対処している。
【０１１７】
尚、図８、９を用いた以上の説明では、格納先を決定する際、便宜上、図５で説明したＲＯＭの消去ブロックのブロック番号について省略している。しかしながら、ステップ１２０、１５０及び１５８では、例えば、格納先に決定されるユニットが備えるＲＯＭの消去ブロックのブロック番号及びこれに属する書込ブロックのブロック番号まで決定される。したがって、管理ユニット１００は、管理情報、すなわち、データ格納状態として、格納先を決定したデータがどの書込ブロックに格納されているかについても把握することができる。
【０１１８】
以上説明した第１の格納先決定処理では、ステップ１１０〜１１２及びステップ１３０〜１３２において、ユニット内格納可能か否かを判定し、格納先が重複しなければユニット内格納を優先するようになっている。ここで、自ユニット内のＲＯＭに書き込む処理時間の方が他のユニットにデータを送信して書き込む場合よりも処理時間を短縮することが可能である。したがって、自ユニット内にデータを格納可能であればセルフシャットオフ処理の時間を短縮することができる。一方、第２の格納先決定処理では、各ユニット１０〜４０がユニット内格納を優先するように設定されていない。したがって、上述のステップ１１０、１１２、１３０及び１３２の処理を省略することで第２の格納先決定処理を実行することが可能である。
【０１１９】
また、以上説明した第１の格納先決定処理では、ステップ１１６などにおいて、格納対象のそれぞれのデータについて、その容量以上の空き領域を有するＲＯＭを備えたユニットの中から容量と空き領域との差が最小となる第２の条件を満たすＲＯＭを備えたユニットを格納先候補として選定した。但し、これに限るものではなく、第２の条件を変更してもよい。以下、第２の格納先決定処理において第２の条件を変更した場合（これを第２の格納先決定処理の変形例という）について説明する。
【０１２０】
第２の格納先決定処理の変形例では、第２の条件が、格納対象のそれぞれのデータについて、その容量以上の空き領域を有するＲＯＭの中から空き領域が最大となる条件（抽出したＲＯＭのうち空き領域＝ｍａｘを満たす条件）に変更される。
【０１２１】
このような変更後の第２の条件による格納先候補の選定処理を実行すべく、図８に示す一部の処理を、例えば、以下のように変更する。
ステップ１１４及び１１６の処理は、抽出したＲＯＭを備えたユニットのうち空き領域が最も大きいＲＯＭを備えたユニットを選定する処理に置き換えられる。ステップ１２４の処理は、選定したユニットを除いて空き領域が最も大きいＲＯＭを備えたユニットを選定する処理に置き換えられる。
【０１２２】
また、図９に示す一部の処理を、例えば、以下のように変更する。
ステップ１３４及び１３６の処理は、抽出したＲＯＭを備えたユニットのうち空き領域が最も大きいＲＯＭを備えたユニットを選定する処理に置き換えられる。ステップ１５２の処理は、選定したユニットを除いて空き領域が最も大きいＲＯＭを備えたユニットが存在するか否かを判定する処理に置き換えられる。ステップ１５４の処理は、選定したユニットを除いて空き領域が最も大きいＲＯＭを備えたユニットを選定する処理に置き換えられる。ステップ１４４の処理は、重複を許可したユニットを除いて空き領域が最も大きいＲＯＭを備えたユニットが存在するか否かを判定する処理に置き換えられる。ステップ１４６の処理は、重複を許可したユニットを除いて空き領域が最も大きいＲＯＭを備えたユニットを選定する処理に置き換えられる。
【０１２３】
図１０は、容量及び空き領域が図６で説明した例と同じ状況において第２の格納先決定処理の変形例により各データの格納先が決定される様子を示している。すなわち、図１０では、ユニット１０〜４０がユニット内格納を優先するように設定されていない。また、図１０においても、各データの格納先を重複させずに決定可能である（各データについて第１の条件が満たされている）点と共に各データの優先順位が図６で示した例と同様である。
【０１２４】
図１０では、第１位のデータ（ユニット１０のデータ）については、まず、空き領域がユニット１０のデータの容量以上であるＲＯＭとして、ＲＯＭ２０Ｄ及びＲＯＭ４０Ｄが抽出される。そして、ユニット２０及びユニット４０のうち空き領域が最も大きいＲＯＭを備えたユニット、すなわち、変更後の第２の条件を満たすＲＯＭを備えたユニットはユニット２０である。したがって、ユニット１０のデータの格納先候補としてユニット２０が選定されるので、ユニット１０のデータの格納先がユニット２０に決定される（格納先のユニット名の欄は「Ｂ」となる）。
【０１２５】
一方、第２位のデータ（ユニット３０のデータ）についても、ユニット１０のデータと同様、ＲＯＭ２０Ｄ及びＲＯＭ４０Ｄが抽出され、格納先候補としてユニット２０が選定される。しかし、ユニット２０は先に決定した格納先であるユニット１０のデータの格納先と重複している。したがって、ユニット２０を除いて空き領域が最も大きいＲＯＭを備えたユニット、すなわち、選定したユニットを除いて変更後の第２の条件を満たすＲＯＭを備えたユニットとして、ユニット４０が新たに選定される。そして、第２位のデータの格納先は、新たに選定したユニット４０に決定される（格納先のユニット名の欄は「Ｂ→Ｄ」となる）。
【０１２６】
第３位のデータ（ユニット３０のデータ）については、ＲＯＭ１０Ｄ〜４０Ｄがユニット３０のデータの容量以上の空き領域を有する。空き領域が最も大きいのはＲＯＭ２０Ｄであるので、ユニット３０のデータの格納先候補として、まず、ユニット２０が選定される。しかし、ユニット２０は第１位のデータの格納先と重複している。次に空き領域が大きいのはＲＯＭ４０Ｄであるので、ユニット２０を除いて変更後の第２の条件を満たすユニットとして、ユニット４０が新たに選定される。しかし、ユニット４０は第２位のデータの格納先と重複する。したがって、第３位のデータの格納先は、ユニット２０及びユニット４０を除いて変更後の第２の条件を満たすＲＯＭ１０Ｄを備えたユニット１０に決定される（格納先のユニット名の欄は「Ｂ→Ｄ→Ａ」となる）。
【０１２７】
第４位のデータ（ユニット４０のデータ）については、第３位のデータと同様に、格納先候補として、ユニット２０、ユニット４０、ユニット１０の順に選定される。しかし、ユニット１０も第３位のデータの格納先と重複しているので、新たに選定されるユニット３０がユニット４０のデータの格納先に決定される（格納先のユニット名の欄は「Ｂ→Ｄ→Ａ→Ｃ」となる）。
【０１２８】
このように、第２の格納先決定処理の変形例では、優先順位を付けたデータ毎に、その容量以上の空き領域を有するＲＯＭを備えたユニットの中から空き領域が最大となる変更後の第２の条件を満たすＲＯＭを備えたユニットを格納先候補として選定する。そして、選定したユニットが先に決定した格納先と重複するか否かを判定し、必要に応じて新たにユニットを選定し直す処理を繰り返す。すなわち、上述した第１の格納先決定処理と同様に各データの格納先を分散させるように決定する。尚、この変形例においても、格納対象の全てのデータについて第１の条件が満たされていれば、格納先の重複を避けることが可能である点も第１の格納先決定処理と同様である。また、第１の格納先決定処理において第２の条件を以上説明したように変更してもよい。
【０１２９】
また、変更後の第２の条件を満たすＲＯＭを備えたユニットを格納先候補として選定する場合、容量が大きいデータの格納先から順に決定することは、例えば、容量が小さいデータの格納先から順に決定する場合と比較して、各データの格納先を分散させるように決定するために特に有用である。
【０１３０】
例えば、図１１では、各データの容量及び各ＲＯＭ１０Ｄ〜４０Ｄの空き領域が図１０に示す例と同じ状況で容量が小さいデータの格納先から順に決定した場合を示している。すなわち、優先順位は、各データに対して、データの容量が小さいほど高くなるように付けられている。すなわち、ユニット２０のデータが第１位、ユニット４０のデータが第２位、ユニット３０のデータが第３位、ユニット１０のデータが第４位である。
【０１３１】
まず、ユニット２０のデータの格納先は、空き領域が最も大きいＲＯＭ２０Ｄを備えたユニット２０に決定される。次に、ユニット４０のデータについては、格納先候補として、まず、ＲＯＭ２０Ｄを備えたユニット２０が選定される。しかし、ユニット２０はユニット２０のデータの格納先と重複するので、ユニット４０のデータの格納先候補として、ユニット４０が新たに選定される。そして、ユニット４０をユニット４０のデータの格納先に決定する。
【０１３２】
ユニット３０のデータについては、格納先候補として、まず、ユニット２０が選定されるが、ユニット２０はユニット２０のデータの格納先と重複している。そのため、ユニット３０のデータの格納先候補として、ユニット４０が新たに選定されるが、ユニット４０もユニット４０のデータの格納先と重複している。しかし、ユニット３０のデータの格納先候補からユニット２０及びユニット４０が除外されると、ユニット３０のデータを格納可能なユニットを新たに選定することができないので、ユニット３０のデータの格納先を先に決定した格納先と重複させずに決定することができなくなってしまう。尚、ユニット１０のデータの格納先を決定する際も同様の問題が生じる。すなわち、ユニット３０及びユニット１０のデータの格納先は、全てのデータの格納先を新たに決定し直さない限り、先に決定した格納先と重複するユニット２０又はユニット４０に決定される。
【０１３３】
要するに、変形例における変更後の第２の条件を満たすＲＯＭを備えたユニットを格納先候補として選定して格納先を決定する際に、容量が小さいデータの格納先から順に決定してしまうと、各データの格納先を重複させずに決定することが難しくなってしまう。これは、比較的容量が大きいデータの格納先を決定する前に、空き領域が大きいＲＯＭを備えたユニットが比較的容量が小さいデータの格納先に決定されてしまうためである。言い換えれば、容量が小さいデータの格納先から順に決定した場合に各データの格納先を重複させずに決定することができない状況と各データの容量及びＲＯＭの空き領域が同じ状況であっても、容量の大きいデータの格納先から順に決定することで各データの格納先を重複させずに決定することができる。
【０１３４】
次に、管理ユニット１００が実行する２回目以降のセルフシャットオフ処理について、図１２〜図１５を参照して説明する。図１２に示す２回目以降のセルフシャットオフ処理では、ステップ１０がステップ３６に置き換わっている点、ステップ２０、ステップ２６及びステップ２８とステップ３０との間にステップ３８が挿入されている点、及び、ステップ３４がステップ４０に置き換わっている点で図４に示す初回のセルフシャットオフ処理とは異なる。
【０１３５】
ステップ３６では、ＣＰＵ１００Ａは、各ユニット１０〜４０から第２の情報を入力する。２回目以降のセルフシャットオフ処理では、図４に示す初回のセルフシャットオフ処理とは異なり、第２の情報のみを入力する。上述したように、各ＲＯＭ１０Ｄ〜４０Ｄへのデータの格納は各ユニット１０〜４０のセルフシャットオフ処理中に実行される。したがって、各ＲＯＭ１０Ｄ〜４０Ｄの空き領域はセルフシャットオフ処理中にのみ変化する。そして、管理ユニット１００は、初回のセルフシャットオフ処理のステップ３４において、管理情報として各ＲＯＭ１０Ｄ〜４０Ｄのデータ格納後の空き領域などを算出して保存している。すなわち、管理ユニット１００は、ＲＯＭ１０Ｄ〜４０Ｄのデータ格納状態を把握している。要するに、２回目以降のセルフシャットオフ処理では、管理ユニット１００は、各ユニット１０〜４０から各ＲＯＭ１０Ｄ〜４０Ｄの空き領域を示す第１の情報を入力しなくても各ＲＯＭ１０Ｄ〜４０Ｄの空き領域を把握することが可能である。但し、これに限るものではなく、管理ユニット１００は、２回目以降のセルフシャットオフ処理においても、図４に示すステップ１０と同様に第２の情報に加えて第１の情報を入力してもよい。
【０１３６】
２回目以降のセルフシャットオフ処理では、ＣＰＵ１００Ａは、ステップ２０、ステップ２６又はステップ２８で各データの格納先を決定すると、処理をステップ３８に進める。ステップ３８では、ＣＰＵ１００Ａは、詳細を後述する消去処理を実行する。この消去処理は、各ＲＯＭ１０Ｄ〜４０Ｄに既に格納されているデータを消去する処理を含むため、管理情報、特に、各ＲＯＭ１０Ｄ〜４０Ｄの空き領域が変化し得る。
【０１３７】
ＣＰＵ１００Ａは、ステップ３８の消去処理を実行すると、処理をステップ３０及びステップ３２の順に進める。
【０１３８】
ＣＰＵ１００Ａは、ステップ３２において格納が完了したと判定すると、処理をステップ４０に進める。ステップ４０では、ＣＰＵ１００Ａは、ステップ３８の消去処理及びステップ３２で完了した各データの格納によって変化する管理情報を更新して保存し、処理を終了させる。
【０１３９】
図１３は、管理ユニット１００が実行する消去処理、すなわち、ステップ３８の消去処理の一例を示すフローチャートである。
ステップ２００では、ＣＰＵ１００Ａは、管理情報に基づいて、消去可能なデータＩＤがあるか否かを判定する。ここで、各ユニット１０〜４０の格納対象のデータは、上述したように、学習値や故障情報などを含むため、可能な限り保持しておくことが好ましい。しかし、過去のデータを全て保持することはＲＯＭ１０Ｄ〜４０Ｄの空き領域の不足を招くため、各ユニット１０〜４０はＲＯＭ１０Ｄ〜４０Ｄに格納されたデータのうち比較的新しいデータを保持することが好ましい。したがって、ＲＯＭ１０Ｄ〜４０Ｄの空き領域を増やすために、ＲＯＭ１０Ｄ〜４０Ｄに格納されたデータのうち古いものを消去する。また、図５に示すように、データＩＤは、例えば、ユニット名にテーブルの作成回数を組み合わせたものとして表わされている。すなわち、データＩＤは、作成回数が小さいほど古いデータであることを意味する。
【０１４０】
そこで、ＣＰＵ１００Ａは、例えば、ステップ２０、ステップ２６又はステップ２８で格納先を決定したデータＩＤのユニット名に組み合わせられた作成回数よりも所定回数だけ少ない作成回数で表されたデータＩＤを消去可能なデータＩＤと判定する。例えば、所定回数を３回に設定した場合において、格納先を決定したデータＩＤのユニット名に組み合わせられた作成回数が４回（ｔ＝４）であるときは、作成回数がｔ＝１で表されるデータＩＤが存在するので、消去可能なデータＩＤありと判定する。一方、作成回数がｔ＝２、３で表されるデータＩＤは、消去可能なデータＩＤと判定されない。尚、格納先を決定したデータＩＤのユニット名に組み合わせられた作成回数が３回（ｔ＝３）であるときは、ｔ＝０で表されるデータＩＤは存在しないので消去可能なデータＩＤなしと判定する。
【０１４１】
ステップ２００において、ＣＰＵ１００Ａは、消去可能なデータＩＤありと判定すると処理をステップ２０２に進める。
【０１４２】
ステップ２０２では、ＣＰＵ１００Ａは、消去可能なデータＩＤを「消去可能状態」に変更する。要するに、ＣＰＵ１００Ａは、各ＲＯＭ１０Ｄ〜４０Ｄに格納された過去数回分のデータのうち新たに格納先を決定したデータよりも所定回数だけ過去に格納先を決定したデータを消去可能と判定する。
【０１４３】
ステップ２０４では、ＲＯＭ１０Ｄ〜４０Ｄの消去ブロックのうち消去可能なブロックが存在するか否かを判定する。ここで、ＲＯＭ１０Ｄ〜４０Ｄに格納されたデータは、上述したように、例えば、図１４に示すような所定サイズのブロック（消去ブロック）ごとに一括消去することが可能である。
【０１４４】
図１４は、ステップ２０又はステップ２６の処理の実行回数とステップ２８の処理の実行回数との合計回数が４回（ｔ＝４）の場合と６回（ｔ＝６）の場合におけるＲＯＭ１０Ｄのデータ格納状態を示している。図１４では、ｔ＝４のときに、例えば、ＲＯＭ１０Ｄのブロック番号Ａ＿００２の消去ブロックに属する所定の書込ブロックがユニット２０のデータ（格納予定のデータＩＤ＝Ｂ−４）の格納先として決定されている。上述した所定回数を３回に設定した場合、ｔ＝１のときに格納先を決定したデータ（データＩＤ＝Ａ−１）が消去可能なデータＩＤとなるので、ステップ２０２では、消去可能なデータＩＤ＝Ａ−１のデータが「消去可能状態」に変更される（図１４ではドットでハッチングされている）。
【０１４５】
ここで、ＲＯＭ１０Ｄのブロック番号Ａ＿００１の消去ブロックに属する所定の書込ブロックには、ｔ＝２のときに格納先を決定したデータ（データＩＤ＝Ｂ−２）及びｔ＝３のときに格納先を決定したデータ（データＩＤ＝Ｃ−３）が格納されている。しかし、これらデータＩＤ＝Ｂ−２、Ｃ−３のデータはｔ＝４のときに「消去可能状態」とならない。この場合、ＣＰＵ１００Ａは、ＲＯＭ１０Ｄが消去可能なブロックを有していないと判定する。また、ｔ＝４のとき他のＲＯＭ２０Ｄ〜４０Ｄも消去可能なブロックを有していなければ、ＣＰＵ１００Ａは、消去可能なブロックが存在しないと判定する。
【０１４６】
一方、図１４では、ｔ＝６のとき、ユニット３０のデータ（格納予定のデータＩＤ＝Ｃ−６）の格納先がＲＯＭ１０Ｄのブロック番号Ａ＿００２に属する所定の書込ブロックに決定されると、既に「消去可能状態」となっていたデータ（データＩＤ＝Ａ−１、Ｂ−２）に加えて、ｔ＝３のときに格納先を決定したデータ（データＩＤ＝Ｃ−３）が「消去可能状態」となる。この場合、ブロック番号Ａ＿００１の消去ブロックが消去可能なブロックとなる。すなわち、ＣＰＵ１００Ａは、消去可能なデータのみを格納することで消去ブロックの空き領域が０となったときに当該ブロックを消去可能なブロックと判定する。したがって、ＣＰＵ１００Ａは消去可能なブロックを有するＲＯＭが存在すると判定する。
【０１４７】
但し、消去可能なブロックが存在するか否かの判定は、消去可能なデータのみを格納する消去ブロックの空き領域が０となった場合に限るものではなく、例えば、消去可能なデータのみを格納する消去ブロックの空き領域が消去可能なブロック判定用の第１の閾値（例えば、消去ブロックのデータ格納領域の２０％）以下となった場合に消去可能なブロックが存在すると判定してもよい。
【０１４８】
ステップ２０４において、ＣＰＵ１００Ａは、消去可能なブロックが存在すると判定すると、処理をステップ２０６に進める。
【０１４９】
ステップ２０６では、ＣＰＵ１００Ａは、消去可能なブロックを有するユニットに対して、当該ブロックに格納されたデータをその消去ブロックごと一括消去するように指示する。すなわち、ＣＰＵ１００Ａは、消去可能と判定されたデータのみを格納する第１のブロックの空き領域が第１の閾値以下のときに、第１のブロックを有するユニットに当該第１のブロックのデータを消去させる。
【０１５０】
ステップ２０８では、ＣＰＵ１００Ａは、消去が完了したか否かを判定する。そのため、ステップ２０６で指示を受けたユニットは、管理ユニット１００に対して、消去可能なブロックのデータの消去が完了したときに消去が完了したことを示す信号（消去完了信号）を送信する。ＣＰＵ１００Ａは、消去完了信号を受信すると、処理を図１２に示すステップ３０に戻す。一方、ＣＰＵ１００Ａは、消去完了信号を受信してないとき、処理をステップ２０８に戻し、再度、消去が完了したか否かを判定する。すなわち、ＣＰＵ１００Ａは、消去完了信号を受信するまでステップ２０８の処理を続ける。
【０１５１】
一方、ステップ２０４において、ＣＰＵ１００Ａは、消去可能なブロックが存在しないと判定すると、処理をステップ２１０に進める。ステップ２１０では、ＣＰＵ１００Ａは、ＲＯＭ１０Ｄ〜４０Ｄの消去ブロックのうち、消去可能でないデータを他の消去ブロックにコピーすることで消去可能なブロックとなる消去ブロックが存在するか否かを判定する。ステップ２１０の処理について、図１５を参照して説明する。
【０１５２】
図１５では、ｔ＝７のときにユニット２０のデータ（格納予定のデータＩＤ＝Ｂ−７）の格納先がＲＯＭ１０Ｄのブロック番号Ａ＿００２の消去ブロックに属する所定の書込ブロックに決定された例を示している。ＲＯＭ１０Ｄのブロック番号Ａ＿００１の消去ブロックは、データＩＤ＝Ａ−１、Ｂ−２、Ｃ−３、Ｄ−４のデータを格納している。ここで、ユニット３０では、データＩＤ＝Ｃ−３のデータの格納先が決定されてから、ＥＥＰＲＯＭ３０Ｂの空き領域が所定値以下となっていない、すなわち、ＥＥＰＲＯＭ３０ＢからＲＯＭ１０Ｄ〜４０Ｄへの移動予定のデータが存在していないものとする。要するに、ｔ＝７のとき、データＩＤ＝Ｃ−作成回数ｔ＝４〜７で表されるデータＩＤのデータがＲＯＭ１０Ｄ〜４０Ｄに存在していないものとする。この場合、データＩＤ＝Ｂ−７のデータの格納先が決定されると、既にｔ≦６で「消去可能状態」となっているデータＩＤ＝Ａ−１、Ｂ−２のデータに加えてデータＩＤ＝Ｄ−４のデータが消去可能状態となるが、データＩＤ＝Ｃ−３のデータは消去可能状態とならない。したがって、ステップ２０４では、消去可能状態でないデータＩＤ＝Ｃ−３が存在するので、ブロック番号Ａ＿００１の消去ブロックは消去可能なブロックではないと判定される。すなわち、ブロック番号Ａ＿００１の消去ブロックは、消去可能と判定されたデータ及び消去可能と判定されていないデータを格納している。
【０１５３】
しかし、例えば、消去可能でないデータの容量が消去ブロックのデータ格納領域と比較して小さければ、消去可能なデータ及び消去可能でないデータを格納する消去ブロックのデータ格納領域から消去可能なデータの容量を減算した値が第１の閾値以下となる場合がある。例えば、図１５において、データコピー前のブロック番号Ａ＿００１の消去ブロックのデータ格納領域から消去可能でないデータＩＤ＝Ｃ−３のデータの容量を減算した値が第１の閾値以下であるとする。このような場合、データＩＤ＝Ｃ−３のデータをブロック番号Ａ＿００２の消去ブロックにコピーしてブロック番号Ａ＿００１の消去ブロックに格納されたデータＩＤ＝Ｃ−３のデータを消去可能状態に変更すれば、ブロック番号Ａ＿００１の消去ブロックを消去可能なブロックとすることが可能である。
【０１５４】
要するに、ステップ２１０では、ＣＰＵ１００Ａは、各ＲＯＭ１０Ｄ〜４０Ｄについて、消去可能と判定されたデータ及び消去可能と判定されていないデータを格納する消去ブロックであって、当該消去ブロックのデータ格納領域から消去可能と判定されていないデータの容量を減算した値が第１の閾値以下となる消去ブロックが存在するか否かを判定する。これにより、データのコピーにより消去可能となる消去ブロックが存在するか否かを判定する。
【０１５５】
ステップ２１０において、ＣＰＵ１００Ａは、データのコピーにより消去可能となる消去ブロックが存在すると判定すると、まず、この消去ブロックを特定する。次に、ＣＰＵ１００Ａは、特定した消去ブロックを有するＲＯＭ内で、特定した消去ブロックに格納された消去可能と判定されていないデータのコピー先となる他の消去ブロックに属する所定の書込ブロックを決定して、処理をステップ２１２に進める。
【０１５６】
ステップ２１２では、ＣＰＵ１００Ａは、特定した消去ブロックに格納された消去可能と判定されていないデータ（すなわち、コピー予定のデータ）の容量に、特定した消去ブロック（第２のブロック）を有するユニットがステップ２０、ステップ２６又はステップ２８で格納先に決定されたデータの容量Ｒｎを加算した値（加算値）が第２の閾値以下であるか否かを判定する。例えば、図１５に示すＲＯＭ１０Ｄでは、ブロック番号Ａ＿００２の消去ブロックへの格納予定のデータ（データＩＤ＝Ｂ−７）の容量＋ブロック番号Ａ＿００２の消去ブロックへのコピー予定のデータ（データＩＤ＝Ｃ−３）の容量＝加算値が第２の閾値以下であるか否かを判定する。第２の閾値は、例えば、各ＲＯＭ１０Ｄ〜４０Ｄの書き換え速度が速いほど大きい値に設定されるなど、各ＲＯＭ１０Ｄ〜４０Ｄの書き換え速度に応じて決まる値である。したがって、加算値が第２の閾値よりも小さくなるほどデータのコピー及び格納にかかる時間が短くなる。言い換えれば、加算値が第２の閾値よりも大きくなるほどデータのコピー及び格納に時間がかかる。
【０１５７】
ステップ２１２において、ＣＰＵ１００Ａは、加算値が第２の閾値以下であると判定すると、ステップ２１０で特定した消去ブロックを有するユニットに対して、コピー予定のデータをそのコピー先に決定した消去ブロックに属する書込ブロックにコピーするように指示する。その後、ＣＰＵ１００Ａは、処理をステップ２０６に進め、ステップ２１０で特定した消去ブロックを有するユニットに対して、当該消去ブロックのデータを消去するように指示する。
【０１５８】
要するに、管理ユニット１００は、消去可能と判定されたデータ及び消去可能と判定されていないデータを格納する消去ブロック（第２のブロックに相当する）のデータ格納領域から消去可能と判定されたデータの容量を減算した値が第１の閾値以下の場合（ステップ２１０で「ＹＥＳ」と判定された場合）において、第２のブロック（ステップ２１０で特定した消去ブロック）を有するユニットを格納先に決定したデータの容量に消去可能と判定されていないデータの容量を加算した値（加算値）が第２の閾値以下のときに（ステップ２１２で「ＹＥＳ」と判定されたとき）、以下の処理を実行する。すなわち、管理ユニット１００は、加算値が第２の閾値以下のときに、第２のブロックを有するユニットに消去可能と判定されていないデータを他の消去ブロックへコピーさせて第２のブロックのデータを消去させる。
【０１５９】
尚、図１５では、ＲＯＭ１０Ｄ内のある消去ブロックの消去可能でないデータをＲＯＭ１０Ｄ内の他の消去ブロックにコピーしたが、これに限るものではなく、消去可能でないデータを他のＲＯＭ２０Ｄ〜４０Ｄのいずれかの消去ブロックにコピーしてもよい。したがって、ステップ２１０において、ＣＰＵ１００Ａは、データのコピーにより消去可能となる消去ブロックを特定した後、ＲＯＭ１０Ｄ〜４０Ｄのそれぞれの消去ブロックの中からコピー予定のデータのコピー先を決定するようになっていてもよい。ここで、例えば、ユニット２０のＲＯＭ２０Ｄが、消去可能でないデータのコピーにより消去可能となる消去ブロックを有しており、コピー予定のデータのコピー先がユニット３０のＲＯＭ３０Ｄ内の所定の消去ブロックに決定されているとする。また、ユニット３０がユニット４０のデータの格納先に決定されているとする。この場合、ステップ２１２では、ＲＯＭ２０ＤからＲＯＭ３０Ｄへのコピー予定のデータの容量にユニット４０のデータの容量を加算した値が第２の閾値以下であるか否かを判定する。これにより、ユニット３０におけるデータの格納処理の実行に加えて消去処理を実行するか否かを判定する。
【０１６０】
一方、ＣＰＵ１００Ａは、ステップ２００で「ＮＯ」と判定した場合、及び、ステップ２１０で「ＮＯ」と判定した場合、消去処理を終了させ、処理を図１２に示すステップ３０に戻す。すなわち、ＣＰＵ１００Ａは、消去可能なデータが存在しないか又は消去可能でないデータのコピーにより消去可能となる消去ブロックが存在しないため、ＲＯＭ１０Ｄ〜４０Ｄのデータを消去しない。
【０１６１】
また、ＣＰＵ１００Ａは、ステップ２１２で加算値が第２の閾値未満でないと判定した場合、消去処理を終了させ、処理を図１２に示すステップ３０に戻す。この場合、消去可能でないデータのコピーにより消去可能となる消去ブロックが存在することになるが、消去可能な消去ブロックを作り出すためのデータのコピー、及び、各ユニット１０〜４０での各データの格納先への格納の両方を実行することでセルフシャットオフ処理を終了させるのに時間がかかってしまう。そこで、ＲＯＭ１０Ｄ〜４０Ｄのデータを消去せずに各データの格納先への格納のみを実行する。
【０１６２】
以上説明した消去処理によれば、最新のデータを保持しつつＲＯＭ１０Ｄ〜４０Ｄの空き領域を増やすことが可能となる。これにより、上述した第１及び第２の格納先決定処理並びにそれらの変形例において、各データの格納先候補、すなわち、空き領域が格納対象のデータの容量以上であるＲＯＭを備えたユニットを増やすことが可能となるので、各データの格納先を重複させずに決定する確率を高めることができる。
【０１６３】
尚、以上では、格納対象のデータが、ＥＥＰＲＯＭ１０Ｂ〜４０ＢからフラッシュＲＯＭ１０Ｄ〜４０Ｄへの移動予定のデータである場合について説明したが、これに限るものではない。例えば、車両走行中にユニット１０〜４０のそれぞれが生成したデータをＲＡＭ１０Ｃ〜４０ＣからＥＥＰＲＯＭ１０Ｂ〜４０Ｂに移動させず、セルフシャットオフ処理中にＲＡＭ１０Ｃ〜４０Ｃから直接フラッシュＲＯＭ１０Ｄ〜４０Ｄに移動する予定のデータを格納対象のデータとしてもよい。
【０１６４】
また、以上の説明では、管理ユニット１００が相互通信可能な複数のユニット１０〜４０と相互通信可能に接続されており、各格納対象のデータの格納先が決定された場合に、複数のユニット１０〜４０間でデータを直接送受信するようになっている。但し、複数のユニット１０〜４０間でデータを直接送受信することに限るものではなく、格納元のデータの格納先への送信が管理ユニット１００を介して実行されるようになっていてもよい。すなわち、管理ユニット１００が複数のユニット１０〜４０と相互通信可能に接続されていればよい。
【０１６５】
また、管理ユニット１００と通信可能なユニット１０〜４０は、上述したエンジン周辺の車載機器を電子制御するものに限るものではなく、例えば、ハイブリッド車両においてエンジンと共に動力源となるモータ、電気自動車の動力源となるモータ、変速機構や電動パワーステアリング機構用のアクチュエータ、ＡＢＳブレーキなどの安全装置用のアクチュエータ、及び、カーエアコン用のコンプレッサを電子制御するものであってもよい。そして、例えば、各種車載機器を電子制御する複数のコントロールユニットを車載機器の関連性などに応じてグループ分けして、複数のコントロールユニットで構成されるグループごとに管理ユニット１００を複数設けてもよい。また、この場合においても、上述したように、管理ユニット１００を別途設けずに、各グループを構成する複数のコントロールユニットのいずれか１つが管理ユニット１００としての機能を有してもよい。
【０１６６】
また、図４及び図１２では、ステップ１４において、各ユニット１０〜４０がユニット内格納を優先するように設定されているか否かを判定している。そして、この判定結果に基づいて第１の格納先決定処理又は第２の格納先決定処理を実行する。但し、例えば、ユニット内格納の優先設定がされている場合には、図４及び図１２のステップ１２及びステップ２２〜２６を省略してもよい。すなわち、セルフシャットオフ処理では、第２の格納先決定処理以外の処理であって、ステップ２０の第１の格納先決定処理又はステップ２８の処理が実行されてもよい。一方、ユニット内格納の優先設定がなされていない場合には、図４及び図１２のステップ１２〜２０及びステップ２８を省略してもよい。すなわち、セルフシャットオフ処理では第２の格納先決定処理のみが実行されてもよい。
【符号の説明】
【０１６７】
１０〜４０  コントロールユニット（外部装置）
１０Ａ〜４０Ａ  ＣＰＵ
１０Ｂ〜４０Ｂ  ＥＥＰＲＯＭ
１０Ｃ〜４０Ｃ  ＲＡＭ
１０Ｄ〜４０Ｄ  フラッシュＲＯＭ（不揮発性メモリ）
５０  ＣＡＮ
１００  管理ユニット（電子制御装置）
１００Ａ  ＣＰＵ
１００Ｂ  ＥＥＰＲＯＭ
１００Ｃ  ＲＡＭ
１００Ｄ  フラッシュＲＯＭ
１００Ｅ  通信回路
１００Ｆ  バス
【図１】
2020154853.tif 000003
【図２】
2020154853.tif 000004
【図３】
2020154853.tif 000005
【図４】
2020154853.tif 000006
【図５】
2020154853.tif 000007
【図６】
2020154853.tif 000008
【図７】
2020154853.tif 000009
【図８】
2020154853.tif 000010
【図９】
2020154853.tif 000011
【図１０】
2020154853.tif 000012
【図１１】
2020154853.tif 000013
【図１２】
2020154853.tif 000014
【図１３】
2020154853.tif 000015
【図１４】
2020154853.tif 000016
【図１５】
2020154853.tif 000017