JP3832933B2 - 情報処理装置およびその方法、オペレーティングシステム、記憶媒体 - Google Patents

情報処理装置およびその方法、オペレーティングシステム、記憶媒体 Download PDF

Info

Publication number
JP3832933B2
JP3832933B2 JP18973497A JP18973497A JP3832933B2 JP 3832933 B2 JP3832933 B2 JP 3832933B2 JP 18973497 A JP18973497 A JP 18973497A JP 18973497 A JP18973497 A JP 18973497A JP 3832933 B2 JP3832933 B2 JP 3832933B2
Authority
JP
Japan
Prior art keywords
memory
program
symbol
module
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP18973497A
Other languages
English (en)
Other versions
JPH1083342A (ja
Inventor
武志 小川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Canon Inc
Original Assignee
Canon Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Canon Inc filed Critical Canon Inc
Priority to JP18973497A priority Critical patent/JP3832933B2/ja
Publication of JPH1083342A publication Critical patent/JPH1083342A/ja
Application granted granted Critical
Publication of JP3832933B2 publication Critical patent/JP3832933B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、任意の機能を後から追加可能な情報処理装置およびその方法に関するものである。
【0002】
【従来の技術】
従来のカメラシステムでは、メモリの利用目的とアドレスの関係はコンパイル&リンク時に決定するのが一般的である。したがって、メモリマネージャそのものが搭載されていなかった。メモリマネージャを搭載して、ダイナミックにアロケーションするカメラシステムと従来のシステムを比較すると以下の様な特徴がある。
【0003】
メモリマネージャを搭載しない場合、追加プログラムが利用するメモリは、あらかじめ予約しておく必要がある。カメラのROMのバージョンとメモリの配置が強く依存しているので、互換性を確保する為には追加プログラム用の予約領域は少なめに設定する必要がある。一方、メモリマネージャを利用する場合は、同時に利用するメモリの最大量が物理的なメモリ容量を越えない様に注意するだけで良いので、メモリを最大限利用可能である。仮想記憶のシステムが無い場合のメモリマネージメント手法は、大別してビットマップを利用したもの、メモリ管理ブロックによって可変長のメモリを分割して利用するものがある。ビットマップを利用する方法は、要求されたサイズの空きメモリを検索するのに時間がかかる為、実際のコンピュータシステムでもあまり利用されていない。可変長のメモリを分割して利用する場合はさらに、Best Fit法,First Fit法,Next Fit法の3つが良く知られている。Best Fit法は大きな連続領域がいつも確保されるという特徴があるが、メモリブロックの数に比例してアロケーションスピードが遅くなる。First Fit法も同様の性質がある。Next Fit法は、ブロックの数に依存せず、常に高速にアロケーションを行う事が可能であるが、ストレスをかけると空きメモリが断片化していくという欠点がある。デジタルカメラで画像処理を行う場合1画面分の画像を千ブロック程度に分割して処理を行う為、アロケーション速度が遅ければカメラの処理スピードに致命的な結果を及ぼす。また、デジタルカメラは従来のフィルムを使ったカメラと違い、大容量ハードディスクとAC電源を使えばシャッターの耐久回数である数万ショットを連続撮影する事が可能なのでメモリの断片化によるアロケーションの失敗は許されない。Next Fit法のアロケーションのしくみとメモリの断片化(fragmentation)についてさらに説明を加える。図2は▲1▼はNext Fitメモリマネージャの初期状態である。主記憶は1つの空きメモリブロックとして管理し、アロケーションポインタがその先頭にセットされている。ここでいうブロックとは図4の様な情報を含む。ブロックの大きさと、そのブロックが空きメモリか使用中かを示すフラグとユーザアプリケーションが利用する部分である。すべてのメモリを4バイトアライメント上に配置しようとした場合ブロックサイズは4の倍数で良いので余った最下位ビットを使用中フラグとして利用出来る。次のブロックの先頭位置を知る為にもブロックサイズは利用される。ブロックサイズや使用中フラグなどの情報を格納している部分はMCB(メモリーコントロールブロック)と呼ばれる。
【0004】
▲2▼はアプリケーションからメモリAを要求され、割り当てた状態である。1つの空きブロックと1つの使用中メモリの2ブロックに分割され、アロケーションポインタは分割された空きメモリの先頭にセットされる。図2の▲3▼はさらにアプリケーションからメモリBを要求され、割り当てた状態である。空きメモリをさらにメモリBの為に分割し、主記憶は3つのブロックに分割された。図2の▲4▼でメモリAが不要になり開放を行った。メモリAは空きブロックに変わったが、アロケーションポインタの位置は更新されない。図2の▲5▼でメモリCを要求されるが、メモリAが以前存在していた位置は利用しない。要求されたメモリサイズがアロケーションポインタが示している空きメモリより大きい場合に限ってアロケーションポインタの位置から空きメモリの検索が始まる。要求されたサイズより大きな空きメモリを発見したら、そのブロックを分割して割り当てる。その様にメモリのアロケーションと開放を繰り返し続けると、図2の▲6▼のような状態になる。図2の▲6▼は空きメモリの総量は要求されたメモリBの大きさより大きいが最大連続領域サイズがメモリBよりも小さくなってしまった為に割り当てに失敗してしまう様子である。この事から、Nest Fit法を利用する場合は無限にアロケーションと開放を繰り返す様なアプリケーションでの利用は困難であった。
【0005】
【発明が解決しようとする課題】
本発明のメモリマネージャは、この様な問題を著しく軽減するファンクションを定義し、アプリケーションがそのファンクションを利用する事でデジタルカメラの様な分野で利用する事を可能にする。断片化が発生した後でメモリの再配置を行えば再び最大連続領域サイズは増える。しかし、稼動中のシステムでメモリの再配置を行えばメモリ転送に多くのCPU時間を費やす事になる。カメラシステムを構成するうえで断片化を回避するとすれば、一定期間ごとに必ずシステムをリスタートするという手段をとる事も可能である。しかし、前途の様に連続動作はデジタルカメラの重要なスペックである。システムをリスタートする事をあきらめたとしても、システムとしては、メモリの消費量が極端に少なくなるタイミングがあり、それを利用する事が可能である。必ずあるタイミングでメモリの消費量が極端に少なくなるのであればそのタイミングでアロケーションポインタを主記憶の先頭へ移動させる事でメモリマネージャのリスタートに限りなく近い状態をつくりだす事が可能である有があるが、パーソナルコンピュータの技術革新サイクルは早く、新しい画像フォーマットが次々に登場している。デジタルカメラの内部構造もコンピュータ化が進み、ソフトウェアによる処理の範囲も広がってきている。そこで、デジタルカメラもパーソナルコンピュータの様にソフトウェアを追加し、拡張していく事でハードウェア開発の投資を押さえて早い技術革新サイクルに追従していく事が可能である。しかし、デジタルカメラのソフトウェアは通信やファイルシステムなど多岐にわたっており、どの機能が将来必要になるのか、どの技術が陳腐化するのかをあらかじめ予測する事は難しい。また、さまざまなロットのデジタルカメラが市場に出るが、追加拡張ソフトウェアはどのロットの内部ソフトウェアとも共存する様に設計する必要がある。本発明はデジタルカメラの任意の機能を後から追加するソフトウェアによって置き換え、拡張する技術に関するものである。
【0006】
【課題を解決するための手段】
上記課題を解決するために、本発明によれば、情報処理装置に、メモリのポインタから探索を開始して、要求されたサイズの空ブロックが最初に見つかった領域から当該空ブロックを割り当てる割当手段と、該割当手段による割当後に前記ポインタを当該割り当てられたブロックの直後の位置に更新する更新手段と、所定動作の実行後に発せられるアプリケーションからの要求に応じて、前記ポインタを前記メモリの先頭位置へ初期化する初期化手段とを備える。
【0007】
また、他の態様によれば、情報処理方法に、メモリのポインタから探索を開始して、要求されたサイズの空ブロックが最初に見つかった領域から当該空ブロックを割り当てる割当工程と、該割当工程による割当後に前記ポインタを当該割り当てられたブロックの直後の位置に更新する更新工程と、所定動作の実行後に発せられるアプリケーションからの要求に応じて、前記ポインタを前記メモリの先頭位置へ初期化する初期化工程とを備える。
【0035】
【発明の実施の形態】
図1は本発明の第一の実施例のブロック図である。1はレンズ、2はレンズを通った光を電気信号として出力するCCDユニットである。3はCCDからのアナログ信号をデジタル信号へ変換するA/Dコンバータ、4はCCDとA/D変換器に同期信号を供給するSSGユニット、5はカメラシステムの中央演算器、6は信号処理を高速に実現するためのアクセラレータ、7は電池、8はシステム全体へ電源を供給するためのDC/DCコンバータ、9はDC/DCコンバータをコントロールする電源コントローラユニット、10はパネル操作・表示装置・電源のコントロールを行うマイクロコンピュータ、11はユーザーへ情報を表示する表示装置、12はユーザーが直接操作するレリーズSWを含むコントロールパネル、13はOS等システムプログラムが記憶され、具体的には、図面に記述し、また後述する動作手順を中央演算器5により読み込まれ実行されるプログラムが記憶されている記憶媒体のROM、14はカメラシステムの主記憶で、データや後述する動作手順が記憶され、中央演算器5により手順が読み込まれ実行されるプログラムも記憶される記憶装置のDRAM、15は内臓記憶媒体として使用し、データや動作手順が記憶され中央演算器5により読み込まれ実行されるフラッシュROM、16はPCMCIAカードのインターフェース部、17はATAハードディスクなどの外部記録媒体、18は拡張バスインターフェース、19はPC通信インターフェース、20はDMAコントローラ、21はストロボ、22はパーソナルコンピュータである。
【0036】
このカメラの撮影時の動作を簡単に説明する。図1のコントロールパネル12のレリーズスイッチをユーザが押したら、図1のCPU5がその事を検出して撮影シーケンスを開始する。以下の動作はすべて図1のCPU5によるコントロールで行われる事を前提とし、その説明を省略する。図1のSSG4が図1のCCD2を駆動する。図1のCCD2から出力されるアナログ信号は、図1のA/Dコンバータ3でデジタル信号へ変換される。図1のDMAコントローラ20によって図1のA/Dコンバータ3の出力は、図1のDRAM4へDMA転送される。1フレーム分のDMA転送が終了した時点でCPU5は、信号処理シーケンスを開始する。図1のフラッシュROM15から信号処理プログラムを主記憶上に記憶して、それを逐次読みだして実行する。主記憶上のデータを信号処理アクセラレータ6へ転送し信号処理をおこなう。信号処理アクセラレータ6は信号処理のすべてをおこなうわけではなく図1のCPU5で行う処理の特に時間のかかる処理などを助ける演算回路であり、図1のCPU5の処理ソフトウェアと連携して動作する。信号処理の一部または全部が終了すると画像ファイルとして外部記憶媒体17へ記録する。また、カードインターフェースに外部記憶媒体17が接続されていない場合、フラッシュROM15へ記録する。この時記録するファイルフォーマットが圧縮処理を必要とするのであれば圧縮も行う。第一の実施例は、以上のように撮影画像を外部記憶媒体、もしくはフラッシュROMへファイルする電子カメラである。
【0037】
本発明のメモリマネージャはアロケーションポインタを主記憶の先頭へ移動させるファンクションResetAllocationPointerを実装している。アプリケーションがResetAllocationPointerファンクションを頻繁に呼び出せば、呼び出すほどメモリマネージャはFirst Fit法に近い動きをする事になる。毎回アロケーションの前にResetAllocationPointerファンクションを呼び出すともはやNext Fit法ではなく完全なFirst Fit法となり、アロケーションにかかる時間はメモリの消費量に比例して増加してしまう。ResetAllocationPointerファンクションの目的はあまでもメモリマネージャをリスタート後に近い状態にする事である。デジタルカメラのシステムはこのファンクションを一回の撮影動作直後、録音動作直後、モード設定直後などのタイミングで呼び出す。上記の様に構成する事で高速なアロケーションと連続動作耐久性の両方の特徴を備えたシステムを構築する事が可能である。
【0038】
図3はこのメモリーマネージャのアロケーション動作のフローチャートである。このフローチャートにしたがって、アロケーション動作を説明する。ステップ301で要求サイズを切り上げる。アプリケーションプログラムが要求するメモリサイズの単位は1バイト単位だが、メモリマネージャが管理する単位はそれよりも大きい。メモリマネージャがMCBと呼ばれる管理情報を先頭に作成する為、に4バイトアライメント単位に乗せる必要があるからである。ステップ302でメモリマネージャのセマフォを獲得する。あるタスクがアロケーションや開放動作をしている時に別のタスクがアロケーションなどをすると二重アロケーションやMCBの破壊を引き起こす結果となるからである。かといって割り込みを禁止してしまえば、ストロボやシャッターを制御するデジタルカメラとしての制御のレスポンスに影響を与えてしまう為、セマフォによって排他制御を行う。この様な方法で排他制御をする事によってメモリマネージャの動作が他のプライオリティの高いタスクの動作に影響を与える心配がなくなる。ステップ303で現在のアロケーションポインタの位置をアロケーションスタート位置として記憶する。このポインタの働きは後で説明する。ステップ304で現在のアロケーションポインタ位置の空きブロックのサイズと比較する。要求サイズの方が大きい場合ステップ305へ、要求サイズと空きブロックサイズが一致すればステップ303へ、要求さサイズの方が小さい場合ステップ312へと制御を移す。ステップ305へ進んだ場合それが最終ブロックかどうかを判断する。最終ブロックならステップ307へ、そうでなければステップ306へ分岐する。ステップ306では次のメモリブロックへアロケーションポインタを進める。ステップ307ではアロケーションポインタを主記憶の先頭のブロックへセットする。ステップ306と307はどちらも次のブロックへ進めるという効果がある。ステップ308ではステップ303で記憶したアロケーションスタート位置とアロケーションポインタを比較している。もし、一致すればすべてのメモリブロックをスキャンした事の証明となるので、アロケーションに失敗したことになる。その場合ステップ316でセマフォを開放し、ステップ317でメモリ獲得に失敗した事を告げるエラー値を返却してアプリケーションへ制御を戻す。ステップ308でアロケーションスタート位置と一致しない場合はステップ309でアロケーションポインタ位置のブロックが空きブロックかどうか判断する。
【0039】
使用中ブロックの場合はステップ305へ戻る。そうでないならステップ311へ進む。ステップ311では次のブロックが空きブロックかどうかを判断する。もし、空きブロックならステップ310へ分岐。次のブロックが空きブロックでないならステップ304へ戻り、再び要求サイズとの比較を試みる。ステップ310では次のブロックと現在のアロケーションポインタ位置のブロックの2つのブロックをマージして1つの大きなメモリにする。そして再びステップ311へ戻る。この動作を繰り返す事で連続した空きブロックをすべてマージする。ステップ304で要求ブロックサイズと現在のアロケーションポインタ位置のメモリサイズが一致したらステップ313で現在のアロケーションポインタ位置のブロックを使用中メモリに変更し、それを今回の獲得メモリとし、アロケーションポインタを次のブロックへ進める。ステップ304で要求サイズより現在のアロケーションポインタ位置の空きブロックサイズのほうが大きい場合はステップ312で要求サイズの空きブロックと残ったサイズの空きメモリの2つの空きメモリへ分割し、ステップ313へ進む。ステップ314でセマフォを開放し、ステップ315で獲得したメモリの先頭番地をアプリケーションプログラムへ返却して制御を戻す。図5はメモリマネージャのメモリ開放動作のフローチャートである。ステップ501でメモリマネージャのセマフォを獲得し、ステップ502で指定されたブロックが使用中かどうかを判断する。もし、使用中でなければステップ504でセマフォを開放し、ステップ506で開放が失敗したというエラーコードを返却してアプリケーションへ制御を戻す。ステップ502で指定されたブロックが使用中なら、ステップ503で、そのブロックを空きブロックへ変更し、ステップ504でセマフォを開放して、ステップ505で開放に成功したというリターンコードを返却してアプリケーションへ制御を戻す。図6はResetAllocationPointer動作のフローチャートである。ステップ601でセマフォを獲得し、ステップ602でアロケーションポインタを主記憶の先頭のブロックへ移動。ステップ603でセマフォを開放する。
【0040】
プログラムROMマネージャ
デジタルカメラは撮影した画像をコンピュータの理解出来るファイル形式で格納する。一方、コンピュータの画像ファイルの種類は非常に多くすべてをサポートする事は不可能であり、新しい画像フォーマットが次々に登場している。この様な状況で、カメラ内部のソフトウェアに後から機能を追加したり、変更を加える技術が重要になってきている。
【0041】
図1のフラッシュROM15の一部はこのデジタルカメラのファームウェアを格納するために利用する。プログラムの一部を修正したり、追加する事が可能であれば、ファームウェア開発や、カメラファームウェアのバージョンアップに便利である。これから説明するプログラムROMマネージャはこの様なフラッシュROMに書き込まれたプログラムを管理する機能である。
【0042】
図7はフラッシュROMの中に格納されたプログラムの形式を図にしたものである。
【0043】
格納されているプログラムはモジュール単位で管理され、モジュールの先頭にはMH(モジュールヘッダ)と呼ばれる管理ブロックがある。モジュールヘッダにはモジュール名やプログラムのエントリーポイントなどの情報が格納されている。フラッシュROMはバイト単位での消去が出来ないので、一部のモジュールの変更を行う場合も追加書き込みをするしかない。
【0044】
モジュールの書き換え
モジュールは以下の様にフラッシュROMの前から書き込まれる。モジュールの消去は、そのモジュールを無効にする事によって実現している。モジュールの置き換えは、一旦モジュールを消去して新しくモジュールを書き込む事で実現している。図8の左は、フラッシュROMに複数のモジュールが存在する様子である。図8の右は、モジュールAを新しく書き換えた後の状態である。元のモジュールAが使用済みモジュールとなり新しいモジュールAが未使用領域だった場所へ書き込まれている。
【0045】
プログラムROMマネージャのサービスは以下の様になる。
1) モジュール名を指定してその番地を得る。
2) ファイル名を指定して追加書き込みを行う。
3) モジュール名を指定してそのモジュールを無効にする。
4) フラッシュROMのすべてのプログラムを物理的にイレースする。
【0046】
プログラムROMマネージャはそのサブシステムとしてOSのプログラムローダの機能を利用する。追加書き込みの時にプログラムのコードとリロケーションテーブルをを主記憶へ一旦読み込み書き込むフラッシュROMの番地へマッピングするのである。プログラムの実行可能ファイルにコードとリロケーション情報を格納しておき、実行時に主記憶でマッピングする技術は、パーソナルコンピュータなどの分野では一般的だ、しかし、フラッシュROMの場合マッピング先のアドレスとプログラムがロードされた主記憶のアドレスが違うのでAPIでその情報を引き渡す必要がある点が異なる。本実施例のプログラムローダはプログラムを読み込んだ主記憶のアドレス以外のターゲット番地に対するマッピングをサポートしている。フラッシュROMへの物理的書き込みを行うプログラムに限ってはフラッシュROMに配置する事が出来ない。なぜなら、フラッシュROMの書き込みシーケンスにデータポーリングという技術が使われている為、書き込み途中ではフラッシュROMのどのアドレスも同一のポーリング情報しか読めないので、もし、実行中のプログラムがフラッシュROMに配置されているものなら、書き込みが始まったとたんに次の命令が狂ってしまう。又、デジタルカメラのソフトウェアのほとんどはこのフラッシュROMに納まっているので書き込み中にタスクスイッチがかかったら上記の様な問題が発生してしまう。この様な問題を解決するために本発明のプログラムROMマネージャは書き込みのプログラムをいつも主記憶で実行し、1書き込み単位(バイトまたはワードまたはダブルワード)が始まってからデータポーリングが終了するまでの間、タスクSWと割り込みを禁止するように構成した。この様に構成する事で稼動中のシステムを停止せずにプログラムの追加が可能となった。
【0047】
本実施例のフラッシュROMへ物理的な書き込みを行うデバイスドライバー部は追加プログラムと一緒に外部記録媒体へ格納しておき、プログラムの追加書き込みの時に主記憶へロードして実行する。
【0048】
プログラムローダ
プログラムローダの動作の説明の前に実行可能プログラムファイルがどのような形式で格納されているかを説明する。
【0049】
一般形
本実施例の実行可能プログラムファイルフォーマットの一般形は、図10のようになっている。
【0050】
ファイルは、複数のレコードから構成される。レコードは、サイズフィールド・タイプフィールド・ボディーフィールドから構成される。
【0051】
レコードのサイズは、サイズフィールドによって定義される。1バイトのモジュールタイプによってそのレコードの性質が定義される。ボディーフィールドに実際のデータが格納されている。ファイル中に存在するレコードの数には、制約が無い。プログラムローダは、ファイル中のレコードの中から実行に必要な情報を主記憶に読みだし実行をする。プログラムの実行に必要ないレコードは、認識せずに読み飛ばす。レコードタイプには、図11の様な種類がある。各タイプ別に解説を行う。TYPE_OBJECT_INFO(省略不可)
【0052】
このレコードは次の「TYPE_OBJECT_INFO」までのすべてのレコードの性質をテキストで表現したものである。
【0053】
名前=内容
の形式で改行で区切って図13に示すように記述する。
【0054】
TYPE_PROGRAM
バイナリのプログラムである。
【0055】
TYPE_RELOCATE_TABLE
プログラム中の絶対アドレッシングを行っているアドレスのテーブルである。
【0056】
CPUの命令として相対アドレッシングをサポートしていない場合のみ存在するレコードである。図9の様に絶対アドレッシングのアドレスフィールドを格納したテーブルである。前提条件としてCPUが絶対アドレッシングする場合のアドレス幅が32bitである事を仮定している。テーブルの値は、プログラムの先頭番地を原点とした相対番地である。ローダプログラムは、バイナリプログラムの該当する番地の値を書き換える。書き換えるルールは、以下の通りである。
【0057】
新たに格納する値=マッピング先番地+その番地に格納されていた値
【0058】
マルチプラットホームへの対応
本ブロックの連続によって複数のプラットホームへの対応が可能である。右の図の様に複数のプラットホームのデータを一つのファイルへまとめる事で、単一ファイルによる実行ファイルのマルチプラットホーム化が可能である。システムは、ファイル中から自システムで実行可能なモジュールを検索して実行する事が出来る。特定のCPUを想定した実行可能プログラムファイルを採用した場合、CPU種類を変更する事ができなくなってしまう。CPU種別を自己記述してある実行可能プログラムファイルを採用している場合、生産コスト削減などの理由でCPUを変更する事が可能となる。
【0059】
図12は複数種類CPUのプログラムを格納したファイルの様子を現している。
【0060】
前記の様にプログラムがモジュール単位に分割され、モジュールのアドレスが変更されるシステムでは他のモジュールのファンクションの存在するアドレスを知る手段が必要となる。サブルーチンのアドレスを実行時に決定する技術はレートバインディングやダイナミックリンクと呼ばれている。この様な技術を用いる事でモジュール間のインターフェース設計を柔軟に行う事が可能になる。パーソナルコンピュータにおけるダイナミックリンクは、ライブラリ(サブルーチン群)の共有化が主な目的である。目的のライブラリが主記憶中に存在すれば、即座にリンクは完了するが、目的のライブラリが主記憶中に存在しなければ記憶媒体から主記憶にロードし、リンクを行う。
【0061】
本発明のデジタルカメラのソフトウェアはROMに格納されており、共有データもダイナミックアロケーションによって作成している為、共有データをダイナミックにバインディングする必要がある。図14は主記憶にローディングされた共有ライブラリの様子である。ファンクションAは共有データに対してアクセスを行っている。ファンクションAをコールすればどのタスクからでも共有データにアクセス出来る。共有データとライブラリが主記憶にある場合、共有データとファンクションAは、マッピングされた絶対アドレッシングか、相対アドレッシングで目的のデータをアクセス可能なのである。図15はフラッシュROMへ書き込まれた共有ライブラリと、主記憶にアロケーションされた共有データの様子である。この場合、共有データを作成した時点でアドレスが決定されるが、フラッシュROMのプログラムはもうマッピングが済んでしまっているのでそのアドレスへ対応出来ない。
【0062】
プロセス間で共有データのバインディングを行う場合、データを用意して公開す(登録)るタスクと公開(登録)された共有データを検索するタスクの間のタイミングが重要となる。パーソナルコンピュータのダイナミックリンクの場合、共有ライブラリが主記憶に存在しなければ記録媒体から主記憶にロードすれば良いが、共有データが存在しない場合はそうはいかない。一定時間CPUを別のタスクに明け渡した後で再び検索を行う様にシステムを構築すると、大変なCPU時間を無駄な検索に費やす事になる事が予想出来る。この様なバインディングの問題を解決する為に、本発明では検索の結果、目的の共有データが存在しない場合、そのタスクが休眠状態になり、目的の共有データが別のタスクによって公開(登録)される事で検索側タスクが再び実行可能状態へ戻る様に構成した。特定のタスクが共有データを初期化する場合のタイミングに関しては上記の様に構成する事で解決出来る事が分かった。しかし、共有データを初期化するタスクが不特定の場合には共有データを初期化する事そのものに対する排他制御が必要である。具体的に詳しく述べると、例えば、タスクAが共有データの初期化を含むAPIを呼び出したとする。タスクAによって呼び出されたAPIは初期化済みの共有データが存在するかを調べる。存在しなかった場合には共有データを作成、初期化し、公開(登録)するが、公開(登録)直前にタスクスイッチがかかり、タスクBに切り替わる。そして、タスクBもタスクAが呼び出したAPIと同一のAPIを呼び出す。まだ共有データは公開(登録)されていないので、タスクBも共有データを作成、初期化し、公開(登録)する。そして、APIは共有データを利用する事が可能となり、サービスを開始する。再びタスクスイッチがかかると、タスクAがさらに共有データを公開(登録)するので、タスクBが作成した共有データは失われてしまう。この様な不具合をさけるために共有データの検索から登録までの期間を不可分な動作として行える様に構成した。
【0063】
ダイナミックバインディングを実現するAPIは以下の様なシンボル管理サービスである。
1) AddSymbol シンボルの登録
2) FindSymbol シンボルの検索
3) LockAndFindSymbol シンボルシステムのロックと検索
4) UnlockAndAddSymbol シンボルシステムのアンロックと登録
5) UnlockSymbol シンボルシステムのアンロック
【0064】
共有データにユニークな名前を定義し、その名前でアドレスを登録、検索するというシンプルなシステムである。
【0065】
図17はこのシンボル管理システムの内部データ構造を示している。シンボルを指定してAddSymbolやFindSymbolを実行するとシンボル管理システムはまず、シンボルのセマフォを獲得し、指定されたシンボルをハッシュ関数にかけてハッシュ値を計算する。ハッシュ値は、たとえば文字列の文字コードの合計などで良い。そして得られたハッシュ値でインデックスしてテーブルを引く。テーブルには最初のデータへのポインタが格納されている。END_OF_LISTが格納されていた場合はまだそのハッシュ値を持つシンボルが1つも登録されていない事になる。シンボルのデータはそのポインタを先頭にしてリンクドリストとして登録されている。リスト上のITEMを1つ1つ指定されたシンボルと比較して検索する。図17の場合、LCD_INSTANCEとAF_INSTANCEというシンボルが登録されている。AddSymbolでシンボルがすでに存在していれば、アドレスのフィールドを書き換える。存在していなければ新しいITEMを作成し、リンクドリストに追加する。そして、シンボルシステムのセマフォを開放し、アプリケーションへ復帰する。FindSymbolですでにシンボルが存在している場合はシンボルのセマフォを開放し、アドレスをアプリケーションへ返却して即時復帰出来る。FindSymbolの検索結果、シンボルが存在しなかった場合はまだ有効なデータが格納されていない事を示すフラグを立てたITEMと待ち状態タスクの情報を格納したWAITITEMを作成し、ITEMへ登録する。WAITITEMのセマフォはあらかじめ0に初期化、タイムアウトフラグはTRUEに初期化しておく。その状態を図18のに示した。図18の場合は、2つのタスクがLCD_INSTANCEの登録を待っている。そして、シンボルのセマフォを開放し、FindSymbolのパラメータで指定されたタイムアウト時間を指定しWAITITEMのセマフォを獲得する。WAITITEMのセマフォはあらかじめ0に初期化してあるので、獲得に失敗し、タスクは休眠状態になる。次にそのタスクが実行可能状態へ復帰する為には、タイムアウトが発生するか、セマフォにシグナルが行われるかのどちらかである。その様にしてシンボル待ちタスクが休眠してるシンボルを別のタスクがAddSymbolした場合、WAITITEMのアドレスに値を代入し、タイムアウトフラグをFLASEにしてから、セマフォにシグナル操作を行う。セマフォ待ち関数の戻り値のタイムアウトを利用しないのは、シグナルとほぼ同時にタイムアウトを起こす場合があるからである。そして、WAITITEMのリストからWAITITEMを外す。AddSymbolはWAITITEMが無くなるまでこれを繰り返す。実行可能状態へなったFindSymbolタスクは最初にシンボルのセマフォを獲得するのでAddSymbolがセマフォを離すまでの間、再び休眠状態となる。FindSymbolはセマフォを獲得した後でタイムアウトフラグを確認し、タイムアウトでないならセマフォを開放し、WAITITEMのアドレスフィールドを返却し、アプリケーションへ復帰する。タイムアウトなら、セマフォを開放し、エラーコードを返却してアプリケーションへ復帰する。
【0066】
共有データの初期化に対する排他制御
LockAndFindSymbolとUnlockAndAddSymbolまたはUnlockSymbolは、検索と登録までの期間の排他制御を実現するファンクションである。
【0067】
LockAndFindSymbolを実行してからUnlockAndAddSymbolまたはUnlockSymbolを実行するまでの期間シンボルのシステムを独占し、他のタスクによるシンボル操作(検索、登録)が行われない事を保証する。図19は、このファンクションを使って共有データの初期化を行うプログラムの動作をフローチャートにしたものである。ステップ1901でLockAndFindSymbolを実行し、シンボルシステムのロックと検索を行う。検索の結果、シンボルが発見されれば、ステップ1902へ分岐し、シンボルが無ければ1993へ分岐する。LockAndFindSymbolは現時点でのシンボルの存在を確認し、シンボルが登録されていない場合は即時復帰する。待ち状態にならないので、タイムアウト時間を指定するパラメータは無い。ステップ1901でLockAndFindSymbolを実行し、検索の結果、シンボルが発見されれば、ステップ1902へ分岐し、1902でシンボルシステムのロックを解除する。ステップ1901でLockAndFindSymbolを実行し、検索の結果、シンボルが発見されなかった場合、ステップ1903で共有データ用のメモリをアロケーションする。そしてステップ1904でセマフォを0に初期化する。そして、ステップ1905でUnlockAndAddSymbolファンクションを使い、シンボルのアンロックと共有データの公開を行う。共有データの初期化はまだ不完全だが、セマフォを0に初期化しているので、別のタスクがセマフォを獲得しようとしても待ち状態に遷移するので問題ない。共有データの初期化すべてを行うまでシンボルシステムをロックしてしまうと、自タスクよりプライオリティの高い他タスクのバインディングの遅延につながる。したがって、シンボルのロック期間は短ければ短いほど良い。図19の点線で囲んである部分はシンボルのシステムを独占している期間である。ステップ1906で共有データの初期化を済ませ、ステップ1907で共有データのセマフォを開放する。この時点で他のタスクからこの共有データが利用可能になる。LockAndFindSymbolの動作はFindSymbolの動作に非常に良く似ている。FindSymbolとの違いは、シンボルが存在しない場合に即時復帰する事とシンボルのセマフォを返却せずに復帰する点である。UnlockSymbolはシンボルシステムのセマフォを返却するだけのファンクションである。UnlockAndAddSymbolもAddSymbolと良く似ている。シンボルシステムのセマフォを獲得している事を前提にしているので、セマフォの獲得をしない点でAddSymbolと異なる。
【0068】
次にこのカメラのスタートアップ方法を説明する。
【0069】
カーネルのスタートアップ
図1の5のCPUの電源が投入され、リセットが解除されると、図1の5のCPUは図1の13のROMのリセット後のエントリポイントから実行を始める。図1の13のROMにはリアルタイムオペレーティングシステムなどの基本機能だけが搭載されている。オペレーティングシステムそのものをバージョンアップする事を可能にする為に図1の13のROMのプログラムはオペレーティングシステムをスタートする前に図1の15のフラッシュROMへジャンプするようになっている。図1の15のフラッシュROMが手違いや事故によって書き換わってしまった場合に暴走してしまう危険があるので、図1の15のフラッシュROMの別の特定番地にはキーワードが格納されており、キーワードが一致した場合のみフラッシュROMへジャンプする。キーワードが一致するが、フラッシュROMのプログラムにバグがあったり、事故で一部の書き込みに失敗した場合も、やはり暴走する。書き込みの失敗に関しては、プログラムの書き込みとベリファイが終了してからキーワードを書く様に構成する事で回避可能であるが、プログラムのバグによって暴走する場合は防ぎようがない。この様な問題は主に開発段階で発生するので、特別なハードウェアを使って回避するのが、実装もデバッグもはるかに簡単である。特別なハードウェアといってもIOポートの特定のビットを電源側へプルアップしたり、グランドへプルダウンするだけで良い。本実施例では図1の19のPCインターフェースの製品ではプルアップされているポートをグランドへショートする事でメンテナンスモードである事をカメラへ伝える。もし、スタートアップ時にメンテナンスモードである事を検出すると、たとえキーワードが一致してもフラッシュROMのプログラムは一切実行せず、図1の13のROMのプログラムだけで動作し、フラッシュROMのオペレーションなどを行うモードとなる。特定のハードウェアを用意する必要があるので、この機能が市場でトラブルを起こす心配はまったくない。図20は本実施例のスタートアップシーケンスのフローチャートである。ステップ2001でリセットが解除されると、CPUはROMの特定番地を読み出して、そこから実行を始める。ステップ2002でBUSのタイミングなど必要最低限のハードウェアの設定を済ませる。ステップ2004で、メンテナンスモードかどうかを判断する。本実施例では図1の19のPCインターフェースの製品ではプルアップされているポートがグランドへショートされているかどうかを判断する。もし、メンテナンスモードならステップ2006へ分岐する。ステップ2006ではリアルタイムOSのカーネル、メモリマネージャ、シンボル管理、プログラムROMマネージャを初期化しスタートさせる。そして、ステップ2007でフラッシュROMオペレーション用のプログラムのスタートアップタスクを実行する。スタートアップタスクは、必要なタスク類のテーブルをもっており、順次タスクを作成し、実行させる。
【0070】
ステップ2003でメンテナンスモードでなかった場合、ステップ2004へ分岐する。ステップ2004でフラッシュROMの特定番地のキーワードをチェックする。キーワードは、プログラムROMマネージャが管理していない領域を予約する方法もあるが、フラッシュROMの最後の番地にしておけば、この機能を使わない時に通常のプログラムを格納する事も可能となる。そして、キーワードチェックの結果キーワードが一致すればステップ2005へ分岐する。ステップ2005では、フラッシュROMへジャンプしてしまうので、オペレーティングシステムそのものを置き換える様なプログラムやハードウェア設定の追加などのプログラムを用意する事が可能である。ステップ2004でキーワードが一致しなかったらステップ2008へ分岐する。ステップ2008の処理内容はステップ2006とまったく同じである。そしてステップ2009ではプログラムROMマネージャの機能を使って、デジタルカメラのスタートアップタスクを検索し、実行する。
【0071】
デジタルカメラのスタートアップ
デジタルカメラとしての重要な機能はステップ2009でスタートする。図20のステップ2009のスタートアップタスクの動作を図1のフローチャートで示した。スタートアップタスクはモジュール名のテーブルをもっており、そのテーブルにしたがって、プログラムROMマネージャ経由でモジュールを検索し、順次タスクを作成していく。図21はそのテーブルの順番をおおざっぱにグループわけして表現している。
【0072】
ステップ2101でデバッグ用のプログラムをスタートする。ウォッチドッグやイリーガルオペコードトラップなどの製品としての異常検出を目的としたものからログ(経歴)サービスなどの開発時のみに利用するものも含む。ステップ2102ではハードウェアの初期化を行う。仮想化されたハードウェアのドライバを用意するのもこの時点で行う。また、ローバッテリー例外処理や、シャットダウンのフックもステップ2102で初期化し、公開する。
【0073】
ステップ2103でファイルシステムの初期化と内蔵フラッシュROMDISKドライバーの初期化とファイルシステムのマウントを行う。
【0074】
ステップ2104は工場調整値データのデータベースサービスをスタートとカメラステータスデータベースをスタートする。この時、ステップ2103で初期化したファイルシステムを用いて内蔵フラッシュROMDISKの工場調整値データのファイルをオープンし、工場の調整値データを読み出す。カメラステータス情報のデータファイルも同様にオープンし、データを読み出す。カメラステータスデータとは、現在の圧縮率やストロボ使用のON・OFF、DISKの残り空き容量などの情報が格納されている。
【0075】
ステップ2105でその他のデバイスドライバーの公開(登録)をするだけのタスクを起動する。デジタルカメラのデバイスドライバは、パーソナルコンピュータでよく知られているもの以外に、CCDデバイス、JPEGデバイス、信号処理アクセラレータデバイス、測光デバイス、測色デバイス、フォーカスコントロールデバイス、などデジタルカメラのハードウェアに依存した特徴を隠蔽するためのものが多数含まれる。この時点ではデバイスドライバのエントリーポイントをシンボルとして公開するだけである。ステップ2106で内蔵ROMDISKの中に特定のファイル名を持った実行可能ファイルが存在していれば主記憶にロードして実行する。内蔵ROMDISKの中のプログラムを実行可能にしておく事で、プログラムROMマネージャの管理するフラッシュROMへの書き込みをする事なくカメラの機能を拡張する事が出来る。内蔵ROMDISKのプログラムがステップ2105で公開されたデバイスドライバーと同じ名前のドライバーを公開する事で、その機能を完全に置き換える事が可能になる。ステップ2108でバッテリーチェックシステムをスタートさせ、2108でパワーロックのサービスをスタートさせる。ステップ2109でコントロールパネルをスタートさせる。コントロールパネルによってボタンが押された情報はこの時点で伝達され、撮影などの動作にはいる。デバイスドライバがバインディングされるのはステップ2109の後である。シンボルの書き換えによるモジュールの置き換えはステップ2109よりも前でなければならない。
【0076】
実行ファイル
内蔵のフラッシュROMにプログラムを追加する場合、追加書き込みをする未使用領域が無くなってしまうと、一旦すべてのプログラムを消去しなければならない。より多くのアプリケーションに対応する為に、外部記憶媒体に追加プログラムを書き込む様にしたい。
【0077】
外部記憶媒体の追加プログラムをデジタルカメラがスタートアップ時に読み出す様に構成した場合、デジタルカメラのスタートアップ時間が外部記憶媒体のスタートアップ時間に大きく依存してしまう。デジタルカメラのスタートアップはユーザが操作部のキーへ触れた時から始まる。ユーザが操作部のキーへ触れてから約200ミリ秒ほどの期間はコントロールパネル部でチャタリングの除去の為のタイムラグがある。その時間の間にスタートアップが終了しなければ、ユーザーからの操作に対しての反応が遅くなり、操作感が悪くなる。それに対しハードディスクのスタートアップは7秒〜十数秒かかる。その事から外部記憶媒体から直接追加プログラムをロードする事は不可能である。本発明では、外部記憶媒体をデジタルカメラへ挿入したタイミングで自動実行ファイルが外部記憶媒体に存在すれば、それを内蔵ROMDISKへコピーし、外部記憶媒体がデジタルカメラから脱着されたタイミングで内蔵ROMDISKの中の自動実行ファイルを消去する様に構成する事で、外部記憶媒体の中の自動実行ファイルをスタートアップ時に高速にロードし、実行する事を可能としている。スタートアップ時に自動実行ファイルをロードするタイミングは図21のステップ2106で説明した。
【0078】
仮想IOポート
デジタルカメラのBUSには、カスタムのデバイスが使われている。カスタムのデバイスをより安く生産できれば、デジタルカメラも安く生産出来る。周辺カスタムデバイスのコストを下げる為に、出来るだけゲート数の少ない回路で沢山の機能を搭載したい。1つのアドレスデコード回路でいくつかの機能のコントロールを行う事や、コントロール用レジスタを書き込み機能だけ(CPUから読めない)にする事で周辺カスタムデバイスのゲート数をかなり下げる事が出来るが、コントロールするソフトウェアの設計が困難になってしまう。本実施例では、読み書き可能なバッファーを備えた仮想のIOポートを構成し、ソフトウェアモジュール間で共有する事で、周辺カスタムICのコントロールポートへ読み出し機能がある場合と同等のソフトウェアの構成を可能としている。
【0079】
図22は仮想IOポートのデータ構造を示している。アプリケーションはデバイスハンドルとレジスタIDナンバーをつかってコントロールを行う。APIはデバイスハンドルで指定されたバッファーの配列に対してリードモディファイライトを行い、その内容をバッファーと対で格納されているIO番地情報を使って周辺デバイスへ書き込みを行う。このデバイスハンドルは、スタートアップ時の図21のステップ2102で初期化し、ハンドルをシンボル登録する。
【0080】
図23はこの仮想デバイスを使ったビットセットファンクションのフローチャートである。ステップ2301でステータスレジスタの内容を待避する。ステップ2302で割り込みを禁止する。ステップ2303でハンドルとレジスタIDからバッファーとIO番地のアドレスを計算する。レジスタIDは、あらかじめ図22のテーブルのインデックス値を定義しておく。ステップ2304でバッファーのデータとセットするビットパターンのORをとり、バッファーへ格納し、IOポートへも出力(書き込み)を行う。ステップ2305でステータスレジスタを復帰する。もし、ステップ2302を実行するより以前が割り込み許可状態だったなら割り込み許可状態へ戻る事になる。
【0081】
仮想デバイスのAPIとしてビットセット以外にビットクリア、ビット幅を指定した書き込みと読み出しがあればコントロールプログラムは作成可能である。
【0082】
仮想デバイスを利用する事のメリットとして、仮想デバイスAPIを変更してIOの経歴をとるなどのデバッグ用の用途に利用出来る点が上げられる。また、ハードウェアの設計変更によって周辺デバイスのアドレスに変更があった場合に、変更が及ぶ範囲がテーブルの値だけなので管理も変更もしやすい。別の言い方をすれば開発期間とコストを軽減する効果がある。
【0083】
フック管理
イベントの発生に対してコールバック処理を行う場合がある。コールバックの依頼主が不特定多数である場合にはそれらを管理するAPIがあると便利である。デジタルカメラの場合、そのような不特定多数が利用するコールバックサービスがいくつか必要である。ローバッテリー発生の例外処理、シャットダウンの処理などは、制御プログラムのほとんどに例外処理が必要になるからである。本発明ではそれらのフックを管理するAPIをオペレーティングシステムのサービスとして用意している。フックのAPIは以下の様なサービスである。
1) フックハンドルの作成
2) フックハンドルの抹消
3) ファンクションとインスタンスの登録
4) ファンクションの登録解除(リストから削除)
5) フックの実行
【0084】
フックハンドルの作成は、フック管理用のメモリをアロケーションし、セマフォを1で初期化、最初のファンクションへEND_OF_LISTを代入し、そのメモリのポインタをフックハンドルとしてアプリケーションへ引き渡す。ファンクションとインスタンスの登録は、フックハンドル、ファンクションアドレス、インスタンスアドレスを指定して呼び出し、ファンクションとインスタンスを登録し、ファンクションのハンドルを返却する。ファンクションのハンドルは後で削除する時に使用する。図24はフック管理のデータ構造を示している。フックハンドルに対し、2つのファンクションが登録されている。
【0085】
ファンクションの実行はセマフォを獲得し、リストをたどりながら順次ファンクションを実行していく。フックを利用したアプリケーションの例を図25のフローチャートで説明する。図25の例はフォーカスモータをコントロールプログラムである。ステップ2501でフォーカスコントロールを開始する。ステップ2502でローバッテリー例外処理のフックへコールバック関数を登録する。この時登録する関数は図26のフローチャートで示した関数である。インスタンスとしてフォーカスシステムのコントロール時間待ち用のセマフォを登録する。このセマフォはコールバックファンクションの中で使用する。ステップ2503で1ステップだけ駆動する。ステップ2504では、ステップ2502でコールバックファンクションのインスタンスとして指定したセマフォに対してタイムアウト指定で獲得を試みる。このセマフォは0で初期化しているので通常は獲得に失敗し、タイムアウトが発生する。ステップ2505でタイムアウトが発生したかどうかを判定する。タイムアウトならステップ2506へ、タイムアウトが発生していない場合は2509へ分岐する。ステップ2506では駆動すべき全ステップの駆動が終了したか判断し、まだ終了していないなら、ステップ2503へ戻り、終了していればステップ2507へ分岐する。ステップ2507ではステップ2502で登録したファンクションをフックから削除する。ステップ2508で正常に終了する。もし、ステップ2505でタイムアウトが発生していなければステップ2509でローバッテリ例外処理フックからステップ2502で登録したファンクションを削除し、ステップ2510で異常終了のエラーコードを返却して呼び出し元へ復帰する。図26はステップ2502で登録したコールバックファンクションのフローチャートである。ステップ2601でフォーカスモータの電源を落とし、ステップ2602でセマフォへシグナルし、ステップ2603で復帰する。このコールバックファンクションがステップ2602でセマフォをシグナルしなければ必ず図25のステップ2505でタイムアウトになる。この様な構成でローバッテリ時の例外処理を行う事で検出から対応までのレスポンスが早く、CPUタイムを無駄遣いしない制御が可能となる。
【0086】
イベントプロシジャ
スタートアップの後、呼び出されるプログラムは、コントロールパネルからの操作イベントに対応した処理である。コントロールパネル部がメインCPUへ送るイベントはどのキーが押された、又は離されたという情報である。2つボタン押しや2つボタン押しなどの操作をいろんな機能に割り当てる事で少ないキーで多くの機能を持たせる事が可能になる。そこで押されたキーのイベントはキーの操作を理解するモジュールへと伝達される。そして、そのモジュールでキー操作の内容を理解した結果、それに対応したデジタルカメラの機能を起動する。ここでいうデジタルカメラの機能は、EraseSingleとかSetMacroModeといった単機能の動作である。これらの機能はイベントが起こった時にそれに対応して呼び出されるサブルーチンのテーブルとして管理しており、イベントプロシージャと呼んでいる。名前とファンクションを対にして記憶しているテーブルであり、パーソナルコンピュータではマクロ言語をサポートしたEmacsなどのテキストエディタなどでもこの様なテーブルを実装している。本発明のデジタルカメラは、イベントプロシージャのテーブルをスタートアップ時に作成する。したがって、自動実行ファイルが特定のイベントプロシージャを置き換える事でデジタルカメラの機能の一部を変更する事が可能である。
【0087】
メインパワーマネージャ
このようにシステムが立ち上がるとコントロールパネルからのイベントに対応して、制御が行われる。撮影や録音の処理が終了すれば、必ず電源を落とすシステムにした場合、スタートアップとシャットダウンの時間のタイムラグや、DISKキャッシュのフラッシュなどの処理を毎回行う事になり、連続的な操作に対するレスポンスが悪くなってしまう。また、DISKキャッシュやEFのチャージのシステムは録音などのアプリケーションとは分離して設計する事が望ましい。しかし、電源を落とす為にはその様なサブシステムの動作状態を管理しなければならない。さらに、自動実行ファイルなどでカメラの機能を拡張したり、パソコンからのリモートコントロールで録音や撮影の動作を行う事も考慮しなければならない。この様なシステムの電源を落とすプログラムをメインシーケンスの流れの中で設計するのは非常に困難である。
【0088】
本発明では、デジタルカメラの主電源を落とす為のしくみを用意する事で、上記の問題点を解決している。
【0089】
メインパワーマネージャのAPI
1) パワーのロック
2) パワーのアンロック
3) オートシャットダウンタイムの設定
【0090】
各アプリケーションの中で最も最上位のプログラムは、メインパワーマネージャに対して電源のロックを行う。例えば、DISKキャッシュや、EFチャージも独立したアプリケーションとして設計する為、主電源のロックは行う。主電源がロックされている期間は必ず主電源が供給される事をメインパワーマネージャが保証する。メインパワーマネージャは、ロックの数をカウントし、ロックの数が0になったタイミングからオートシャットダウンタイムの時間を計測する。ロックの数が0になっている時間が連続Nミリ秒に達するとシャットダウンシーケンスに突入する。ロックの数が0になってからNミリ秒以内にロックカウンタが0以外になれば再び主電源の供給が保証される。ただし、ローバッテリー検出システムがローバッテリを検出した場合は例外的に主電源が切断される。
【0091】
図27はパワーロックカウンタとオートシャットダウンタイマーの様子を示したタイムチャートである。一番上のラインは撮影のアプリケーションがパワーをロックしている期間を現している。撮影の点線は露光のタイミングである。それ以前はAFやAEを行いながら待機している期間である。露光時にストロボを使用したので、EFチャージが始まり、EFチャージプログラムが主電源をロックした。一番下の行にロックカウンタの数字を記載している。このとき、撮影プログラムとEFチャージが主電源をロックしているので、ロックカウンタは2になっている。しばらくすると露光された画像が処理され、画像ファイルとして記憶媒体に格納されるのでDISKキャッシュが稼動しはじめ、主電源をロックする。この時のロックカウンタは3になる。次に撮影プログラムが処理のすべてを終了するが、DISKキャッシュとEFチャージはまだ稼動中なのでロックカウンタは2である。DISKキャッシュが保留していたデータのすべてをDISKへ書きおわり、EFチャージが次の撮影に十分な電力を主電源からストロボ部へ充電し終えるとロックカウンタが0になり、オートシャットダウンタイマーが時間計測を開始する。しかし、十分な時間が経過していないうちに再び撮影準備にはいってしまった為、シャットダウンは起こらずに、ロックカウンタが1へ変化する。ロックカウンタはその後1→2→3→2→1→0と変化し、オートシャットダウンタイマーが動作し、Nミリ秒が経過した後にシャットダウンが始まる。
【0092】
シャットダウン処理
シャットダウンの処理は、その時稼動しているアプリケーションによって異なる。又、追加プログラムなどがある場合の処理も異なる。したがって、処理そのものをフックの実行によって行うのが良い。しかし、他のシャットダウン処理との順序関係が重要になる場合がある。データベースのシャットダウン処理はファイルをクローズする事だが、すでにファイルシステムがシャットダウンを終えてしまっていたらファイルのクローズすら出来ない事になるからである。本発明のデジタルカメラではシャットダウンをフックの実行で行い、シャットダウン処理を3っつのレイアに分けて順番に実行を行う事で上記の問題点を解決している。
【0093】
シャットダウンのレイアー
1)アプリケーションレイア
1) システムレイア
2) デバイスレイア
【0094】
スタートアップ時に上記のレイアごとにフックハンドルを用意して公開している。1のアプリケーションレイアでは、データベースやリモートコントロール用の通信プログラムなどがシャットダウンを行う。すなわち、ファイルに対してデータを書いたり、パーソナルコンピュータへ終了メッセージを送ったりといった処理である。2のシステムレイアでは、ファイルシステムや通信のデータリンクレイアの部分などのシャットダウン処理が行われる。3のデバイスレイアで、PCMCIAのカードへの電源供給を落としたり、コントロールパネルとの通信のシャットダウン処理などを行う。上記の順にすべてのフックを実行した後で、主電源を落とす。シャットダウンの処理にファイルシステムも含まれる為、DISKキャッシュサイズにも依存するが数十ミリ秒から数百ミリ秒の時間が必要である。ローバッテリーが発生した場合速やかにシャットダウンを行うが、急激な電圧降下により、システムの動作が数ミリ秒程度しか保証されない場合には、3のデバイスレイアの処理だけを行う。カメラのローバッテリー検出は、数段階のランクがあり、通常の動作禁止の電圧を検出する事が出来ない程の質の悪い電池の場合に限って、3のデバイスレイアだけのシャットダウンの処理になる。その場合ファイルシステムなどに破壊が生じる可能性があるが、電流のリークなどのより致命的な障害を避ける事が出来る。
【0095】
FATALERROR時の処理
ハードウェアの故障などの障害を検出した場合、デジタルカメラはエラーを表示して、システムを停止させる必要がある。システムはモジュールごとに分離設計をしている為、障害の検出の後の処理を設計時に定義するのが難しい。又、仮に障害検出後の処理を定義したとしても、自動実行ファイルなどのプログラムが追加されている場合に問題を起こす可能性がある。本発明では、この様な問題を解決する為にエラー処理を受け持つ専門のモジュールを定義し、処理内容を抽象化した。エラーが発生した後のリカバリー方法に関して大まかに分類し、エラーコードでその種類を伝達する。エラーコードにダブルワードを定義した場合、4ギガ種類のエラーに対応出来るが、それほどの種類のエラーが必要になる事は無い。したがってエラーの種類を特定するコードはせいぜい512種類程度である。本実施例では、エラーコードの上位ワードをエラーの分類とし、下位ワードを表示用に利用する。図28はFATALERRORの分類を表にまとめたものである。
【0096】
FATALERRORもキー入力と同等の内部イベントとして、イベントプロシージャに定義される。ABORTのエラーは、主にシャッターやフォーカスモータなどのメカ部品に障害がある場合に使う。シャッターやフォーカスモータの障害の場合、システムとしては安全に継続稼動できるので、エラー表示を行い、再び次のオペレーションを受け付けるモードへ戻る。例えばストロボに障害がある場合に日中撮影は可能なので、すぐサービスに持っていくかストロボを使わずに撮影を続けるかはユーザが選択出来るべきである。可能な限り動作を行う。INIT_DBは撮影した画像をディスクへ書き込んでいる途中で障害が起こった場合など、記憶媒体の空き容量やディレクトリ情報に間違いが混入する可能性があるタイミングでの障害を検出した場合や記憶媒体の空き容量やディレクトリ情報に間違いを検出した場合に用いる。FATALERRORモジュールが、この種類のエラーコードを受け取った場合、記憶媒体の空き容量やディレクトリー情報などの収集をやり直す。INIT_SYSのエラーコードは内蔵DISKの論理構造を破壊する可能性のある障害が発生した場合や内蔵DISKの論理構造の破壊を検出した場合である。内蔵DISKへはデジタルカメラのステータス情報など重要な情報が納まっており、この情報に誤りがあるとデジタルカメラを安全に稼動させる事が出来ない。しかも、さらに内蔵DISKへの書き込みを続けるとDISKの論理構造の破壊を悪化させる可能性があり、撮影済みの画像ファイルまで失ってしまう可能性がある。したがって、デジタルカメラは内蔵DISKの画像・音声データ読み出しとDISKフォーマットしか出来ないモードになり、完全な初期化をユーザの手で実行してもらうしかない。ASSERTは主に開発中に内部エラーや発狂検出でひっかかった場合の為にある。FATALERRORモジュールがこのコードを受け取った場合、デバッグ情報のログを吐き出し、解析モードへ入る。システムとしては、複数のモジュールが連携して動作しているので、1つのモジュールがエラーを検出した場合に別のエラーを誘発する事がよくある。しかし、きっかけとなるエラーは最初にレポートされる事が多い。そこで、FATALエラーのモジュールは必ず最初にレポートされたエラーだけを表示する。しかし、リカバリー手段はそうはいかない。最も致命的なエラーを優先してリカバリーを行う。図の分類は下になるほど致命的なエラーになる順番で記述してある。
【0097】
前途の様に内蔵ROMDISKへは、システムの稼動に必要な重要なファイルが存在する。デジタルカメラの動作はそのファイルにしたがって決定される。しかし、内蔵ROMDISKに障害がある場合には、そうはいかない。内蔵ROMDISKに障害が発生した場合の処理を特別に設計するのは、基本設計を二重化しなければならない事を意味する。本発明では内蔵ROMDISKに障害がある場合、プログラムROMの一部を読み出し専用ファイルとして利用し、内蔵ROMDISKに障害がある場合の動作を決定出来るように構成した。さらに、内蔵ROMDISKのフォーマット直後にプログラムROMからそのファイルをコピーして継続的な動作が可能になるよう構成した。図29はプログラムROMの一部をファイルの代替えとして利用している様子である。C言語でファイルを読む場合read関数を使うがフラッシュROMからの読み出しは代りにmemcpyを使って読み出す。
【0098】
シンボル管理の動作
1.AddSymbol・UnlockAndAddSymbol<シンボルの登録>
ここではAddSymbolファンクションとUnlockAndAddSymbolを同時に説明する。UnlockAndAddSymbolは図19のSTEP1905で仕様されているOSコールであり、その存在意義はすでに説明済みのものであるが、UnlockAndAddSymbolはAddSymbolファンクションの一部として実装されている。したがってAddSymbolとUnlockAndAddSymbolを同時に説明するのが効率が良い。まず、図30がAddSymbolのフローチャートである。STEP3001でAddSymbolが始まる。STEP3002でバイナリセマフォを用いてシンボルのデータベースの排他ロックを行う。STEP3003でUnlockAndAddSymbolへジャンプする。AddSymbolはシンボルのデータベースをロックする事以外はすべてUnlockAndAddSymbolと共通なのである。図31はUnlockAndAddSymbolのフローチャートである。STEP3101でUnlockAndAddSymbolは始まる。次にSTEP3002で該当シンボルの検索を行う。もし、該当シンボル項目が見つからなかったらSTEP3104で新規シンボル項目を作成して、データベースへ追加する。STEP3102で該当シンボル項目が見つかったらSTEP3103へ分岐する。STEP3103でその項目が、有効なデータを持っているのか、待ちタスクのハンドルを持っているのかを判断する。もし待ちタスクの行列を持っているのであればSTEP3105で待ち行列のタスクをすべてウェークアップさせる。STEP3104、STEP3103STEP3105の次にSTEP3106で新規項目へデータを格納し、STEP3107でシンボルテーブルデータベースをアンロック(セマフォの開放)する。
【0099】
2.FindSymbol<シンボルの検索>
図32はシンボル検索ファンクションFindSymbolのフローチャートである。STEP3201でFindSymbolが始まる。STEP3202でセマフォなどの手法を用いてシンボルのデータベースをロックする。STEP3203で該当シンボル項目の検索を行う。検索の結果シンボルが存在しなかった場合はSTEP3211で新規シンボルを作成してデータベースへ加える。STEP3203で該当シンボル項目が見つかった場合はSTEP3204へ分岐する。STEP3204でその項目に有効なデータが含まれているのか、待ちタスクのハンドルが含まれているかを判断する。もし、待ちタスクのハンドルを持っているのであればSTEP3205へ分岐する。STEP3211の後もまた3205へ移行する。STEP3205ではシンボルデータベースをアンロックして休眠状態になる。そして、タイムアウト時間か、AddSymbol/UnlockAndAddSymbolによってウェークアップするまでSTEP3205で休眠状態となる。STEP3204で有効なデータを持っていた場合はSTEP3206でシンボルデータベースのアンロックを行い、STEP3210で登録データを返却して復帰する。STEP3205からウェークアップしたらSTEP3207へ移行する。STEP3207ではそれがタイムアウトによるウェークアップかどうか判断する。データが登録された事によるウェークアップならばSTEP3210へ分岐し、登録データを返却して復帰する。STEP3207でタイムアウトによるウェークアップだったならSTEP3208で他に待ちタスクがなければシンボル項目を削除し、STEP3209でタイムアウトエラーを返却して復帰する。
【0100】
図33は図32STEP3203と図31STEP3102の該当シンボル項目の検索を少し詳しくしたものである。STEP3301で該当シンボル項目の検索を開始する。STEP3302でシンボル文字列からハッシュ値の算出を行う。STEP3303でハッシュ値に該当するデータのリストを検索する。もし、該当項目がなければSTEP3305へ分岐しSTEP3305でデータ不在コードを返却して復帰する。STEP3303で該当する項目があればSTEP3304へ分岐し、STEP3304では項目へのポインタを返却し、復帰する。
【0101】
3.LockAndFindSymbol シンボルシステムのロックと検索図34はLockAndFindSymbolファンクションのフローチャートである。STEP3401でLockAndFindSymbolが開始される。STEP3402でシンボルデータベースの排他ロックを行う。STEP3403で該当シンボルの検索を行うこれは、図33で説明した関数である。もし、該当項目がなければSTEP3406へ分岐し、STEP3006でデータ無しのエラーコードを返却して復帰する。STEP3403で該当シンボルがあった場合はSTEP3404で有効なデータが格納されているのか、待ちタスクのハンドルが格納されているのかを判断する。もし、STEP3404で有効なデータが格納されてなければ、STEP3406でデータ無しを示すエラーコードと共に即時復帰する。STEP3404で有効なデータがある場合はSTEP3405でデータを返却して復帰する。
【0102】
メインパワーマネージャのAPI
図27の様な動作をするメインパワーマネージャの動作をフローチャートを使って説明する。アプリケーションは電源の保証が必要になる直前にLockMainPowerファンクションを呼び電源が落ちても良くなったらUnLockMainPowerファンクションを呼び出す。
【0103】
1.LockMainPower(パワーのロック)
図35はLockMainPowerのフローチャートである。STEP4001でLockMainPowerを開始する。STEP4001でセマフォを用いて共有データの排他ロックを行う。ここでいう共有データとはロックカウンタやカウントストップフラッグなどのメインパワーマネージャが内部で利用するデータの事である。STEP4003でロックカウンタが0かどうかを確かめる。もし、0ならオートシャットダウンタイムのカウントをストップさせる。具体的にはカウントストップフラグをTRUEにする。STEP4005でロックカウンタをインクリメントする。STEP4006で共有データのアンロックを行い、STEP4007で復帰する。
【0104】
2.パワーのアンロック
図36はUnLockMainPowerのフローチャートである。STEP4101でUnLockMainPowerを開始する。STEP4102でセマフォを用いて共有データの排他ロックを行う。STEP4103でロックカウンタが1ならSTEP4104へ分岐する。STEP4104でオートシャットダウンタイムのカウントを0にクリアしてカウントをスタートさせる。具体的にはカウントストップフラグをFALSEにする。STEP4105でロックカウンタのディクリメントを行い、STEP4106で共有データをアンロックする。STEP4107で復帰する。
【0105】
3.オートシャットダウンタイムのカウント
図37はオートシャットダウンタイムをカウントするタスクのフローチャートである。STEP4201でタスクを開始する。STEP4202で共有データの排他ロックを行う。STEP4203でカウントストップフラグのチェックを行い、もしTRUEならばカウント動作をスキップしてSTEP4206へジャンプする。もしFALSEならSTEP4204でカウンタをインクリメントする。STEP4205でタイムアウト時間の設定値と比較し、もし、タイムアウト時間と一致したらSTEP4207へ分岐する。STEP4207ではシャットダウンシーケンスを起動する。もしSTEP4205でタイムアウト時間と比較した結果が不一致ならSTEP4206へ進む。STEP4206では共有データをアンロックする。STEP4208で一定時間タスクを休眠状態にした後STEP4202へ戻る。以後STEP4202からSTEP4208の間を繰り返す。
【0106】
プログラムROMマネージャの動作
プログラムROMマネージャの動作をサービス毎にフローチャートを用いて説明する事にする。
【0107】
1.モジュール名を指定してその番地を得る
図38はモジュール名からモジュールの番地を得る為のファンクションFindModuleのフローチャートである。STEP5001でFindModuleを開始し、STEP5002でモジュール検索の排他ロックを行う。排他ロックにはセマフォなどを用いる。このタスクがモジュールを検索中に他のタスクがモジュールを無効にしたり、追加すると動作に不具合が発生する為に排他ロックを行うのである。STEP5003でモジュールを検索する。STEP5003は図51でさらに詳しく解説を加える。STEP5004でモジュール検索の排他ロックを解除し、STEP5005でSTEP5003のリターン値である番地又はエラー値を返却する。
【0108】
次に図38STEP5003のモジュール検索の手順を図39を使って説明する。STEP5101でモジュール検索を開始する。STEP5102でフラッシュROMの先頭番地へポインタをセットする。このポインタを進めながらモジュールを検索していくのである。次にSTEP5103で、ポインタがポイントしているモジュールの使用済みフラグをチェックする。もし、使用済みフラグがTRUEならSTEP5107へ分岐し、FALSEならSTEP5104へ移行する。STEP5104ではモジュール名が検索している名前と一致するかどうかと同時に未使用領域かどうかを確かめる。もし、名前が不一致ならSTEP5107へ分岐する。つまり、使用済みフラグがTRUEか名前が不一致ならSTEP5107が実行される。STEP5107では次のモジュールの先頭番地を算出し、再び5103へ戻る。こうして名前が不一致するか使用済みフラグがTRUEの間検索を続ける。STEP5104で名前が一致したらSTEP5105でその番地を返却し、呼び出し元へ復帰する。STEP5104で未使用領域を検出したら、STEP5106へ分岐し、エラーを呼び出し元へ返却して復帰する。
【0109】
2.ファイル名を指定して追加書き込みを行う
図40はファイル名を指定して追加書き込みを行うWriteMduleのフローチャートである。STEP5201でWriteMduleを開始する。STEP5202でモジュール検索の排他ロックを行う。STEP5203でモジュールの検索を行う。ここでのモジュール検索は図39で説明したサブルーチンをそのまま用いる。もし、モジュールを発見する事ができればSTEP5204へ分岐し、図7の使用済みフラグへTRUEを書き込む。そして、STEP5203でモジュールを発見出来なかった場合とSTEP5204の後もSTEP5206へ分岐する。STEP5206で空き領域の番地を検索する。空き領域検索は、モジュールの検索と大変類似しているので説明を省略する。もし、STEP5206で空き領域が不足している事が検出されたら、STEP6210へ分岐し、モジュール検索の排他ロックを解除してSTEP6211で空き領域不足のエラーを返却し復帰する。STEP6202で空き領域番地が分かった後にSTEP5206でモジュールのロードとマッピングを行う。STEP5206でモジュールが書き込まれる番地が確定するので、ファイルからプログラムを主記憶へ取り込み、絶対アドレッシングされている部分を実際の番地へ書き換え、実行可能な状態にする。そして、STEP5207でそのプログラムを実際にフラッシュROMへ書き込む。そして、STEP5208でモジュール検索の排他ロックを解除してSTEP5209でエラー無しのコードを返却して復帰する。
【0110】
3.モジュール名を指定してそのモジュールを無効にする
図41はモジュール名を指定してモジュールを無効にするKillModuleファンクションのフローチャートである。STEP5301でKillModuleを開始する。STEP5302でモジュール検索の排他ロックを行い、STEP5303でモジュールの検索を行う。これは図51で説明したルーチンである。モジュールが発見されたらSTEP5304へ分岐し、そのモジュールの使用済みフラグ(図7参照)をTRUEにする。STEP5303でモジュールが存在しなかった場合と5304の後はSTEP5305を実行する。STEP5305はモジュール検索の排他ロックの解除を行い、STEP5306で復帰する。
【0111】
また、本発明は、前述した実施形態の機能を実現するソフトウエアのプログラムコードを記録した記憶媒体を、システムあるいは装置に供給し、そのシステムあるいは装置のコンピュータ(またはCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行することによっても、達成されることは言うまでもない。
【0112】
この場合、記憶媒体から読み出されたプログラムコード自体が本発明の新規な機能を実現することになり、そのプログラムコードを記憶した記憶媒体は本発明を構成することになる。
【0113】
プログラムコードを供給するための記憶媒体としては、例えば、フロッピーディスク、ハードディスク、光ディスク、光磁気ディスク、CD―ROM、CD―R、磁気テープ、不揮発性のメモリカード、ROMなどに用いることができる。
【0114】
さらに、記憶媒体から読み出されたプログラムコードが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムコードの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるCPUなどが実際の処理の一部または全部を行い、その処理によっても前述した実施形態の機能が実現され得る。
【0115】
尚、本発明は、前述した実施形態の機能を実現するソフトウエアのプログラムコードを記録した記憶媒体からそのプログラムをパソコン通信等通信インフラを介して要求者にそのプログラムを配信する場合にも適用できることは言うまでもない。
【0116】
【発明の効果】
本発明により、機能の一部を追加ソフトウエアによって拡張することが可能となり、さらに、ファームウエアのバージョンに依存しない追加ソフトウエアの開発が可能になった。
【図面の簡単な説明】
【図1】本発明を説明するブロック図
【図2】メモリマネージャの説明図
【図3】アロケーション動作の手順を説明する図
【図4】メモリブロックの説明図
【図5】メモリ開放動作の手順を説明する図
【図6】リセットアロケーションポインタの動作の手順を説明する図
【図7】 ROMに記憶されたプログラムの形式を説明する図
【図8】モジュールの書換えを説明する図
【図9】アドレステーブルを説明する図
【図10】ファイルフォーマットを示す図
【図11】レコードタイプを説明する図
【図12】プログラムファイルを説明する図
【図13】レコードの形式を説明する図
【図14】主記憶部に記憶された共有ライブラリの説明図
【図15】主記憶部とフラッシュROMに記憶された共有ライブラリの説明図
【図16】シンボル管理を説明する図
【図17】シンボル管理システムの内部構造を説明する図
【図18】シンボル管理システムの内部構造を説明する図
【図19】共有データの初期化を行う動作の処理手順を説明する図
【図20】スタートアップシーケンスの処理手順を説明する図
【図21】スタートアップタスクの処理手順を説明する図
【図22】仮想IOポートのデータ構造を説明する図
【図23】ビットセットファンクションの処理手順を説明する図
【図24】フック管理のデータ構造を説明する図
【図25】フォーカスコントロールを説明する図
【図26】フォーカスコントロールを説明する図
【図27】フォーカス動作説明図
【図28】 FATALERRORの分類を示す図
【図29】プログラムROMの一部をファイルの代わりにする図
【図30】 AddSymbolの処理手順を示す図
【図31】 UnlockAndAddSymbolの処理手順を示す図
【図32】シンボル検索ファンクションの処理手順を示す図
【図33】シンボル項目の検索の処理手順を示す図
【図34】 LockAndFindSymbolの処理手順を示す図
【図35】 LockMainPowerの処理手順を示す図
【図36】 UnlockMainPowerの処理手順を示す図
【図37】オートシャットダウンタイムをカウントするタスクの処理手順を示す図
【図38】 FindModuleの処理手順を示す図
【図39】モジュール検索の処理手順を示す図
【図40】 WriteModuleの処理手順を示す図
【図41】 KillModuleの処理手順を示す図
【符号の説明】
1 レンズ
2 CCDユニット
3 A/Dコンバータ
4 CCDとA/D変換器に同期信号を供給するSSGユニット
5 カメラシステムの中央演算器
6 信号処理を高速に実現するためのアクセラレータ
7 電池
8 システム全体へ電源を供給するためのDC/DCコンバータ
9 DC/DCコンバータをコントロールする電源コントローラユニット
10 パネル操作・表示装置・電源のコントロールを行うマイクロコンピュータ
11 ユーザーへ情報を表示する表示装置
12 ユーザーが直接操作するレリーズSWを含むコントロールパネル
13 OS等システムプログラムが入ったROM
14 カメラシステムの主記憶であるDRAM
15 内臓記憶媒体として使用するフラッシュROM
16 PCMCIAカードのインターフェース部
17 ATAハードディスクなどの外部記録媒体
18 拡張バスインターフェース
19 PC通信インターフェース
20 DMAコントローラ
21 ストロボ
22 パーソナルコンピュータ

Claims (4)

  1. メモリのポインタから探索を開始して、要求されたサイズの空ブロックが最初に見つかった領域から当該空ブロックを割り当てる割当手段と、
    該割当手段による割当後に前記ポインタを当該割り当てられたブロックの直後の位置に更新する更新手段と、
    所定動作の実行後に発せられるアプリケーションからの要求に応じて、前記ポインタを前記メモリの先頭位置へ初期化する初期化手段とを備えることを特徴とする情報処理装置。
  2. 撮影手段を更に備え、前記所定動作は当該撮影手段による撮影動作であることを特徴とする請求項1に記載の情報処理装置。
  3. 録音手段を更に備え、前記所定動作は当該録音手段による録音動作であることを特徴とする請求項1に記載の情報処理装置。
  4. メモリのポインタから探索を開始して、要求されたサイズの空ブロックが最初に見つかった領域から当該空ブロックを割り当てる割当工程と、
    該割当工程による割当後に前記ポインタを当該割り当てられたブロックの直後の位置に更新する更新工程と、
    所定動作の実行後に発せられるアプリケーションからの要求に応じて、前記ポインタを前記メモリの先頭位置へ初期化する初期化工程とを備えることを特徴とする情報処理方法。
JP18973497A 1996-07-19 1997-07-15 情報処理装置およびその方法、オペレーティングシステム、記憶媒体 Expired - Fee Related JP3832933B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP18973497A JP3832933B2 (ja) 1996-07-19 1997-07-15 情報処理装置およびその方法、オペレーティングシステム、記憶媒体

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP19080896 1996-07-19
JP8-190808 1996-07-19
JP18973497A JP3832933B2 (ja) 1996-07-19 1997-07-15 情報処理装置およびその方法、オペレーティングシステム、記憶媒体

Publications (2)

Publication Number Publication Date
JPH1083342A JPH1083342A (ja) 1998-03-31
JP3832933B2 true JP3832933B2 (ja) 2006-10-11

Family

ID=26505652

Family Applications (1)

Application Number Title Priority Date Filing Date
JP18973497A Expired - Fee Related JP3832933B2 (ja) 1996-07-19 1997-07-15 情報処理装置およびその方法、オペレーティングシステム、記憶媒体

Country Status (1)

Country Link
JP (1) JP3832933B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10258339A (ja) * 1997-03-18 1998-09-29 Mitsubishi Heavy Ind Ltd 双ドラム式連続鋳造方法
JP3519913B2 (ja) * 1997-06-10 2004-04-19 三洋電機株式会社 ディジタルスチルカメラ

Also Published As

Publication number Publication date
JPH1083342A (ja) 1998-03-31

Similar Documents

Publication Publication Date Title
US6470413B1 (en) Information processing apparatus and method in which an executable file in an incorporated memory is loaded and executed at startup
US6604168B2 (en) Flash eeprom management using ratio of used to unused sectors
US7702894B2 (en) System and method for loading programs from HDD independent of operating system
US6401198B1 (en) Storing system-level mass storage configuration data in non-volatile memory on each mass storage device to allow for reboot/power-on reconfiguration of all installed mass storage devices to the same configuration as last use
US5363487A (en) Method and system for dynamic volume tracking in an installable file system
JP3593241B2 (ja) 計算機の再起動方法
JP3109054B2 (ja) エラー回復サブシステムおよびエラー回復方法
KR100233178B1 (ko) 대용량 저장장치 구성 레코드들을 갱신하기 위한 방법 및 시스템
KR20040019260A (ko) 비-휘발성 어플리케이션 및 화일 저장 디바이스로부터부팅시키기 위한 시스템 및 방법
JPH0997139A (ja) フラッシュrom管理方法及び装置及びコンピュータ制御装置
JP3832933B2 (ja) 情報処理装置およびその方法、オペレーティングシステム、記憶媒体
JPH0997218A (ja) フラッシュrom管理方法及び装置及びコンピュータ制御装置
CN114020308A (zh) 一种摄像设备升级方法、装置、设备及介质
JPH0997207A (ja) フラッシュrom管理方法及び装置及びコンピュータ制御装置
JPH0997206A (ja) フラッシュrom管理方法及び装置及びコンピュータ制御装置
JPH0997205A (ja) フラッシュrom管理方法及び装置及びコンピュータ制御装置
TWI841160B (zh) 存儲控制器的驅動管理方法及相關設備
JP4351328B2 (ja) 情報処理装置及びシステム起動管理方法
JPH0997217A (ja) フラッシュrom管理方法及び装置及びコンピュータ制御装置
TWI798743B (zh) 用來進行多系統日誌存取管理之方法、系統單晶片積體電路以及非暫態計算機可讀取媒體
JPH0997199A (ja) フラッシュrom管理方法及び装置及びコンピュータ制御装置
JPH0997314A (ja) Icカード装置
JPH0993523A (ja) 電子カメラ
CN1235147C (zh) 应用装置的装置信息管理***及方法
JPH1050084A (ja) メモリ制御装置およびメモリアクセス方法

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040715

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040715

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20060417

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20060425

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20060626

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20060711

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20060718

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090728

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100728

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100728

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110728

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120728

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120728

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130728

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees