JP6413813B2 - 電子機器、制御装置及びプログラム - Google Patents

電子機器、制御装置及びプログラム Download PDF

Info

Publication number
JP6413813B2
JP6413813B2 JP2015020391A JP2015020391A JP6413813B2 JP 6413813 B2 JP6413813 B2 JP 6413813B2 JP 2015020391 A JP2015020391 A JP 2015020391A JP 2015020391 A JP2015020391 A JP 2015020391A JP 6413813 B2 JP6413813 B2 JP 6413813B2
Authority
JP
Japan
Prior art keywords
command
status
control means
system call
writing
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
JP2015020391A
Other languages
English (en)
Other versions
JP2016143330A (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.)
Fujifilm Business Innovation Corp
Original Assignee
Fuji Xerox Co Ltd
Fujifilm Business Innovation Corp
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 Fuji Xerox Co Ltd, Fujifilm Business Innovation Corp filed Critical Fuji Xerox Co Ltd
Priority to JP2015020391A priority Critical patent/JP6413813B2/ja
Priority to US14/828,678 priority patent/US9507611B2/en
Priority to CN201510644192.4A priority patent/CN105843677B/zh
Publication of JP2016143330A publication Critical patent/JP2016143330A/ja
Application granted granted Critical
Publication of JP6413813B2 publication Critical patent/JP6413813B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/24Resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/541Interprogram communication via adapters, e.g. between incompatible applications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Hardware Redundancy (AREA)
  • Debugging And Monitoring (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Computer And Data Communications (AREA)

Description

本発明は、電子機器、制御装置及びプログラムに関する。
特許文献1に記載されたマルチプロセッサシステムの第1のプロセッサは、第1のOSで動作中のプロセス1が呼び出した関数を第1のOSと第2のOSとで共通に解釈されるコマンドに変換して、第2のプロセッサのコマンドバッファ51に書き込む。また、第1のプロセッサは、書き込まれたコマンドに対応する第2のOSのシステムコールの第2のプロセッサによる実行の結果を示すステータスをコマンドバッファから読み出し、当該ステータスをプロセス1が解釈する戻り値に変換してプロセス1に返す。第1のプロセッサは、コマンドのコマンドバッファへの書き込み後にプロセス1が再起動された場合に、読み出されたステータスを廃棄することでコマンドとステータスとの対応関係にずれが生じるのを防ぐ。
特開2015−5097号公報
本発明は、マルチプロセッサシステムのプロセッサ間でのコマンドの受け渡し後にいずれかのプロセッサでプログラムが再起動された場合の誤動作を抑制する電子機器、制御装置及びプログラムを提供することを目的とする。
[1]第1OS(Operating System)を実行する第1制御手段と、
第2OSを実行する第2制御手段と、
前記第2制御手段によって制御される複数のデバイスと
を備え、
前記第1制御手段は、
前記第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと前記第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、前記ステータス読出手段によって読み出されたステータスを廃棄するステータス廃棄手段と、
前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
を備えた電子機器。
[2]前記リセット手段は、前記第2OSのシステムコールを前記第2制御手段が実行している場合、実行中の前記第2OSのシステムコールを中断させた後、通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットする前記[1]に記載の電子機器。
[3]前記リセット手段は、前記第1制御手段で動作する前記第1OSのソフトウエアであり、通信路毎に設けられ、リセットコマンドを発行することで当該システムコールを実行している前記第2制御手段で動作するソフトウエア及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットする前記[1]又は[2]に記載の電子機器。
[4]第1OS(Operating System)を実行する第1制御手段と、
第2OSを実行する第2制御手段と、
前記第2制御手段によって制御される複数のデバイスと
を備え、
前記第1制御手段は、
前記第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと前記第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
前記リセットされた通信路について、前記第2制御手段によって実行されていた前記第2OSのシステムコールに対応するコマンドを前記第2制御手段の記憶領域に再度書き込むコマンド再書込手段と、
を備えた電子機器。
[5]第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと第2制御手段が実行する第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、前記ステータス読出手段によって読み出されたステータスを廃棄するステータス廃棄手段と、
前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
を備えた制御装置。
[6]第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと第2制御手段が実行する第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
前記リセットされた通信路について、前記第2制御手段によって実行されていた前記第2OSのシステムコールに対応するコマンドを前記第2制御手段の記憶領域に再度書き込むコマンド再書込手段と、
を備えた制御装置。
[7]コンピュータを、
第1制御手段が実行する第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと第2制御手段が実行する第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、前記ステータス読出手段によって読み出されたステータスを廃棄するステータス廃棄手段と、
前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段として機能させるためのプログラム。
[8]コンピュータを、
第1制御手段が実行する第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと第2制御手段が実行する第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
前記リセットされた通信路について、前記第2制御手段によって実行されていた前記第2OSのシステムコールに対応するコマンドを前記第2制御手段の記憶領域に再度書き込むコマンド再書込手段として機能させるためのプログラム。
請求項1、5、7に係る発明によれば、マルチプロセッサシステムのプロセッサ間でのコマンドの受け渡し後にいずれかのプロセッサでプログラムが再起動された場合の誤動作を抑制することができる。
請求項2に係る発明によれば、実行中の前記第2OSのシステムコールを中断させた後にコマンドに対応したOSのシステムコールを実行したソフトウエア及びデバイスをリセットすることができる。
請求項3に係る発明によれば、第1制御手段で動作する第1OSのソフトウエアが、通信路毎にリセットコマンドを発行することでコマンドに対応したOSのシステムコールを実行したソフトウエア及びデバイスをリセットすることができる。
請求項4、6、8に係る発明によれば、リセット前に実行されていたコマンドをリセット後に再書込みして再実行することができる。
実施形態のハードウェア構成を示す図。 シングルプロセッサシステムの基本的なソフトウェア構成を示す図。 マルチプロセッサシステムの基本的なソフトウェア構成を示す図。 実施形態に係るマルチプロセッサシステムのソフトウェア構成を示す図。 コマンド29のフォーマットを示す図。 ステータス30のフォーマットを示す図。 テーブル54を示す図。 ステータス廃棄機能の初期化処理の流れ図。 openメソッドにおけるステータス廃棄機能の処理の流れ図。 writeメソッドにおけるステータス廃棄機能の処理の流れ図。 readメソッドにおけるステータス廃棄機能の処理の流れ図。 リセット動作を示すフローチャートである。
本実施形態は、2つのCPU(Central Processing Unit)を備えた、いわゆるマルチプロセッサシステムを基本構成とするが、ここで、シングルプロセッサシステムとマルチプロセッサシステムの基本的なソフトウェア構成について説明する。なお、以下の説明では、便宜上、ソフトウェアの構成要素を動作の主体とする。
図1は、シングルプロセッサシステムの基本的なソフトウェア構成を示す図である。OS(Operating System)10には、デバイス(図示省略)を制御するドライバ7、8、9が備えられている。プロセス1、2、3は、アプリケーションプログラムを構成するプロセスである。プロセス1、2、3は、それぞれAPI(Application Programming Interface)4、5、6を介したシステムコール11によってドライバ7、8、9を呼び出す。呼び出されたドライバ7、8、9は、システムコール11の内容に応じた処理を実行し、それぞれの処理の実行結果を表す戻り値12をAPI4、5、6を介してプロセス1、2、3に返す。
図2は、マルチプロセッサシステムの基本的なソフトウェア構成を示す図である。プロセス1、2、3は第1制御手段100側で動作し、ドライバ7、8、9は第2制御手段200側で動作するため、プロセス1、2、3は、第1OS20の共有ライブラリを介してシステムコール11を実行する。具体的には、API13、14、15で呼び出されるシステムコール11をライブラリ16、17、18で解釈される関数27に予め対応付けておいてもよいし、あるいは、プロセス1、2、3が関数27を直接呼び出すように構成されていてもよい。関数27が呼び出されると、ライブラリ16、17、18は、第2OS23にこの関数27の内容を渡すために、この関数27を第1OS20と第2OS23とで共通に解釈されるコマンド29に変換してOS間通信ドライバ19に渡す。OS間通信ドライバ19は、このコマンド29をOS間通信によってOS間通信ドライバ22に送信する。OS間通信のインターフェースはいかなる方式でもよいが、本実施形態では、PCI(Peripheral Component Interconnect)Express(登録商標。以下、PCIeと略す。)を用いた例を示す。
OS間通信ドライバ22は、受信したコマンド29をタスク24、25、26に渡す。コマンド29を受け取ったタスク24、25、26は、コマンド29を、それぞれドライバ7、8、9で解釈されるシステムコール11に変換し、それぞれAPI4、5、6を介したシステムコール11によってドライバ7、8、9を呼び出す。呼び出されたドライバ7、8、9は、システムコール11の内容に応じた処理を実行し、それぞれの処理の実行結果を表す戻り値12をAPI4、5、6を介してタスク24、25、26に返す。
戻り値12を受け取ったタスク24、25、26は、第1OSに戻り値12の内容を渡すために、この戻り値12を第1OS20と第2OS23とで共通に解釈されるステータス30に変換してOS間通信ドライバ22に渡す。OS間通信ドライバ22は、このステータス30をOS間通信によってOS間通信ドライバ19に送信する。OS間通信ドライバ19は、受信したステータス30をライブラリ16、17、18に渡す。ステータス30を受け取ったライブラリ16、17、18は、それぞれステータス30をプロセス1、2、3で解釈される戻り値28に変換し、この戻り値28をそれぞれAPI13、14、15を介してプロセス1、2、3に返す。このようにして、シングルプロセッサシステムにおいてプロセス1、2、3がドライバ7、8、9を直接呼び出した場合と同じ処理結果が、マルチプロセッサシステムによって得られる。
次に、実施形態の構成について説明する。図3は、実施形態のハードウェア構成を示す図である。図4は、実施形態のソフトウェア構成を示す図である。画像形成装置1000は、本発明に係る電子機器の一例である。画像形成装置1000の主な構成要素は、第1制御手段100、第2制御手段200及びデバイス300である。第1制御手段100は、第2制御手段200を制御する。第2制御手段200は、デバイス300を制御する。
第1制御手段100は、CPU101などの演算装置、RAM(Random Access Memory)102やROM(Read Only Memory)103などの記憶装置、通信I/F(Interface)104、HDD(Hard Disk Drive)105などの外部記憶装置及びLAN(Local Area Network)端子106を備え、これらの構成要素はバス110に接続されている。CPU101は、RAM102をワークエリアとして、プログラムを実行する。ROM103には、ブートローダなどが記憶されている。通信I/F104は、例えばPCIeのスロットであり、第2制御手段200に備えられたPCIeのスロットである通信I/F204と信号線で接続される。HDD105には、第1OS20やアプリケーションプログラムなどが記憶されており、画像形成装置1000に電源が投入されると、CPU101がROM103からブートローダを読み出し、ブートローダに記述されている手順に従ってHDD105から第1OS20を読み出して実行する。第1OS20は、例えばLinux(登録商標)である。LAN端子106には信号線が接続され、CPU101は、LAN経由で外部の情報処理装置などと通信する。
第2制御手段200は、CPU201などの演算装置、RAM202やROM203などの記憶装置及び通信I/F204を備え、これらの構成要素はバス210に接続されている。CPU201は、RAM202をワークエリアとして、プログラムを実行する。ROM203には、第2OS23が記憶されており、CPU201は、第1制御手段100からの命令に従ってROM203から第2OS23を読み出して実行する。第2OS23は、例えばRTOS(Real Time OS)であり、デバイス300を制御するドライバの機能を備える。
画像形成装置1000は、1つ以上のデバイス300を備える。デバイス300は、例えばイメージスキャナ301、プリンタ302、UI(User Interface)303などである。なお、デバイスの数は、いくつでもよい。イメージスキャナ301は、例えば、光源、光学系、撮像素子など(図示省略)を備え、光源が原稿に光を照射し、原稿で反射された反射光が光学系を介して撮像素子に入射し、撮像素子が原稿の画像を表す信号を生成して出力する。プリンタ302は、例えば、画像データに基づくトナー像を形成するプリントエンジン、紙などの記録媒体を収容する収容部、記録媒体を搬送路に沿って搬送する搬送機構など(図示省略)を備え、第1制御手段100から第2制御手段200を介して供給された画像データに基づく画像を電子写真方式で記録媒体に印刷する。UI303は、例えば、タッチパネルやキーパッドなど(図示省略)を備え、ユーザによる操作を受け付ける。タッチパネルには、ユーザが画像形成装置1000を操作するための仮想的な操作子や、画像形成装置1000の状態を表す情報などが表示される。キーパッドは、画像形成装置1000の動作の開始や停止を指示するためのキーや、数字を入力するためのテンキーなどを備える。
本実施形態では、OS間通信ドライバ19とOS間通信ドライバ22とがコマンドバッファ51及びステータスバッファ52を介してコマンド29及びステータス30のやりとりを行う。コマンドバッファ51及びステータスバッファ52は、RAM202の記憶領域を利用してもよいし、RAM202とは別のメモリを第2制御手段200に設けて、このメモリの記憶領域をコマンドバッファ51及びステータスバッファ52として用いてもよい。コマンドバッファ51及びステータスバッファ52は、例えばFIFO(First In, First Out)方式のバッファであり、それぞれの記憶領域の状態を表すFULL/NOT FULL/EMPTY/NOT EMPTY情報をインタラプト50によってOS間通信ドライバ19及びOS間通信ドライバ22に通知する機能を有する。
一例として、プロセス1が以下に示す関数27を呼び出す例について説明する。この例では、プロセス1がライブラリ16の関数27を直接呼び出すように構成されており、各関数の戻り値28のエラーチェックは省略されている。
int param[4] = [0, 0, 0, 0] ;
fd = do_open(DRV_1, 0, 0); /* 1番目の関数呼び出し */
status = do_ioctl(fd, DRV_1_READ_PARAM, &param); /* 2番目の関数呼び出し */
status = do_close(fd); /* 3番目の関数呼び出し */
図5は、コマンド29のフォーマットを示す図である。コマンド29は、第1OS20と第2OS23とで共通に解釈される情報であり、コマンドヘッダ31とコマンドデータ32とを含む。プロセス1が関数27を呼び出すと、関数27に対応するライブラリ16の処理ルーチンがコマンドデータ32を生成する。コマンドデータ32は、コマンドID(Identifier)39とパラメータ40とを含む可変長のデータである。処理ルーチンは、コマンド29の種類を表す識別子をコマンドID39に設定し、関数27の引数をパラメータ40に設定する。処理ルーチンは、このようにして生成したコマンドデータ32をOS間通信ドライバ19に渡す。
ここで、上記の関数呼び出しの例で2番目に呼び出される関数であるdo_ioctl()の第3引数が記憶領域の論理アドレスを示すポインタになっているが、第1制御手段100と第2制御手段200とで論理アドレスが異なる場合、このポインタをそのまま第2制御手段200に渡しても第2制御手段200はそのポインタが指し示す記憶領域へアクセスすることができないため、処理ルーチンは、コマンドデータ32の生成時に、ポインタの値ではなく、そのポインタが指し示す記憶領域(4Byte×4=16Byte)をパラメータ40として設定する。上記の例では、ポインタが指し示す領域が0で初期化されているので、パラメータ40に設定された記憶領域も0で初期化される。
コマンドデータ32を受け取ったOS間通信ドライバ19は、OS間通信ドライバ22とのOS間通信に必須の情報であるコマンドヘッダ31を生成する。コマンドヘッダ31は、タスクID35と通信路ID36とコマンドID37とコマンドサイズ38とを含む。OS間通信ドライバ19は、コマンドデータ32の解釈を行う第2OS23側のタスク24の識別子をタスクID35に設定し、OS間通信の通信路47の識別子を通信路ID36に設定し、コマンドデータ32のコマンドID39の設定値をコマンドID37に設定し、コマンドデータ32のサイズをコマンドサイズ38に設定する。OS間通信ドライバ19は、このようにして生成したコマンドヘッダ31をコマンドデータ32と結合することによってコマンド29を生成し、生成したコマンド29をOS間通信によってコマンドバッファ51に書き込む。そして、OS間通信ドライバ19は、インタラプト50によりOS間通信ドライバ22にNOT EMPTYを通知する。
NOT EMPTYの通知を受けたOS間通信ドライバ22は、コマンドバッファ51からコマンド29を読み出し、コマンドヘッダ31のタスクID35によって、このコマンド29を処理するタスクを判別する。この例では、タスク24がコマンド29を処理するタスクであるので、OS間通信ドライバ22は、タスク24にコマンド29を渡す。OS間通信ドライバ22は、コマンドバッファ51が空になるまでコマンド29をタスク24に渡すことを繰り返し、コマンドバッファ51が空になったならば、OS間通信ドライバ19からNOT EMPTYが通知されるのを待つ。
コマンド29を受け取ったタスク24は、コマンドデータ32をドライバ7で解釈されるシステムコール11に変換し、API4を介してドライバ7を呼び出す。ここで、上記の関数呼び出しの例におけるdo_ioctl()に対応するパラメータ40は、前述のとおり、論理アドレスを示すポインタではなく、そのポインタが指し示す記憶領域(4Byte×4=16Byte)であるから、タスク24は、その記憶領域を第2制御手段200のメモリ上で確保し、確保した記憶領域を初期化し、その記憶領域のポインタをシステムコール11の第3引数として設定する。ドライバ7は、システムコール11を実行し、実行の結果を表す戻り値12をタスク24に返す。タスク24は、この戻り値12に基づいて、ステータス30を生成する。
図6は、ステータス30のフォーマットを示す図である。ステータス30は、第1OS20と第2OS23とで共通に解釈される情報であり、ステータスヘッダ33とステータスデータ34とを含む。ステータスデータ34は、ステータスID45とパラメータ46とを含む可変長のデータである。タスク24は、システムコール11に対応するステータスの種類を示す識別子をステータスID45に設定する。ここで、タスク24は、ステータスID45の最上位ビットを1にマスクすることによって当該ステータスID45に対応するコマンドID39が得られるように、ステータスID45を設定する。タスク24は、ドライバ7から受け取った戻り値12をパラメータ46に設定する。ここで、戻り値12が正常終了を示す場合、上記の関数呼び出しの例における2番目の関数do_ioctl()に対応するシステムコール11の第3引数に設定したポインタが指し示す記憶領域にデータが書き込まれているので、タスク24は、戻り値12に加えて、そのデータもパラメータ46に設定する。
ステータスヘッダ33は、タスクID41と通信路ID42とステータスID43とステータスサイズ44とを含む。タスク24は、コマンド29に設定されていたタスクID35の設定値をタスクID41に設定し、コマンド29に設定されていた通信路ID36の設定値を通信路ID42に設定する。タスク24は、ステータスデータ34のステータスID45の設定値をステータスID43に設定し、ステータスデータ34のサイズをステータスサイズ44に設定する。タスク24は、このようにして生成したステータス30を、OS間通信ドライバ22に渡す。ステータス30を受け取ったOS間通信ドライバ22は、ステータス30をステータスバッファ52に書き込む。そして、OS間通信ドライバ22は、インタラプト50によりOS間通信ドライバ19にNOT EMPTYを通知する。
NOT EMPTYの通知を受けたOS間通信ドライバ19は、OS間通信によりステータスバッファ52からステータス30を読み出し、ステータスヘッダ33の通信路ID42から、このステータスデータ34を処理するライブラリを判別する。この例では、ライブラリ16がステータスデータ34を処理するので、OS間通信ドライバ19は、ライブラリ16にステータス30を渡す。OS間通信ドライバ19は、ステータスバッファ52が空になるまで、ステータス30をライブラリ16に渡すことを繰り返し、ステータスバッファ52が空になったならば、OS間通信ドライバ22からNOT EMPTYが通知されるのを待つ。
ステータス30を受け取ったライブラリ16は、ステータスデータ34をプロセス1で解釈される戻り値28に変換し、戻り値28をプロセス1に返す。ここで、上記の関数呼び出しの例における2番目の関数do_ioctl()に対応するステータスデータ34には、戻り値28に変換される情報に加えてデータが設定されているので、ライブラリ16は、do_ioctl()の第3引数で指定されたアドレスにそのデータを書き込む。
<ステータス廃棄機能>
次に、ステータス廃棄機能について説明する。コマンドバッファ51へのコマンド29の書き込み後にいずれかのプロセスが異常終了した場合に、以下のような問題が発生することがある。ここでは一例として、プロセス1が異常終了した場合について説明する。異常終了前にプロセス1が呼び出した関数27は、ライブラリ16によってコマンド29に変換され、このコマンド29がコマンドバッファ51に書き込まれ、NOT EMPTYがOS間通信ドライバ22に通知される。その後、プロセス1が異常終了しても第2制御手段200は動作を続けるから、コマンドバッファ51から読み出されたコマンド29がシステムコール11に変換され、このシステムコール11に従ってドライバ7が処理を実行し、その実行結果を表すステータス30が生成されてステータスバッファ52に書き込まれる。しかし、プロセス1が異常終了するとライブラリ16による処理も終了するので、通信路47に対するreadメソッドは実行されずに、ステータス30がステータスバッファ52から読み出されないままとなる。
異常終了したプロセス1が再起動されると、プロセス1に対応するライブラリ16が通信路47に対するopenメソッドを実行し、再起動後の最初のコマンド29が生成され、このコマンド29がコマンドバッファ51に書き込まれる。その後、このコマンド29の実行結果を表すステータス30がステータスバッファ52に書き込まれ、OS間通信ドライバ19にNOT EMPTYが通知される。ところが、プロセス1の異常終了前にコマンドバッファ51に書き込んだコマンド29の実行結果を表すステータス30がステータスバッファ52に残っているから、このステータス30がOS間通信ドライバ19によって読み出されると、コマンド29とステータス30との対応関係にずれが生じ、マルチプロセッサシステムが誤動作するおそれがある。そこで、本実施形態では、以下に示すステータス廃棄機能が第1OS20に設けられている。ステータス廃棄機能を実現するステータス廃棄手段53は、通信路毎にOS間通信ドライバ19に設けられており、ステータス廃棄手段53による処理は、通信路毎に実行される。
図7は、テーブル54を示す図である。ステータス廃棄手段53は、通信路毎にテーブル54を生成し、生成したテーブル54をRAM102又はHDD105に記憶する。テーブル54は、コマンドID541とフラグ542とカウンタ543とを対応付けたテーブルである。コマンドID541は、コマンド29の種類を示す識別子であり、コマンドID39、コマンドID37と同じものである。この例では、コマンド29はn種類であり、コマンドID541として1からnまでの通し番号が割り当てられている。フラグ542は、コマンドID541毎に、当該コマンドID541に対応するコマンド29の実行結果を示すステータス30が有効か否かを示すフラグである。フラグ542がONならば当該ステータス30は有効であり、フラグ542がOFFならば当該ステータス30は無効である。フラグ542のONとOFFの切り替えについては、後述する。カウンタ543は、コマンドID541毎に、当該コマンドID541に対応するコマンド29のコマンドバッファ51への書き込み回数から、当該コマンドID541に対応するステータス30のステータスバッファ52からの読み出し回数を差し引いた数を表す。
図8は、ステータス廃棄機能の初期化処理の流れ図である。なお、ステータス廃棄手段53はOS間通信ドライバ19に設けられているので、ステータス廃棄機能の初期化処理は、OS間通信ドライバ19の初期化処理に含まれる。従って、第1OSが起動される度にステータス廃棄機能の初期化処理が実行される。
ステップS101においては、ステータス廃棄手段53が、ループカウンタ(初期値は0)に1を加算する。
ステップS102においては、ステータス廃棄手段53が、ループカウンタの値に該当するコマンドID541に対応するフラグ542をOFFで初期化するとともに、このコマンドID541に対応するカウンタ543を0で初期化する。
ステップS103においては、ステータス廃棄手段53が、ループカウンタがnに達したか否かを判定し、ループカウンタがnに達していないならばステップS101に戻り、nに達したならば処理を終了する。
図9は、OS間通信ドライバ19のopenメソッドにおけるステータス廃棄機能の処理の流れ図である。以下の処理は、通信路毎に実行されるが、ここでは、一例として、通信路47の場合について説明する。
ステップS201においては、プロセス1がライブラリ16を呼び出し、ライブラリ16が通信路47に対してopenメソッド処理を実行する。そして、openメソッド処理の戻り値として、通信路47を示すファイルディスクリプタがライブラリ16に返され、これ以降、処理の対象となる通信路47は、このファイルディスクリプタによって特定される。
ステップS202においては、ステータス廃棄手段53が、ループカウンタ(初期値は0)に1を加算する。
ステップS203においては、ステータス廃棄手段53が、ループカウンタの値に該当するコマンドID541に対応するフラグ542をOFFにする。
ステップS204においては、ステータス廃棄手段53が、ループカウンタがnに達したか否かを判定し、ループカウンタがnに達していないならばステップS201に戻り、nに達したならば処理を終了する。
なお、図9に示す処理は、ステータス廃棄機能の初期化処理(図8)に続いて実行される場合と、異常終了したプロセス1が再起動されたのに続いて実行される場合とがある。前者の場合、図8の処理によってフラグ542がOFFに初期化済みであるから、図9の処理を経てもフラグ542はOFFのままである。これに対して、後者の場合、異常終了前にONになっていたフラグが図9の処理によってOFFに書き換えられる。
図10は、OS間通信ドライバ19のwriteメソッドにおけるステータス廃棄機能の処理の流れ図である。
ステップS301においては、ライブラリ16及びOS間通信ドライバ19がコマンド29を生成する。具体的には、関数27に対応するライブラリ16の処理ルーチンがコマンドデータ32を生成してOS間通信ドライバ19に渡す。コマンドデータ32を受け取ったOS間通信ドライバ19は、コマンドヘッダ31を生成し、生成したコマンドヘッダ31をコマンドデータ32と結合することによってコマンド29を生成する。
ステップS302においては、OS間通信ドライバ19が、生成したコマンド29をOS間通信によってコマンドバッファ51に書き込む。
ステップS303においては、ステータス廃棄手段53が、ステップS302におけるコマンド29の書き込みが成功したか否かを判定し、書き込みが成功した場合(ステップS303:YES)には、ステータス廃棄手段53の処理はステップS304に進み、書き込みが失敗した場合(ステップS303:NO)には、処理を終了する。
ステップS304においては、ステータス廃棄手段53が、ステップS302でコマンドバッファ51に書き込まれたコマンド29に含まれるコマンドID541に対応するフラグ542をONに書き換え、当該コマンドID541に対応するカウンタ543に1を加算して処理を終了する。
要するに、コマンドバッファ51へのコマンド29の書き込みが成功した場合には当該コマンド29のコマンドID541に対応するフラグ542がONに書き換えられるとともにカウンタ543に1が加算される。一方、コマンドバッファ51へのコマンド29の書き込みが失敗した場合には、当該コマンド29のコマンドID541に対応するフラグ542はOFFのままとなり、カウンタ543は加算されない。また、コマンドバッファ51へのコマンド29の書き込みが成功した後にプロセス1が異常終了を経て再起動された場合、異常終了前にONになっていたフラグが図9の処理によってOFFに書き換えられる。
図11は、OS間通信ドライバ19のreadメソッドにおけるステータス廃棄機能の処理の流れ図である。
ステップS401においては、ステータス廃棄手段53が、OS間通信によりステータスバッファ52からステータス30を読み出す。具体的には、OS間通信ドライバ22からのNOT EMPTYの通知を受け取るまでOS間通信ドライバ19が待機する。NOT EMPTYの通知を受け取ると、OS間通信ドライバ19が、OS間通信によりステータスバッファ52からステータス30を読み出す。
ステップS402においては、ステータス廃棄手段53が、ステップS401におけるステータス30の読み出しが成功したか否かを判定し、読み出しが成功した場合(ステップS402:YES)には、ステータス廃棄手段53の処理はステップS403に進み、読み出しが失敗した場合(ステップS402:NO)には、ステータス廃棄手段53は処理を終了する。
ステップS403においては、ステータス廃棄手段53が、ステップS401で読み出したステータス30に対応するコマンド29のコマンドID541に対応するフラグ542がOFFか否かを判定する。ここで、ステータス30に含まれるステータスID45の最上位ビットを1にマスクすることによって当該ステータスID45に対応するコマンドID541が得られる。当該コマンドID541に対応するフラグ542がOFFでない場合(ステップS403:NO)には、ステータス廃棄手段53の処理はステップS404に進み、当該フラグ542がOFFである場合(ステップS403:YES)には、ステータス廃棄手段53の処理はステップS409に進む。
ステップS404においては、ステータス廃棄手段53が、ステップS401で読み出したステータス30に対応するコマンド29のコマンドID541に対応するカウンタ543が0か否かを判定する。当該カウンタ543が0でない場合(ステップS404:NO)には、ステータス廃棄手段53の処理はステップS405に進み、当該カウンタ543が0である場合(ステップS404:YES)には、ステータス廃棄手段53の処理はステップS407に進む。
ステップS405においては、ステータス廃棄手段53が、ステップS401で読み出したステータス30に対応するコマンド29のコマンドID541に対応するカウンタ543から1を減算する。
ステップS406においては、ステータス廃棄手段53が、ステップS405で1を減算したカウンタ543の値が0か否かを判定する。カウンタ543の値が0でない場合(ステップS406:NO)には、ステータス廃棄手段53の処理はステップS407に進み、カウンタ543の値が0である場合(ステップS406:YES)には、ステータス廃棄手段53の処理はステップS408に進む。
ステップS407においては、ステータス廃棄手段53が、ステップS401で読み出したステータス30を廃棄する。
ステップS408においては、ステータス廃棄手段53が、ステップS401で読み出したステータス30に対応するコマンド29のコマンドID541に対応するフラグ542をOFFに書き換えて処理を終了する。
ステップS409においては、ステータス廃棄手段53が、ステップS401で読み出したステータス30に対応するコマンド29のコマンドID541に対応するカウンタ543が0か否かを判定する。カウンタ543が0でない場合(ステップS409:NO)には、ステータス廃棄手段53の処理はステップS410に進み、カウンタ543が0である場合(ステップS409:YES)には、ステータス廃棄手段53の処理はステップS411に進む。
ステップS410においては、ステータス廃棄手段53が、ステップS401で読み出したステータス30に対応するコマンドID541のカウンタ543から1を減算する。
ステップS411においては、ステータス廃棄手段53が、ステップS401で読み出したステータス30を廃棄して処理を終了する。
ステップS403以降の処理を場合分けすると、次のとおりである。
(1)フラグがON、カウンタが1の場合(ステップS403:NO、ステップS404:NO、ステップS406:YES)
ステータスバッファ52から読み出されたステータス30が、コマンドバッファ51に書き込んだコマンド29の処理結果に対応していることになるから、ステータス廃棄手段53は、読み出したステータス30を廃棄しない。当該ステータス30は、ライブラリ16によって戻り値28に変換され、プロセス1に返される。また、当該ステータス30がステータスバッファ52から読み出されたため、ステータス廃棄手段53は、当該ステータス30に対応するコマンド29のコマンドID541に対応するカウンタ543から1を減算する(ステップS405)。また、当該ステータス30に対応するコマンド29が処理済みであることになるから、ステータス廃棄手段53は、当該コマンドID541に対応するフラグ542をOFFに書き換える(ステップS408)。
(2)フラグがON、カウンタが0でも1でもない場合(ステップS403:NO、ステップS404:NO、ステップS405:NO)
ステータスバッファ52から読み出したステータス30が、コマンドバッファ51に書き込んだコマンド29の処理結果に対応していないことになるから、ステータス廃棄手段53は、読み出したステータス30を廃棄する(ステップS407)。また、ステータス30がステータスバッファ52から読み出されたため、ステータス廃棄手段53は、当該ステータス30に対応するコマンド29のコマンドID541に対応するカウンタ543から1を減算する(ステップS405)。また、当該ステータス30に対応するコマンド29は処理済みであることになるから、ステータス廃棄手段53は、当該コマンドID541に対応するフラグ542をOFFに書き換える(ステップS408)。なお、カウンタが0でも1でもないことから、この場合はマルチプロセッサシステムに何らかの不具合があることになる。
(3)フラグがON、カウンタが0の場合(ステップS403:NO、ステップS404:YES)
ステータスバッファ52から読み出したステータス30が、コマンドバッファ51に書き込んだコマンド29の処理結果に対応していないことになるから、ステータス廃棄手段53は、読み出したステータス30を廃棄する(ステップS407)。当該ステータス30に対応するコマンド29のコマンドID541に対応するカウンタ543が0であるため、当該カウンタ543の減算は行わない。また、当該ステータス30に対応するコマンド29は処理済みであることになるから、ステータス廃棄手段53は、当該コマンドID541に対応するフラグ542をOFFに書き換える(ステップS408)。なお、カウンタが0であることから、この場合はマルチプロセッサシステムに何らかの不具合があることになる。
(4)フラグがOFF、カウンタが0でない場合(ステップS403:YES、ステップS409:NO)
異常終了したプロセス1が再起動された場合、図9に示す処理により、すべてのコマンドIDに対応するフラグがOFFに書き換えられる。つまり、ステップS403でフラグ542がOFFであるということは、このフラグ542のコマンドID541に対応するコマンド29のコマンドバッファ51への書き込み後にプロセス1が異常終了を経て再起動されたことを意味する。従って、ステータス廃棄手段53は、カウンタ543から1を減算し(ステップS410)、ステータスバッファから読み出したステータス30を廃棄する(ステップS411)。
(5)フラグがOFF、カウンタが0の場合(ステップS403:YES、ステップS409:YES)
この場合も、(4)と同様に、プロセス1が異常終了を経て再起動されたことになるから、ステータス廃棄手段53は、読み出したステータス30を廃棄する(ステップS411)。ただし、カウンタ543が0であるため、カウンタ543の減算は行わない。なお、カウンタが0であることから、この場合はマルチプロセッサシステムに何らかの不具合があることになる。
(1)から(5)を分類すると、(1)は、コマンド29のコマンドバッファ51への書き込み後、ステータス30を読み出すまでの間にプロセス1の異常終了やマルチプロセッサシステムの不具合などが発生しなかった場合である。これに対して、(2)と(3)は、マルチプロセッサシステムに何等かの不具合がある場合であり、(4)と(5)は、コマンド29のコマンドバッファ51への書き込み後にプロセス1が異常終了し、その後、プロセス1が再起動された場合である。(1)の場合には、ステータス30は廃棄されずに戻り値28に変換されてプロセス1に返されるが、それ以外の場合には、ステータス30が廃棄される。
上記(4)、(5)の場合、タスク24、ドライバ7又はドライバ7が制御するデバイスの状態と、プロセス1の状態とが整合しない可能性があるため、第1制御手段100のアプリケーションプログラムの通信路毎に用意されたリセット機能57は、タスク24、ドライバ7及びドライバ7が制御するデバイスを再起動するべく、図12に示すリセット動作を行う。なお、リセット機能57は、タスク24、ドライバ7及びドライバ7を再起動するコマンドを発行する。
図12は、リセット動作を示すフローチャートである。
ステップS501において、リセット機能57が、ループカウンタ(初期値は0)に1を加算する。
ステップS502においては、リセット機能57が、図11のステップS401でステータス廃棄手段53が読み出したステータス30に対応するコマンド29のコマンドID541に対応するカウンタ543が1か否かを判定する。当該カウンタ543が1である場合(ステップS502:YES)には、当該コマンドIDのコマンドは処理中であり、リセット機能57の処理はステップS503に進み、当該カウンタ543が1でない場合(ステップS502:NO)には、当該コマンドIDのコマンドは処理中でないためステップS503を実行せずに、リセット機能57の処理はステップS504に進む。
ステップS503において、リセット機能57は、処理中であると特定されたコマンドに対しAbortコマンドを発行する。
ステップS504においては、リセット機能57が、ループカウンタがnに達したか否かを判定し、ループカウンタがnに達していないならばステップS501に戻り、nに達したならば処理を終了する。
ステップS503において発行されたAbortコマンドは、OS間通信によってコマンドバッファ51に書き込まれる。そして、OS間通信ドライバ19は、インタラプト50によりOS間通信ドライバ22にNOT EMPTYを通知する。
NOT EMPTYの通知を受けたOS間通信ドライバ22は、コマンドバッファ51からAbortコマンドであるコマンド29を読み出し、コマンドヘッダ31のタスクID35によって、タスク24にコマンド29を渡す。
Abortコマンドであるコマンド29を受け取ったタスク24は、処理中のコマンドを中止する。
次に、ステップS505において、第2OS23は、第2制御手段200において実行されているソフトウエアのうちAbrotコマンドを受け取った通信路のタスク24に該当するソフトウエア(アプリケーション)をリセットする。
次に、ステップS506において、第2OS23は、第2制御手段200において実行されているドライバのうちAbrotコマンドを受け取った通信路のドライバ7及びドライバ7に制御されるデバイスをリセットする。
本実施形態によれば、コマンド29のコマンドバッファ51への書き込み後にプロセス1が異常終了を経て再起動された場合に、異常終了前にコマンドバッファ51に書き込んだコマンド29の実行結果を表すステータス30が廃棄されるとともに、コマンド29を処理中のタスク24及びドライバ7が制御するデバイスがリセットされるから、異常終了したプロセス1だけでなく、タスク24及びドライバ7を含めた通信路並びにドライバ7に制御されるデバイスをリセットすることができ、さらに他の通信路及び当該通信路のドライバに制御されるデバイスはリセットすることなく動作させることができる。
コマンド29のコマンドバッファ51への書き込み後にプロセス1が異常終了を経て再起動された場合に、異常終了前にコマンドバッファ51に書き込んだコマンド29の実行結果を表すステータス30が廃棄されるから、異常終了したプロセス1の再起動後にコマンド29とステータス30との対応関係にずれが生じない。また、本実施形態によれば、マルチプロセッサに何らかの不具合がある場合に、読み出されたステータス30が廃棄されるから、コマンド29とステータス30との対応関係にずれが生じない。
なお、プロセス1が異常終了しない場合であっても、上記リセット機能を適用してもよい。例えば、タスク24、ドライバ7又はドライバ7が制御するデバイスに異常が生じた場合、リセット機能57を上記と同様に実行し、異常が生じたために処理が完了しなかったコマンド29を改めてコマンドバッファ51に書き込むようにしてもよい。
つまり、タスク24、ドライバ7又はドライバ7が制御するデバイスに異常が生じた場合に、リセット機能57を実行すると、通信路47へのファイルディスクリプタの割り当てが失われる。従って、リセット機能57を実行した場合には、openコマンドの再実行が必要となるが、プロセス1は、通信路47へのファイルディスクリプタの割り当てが失われたことを認識していないため、openコマンドを実行せずに関数27を呼び出してしまう。また、リセット機能57の実行により、ドライバ7で処理待ちのシステムコール11も消失してしまうため、openコマンドだけでなく、ioctlコマンド(非同期コマンド)の再実行も必要となる。そこで、コマンド再書込機能が第1OS20に設けられている。コマンド再書込機能を実現するコマンド再書込手段56は、通信路毎にOS間通信ドライバ19に設けられており、コマンド再書込手段56による処理は、通信路毎に実行される。
具体的には、コマンドバッファ51に生成・書き込みされたコマンド29がopenコマンドである場合には、当該コマンド29が書込済みopenコマンド保持領域に保持され、当該コマンド29が非同期コマンドである場合には、当該コマンド29が書込済みコマンド保持領域に保持され、当該コマンド29がopenコマンドでも非同期コマンドでもない場合には、当該コマンド29は書込済みopenコマンド保持領域にも書込済みコマンド保持領域にも保持されないようにする。
なお、ここで、同期コマンドと非同期コマンドとの違いについて説明する。同期コマンドの場合、プロセス1は、呼び出した関数27に対する戻り値28が返されるまで次の関数27の呼び出しを行わない。また、戻り値28が返されるまでは通常モードから省電力モードへの切り替えは行われない。これに対して、非同期コマンドの場合、プロセス1は、呼び出した関数27に対する戻り値28が返されるのを待たずに別の関数27を呼び出すことが許容される。
そして、コマンド29のコマンドバッファ51への書き込み後にリセット機能57が実行された場合に、書込済みopenコマンド保持領域に保持されたコマンド29がコマンドバッファ51に再書込される。従って、リセット機能57の実行によって消失したシステムコールが、リセット後に再実行される。
(変形例)
実施形態では、デバイス300としてイメージスキャナ301、プリンタ302、UI303を備えた画像形成装置1000に本発明を適用した例を示したが、デバイス300はいかなるものでもよい。また、デバイス300の数はいくつでもよい。
実施形態では、第1OS20の例としてLinux(登録商標)、第2OSの例としてRTOSを示したが、第1OS20、第2OS23は、これら以外のOSでもよい。
実施形態では、画像形成装置1000が第1制御手段100と第2制御手段200とデバイス300とを備えた例を示したが、第1制御手段100の機能を備えた制御装置と、第2制御手段200及びデバイス300の機能を備えた画像形成装置とを通信手段で接続することにより、実施形態と同様の機能を実現するようにしてもよい。また、第1制御手段100の機能を実現するためのプログラムを、光記録媒体、半導体メモリ等、コンピュータで読み取り可能な記録媒体に記録して提供してもよい。また、このプログラムを電気通信回線経由で提供してもよい。
1−3 プロセス
7−9 ドライバ
11 システムコール
12 戻り値
16 ライブラリ
19 OS間通信ドライバ
20 第1OS
22 OS間通信ドライバ
23 第2OS
24 タスク
27 関数
28 戻り値
29 コマンド
30 ステータス
31 コマンドヘッダ
32 コマンドデータ
33 ステータスヘッダ
34 ステータスデータ
38 コマンドサイズ
40 パラメータ
44 ステータスサイズ
46 パラメータ
47−49 通信路
50 インタラプト
51 コマンドバッファ
52 ステータスバッファ
53 ステータス廃棄手段
54 テーブル
56 コマンド再書込手段
57 リセット機能
100 第1制御手段
106 LAN端子
110 バス
200 第2制御手段
210 バス
300 デバイス
301 イメージスキャナ
302 プリンタ
1000 画像形成装置

Claims (8)

  1. 第1OS(Operating System)を実行する第1制御手段と、
    第2OSを実行する第2制御手段と、
    前記第2制御手段によって制御される複数のデバイスと
    を備え、
    前記第1制御手段は、
    前記第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと前記第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
    前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
    前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
    前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
    前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、前記ステータス読出手段によって読み出されたステータスを廃棄するステータス廃棄手段と、
    前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
    を備えた電子機器。
  2. 前記リセット手段は、前記第2OSのシステムコールを前記第2制御手段が実行している場合、実行中の前記第2OSのシステムコールを中断させた後、通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットする請求項1に記載の電子機器。
  3. 前記リセット手段は、前記第1制御手段で動作する前記第1OSのソフトウエアであり、通信路毎に設けられ、リセットコマンドを発行することで当該システムコールを実行している前記第2制御手段で動作するソフトウエア及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットする請求項1又は2に記載の電子機器。
  4. 第1OS(Operating System)を実行する第1制御手段と、
    第2OSを実行する第2制御手段と、
    前記第2制御手段によって制御される複数のデバイスと
    を備え、
    前記第1制御手段は、
    前記第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと前記第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
    前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
    前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
    前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
    通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
    前記リセットされた通信路について、前記第2制御手段によって実行されていた前記第2OSのシステムコールに対応するコマンドを前記第2制御手段の記憶領域に再度書き込むコマンド再書込手段と、
    を備えた電子機器。
  5. 第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと第2制御手段が実行する第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
    前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
    前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
    前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
    前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、前記ステータス読出手段によって読み出されたステータスを廃棄するステータス廃棄手段と、
    前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
    を備えた制御装置。
  6. 第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと第2制御手段が実行する第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
    前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
    前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
    前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
    通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
    前記リセットされた通信路について、前記第2制御手段によって実行されていた前記第2OSのシステムコールに対応するコマンドを前記第2制御手段の記憶領域に再度書き込むコマンド再書込手段と、
    を備えた制御装置。
  7. コンピュータを、
    第1制御手段が実行する第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと第2制御手段が実行する第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
    前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
    前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
    前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
    前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、前記ステータス読出手段によって読み出されたステータスを廃棄するステータス廃棄手段と、
    前記コマンド書込手段による前記コマンドの書き込み後に前記プロセスが再起動された場合、通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段として機能させるためのプログラム。
  8. コンピュータを、
    第1制御手段が実行する第1OS上で動作中のプロセスが呼び出した関数を前記第1OSと第2制御手段が実行する第2OSとで共通に解釈されるコマンドに変換する第1変換手段と、
    前記第1変換手段によって変換されたコマンドを前記第2制御手段の記憶領域に書き込むコマンド書込手段と、
    前記コマンド書込手段によって書き込まれたコマンドに対応する前記第2OSのシステムコールの前記第2制御手段による実行の結果を示すステータスを前記記憶領域から読み出すステータス読出手段と、
    前記ステータス読出手段によって読み出されたステータスを前記プロセスが解釈する戻り値に変換し、当該戻り値を前記プロセスに返す第2変換手段と、
    通信路毎に、当該システムコールを実行している前記第2制御手段で動作するソフトウエア、及び当該システムコールによって呼び出されたドライバによって制御されているデバイスをリセットするリセット手段と、
    前記リセットされた通信路について、前記第2制御手段によって実行されていた前記第2OSのシステムコールに対応するコマンドを前記第2制御手段の記憶領域に再度書き込むコマンド再書込手段として機能させるためのプログラム。
JP2015020391A 2015-02-04 2015-02-04 電子機器、制御装置及びプログラム Expired - Fee Related JP6413813B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2015020391A JP6413813B2 (ja) 2015-02-04 2015-02-04 電子機器、制御装置及びプログラム
US14/828,678 US9507611B2 (en) 2015-02-04 2015-08-18 Electronic apparatus, control device, control method, and computer readable medium
CN201510644192.4A CN105843677B (zh) 2015-02-04 2015-10-08 电子装置、控制装置以及控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015020391A JP6413813B2 (ja) 2015-02-04 2015-02-04 電子機器、制御装置及びプログラム

Publications (2)

Publication Number Publication Date
JP2016143330A JP2016143330A (ja) 2016-08-08
JP6413813B2 true JP6413813B2 (ja) 2018-10-31

Family

ID=56554258

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015020391A Expired - Fee Related JP6413813B2 (ja) 2015-02-04 2015-02-04 電子機器、制御装置及びプログラム

Country Status (3)

Country Link
US (1) US9507611B2 (ja)
JP (1) JP6413813B2 (ja)
CN (1) CN105843677B (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9910813B1 (en) * 2015-02-04 2018-03-06 Amazon Technologies, Inc. Single function using multiple ports
US9886410B1 (en) 2015-02-04 2018-02-06 Amazon Technologies, Inc. Dynamic function assignment to I/O device interface port
JP6876235B2 (ja) * 2016-09-27 2021-05-26 富士フイルムビジネスイノベーション株式会社 電子装置及び画像処理装置
JP6981096B2 (ja) * 2017-08-17 2021-12-15 富士フイルムビジネスイノベーション株式会社 情報処理装置
US10528414B2 (en) * 2017-09-13 2020-01-07 Toshiba Memory Corporation Centralized error handling in application specific integrated circuits
JP7070079B2 (ja) * 2018-05-18 2022-05-18 富士フイルムビジネスイノベーション株式会社 制御装置及びプログラム
KR102461918B1 (ko) 2019-10-11 2022-11-02 구글 엘엘씨 차량용 확장가능 컴퓨팅 아키텍처
WO2022046561A1 (en) * 2020-08-28 2022-03-03 Google Llc Streaming via hardware abstraction layer
CN112347015B (zh) * 2021-01-08 2021-04-02 南京芯驰半导体科技有限公司 芯片片上系统异构多处理器间的通信装置及方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05210529A (ja) 1992-01-31 1993-08-20 Fujitsu Ltd マルチプロセッサシステム
WO1995033235A1 (fr) * 1994-05-31 1995-12-07 Fujitsu Limited Systeme et procede d'execution d'un travail entre differents systemes d'exploitation
US6247067B1 (en) * 1996-03-29 2001-06-12 Sun Microsystems, Inc. Transparently converting program calls between interfaces
US6141697A (en) * 1997-06-25 2000-10-31 Unisys Corp. System and method for performing external procedure calls in heterogeneous computer systems utilizing program stacks
JP2002149437A (ja) * 2000-11-15 2002-05-24 Hitachi Ltd ソフトウェア再起動方法
JP2002351854A (ja) * 2001-05-30 2002-12-06 Omron Corp プログラム実行装置および携帯型情報処理装置
JP5106058B2 (ja) * 2007-11-16 2012-12-26 キヤノン株式会社 印刷制御装置の異常を判断して印刷装置を復旧する印刷システム
TWI366791B (en) * 2008-06-13 2012-06-21 Wistron Corp A method and a module for driving a video device
CN103329099B (zh) * 2011-01-31 2016-03-16 株式会社索思未来 启动控制装置、信息设备以及启动控制方法
JP6098389B2 (ja) * 2013-06-20 2017-03-22 富士ゼロックス株式会社 電子機器、制御装置及びプログラム

Also Published As

Publication number Publication date
US20160224355A1 (en) 2016-08-04
CN105843677A (zh) 2016-08-10
CN105843677B (zh) 2019-06-07
JP2016143330A (ja) 2016-08-08
US9507611B2 (en) 2016-11-29

Similar Documents

Publication Publication Date Title
JP6413813B2 (ja) 電子機器、制御装置及びプログラム
JP6140303B2 (ja) 仮想マシンのライブマイグレーション方法、仮想マシンのメモリデータ処理方法、サーバ及び仮想マシンシステム
EP3982261A1 (en) Method and apparatus for processing io
US8850090B2 (en) USB redirection for read transactions
JP2009265963A (ja) 情報処理システム及びタスクの実行制御方法
US8856407B2 (en) USB redirection for write streams
JP6098389B2 (ja) 電子機器、制御装置及びプログラム
US20200274981A1 (en) Image forming apparatus, control method therefor, and storage medium
US20130132618A1 (en) Usb redirection for interrupt transactions
JP7093979B2 (ja) デバイスプロキシ装置及びそれを含む計算機システム
JP2009064303A (ja) 撮像装置、共用リソース管理方法、およびプログラム
US11397603B2 (en) Information processing apparatus, control method therefor, and program
JP6876235B2 (ja) 電子装置及び画像処理装置
JP7070079B2 (ja) 制御装置及びプログラム
US11403112B2 (en) Information processing apparatus, method of starting up an information processing apparatus
JP6402484B2 (ja) 情報処理装置及び情報処理プログラム
US20240129255A1 (en) Server delay control device, server delay control method, and program
JP7259348B2 (ja) 情報処理装置、情報処理装置の起動方法、及び、情報処理装置の起動プログラム
JP5780768B2 (ja) 情報処理装置、その制御方法、およびプログラム
JP6946820B2 (ja) 電子機器、制御装置及びプログラム
JP2022122677A (ja) 情報処理装置および情報処理装置の制御方法
JP6138482B2 (ja) 組み込みシステム
KR101572262B1 (ko) 모바일 응용프로그램 모델의 동작방법 및 장치

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180116

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20180810

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: 20180904

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180917

R150 Certificate of patent or registration of utility model

Ref document number: 6413813

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees