(57)【要約】【課題】  シャットダウン処理が早くならない可能性を低減させることができる装置や方法を提供する。【解決手段】  この装置は、複数の記憶部に記憶された情報を処理する複数の処理部を備える情報処理装置であり、情報処理装置の電源切断の指示を受け付ける入力部３１と、複数の処理部に対して実行中の処理終了へ向けての準備を要求する要求部３２と、各処理部３０が使用する記憶部３６の情報に基づき、処理を実行させる度合いを定める各処理部３０の優先度を決定する決定部３３と、各処理部３０に対して設定された優先度を決定部３３により決定された優先度に変更する変更部３４と、複数の処理部３０のいずれもが使用しなくなった記憶部３６との接続を解除する制御部３５とを含み、要求部３２は、複数の処理部３０から準備完了の通知を受けて制御部３５に対して電源を切断する処理の実行を要求する。【選択図】  図３
2017072935.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶部に記憶された情報を処理する複数の処理部を備える情報処理装置であって、
前記複数の処理部に対して実行中の処理終了へ向けての準備を要求する要求部と、
前記各処理部が使用する記憶部の情報に基づき、処理を実行させる度合いを定める前記各処理部の優先度を決定する決定部と、
前記各処理部に対して設定された優先度を前記決定部により決定された優先度に変更する変更部と、
前記複数の処理部のいずれもが使用しなくなった記憶部との接続を解除する制御部とを含み、
前記要求部は、前記複数の処理部から準備完了の通知を受けて前記制御部に対して電源を切断する処理の実行を要求する、情報処理装置。
【請求項２】
前記決定部は、前記記憶部毎に使用している処理部の数を計算し、該処理部の数が少ない記憶部を使用する処理部ほど前記優先度を高くする、請求項１に記載の情報処理装置。
【請求項３】
前記決定部は、前記要求部が前記各処理部に対して前記準備を要求したことを受けて、および前記制御部が記憶部との接続を解除する毎に、前記各処理部の優先度を決定する、請求項１または２に記載の情報処理装置。
【請求項４】
前記制御部は、記憶部を接続したときに該記憶部の情報を登録し、接続を解除したときに該記憶部の情報を削除し、処理部が記憶部に記憶された情報の処理を開始したときに該処理部の情報と該記憶部の情報とを対応付けて登録し、処理部が記憶部に記憶された情報の処理を終了したときに対応付けて登録した該処理部の情報と該記憶部の情報とを削除する、請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記決定部は、前記制御部が前記電源を切断する処理を開始するまで使用する記憶部の情報を除いて、前記各処理部の優先度を決定する、請求項１〜４のいずれか１項に記載の情報処理装置。
【請求項６】
前記各処理部は、該各処理部に対して設定された優先度の変更を拒否する拒否要求を出力することが可能であり、前記変更部は、前記拒否要求を出力した処理部に対して設定された優先度については変更しない、請求項１〜５のいずれか１項に記載の情報処理装置。
【請求項７】
複数の記憶部に記憶された情報を処理する複数の処理部を備える情報処理装置により実行される情報処理方法であって、
前記情報処理装置の電源切断の指示を受け付けるステップと、
前記複数の処理部に対して実行中の処理終了へ向けての準備を要求するステップと、
前記各処理部が使用する記憶部の情報に基づき、処理を実行させる度合いを定める前記各処理部の優先度を決定するステップと、
前記各処理部に対して設定された優先度を決定された優先度に変更するステップと、
前記複数の処理部のいずれもが使用しなくなった記憶部との接続を解除するステップと、
前記複数の処理部から準備完了の通知を受けて、電源を切断する処理を実行するステップとを含む、情報処理方法。
【請求項８】
請求項７に記載の情報処理方法に含まれる各ステップをコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の記憶部に記憶された情報を処理する複数の処理部を備える情報処理装置、情報処理方法およびその方法に含まれる各処理をコンピュータに実行させるためのプログラムに関する。
【背景技術】
【０００２】
PC等の情報処理装置は、タスクと呼ばれる作業単位で処理を実行する。その際、情報処理装置は、ハードディスク等の記憶装置に記憶された情報（ファイル）を使用する。情報処理装置は、ファイルを使用する際、該情報処理装置を制御するOSに記憶装置を認識させ、その記憶装置を利用できる状態にする操作（マウント）を実行する。
【０００３】
一方、情報処理装置の電源を切断（シャットダウン）する場合、情報処理装置は、記憶装置に記憶されたファイルを保護するため、記憶装置の認識を解除し、OSから記憶装置を切り離す操作（アンマウント）を実行する。実際には、マウントやアンマウントは、記憶装置上あるいは該記憶装置の記憶領域を複数に区分した論理区画（パーティション）上に構築され、ファイルを管理するファイルシステムに対して行われる。
【０００４】
情報処理装置は、シャットダウン指示を受けると、実行しているタスクへシャットダウン準備を要求し、タスクによる全ファイルシステムの使用がなくなった後、全ファイルシステムをアンマウントして電源を切断する。これでは、シャットダウン処理に時間がかかる。
【０００５】
そこで、シャットダウン処理を早く実行するため、実行しているタスクへのシャットダウン準備要求と並行して、各ファイルシステムのアンマウントを同時に行う技術が提案されている（例えば、特許文献１参照）。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記従来の技術では、タスクの使用状況に基づき制御していないため、ファイルシステムを使用し続けるタスクが存在すると、そのタスクに対してファイルシステムの使用を終了するための措置がとられない。そのため、そのファイルシステムがいつまでもアンマウントされず、シャットダウン処理が早くならない可能性も高い。
【０００７】
そこで、シャットダウン処理を早く実行する可能性を高めることができる装置や方法等の提供が望まれていた。
【課題を解決するための手段】
【０００８】
本発明は、上記課題に鑑みなされたものであり、複数の記憶部に記憶された情報を処理する複数の処理部を備える情報処理装置であって、情報処理装置の電源切断の指示を受け付ける入力部と、複数の処理部に対して実行中の処理終了へ向けての準備を要求する要求部と、各処理部が使用する記憶部の情報に基づき、処理を実行させる度合いを定める各処理部の優先度を決定する決定部と、各処理部に対して設定された優先度を決定部により決定された優先度に変更する変更部と、複数の処理部のいずれもが使用しなくなった記憶部との接続を解除する制御部とを含み、要求部は、複数の処理部から準備完了の通知を受けて制御部に対して電源を切断する処理の実行を要求する、情報処理装置が提供される。
【発明の効果】
【０００９】
本発明によれば、シャットダウン処理を早く実行する可能性を高めることができる。
【図面の簡単な説明】
【００１０】
【図１】情報処理装置のハードウェア構成を示した図。
【図２】情報処理装置のソフトウェア構成を示した図。
【図３】情報処理装置が備えるソフトウェアにより実現される機能の機能構成を示した機能ブロック図。
【図４】シャットダウン処理の一例を示したシーケンス図。
【図５】優先度について説明する図。
【図６】優先度を決定する処理について説明する図。
【図７】優先度を変更することでシャットダウン処理が早くなることを説明する図。
【図８】ファイルシステムを使用するタスクを検知する１つの方法を説明する図。
【図９】ファイルシステムをマウントする処理の流れを示したフローチャート。
【図１０】ファイルシステムをアンマウントする処理の流れを示したフローチャート。
【図１１】ファイルを開く処理の流れを示したフローチャート。
【図１２】ファイルを閉じる処理の流れを示したフローチャート。
【図１３】優先度を決定する処理の第１実施形態を示したフローチャート。
【図１４】ファイルシステムを使用するタスクを検知する別の方法を説明する図。
【図１５】優先度を決定する処理の第２実施形態を示したフローチャート。
【図１６】優先度を決定する処理の第３実施形態を示したフローチャート。
【発明を実施するための形態】
【００１１】
図１は、情報処理装置のハードウェア構成を示した図である。情報処理装置は、情報を処理することができる装置であればいかなる装置であってもよい。情報は、文書や画像等、いかなるデータであってもよく、その処理は、文書作成、表計算、メール送信、データ検索等、いかなる処理であってもよい。したがって、情報処理装置は、PC、タブレット端末、スマートフォン、PDA(Personal Digital Assistant)、MFP(Multi-Function Peripheral)、電子黒板、プロジェクタ、デジタルカメラ等とすることができる。
【００１２】
情報処理装置１０は、ハードウェアとして、CPU１１、RAM１２、ハードディスク１３、通信I/F１４、外部記憶I/F１５、操作部１６を備える。これらは、バス１７により互いに接続されている。通信I/F１４は、例えばネットワークI/Fとすることができ、外部記憶I/F１５は、例えばリムーバブルメディアスロットとすることができる。通信I/F１４には、外部記憶装置としてリモートストレージデバイス１８が接続され、外部記憶I/F１５にも、外部記憶装置としてリムーバブルメディア１９が接続されている。
【００１３】
CPU１１は、各種のアプリケーションやOS等のプログラムを実行する。各種のアプリケーションは、情報処理装置１０の機能を実現するための処理を実行するプログラムである。RAM１２は、CPUが実行するプログラムやそのプログラムに使用されるデータを、ハードディスク１３から読み出し、CPU１１が実行するために保持する。ハードディスク１３は、上記のプログラムやデータを保持し、情報処理装置１０の電源が切断されても、そのプログラムやデータを保持する。一方、RAM１２は、電源が切断された場合、保持しているプログラムやデータは削除される。
【００１４】
アプリケーションによるハードディスク１３内のデータへアクセスは、OSによりファイルへの読み書き、ファイルの生成、ファイルの削除等のファイルアクセス動作に抽象化される。このため、アプリケーションは、ファイルの読み書きをOSに指示することによりハードディスク１３内のデータを使用することができる。
【００１５】
ハードディスク１３の記憶領域は、パーティションと呼ばれる論理区画に区分されていてもよいし、区分されていなくてもよい。区分されていない場合、ハードディスク１３に対して１つのファイルシステムと呼ばれるファイルを管理するデータ構造が構築される。区分されている場合は、パーティション毎にファイルシステムが構築される。ファイルシステムは、ファイルを管理する際の管理情報と、ファイルデータ本体とから構成される。管理情報は、ファイルを識別するための識別情報としてのファイル名、そのファイルが記憶されている位置情報を含む。OSは、ファイルシステムの管理情報を使用してファイルへの読み書き等を実行する。
【００１６】
OSは、ファイルシステムを使用する場合、その使用開始前にそのファイルシステムをマウントし、使用終了後にはアンマウントする。マウントしないと、OSがファイルシステムを使用することができず、アンマウントしないと、次回電源を投入した際、正常に使用することができない可能性があるからである。
【００１７】
通信I/F１４は、ネットワークに接続された他の場所にあるリモートの機器との通信を可能にする。外部記憶I/F１５は、取り外し可能な記録媒体を、情報処理装置１０本体に接続し、記録媒体と情報処理装置１０本体との通信を仲介する。リモートの機器として接続されるリモートストレージデバイス１８は、リモートにあるPCのハードディスク、NAS(Network Attached Storage)のようなネットワークを介してアクセスすることができる記憶装置である。リムーバブルメディア１９は、SDカードやUSBメモリのような取り外し可能な記録媒体である。これらのデバイスも、ハードディスク１３と同様、複数のパーティションに分割され、パーティション毎にファイルシステムが構築されていてもよい。したがって。OSは、各ファイルシステムを使用して目的のファイルへアクセスすることができる。
【００１８】
操作部１６は、タッチパネルのようなユーザインタフェースデバイスで、ユーザからの情報の入力を受け付け、処理状況やエラー等を表示する。情報としては、これに限られるものではないが、電源OFFボタンの押下によるシャットダウン（電源切断）指示等を挙げることができる。
【００１９】
図２を参照して、情報処理装置１０に実装されるソフトウェアを説明する。情報処理装置１０は、ソフトウェアとして、情報処理装置１０の機能を実現するための複数のタスク（アプリケーション）２０〜２２、操作モジュール２３、コントローラ制御モジュール２４、アンマウント制御モジュール２５、OS２６を実装する。タスク２０〜２２は、文書作成、表計算、情報検索、メール送受信等を実行するためのアプリケーションである。
【００２０】
操作モジュール２３は、タッチパネルのようなユーザインタフェースデバイスを制御し、ユーザの指による画面のタッチやスイッチの押下を解釈して、ユーザの操作を他のモジュールに通知し、画面データを構築して表示させる。ユーザの操作は、電源スイッチの押下やタスク終了ボタンの押下等である。
【００２１】
コントローラ制御モジュール２４は、情報処理装置１０全体の状態に関する情報を収集し、必要な指示を各タスク２０〜２２に通知する。状態に関する情報としては、各タスク２０〜２２の各ファイルシステムの使用状況の情報を挙げることができる。使用状況の情報は、例えばタスク２０がどのファイルシステムを使用し、タスク２１がどのファイルシステムを使用しているかという情報である。
【００２２】
アンマウント制御モジュール２５は、シャットダウン動作時に、各タスク２０〜２２の優先度を計算し、予め設定された優先度の変更をOS２６に対して依頼する。優先度は、各タスクが処理を実行する度合いを定める、すなわち各タスクがどの程度CPU１１を使用できるかを設定するものである。タスク２０を最も優先する場合、優先度１を、タスク２１を２番目に優先する場合、優先度２を、タスク２２を３番目に優先する場合、優先度３を設定することができる。優先度１が設定されたタスク２０は、他のタスク２１、２２より多く、CPU１１を使用し、処理を実行することができる。優先度２が設定されたタスク２１は、それより優先度が低いタスク２２より多くCPU１１を使用し、処理を実行することができる。
【００２３】
ここで、シャットダウン処理における各モジュールの動作について説明する。操作モジュール２３は、ユーザによる電源スイッチの押下を検出し、コントローラ制御モジュール２４に通知する。コントローラ制御モジュール２４は、その通知を受けて、各タスク２０〜２２へシャットダウン実行のための準備を指示する。この準備は、実行中の処理終了へ向けての準備である。コントローラ制御モジュール２４は、各タスク２０〜２２からその指示に対する応答、すなわちシャットダウン準備が完了した旨（準備完了）の応答を受け取り、OS２６に対してシャットダウン実行を要求する。
【００２４】
各タスク２０〜２２は、上記の準備の指示を受けて、例えばユーザに対してタスクを終了してもよいかどうかを通知する。各タスク２０〜２２は、タスク終了ボタンの押下を受けて、文書作成中であれば、その文書を保存するかどうかを通知する。保存する場合、その文書のデータを記憶部へ記憶させる処理を行い、記憶させたところで、シャットダウン準備が完了となる。各タスク２０〜２２は、シャットダウン準備が完了した旨（準備完了）をコントローラ制御モジュール２４に通知する。
【００２５】
OS２６は、シャットダウン処理を実行するため、上記の優先度の変更、ファイルシステムのアンマウントを実行する。OS２６は、優先度の変更を、アンマウント制御モジュール２５により計算された優先度に基づき行う。アンマウント制御モジュール２５は、各タスク２０〜２２の使用状況を監視し、どのタスク２０〜２２も使用していないファイルシステムのアンマウントを、OS２６に対して依頼する。OS２６は、その依頼を受けて、そのファイルシステムのアンマウントを実行する。
【００２６】
図２に示した各モジュール等を、図１に示したCPU１１で実行させることにより各機能を実現することができる。これらの機能は、機能部として、情報処理装置１０が備えることができる。図３は、情報処理装置１０が備える機能部を示した機能ブロック図である。情報処理装置１０は、上記のシャットダウン処理を実行するために、複数の処理部３０、入力部３１、要求部３２、決定部３３、変更部３４、制御部３５を少なくとも備える。情報処理装置１０は、複数の処理部３０が処理する情報を記憶する１以上の記憶部３６を備えていてもよい。図３に示す例では、１つの記憶部３６が情報処理装置１０内に、２つの記憶部３６が情報処理装置１０の外部に、外部記憶装置やネットワークに接続されたリモートの記憶装置等として設けられている。
【００２７】
複数の処理部３０は、図２に示した複数のタスク２０〜２２により実現され、各々が所定の処理を実行する。各処理部３０は、複数の記憶部３６の少なくとも１つに記憶された１以上の情報を処理する。記憶部３６に記憶される情報は、各種のデータである。１つの処理として文書を修正する場合、処理部３０は、その文書のデータを読み出し、修正し、修正した内容でそのデータを上書きする。
【００２８】
入力部３１は、図２に示した操作モジュール２３により実現され、ユーザからの入力を受け付ける。入力は、シャットダウン指示等である。要求部３２は、入力部３１がシャットダウン指示を受け付けたとき、各処理部３０に対してシャットダウン実行のための準備を要求し、各処理部３０からその準備が完了した旨の応答を受ける。そして、要求部３２は、その応答を受けて、制御部３５に対してシャットダウン実行を要求する。
【００２９】
各処理部３０は、要求部３２からシャットダウン実行のための準備が要求されたことを受けて、その準備を実行する。各処理部３０は、各記憶部３６から情報をRAM１２といったメモリに読み出して使用する。その情報は、メモリ上に一時的に保持されるため、シャットダウンする際、各記憶部３６に書き出す等の処理が必要となる。このような処理を上記の準備にて実行する。各処理部３０は、その準備が完了した時点で、要求部３２に対してその旨を応答する。
【００３０】
決定部３３は、図２に示したアンマウント制御モジュール２５により実現され、入力部３１がシャットダウン指示を受け付けたとき、処理を実行させる度合いを定める各処理部３０の優先度を決定する。決定部３３は、決定した優先度を変更部３４へ送り、優先度の変更を依頼する。決定部３３は、各処理部３０の記憶部３６の使用状況を監視し、いずれの処理部３０も使用しなくなった記憶部３６のアンマウントを制御部３５に依頼する。また、決定部３３は、制御部３５がアンマウントする毎に、各処理部３０の優先度を決定する。
【００３１】
変更部３４および制御部３５は、図２に示したOS２６により実現され、各記憶部３６の優先度の変更、マウント、アンマウント、各処理部３０に対して要求されたファイルへのアクセス機能を提供する。変更部３４は、決定部３３により決定された優先度に基づき、予め設定された優先度を変更する。制御部３５は、予め設定された優先度あるいは変更された優先度に基づき、各処理部３０に処理を実行させる。制御部３５は、全部の記憶部３６との接続を解除（アンマウント）し、情報処理装置１０の電源を切断することによりシャットダウンを実行する。
【００３２】
この各機能部によるシャットダウン処理を、図４を参照して詳細に説明する。ユーザが電源スイッチを押下し、シャットダウンを指示すると、入力部３１がその指示を受け付け、要求部３２に対してシャットダウン指示を受け付けた旨を通知する（Ｓ４００）。要求部３２は、その通知を受けて、各処理部３０に対してシャットダウン実行への準備を要求する（Ｓ４０１）。
【００３３】
要求部３２は、決定部３３に対してシャットダウン制御を開始する旨を通知する（Ｓ４０２）。決定部３３は、各処理部３０の優先度を算出し（Ｓ４０３）、予め設定された優先度から優先度が変わる処理部３０を検出する（Ｓ４０４）。決定部３３は、検出した処理部３０に対する優先度の変更を変更部３４に対して指示する（Ｓ４０５）。変更部３４は、その要求を受けて、その処理部３０の優先度を変更する（Ｓ４０６）。
【００３４】
決定部３３は、制御部３５に対し、定期的に使用されなくなった記憶部３６がないかどうかを定期的に問い合わせる（Ｓ４０７）。決定部３３は、定期的に使用されなくなった記憶部３６がある場合、アンマウント実行を指示する（Ｓ４０８）。制御部３５は、その指示を受けて、その記憶部３６のアンマウントを実行する（Ｓ４０９）。
【００３５】
決定部３３は、各処理部３０の優先度を再計算し（Ｓ４１０）、現在設定されている優先度から優先度が変わる処理部３０を検出する（Ｓ４１１）。決定部３３は、検出した処理部３０に対する優先度の変更を変更部３４に対して指示する（Ｓ４１２）。変更部３４は、その要求を受けて、その処理部３０の優先度を変更する（Ｓ４１３）。Ｓ４０７からＳ４１３の処理を、全ての処理部３０のシャットダウン準備が完了するまで繰り返す。
【００３６】
要求部３２は、全ての処理部３０からシャットダウン準備が完了した旨の応答を受けると（Ｓ４１４）、決定部３３に対してシャットダウン制御を終了する旨を通知する（Ｓ４１５）。そして、要求部３２は、制御部３５に対してシャットダウン実行を要求する（Ｓ４１６）。
【００３７】
制御部３５は、その要求を受けて、シャットダウン処理を開始する（Ｓ４１７）。従来では、このシャットダウン処理において全ての記憶部３６をアンマウントしていたが、この処理では、既に全ての記憶部３６のアンマウントが終了しているため、ここではアンマウントは実行しない。制御部３５は、情報処理装置１０の電源を切断し、シャットダウン処理を終了する（Ｓ４１８）。
【００３８】
図５を参照して、各処理部３０の優先度について説明する。優先度は、設定できる範囲があり、その範囲は、OS２６によって定められている。図５では、その範囲がPmin〜Pmaxとされている。タスクが新しく生成されるたびに、処理部３０が生成され、生成された処理部３０に対して必ずPmin〜Pmaxの範囲内の優先度が設定される。
【００３９】
OS２６により実現される制御部３５は、定期的に、もしくは実行中の処理部３０が何らかの要因により待ち状態になった場合、別の処理部３０に切り替える。この切り替えにおいて、制御部３５は、実行を待っている処理部３０の中から優先度が最も高い処理部３０を次に実行する処理部３０として選択する。これにより、優先度が高い処理部３０が多くの処理を実行することができ、その処理を早く進行させることができる。
【００４０】
決定部３３が各処理部３０の優先度を計算し、変更部３４が計算した優先度に変更することができるが、計算した優先度は、Pmin〜Pmaxの範囲でなければならない。この範囲内であればいなかる値であってもよいが、設定可能な優先度の範囲を決定しておくことができる。図５に示す例では、固定のデフォルト値であるPfsmaxが設定可能な最も高い優先度として設定されている。図示していないが、Pfsminが設定可能な最も低い優先度として設定される。
【００４１】
各処理部３０の優先度を計算する処理を、図６を参照して詳細に説明する。図６は、各処理部１〜Nが各記憶部１〜Mを使用しているか否かを示した図である。決定部３３は、どの処理部がどの記憶部を使用しているかを調査し、記憶部毎に使用している処理部の数を計算する。図６に示す例では、記憶部１は、使用している処理部の数が５、記憶部２は、使用している処理部の数が３、記憶部Mは、使用している処理部の数が４と算出されている。
【００４２】
決定部３３は、計算した処理部の数が最も少ない記憶部を検索し、その検索した記憶部を使用する処理部に対して上記のデフォルト値であるPfsmaxを設定する。図６に示す例では、記憶部２が最も少ないことから、記憶部２を使用する処理部２、５、８に対してPfsmaxを設定する。
【００４３】
決定部３３は、次に、計算した処理部の数が２番目に少ない記憶部を検索し、その検索した記憶部を使用する処理部に対して、Pfsmaxの次の優先度を表すPfsmax-1を設定する。図６に示す例では、記憶部Mが２番目に少ないことから、記憶部Mを使用する処理部２、３、８、９に対してPfsmax-1を設定する。このようにして、決定部３３は、計算した処理部の数が少ない記憶部を使用する処理部ほど優先度を高くすることができる。
【００４４】
なお、処理部２、８については、既にPfsmaxに設定されているため、設定を変更せず、優先度が高い方のPfsmaxのままとする。このようにして、決定部３３は、計算した処理部の数がｊ番目（j<i）に少ない記憶部を使用する処理部に対して、既に優先度Pfsmax-jが設定されていて、設定されている優先度の方が高い場合、高い方の優先度Pfsmax-jをそのまま使用する。
【００４５】
ここで、優先度を変更することによりシャットダウン処理が早くなることを、図７を参照して説明する。図７（ａ）は、優先度を変更しない場合にかかる時間と優先度との関係を示した図で、図７（ｂ）は、優先度を変更した場合にかかる時間と優先度との関係を示した図である。この例では、処理部１〜３が存在し、各優先度がP1、P2、P3（P1>P2>P3）とする。処理部３はファイルを使用し、その処理の中でファイルの使用が終了するものとする。また、時刻０で処理部１が実行され、優先度に従って処理部２、３が実行されるものとする。
【００４６】
制御部３５は、処理部１に処理を実行させ、任意の時刻で他の処理部による処理に切り替える。優先度を変更しない場合、制御部３５は、図７（ａ）に示すように、処理部２の方が処理部３より優先度が高いので、処理部２に先に実行させる。制御部３５は、次の切り替えにおいて、処理部３に切り替え、処理部３が処理を実行する。処理部３は、その処理の中でファイルの使用を終了する。この終了によりそのファイルを記憶する記憶部が使用されない状態になり、この時点でその記憶部をアンマウントすることができる。
【００４７】
一方、優先度の計算により処理部３の優先度を処理部２の優先度より高い値Pfsmax-1（>P2）に変更する場合、処理部３が先に実行される。すると、処理部３は、その処理の中でファイルの使用を終了し、次の処理部２ではそのファイルを使用しないため、そのファイルを記憶する記憶部を早くアンマウントすることができる。このようにして、全ての記憶部を早くアンマウントすることで、シャットダウン処理を早くすることができる。
【００４８】
図５に示すテーブルを作成するためには、どの記憶部をどの処理部が使用しているかを検知しなければならない。その検知方法の一例を、図８を参照して説明する。図８は、各処理部３０が使用するデータ構造の一例を示した図である。処理部３０は、ファイルを開き、そのファイルの読み込みまたは書き込みを開始する際、そのファイルを記憶する記憶部３６の情報に対応付けて該処理部３０を識別するための識別情報（処理部ID）を登録（格納）する。記憶部の情報は、例えば記憶部の名前、記憶部の識別情報(ID)等である。処理部３０は、ファイルを閉じ、そのファイルの読み込みまたは書き込みを完了した際、そのファイルを記憶する記憶部３６の情報に対応付けて格納した該処理部３０の処理部IDを削除する。このようなデータ構造を提供することで、各記憶部３６を使用する処理部３０を容易に検知することができる。
【００４９】
実際にこのデータ構造を実装する場合は、各記憶部３６を管理する各ファイルシステムと、各処理部３０として実行させる各タスクのタスクIDとを用い、それらを対応付けて登録し、また、その登録を削除することができる。データ構造としては、図８（ａ）に示すファイルシステムのファイルパス名を格納する配列構造と、図８（ｂ）に示すファイルシステムを使用しているタスクIDを格納する二次元配列構造とを用いることができる。
【００５０】
図８（ａ）では、ファイルシステムfspath[0]が、ルートディレクトリ「/」を始点とする階層化された木構造のルートディレクトにマウントされていることを示している。ファイルシステムfspath[1]が、ルートディレクトリの１階層下のhomeディレクトリにマウントされていることを示している。ファイルシステムfspath[n]が、ルートディレクトリの３階層下のzzzディレクトリにマウントされていることを示している。
【００５１】
図８（ｂ）では、ファイルシステムfspath[0]からファイルシステムfspath[n]までの各ファイルシステムに対応付けて、各ファイルシステムを使用するタスクのタスクIDが格納されていることを示している。これも、各タスクがファイルを開く際、各タスクのタスクIDをそのファイルを管理するファイルシステムに対応付けて格納し、ファイルを閉じる際、その格納したタスクIDを削除する。
【００５２】
ファイルシステムを提供するOS２６では、タスクがファイルを使用する場合、使用開始と終了時に決められた関数を実行する必要がある。例えばOS２６としてLinux（登録商標）を使用する場合、関数open()、close()を実行する必要がある。また、ファイルシステムをマウントする場合、関数mount()を実行し、アンマウントする場合、関数unmount()を実行する必要がある。これらの関数を修正することで、上記のタスクIDの格納を可能にする。
【００５３】
関数open()、close()を修正し、あるタスクがあるファイルをopen()からclose()までの間、そのタスクIDを、そのタスクが使用するファイルを管理するファイルシステムに関連付けて登録できるようにする。また、関数mount()、unmount()も改造し、あるファイルシステムがマウントされ、アンマウントされるまでの間、そのファイルシステムがマウントされるファイルパス名をファイルシステム名とともに登録できるようにする。これにより、各ファイルシステムを使用しているタスクを検知することができ、マウントされているファイルシステムを検知することができる。
【００５４】
図９〜図１２を参照して、修正された関数mount()、unmount()、open()、close()により実行される処理の概要を説明する。図９は、関数mount()により実行される処理の流れを示したフローチャートである。ステップ９００から開始し、ステップ９０５では、iを０に設定し、ステップ９１０では、図８（ａ）に示す配列構造のfspath[i]が空かどうかを判断する。ファイルシステム名が格納され、登録されていない場合、空であり、登録されている場合は、空でないと判断する。空である場合、ステップ９１５へ進み、fspath[i]にファイルシステム名を格納する。そして、ステップ９２０へ進み、関数mount()が実行すべき本来のマウント処理を実行し、ステップ９３５でこの処理を終了する。
【００５５】
ステップ９１０で空でない場合、ステップ９２５へ進み、iに１加算し、ステップ９３０で、１加算されたiがfspath配列サイズを超えるかを判断する。図８（ａ）に示す例では、iが０〜nの範囲とされていることから、nを超えるかどうかを判断する。超えていない場合、ステップ９１０へ戻り、超える場合、配列構造に空きがないことから、何もせずにステップ９２０へ進み、本来のマウント処理を実行する。マウント処理では、マウントするデバイスのファイルシステムを木構造の任意のディレクトリへ登録する。
【００５６】
図１０は、関数unmount()により実行される処理の流れを示したフローチャートである。ステップ１０００から開始し、ステップ１００５では、関数unmount()が実行すべき本来のアンマウント処理を実行する。上記のマウントとは反対に、任意のディレクトリへのファイルシステムの登録を削除する。ステップ１０１０では、iを０に設定し、ステップ１０１５で、配列構造のfspath[i]に登録されているファイルシステム名と、アンマウントしたファイルシステムのファイルシステム名が一致するかを判断する。一致する場合、ステップ１０２０へ進み、fspath[i]に登録されたファイルシステム名を削除し、ステップ１０３５でこの処理を終了する。
【００５７】
ステップ１０１５で一致しない場合は、ステップ１０２５へ進み、iに１加算する。ステップ１０３０では、iがfspath配列サイズを超えるかを判断する。超えていない場合、ステップ１０１０へ戻り、超える場合、見つからなかったため、何もせずにステップ１０３５へ進み、この処理を終了する。
【００５８】
図１１は、関数open()により実行される処理の流れを示したフローチャートである。ステップ１１００から開始し、ステップ１１０５では、iを０に設定し、ステップ１１１０では、fspath[i]のファイルシステム名を構成する文字列と、開くファイルのファイル名とが前方一致するかを判断する。すなわち、ファイルシステム名の先頭の文字列がファイル名に一致するかどうかを判断する。一致する場合は、ステップ１１１５へ進み、fspath[i]に開くファイルを管理するファイルシステムのファイルシステム名が登録されているのでfsposとして記憶しておく。例えばRAM１２等のメモリに記憶することができる。
【００５９】
ステップ１１１０で一致しない場合、ステップ１１２０へ進み、iに１加算する。ステップ１１２５では、iがファイルシステム数を超えたかを判断する。超えていない場合、ステップ１１１０へ戻り、超える場合は、ステップ１１６５へ進み、この処理を終了する。超える場合は、開くファイルがどのファイルシステムでも管理されていないので、不正パラメータとし、この処理を終了する。
【００６０】
ステップ１１３０では、open()を呼び出したタスクのタスクIDを、OS２６から取得する。そして、taskidとして記憶しておく。これも、上記のメモリに記憶することができる。ステップ１１３５では、iを０に設定し、ステップ１１４０で、図８（ｂ）に示す配列構造においてfspath[fspos][i]にタスクIDが既に格納されているかを判断する。格納されていない場合、ステップ１１４５では、fspath[fspos][]の配列の中でタスクIDがまだ格納されていない空の場所に、ステップ１１３０でtaskidとして記憶しておいたタスクIDを格納する。
【００６１】
一方、タスクIDが既に格納されている場合、ステップ１１５０へ進み、iに１加算する。ステップ１１５５では、iがfspath配列サイズを超えるかを判断する。超えていない場合、ステップ１１４０へ戻り、超える場合、配列構造に空きがないことから、何もせずにステップ１１６０へ進み、本来のファイルを開く処理を実行する。そして、ステップ１１６５でこの処理を終了する。
【００６２】
図１２は、関数close()により実行される処理の流れを示したフローチャートである。ステップ１２００から開示し、ステップ１２０５では、ファイルを閉じる処理を実行する。ステップ１２１０では、iを０に設定し、ステップ１２１５では、fspath[i]のファイルシステム名を構成する文字列と、閉じるファイルのファイル名とが前方一致するかを判断する。一致する場合は、ステップ１２２０へ進み、fspath[i]に閉じるファイルを管理するファイルシステムのファイルシステム名が格納されているのでfsposとして記憶しておく。
【００６３】
ステップ１２１５で一致しない場合、ステップ１２２５へ進み、iに１加算する。ステップ１２３０では、iがファイルシステム数を超えるかを判断する。超えていない場合、ステップ１２１５へ戻り、超える場合は、ステップ１２６５へ進み、この処理を終了する。超える場合は、閉じるファイルがどのファイルシステムでも管理されていないので、不正パラメータとし、この処理を終了する。
【００６４】
ステップ１２３５では、close()を呼び出したタスクのタスクIDを、OS２６から取得する。そして、taskidとして記憶しておく。ステップ１３４０では、iを０に設定し、ステップ１３４５で、図８（ｂ）に示す配列構造においてfspath[fspos][i]にタスクIDが既に格納されているかを判断する。格納されていない場合、ステップ１２５０では、fspath[fspos][i]の配列の中に格納されているタスクIDを削除する。
【００６５】
一方、タスクIDが格納されていない場合、ステップ１２５５へ進み、iに１加算する。ステップ１２６０では、iがfspath配列サイズを超えるかを判断する。超えていない場合、ステップ１２４５へ戻り、超える場合、配列構造に空きがないことから、何もせずにステップ１２６５へ進み、この処理を終了する。
【００６６】
これまでに説明してきた優先度を計算する処理を、図１３を参照してまとめると、次のようなものとなる。ステップ１３００から開始し、ステップ１３０５で、ファイルシステムを使用するタスク数を調査する。上記の検知方法を使用し、上記のテーブルを作成し、そのテーブルからタスク数を得ることができる。ステップ１３１０では、全てのファイルシステムについて調査したかを判断し、まだ調整し終えていない場合、ステップ１３０５へ戻り、調査を継続する。一方、調査し終えた場合、ステップ１３１５へ進む。
【００６７】
ステップ１３１５では、１からファイルシステム数の１つを選択する。ステップ１３２０では、選択した数をiとし、そのi番目に使用しているタスクが多いファイルシステムを検索する。ステップ１３２５では、検索したファイルシステムを使用するタスクの１つを選択する。ステップ１３３０では、選択したタスクの優先度が既に決定しているかを判断する。決定している場合、ステップ１３４０へ進み、全てのタスクを選択したかを判断する。
【００６８】
一方、決定していない場合、ステップ１３３５へ進み、タスクの優先度をi番目に高い優先度Tiに設定し、該当するタスクを優先度決定済み状態にする。ステップ１３４０で、まだ選択していないタスクがある場合、ステップ１３２５へ戻り、全て選択した場合は、ステップ１３４５へ進む。ステップ１３４５では、全てのファイルシステムについてタスクの優先度を決定したかを判断する。決定していない場合、ステップ１３１５へ戻り、決定した場合、ステップ１３５０へ進み、この処理を終了する。
【００６９】
上記の検知方法の別の例について説明する。ここでは、どのタスクがどのファイルシステムを使用しているかを調査する方法として説明する。この例では、OS２６としてLinux（登録商標）を用い、Linux（登録商標）の機能を利用して調査する。この方法を使用すれば、上記の各関数を修正する必要がなくなる。１つの方法としては、fuserというコマンドを使用する方法がある。別の方法としては、/procファイルシステムから情報を取得する方法がある。図１４（ａ）は、タスクと、そのタスクが使用するファイルを管理するファイルシステムとを例示した図で、図１４（ｂ）は、fuserコマンドを使用する方法を説明する図で、図１４（ｃ）は、/procを使用する方法を説明する図である。
【００７０】
図１４（ａ）では、/home/member/cc067というファイルシステムがマウントされ、その中にtest.txtというファイルが存在し、a.out（プロセスIDが３０４５１）というプログラムがこのtest.txtを使用している。これを前提とし、このファイルシステムを使用してタスク（プロセス）を調査する方法を以下に説明する。
【００７１】
fuserコマンドを使用する方法では、fuser -vm /home/member/cc067というコマンドを実行する。すると、/home/member/cc067と関わりのあるプロセスの＜プロセスID＞、＜フラグ＞、＜実行ファイル名＞が表示される。図１４（ｂ）のフラグに丸で囲まれたfという文字が含まれるプロセスが、ファイルシステム中のファイルを使用していることを示している。図１４（ｂ）に示す例では、プロセスIDが３０４５１、実行ファイル名がa.outというプロセスにfというフラグがついていて、ファイルを使用していることが分かる。
【００７２】
このようにして、全てのファイルシステムについて、fuser -vm ＜ファイルシステム名＞コマンドを実行し、出力されるプロセス一覧からfというフラグが立っているプロセスを全て検知することで、各ファイルシステムを使用しているプロセス一覧を調査することができる。
【００７３】
/procを使用する方法では、OS２６としてLinux（登録商標）を使用する場合、プロセス番号xxxの情報が/proc/プロセスID/fdというディレクトリに対し、ls-lというコマンドを実行することで、そのプロセスが使用するファイルを調査することができる。図１４（ｃ）に示す例では、プロセスIDが３０４５１であるため、/proc/30451/member/cc067/test.txtという行が表示され、a.outが/home/member/cc067のtest.txtというファイルを使用していることが分かる。
【００７４】
このようにして、/procの下位の階層にある全ての/proc/プロセスID/fdについて、ls-lコマンドを実行することで、全てのプロセスがどのファイルシステムのどのファイルを使用しているかを調査することができる。
【００７５】
図１３に示した例では、全てのファイルシステムを対象として優先度を計算している。しかしながら、Linux（登録商標）でのルートファイルシステムのように、絶対にOS２６のシャットダウン処理を行うまでアンマウントできないファイルシステムがある。このようなファイルシステムがあることが予め分かっている場合、そのファイルシステムを、優先度を計算する処理で考慮に入れても無駄になるため、OS２６が電源を切断する処理を開始するまで使用するファイルシステムの情報を除いて、優先度を計算する処理を行うことができる。この場合、そのファイルシステムのアンマウントを、OS２６のシャットダウン処理時に行うことができる。
【００７６】
このときの優先度を計算する処理を、図１５を参照して説明する。図１３に示す処理の流れとほぼ同様であるが、ステップ１５２０に、予め定められたシャットダウン実行まで必要なファイルシステムであるかを判断する処理が追加されている。必要のないファイルシステムの場合、ステップ１５３０へ進み、図１３のステップ１３２５と同様の処理を実行する。必要なファイルシステムの場合、ステップ１５５０へ進み、図１３のステップ１３４５と同様の処理を実行する。
【００７７】
図１３に示した例では、全てのファイルシステムを対象として優先度を計算している。しかしながら、タスクによっては、ファイルシステムを使用していなくても、高い優先度を維持しないと、他のタスクの処理が進まず、シャットダウン処理に時間がかかってしまう可能性がある。このようなタスクからは、優先度の変更を拒否する拒否要求を通知させ、それを登録することができるようにし、優先度を計算する処理時に、優先度の変更を拒否する拒否要求を通知したタスクについては、優先度を変更しないようにすることができる。
【００７８】
このときの優先度を計算する処理を、図１６を参照して説明する。図１３に示す処理の流れとほぼ同様であるが、ステップ１６３０に、タスクから優先度の変更を拒否する拒否要求を受けているかを判断する処理が追加されている。受けていない場合、ステップ１６３５へ進み、図１３のステップ１３３０と同様の処理を実行する。受けている場合、ステップ１６４０へ進み、図１３のステップ１３４０と同様の処理を実行する。
【００７９】
以上のようにして、タスクの優先度を変更することで、シャットダウン処理を早く実行する可能性を高めることができる。その可能性を高めることができることから、シャットダウン処理にかかる時間をほぼ確実に短縮することが可能となる。
【００８０】
これまで本発明を、情報処理装置、情報処理方法およびプログラムとして上述した実施の形態をもって説明してきたが、本発明は上述した実施の形態に限定されるものではない。本発明は、他の実施の形態、追加、変更、削除など、当業者が想到することができる範囲内で変更することができ、いずれの態様においても本発明の作用・効果を奏する限り、本発明の範囲に含まれるものである。
【００８１】
したがって、上記のプログラムは、インストール可能な形式または実行可能な形式のファイルでフロッピー（登録商標）ディスク、CD(Compact Disk)、CD-R(Compact Disk Read Only Memory)、DVD(Digital Versatile Disk)、SDメモリカード(SD Memory Card)、USBメモリ(Universal Serial Bus Memory)等のコンピュータで読み取り可能な記録媒体に記録して提供するように構成することができる。また、上記のプログラムは、インターネット等のネットワーク経由で提供または配布するように構成されていてもよい。さらに、上記のプログラムを他の各種ソフトウェアとともにROM等に予め組み込んで提供するように構成してもよい。
【００８２】
上記の実施形態では、上記の各機能部は、CPU１１がハードディスク１３等に記憶されたプログラムを読み出して実行することにより、各機能部を実現するプログラムがRAM１２上にロードされ、上記の各機能部が生成されている。しかしながら、これに限られるものではなく、例えば各機能部のうちの少なくとも一部が専用のハードウェア回路（例えば半導体集積回路）で実現されていてもよい。
【符号の説明】
【００８３】
１０…情報処理装置、１１…CPU、１２…RAM、１３…ハードディスク、１４…通信I/F、１５…外部記憶I/F、１６…操作部、１７…リモートストレージデバイス、１８…リムーバブルメディア、２０〜２２…タスク、２３…操作モジュール、２４…コントローラ制御モジュール、２５…アンマウント制御モジュール、２６…OS、３０…処理部、３１…受付部、３２…要求部、３３…決定部、３４…変更部、３５…制御部、３６…記憶部
【先行技術文献】
【特許文献】
【００８４】
【特許文献１】特開２０１５−２６９８１号公報
【図１】
2017072935.tif 000003
【図２】
2017072935.tif 000004
【図３】
2017072935.tif 000005
【図４】
2017072935.tif 000006
【図５】
2017072935.tif 000007
【図６】
2017072935.tif 000008
【図７】
2017072935.tif 000009
【図８】
2017072935.tif 000010
【図９】
2017072935.tif 000011
【図１０】
2017072935.tif 000012
【図１１】
2017072935.tif 000013
【図１２】
2017072935.tif 000014
【図１３】
2017072935.tif 000015
【図１４】
2017072935.tif 000016
【図１５】
2017072935.tif 000017
【図１６】
2017072935.tif 000018