(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023071103
(43)【公開日】2023-05-22
(54)【発明の名称】プロセススケジュール方法
(51)【国際特許分類】
G06F 9/445 20180101AFI20230515BHJP
G06F 9/48 20060101ALI20230515BHJP
【FI】
G06F9/445
G06F9/48 300Z
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2021183713
(22)【出願日】2021-11-10
(71)【出願人】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001689
【氏名又は名称】青稜弁理士法人
(72)【発明者】
【氏名】金 成昊
(72)【発明者】
【氏名】大塚 祐策
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AC11
5B376AE51
5B376AE54
(57)【要約】
【課題】情報処理装置のプロセススケジュール方法において、制御アプリのスケジューラを汎用OS上でも実現可能とし、スケジュールする時点とそのスケジュール内容をユーザが変更しうるようにする。
【解決手段】情報処理装置が、OSの特定されたOS内部処理関数の実行時に、OSとは別個にプロセスをスケジューリングする拡張スケジュールプロセス処理を起床するステップと、拡張スケジュールプロセス処理により、拡張スケジュール処理内容プログラムによるプロセスをスケジューリングするステップとを有する。また、ユーザから入力されたOS内部処理関数の情報にしたがって、拡張スケジュールプロセス処理を起床するOS内部処理関数を選定するステップと、拡張スケジュールプロセス処理により起動される拡張スケジュール処理内容プログラムを登録するステップを有する。
【選択図】
図6
【特許請求の範囲】
【請求項1】
汎用OS上で実行されるプロセスをスケジューリングする情報処理装置のプロセススケジュール方法であって、
前記情報処理装置が、前記OSの特定されたOS内部処理関数の実行時に、前記OSとは別個にプロセスをスケジューリングする拡張スケジュールプロセス処理を起床するステップと、
前記情報処理装置が、前記拡張スケジュールプロセス処理により、拡張スケジュール処理内容プログラムによるプロセスをスケジューリングするステップとを有することを特徴とするプロセススケジュール方法。
【請求項2】
さらに、
前記情報処理装置が、ユーザから入力されたOS内部処理関数の情報にしたがって、拡張スケジュールプロセス処理を起床するOS内部処理関数を選定するステップを有することを特徴とする請求項1記載のプロセススケジュール方法。
【請求項3】
さらに、
前記情報処理装置が、ユーザから入力された拡張スケジュール処理内容プログラムの情報にしたがって、前記拡張スケジュールプロセス処理により起動される拡張スケジュール処理内容プログラムを登録するステップを有することを特徴とする請求項1記載のプロセススケジュール方法。
【請求項4】
前記OS内部処理関数のコードとして、拡張スケジュールイベントフック処理プログラムが埋め込まれ、前記拡張スケジュールイベントフック処理プログラムにより、拡張スケジュールプロセス処理を起床する処理が行われることを特徴とする請求項1記載のプロセススケジュール方法。
【請求項5】
前記情報処理装置は、拡張スケジュールのイベントを一意に識別する拡張スケジュールイベント識別子と、前記OS内部処理関数のコードとして埋め込んだ地点を一意に識別するイベントフック識別子と、前記拡張スケジュール処理内容プログラムを一意に識別する拡張スケジュール処理内容プログラム識別子を対応付けた拡張スケジュール管理テーブルを保持することを特徴とする請求項4記載のプロセススケジュール方法。
【請求項6】
前記情報処理装置は、各々がプロセスを実行する複数のCPUコアを有し、
前記CPUコアごとに、排他的に前記拡張スケジュールプロセス処理を行うことを特徴とする請求項1記載のプロセススケジュール方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プロセススケジュール方法に係り、特に、リアルタイムOSにおいて、OS固有のプロセスのスケジューリングを拡張して、ユーザがプロセスの起動のトリガーとなるイベントと起動するプロセスの内容を定義しうるプロセススケジュール方法に関する。
【背景技術】
【0002】
従来、制御システムにおけるコントローラ上の制御アプリケーションソフトウェア(以下、アプリケーションソフトウェアを単に「アプリ」ともいう)のリアルタイム性を保証するためには、専用のRTOS(Real Time Operating System)を採用し、アプリのリアルタイム性を保証するのが一般的であった。しかしながら、RTOSは、リアルタイム性保証に特化した機能しか持たず、近年IoT(Internet of Things:モノのインターネット)時代に要求されている他機器との接続性やデータ処理のためのAI等の技術を実装・運用できない。そのため、Linux(登録商標)等の汎用OSの採用したコントローラが普及している。汎用OS上で従来の制御アプリを運用する場合、アプリの順序制御が汎用OSのスケジュールの特性に左右されてしまう。特に、アプリの異常が発生した場合、従来のRTOSではRTOS処理の延長で異常対策処理を行うケースが多い。それによって異常処理が優先的にかつ即時に処理されるため、システムの異常停止などの異常対策によってシステムの安全性を保つことができる。しかしながら、汎用OS上で同じ処理を実現するのは困難である。この解決策として汎用OSに対して、従来のRTOSのスケジューラ特性を実現する拡張したスケジューラを設ける方法がある。
【0003】
これに関連し、仮想計算機上で実行されるゲストOSのスケジュールに関しては、例えば、特許文献1がある。特許文献1では、仮想計算機のスケジュールのために、仮想計算機マネージャに、ゲストOSスケジューラを設け、計測されたゲストOSの動作周波数に基づいて、ゲストOSに対するCPUの割当を調整するように、ゲストOSをスケジュールする仮想計算機システムが開示されている。また、VoIPを実行するためのスレッド処理のスケジューリングに関する技術としては、例えば、特許文献2がある。特許文献2の呼処理装置は、呼処理イベントをキューイングする第1のスケジューラの外に、イベント処理スレッドを生成し、各イベントキュー管理オブジェクトから呼処理イベントを抽出して実行させる第2のスケジューラを設けている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2009-110404号公報
【特許文献2】特開2010-73214号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
特許文献1は、仮想計算機マネージャ上に新たなスケジューラを設けて、ゲストOSのスケジューリングを行う技術であり、特許文献2に記載された呼処理装置では、第2のスケジューラを設けることにより、処理デッドライン内で実行するタスクの順序を再調整し、CPUの性能が低下しないようにしている。
【0006】
しかしながら、これらの拡張されたスケジューラは、スケジューラを動作させるときと、そのスケジュール内容は、ユーザ側で変更することはできない。
【0007】
汎用OSにおけるアプリスケジュール方法に関して、スケジュールする時点とそのスケジュール内容をユーザが容易に変更可能にしたいと要請がある。それによって、従来、RTOS上で実行された制御アプリのスケジューラが汎用OS上でも実現可能となる。また、全アプリが動作する前に必要な処理をユーザ側で容易で変更できるため、多様なアプリのスケジュール方法が実現できる。
【0008】
本発明の目的は、制御アプリのスケジューラを汎用OS上でも実現可能とし、スケジュールする時点とそのスケジュール内容をユーザが変更しうるプロセススケジュール方法を提供することにある。
【課題を解決するための手段】
【0009】
本発明のプロセススケジュール方法は、汎用OS上で実行されるプロセスをスケジューリングする情報処理装置のプロセススケジュール方法であって、情報処理装置が、OSの特定されたOS内部処理関数の実行時に、OSとは別個にプロセスをスケジューリングする拡張スケジュールプロセス処理を起床するステップと、情報処理装置が、拡張スケジュールプロセス処理により、拡張スケジュール処理内容プログラムによるプロセスをスケジューリングするステップとを有するようしたものである。
【発明の効果】
【0010】
本発明によれば、制御アプリのスケジューラを汎用OS上でも実現可能とし、スケジュールする時点とそのスケジュール内容をユーザが変更しうるプロセススケジュール方法を提供することができる。
【図面の簡単な説明】
【0011】
【
図1】実施形態1に係るプロセススケジュール方法が適用される情報処理装置の機能構成図である。
【
図2】実施形態1に係るプロセススケジュール方法が適用される情報処理装置のハードウェア・ソフトウェア構成図である。
【
図3】拡張スケジュール管理テーブルの一例を示す図である。
【
図4】拡張スケジュールイベントフック処理テンプレートの一例を示す図である。
【
図5】実施形態1に係る拡張スケジュールイベント情報テーブルの一例を示す図である。
【
図6】OSスケジュールと拡張スケジュールの関係の概要を示した図である。
【
図7】拡張スケジュールイベント選定処理を示すフローチャートである。
【
図8】拡張スケジュールイベントフック処理作成処理を示すフローチャートである。
【
図9】拡張スケジュールイベントフック処理を示すフローチャートである。
【
図10】拡張スケジュール処理内容プログラム登録処理を示すフローチャートである。
【
図11】実施形態1に係る拡張スケジュール起床処理を示すフローチャートである。
【
図12】実施形態1に係る拡張スケジュールプロセス処理を示すフローチャートである。
【
図13】OS内部処理関数CallGraph画面のユーザインタフェースを説明する図である。
【
図14】実施形態2に係るプロセススケジュール方法が適用される情報処理装置の機能構成図である。
【
図15】実施形態2に係るプロセススケジュール方法が適用される情報処理装置のハードウェア・ソフトウェア構成図である。
【
図16】実施形態2に係る拡張スケジュールイベント情報テーブルの一例を示す図である。
【
図17】実施形態2に係る拡張スケジュール起床処理を示すフローチャートである。
【
図18A】実施形態2に係る拡張スケジュールプロセス処理を示すフローチャートである(その一)。
【
図18B】実施形態2に係る拡張スケジュールプロセス処理を示すフローチャートである(その二)。
【発明を実施するための形態】
【0012】
以下、本発明に係る各実施形態を、
図1ないし
図18Bを用いて説明する。
【0013】
〔実施形態1〕
以下、本発明に係る実施形態1を、
図1ないし
図13を用いて説明する。
【0014】
先ず、
図1および
図2を用いて実施形態1に係るプロセススケジュール方法が適用される情報処理装置の構成について説明する。
【0015】
本発明のプロセススケジュール方法が適用される情報処理装置100は、
図1に示されるように、機能構成として、拡張スケジュールイベント選定部101、拡張スケジュールイベントフック処理作成部110、拡張スケジュール処理内容プログラム登録部120、拡張スケジュール処理内容プログラム121、拡張スケジュールプロセス部130、アプリ140、OS(Operating System)150、記憶部160を備える。
【0016】
OS150は、コンピュータのオペレーション(操作・運用・運転)を司るハードウェアとソフトウェアの仲立ちとなるシステムソフトウェアであり、例えば、Linux(登録商標)やWindows(登録商標)のような汎用OSである。
【0017】
本実施形態のOS150は、機能として、後に説明するスケジュール部151、拡張スケジュールイベントフック処理プログラム152、拡張スケジュールプロセス起床部153を備える。
【0018】
ここで、拡張スケジュールとは、OS150本来のプロセススケジュールとは、別にユーザが新たにプロセスの実行順番や内容を定義して実行することを可能にするプロセスのスケジューリングである。
【0019】
スケジュール部151は、OS固有のプロセスのスケジューリングを行う機能部である。
【0020】
アプリ140は、生産的な役割や制御を行うOS150上で実行される応用ソフトウェアのプログラムである。アプリ140は、通常、複数存在し、OS150が管理するプロセス単位で実行される。
【0021】
拡張スケジュールイベント選定部101は、後述する拡張スケジュールプロセス部130を起床(Wake Up)するために指定するOS150のカーネルのOS内部処理関数を選定する機能部である。
【0022】
拡張スケジュールイベントフック処理作成部110は、後述の拡張スケジュールイベントフック処理プログラム152を作成する機能部である。
【0023】
拡張スケジュールイベントフック処理プログラム152は、後述の拡張スケジュールイベントフック処理テンプレート201に基づいて作成されるプログラムであり、後述の拡張スケジュールプロセス部130を起床するイベントとして選定された内部関数によるOSプロセスが、OS150上で実行されるときに、拡張スケジュールの実行のためのイベントのフック(取り掛かり)として実行されるプログラムである。拡張スケジュールイベントフック処理プログラム152は、OS150の内部処理として挿入され、その挿入の仕組みは、例えば、Linux(登録商標)の場合のFtraceのように、OS150が備えている機能を使用してもよい。OS150に挿入された拡張スケジュールイベントフック処理プログラム152は、後述する拡張スケジュールプロセス起床部153を呼び出し、拡張スケジュールプロセス部130の処理に必要なパラメータを、後述の拡張スケジュールイベント情報テーブル202に格納する。
【0024】
拡張スケジュール処理内容プログラム登録部120は、後述の拡張スケジュール処理内容プログラム121を登録する機能部である。
【0025】
拡張スケジュール処理内容プログラム121は、拡張スケジュールのプロセスの機能を実現するプログラムである。この拡張スケジュール処理内容プログラム121はユーザが作成したものであり、拡張スケジュールイベント選定部101で選定したOS150のカーネル内部処理関数の実行の延長で実行したい処理を実現するプログラムである。また、拡張スケジュール処理内容プログラム121は、通常、複数、存在してもよく、ユーザの設定に基づいて、拡張スケジュール処理内容プログラム登録部120により、後述の拡張スケジュール管理テーブル200に登録される。
【0026】
拡張スケジュールプロセス起床部153は、拡張スケジュールプロセス部130を起床させる機能部である。拡張スケジュールプロセス起床部153は、OS150の内部モジュールとして拡張スケジュールプロセス部130の初期化時にOS150にロードされる。拡張スケジュールプロセス起床部153のロードは、OS150が備えている機能を使用してもよい。
【0027】
拡張スケジュールプロセス部130は、後述の拡張スケジュールイベント情報テーブル202で設定されたパラメータを使い、後述の拡張スケジュール管理テーブル200に登録されている拡張スケジュール処理内容プログラム121を実行する機能部である。
【0028】
記憶部160は、プロセススケジュール方法を実現するためのデータを記憶する機能部である。
記憶部160には、拡張スケジュール管理テーブル200、拡張スケジュールイベントフック処理テンプレート201、拡張スケジュールイベント情報テーブル202が保持される。
【0029】
なお、各テーブルの詳細は、後に説明する。
【0030】
次に、
図2を用いて、本発明のプロセススケジュール方法が適用される情報処理装置のハードウェア・ソフトウェア構成について説明する。
本発明のプロセススケジュール方法が適用される情報処理装置100は、
図1に示されるように、ハードウェア構成は、例えば、
図2に示されるパーソナルコンピュータのような一般的な情報処理装置で実現される。
【0031】
情報処理装置100は、CPU(Central Processing Unit)302、主記憶装置304、ネットワークI/F(InterFace)306、表示I/F308、入出力I/F310、補助記憶I/F312が、バスにより結合された形態になっている。
【0032】
CPU302は、情報処理装置100の各部を制御し、主記憶装置304に必要なプログラムをロードして実行する。
【0033】
主記憶装置304は、通常、RAMなどの揮発メモリで構成され、CPU302が実行するプログラム、参照するデータが記憶される。
【0034】
ネットワークI/F306は、ネットワーク5と接続するためのインタフェースである。
【0035】
表示I/F308は、LCD(Liquid Crystal Display)などの表示装置320を接続するためのインタフェースである。
【0036】
入出力I/F310は、入出力装置を接続するためのインタフェースである。
図2の例では、キーボード330とポインティングデバイスのマウス332が接続されている。
【0037】
補助記憶I/F312は、HDD(Hard Disk Drive)350やSSD(Solid State Drive)などの補助記憶装置を接続するためのインタフェースである。
【0038】
HDD350は、大容量の記憶容量を有しており、本実施形態を実行するためのプログラムが格納されている。情報処理装置100には、拡張スケジュールイベント選定プログラム361、拡張スケジュールイベントフック処理作成プログラム362、拡張スケジュール処理内容プログラム登録プログラム363、拡張スケジュール処理内容プログラム121、拡張スケジュールプロセスプログラム364がインストールされている。
【0039】
拡張スケジュールイベント選定プログラム361、拡張スケジュールイベントフック処理作成プログラム362、拡張スケジュール処理内容プログラム登録プログラム363、拡張スケジュールプロセスプログラム364は、それぞれ拡張スケジュールイベント選定部101、拡張スケジュールイベントフック処理作成部110、拡張スケジュール処理内容プログラム登録部120、拡張スケジュールプロセス部130の機能を実現するプログラムである。
【0040】
また、情報処理装置100には、一般的な応用プログラムとして、アプリ140と、基本ソフトウェアとしてのOS150がインストールされている。
【0041】
また、OS150のプログラムとして、スケジュールプログラム、拡張スケジュールイベントフック処理プログラム152、拡張スケジュールプロセス起床プログラムを備えている(省略)。スケジュールプログラム、拡張スケジュールプロセス起床プログラムは、それぞれスケジュール部151、拡張スケジュールプロセス起床部153の機能を実現するプログラムである。拡張スケジュールイベントフック処理プログラム152は、既に説明したように、OS150のプログラムとして埋め込まれている。
【0042】
次に、
図3ないし
図5を用いて本発明のプロセススケジュール方法に用いられるデータ構造について説明する。
【0043】
拡張スケジュール管理テーブル200は、拡張スケジュールに関する情報を管理するテーブルであり、
図3に示されるように、拡張スケジュールイベント識別子200a、イベントフック識別子200b、拡張スケジュール処理内容プログラム識別子200cの各フィールドを有する。
【0044】
拡張スケジュールイベント識別子200aには、OSとは別個に定義する拡張スケジュールに関するイベント識別子を一意に特定するための識別子が格納される。拡張スケジュールイベント識別子は、例えば、拡張スケジュールイベント選定部101で選定されたOS150のカーネルのOS内部処理関数と対応付けて作成される。
【0045】
イベントフック識別子200bには、拡張スケジュールイベントフック処理作成部110で作成される拡張スケジュールイベントフック処理プログラム152の識別子が格納される。
【0046】
拡張スケジュール処理内容プログラム識別子200cには、OS150のスケジュール部22の延長としての拡張スケジュールに関するプロセスを実行するための拡張スケジュール処理内容プログラム121を一意に特定するための識別子が格納される。
【0047】
拡張スケジュールイベントフック処理テンプレート201は、拡張スケジュールイベントフック処理プログラム152のテンプレートであり、
図4に示されるように、関数の形態で、パラメータ設定処理文201a、拡張スケジュールプロセス起床処理呼出文201bからなる。
【0048】
パラメータ設定処理文201aは、OS150のカーネル内部処理関数で使用されるパラメータを設定する処理文である。
図4に示される例では、OS150のカーネル内部処理関数で使用されるパラメータとして、拡張スケジュール管理テーブル200に格納されている拡張スケジュールイベント識別子を、PARM0に設定している。
【0049】
拡張スケジュールプロセス起床処理呼出文201bは、拡張スケジュールプロセス起床部153の機能を実現するための拡張スケジュールプロセス起床関数をCALLする処理文である。拡張スケジュールプロセス起床関数には、パラメータとして、PARM0,PARM1,PARM2,…のようなパラメータが渡される。ここで、PARM0は、上記のパラメータ設定処理文201aで設定されたパラメータであり、PARM1,PARM2,…は、OS150のKernelから渡され、拡張スケジュールイベントで用いられパラメータである。
【0050】
本テンプレートは、拡張スケジュールイベントフック処理作成部110で読み込まれ、これを利用して、拡張スケジュールイベントフック処理プログラム152が作成される。
【0051】
拡張スケジュールイベント情報テーブル202は、拡張スケジュールイベントのための情報が格納されるテーブルであり、
図5に示されるように、拡張スケジュールイベント識別子202a、イベントフックパラメータ202bの各フィールドからなる。
【0052】
拡張スケジュールイベント識別子202aは、拡張スケジュールイベントを一意に識別する識別子であり、
図3の拡張スケジュール管理テーブル200の拡張スケジュールイベント識別子200aとリンクするものである。拡張スケジュールイベント識別子202aの値は、拡張スケジュールイベントフック処理プログラム152から渡される拡張スケジュールイベント識別子(
図4のPARM0)を拡張スケジュールプロセス起床部153が設定する。
【0053】
イベントフックパラメータ情報202bは、拡張スケジュールイベントフック処理プログラム152から渡され、拡張スケジュールイベントとして使用されるOS150のカーネル内部処理関数から渡されたパラメータ(
図4のPARM1,PARM2,…)である。
【0054】
次に、
図6を用いて本実施形態のプロセススケジュール方法の概要について説明する。
図6は、OSスケジュールと拡張スケジュールの関係の概要を示した図である。
先ず、OS150では、内部のスケジュール処理S01により、OSプロセス、アプリ実行によるユーザプロセスがスケジューリングされて、実行される(S01)。
【0055】
ユーザがOS内部処理関数に、拡張スケジュールイベントフック処理プログラム152を埋め込んでいるときに、該当するOSプロセスからスケジュールイベントフック処理プログラムによる拡張スケジュールイベントフック処理が実行される(S02)。
【0056】
拡張スケジュールイベントフック処理では、拡張スケジュールプロセス起床処理が行われ、拡張スケジュールプロセス部により起床通知が行われる(S11)。
【0057】
これを受けて、拡張スケジュールプロセス部による拡張スケジュール処理が行われ(S12)、拡張スケジュール処理内容プログラム実行によるプロセスがスケジューリングされて実行される。拡張スケジュールプロセス処理は、すべてのアプリ140によるプロセスより実行優先度を高く設定しておく。
【0058】
上記のように、OS固有のプロセススケジューリングの外に、ユーザがプロセスの内容と実行タイミングを定義可能な拡張スケジューリング機能を設けることより、特定のOS内部処理の延長ですべてのアプリ140によるプロセスが動作する前にユーザ側に処理したい処理をユーザが拡張スケジュール処理内容プログラム121を記述し、その実行プロセスを設定することが可能である。特定のOS内部処理時は、OSの保護モードの機能により、すべてのアプリ140によるプロセスが動作しないことが保証される。その処理の延長で実行される拡張スケジュールイベントフック処理プログラム152によるプロセスもOS内部で処理されるため、すべてのアプリ140によるプロセスが動作しないことが保証される。さらに、拡張スケジュールイベントフック処理プログラム152によるプロセスから呼び出される拡張スケジュールプロセス起床処理も同様にOS内部処理であるため、すべてのアプリ140によるプロセスが動作しないことが保証される。拡張スケジュールプロセス起床処理により、拡張スケジュールイベント情報テーブル202にパラメータが設定され、次に動作されるプロセスがOSのスケジュール処理によって選定される。拡張スケジュールプロセス処理は、すべてのアプリ140によるプロセスより実行優先度を高く設定しておく。そのため、拡張スケジュールプロセス部130が処理を終える前には、すべてのアプリ140によるプロセスが動作されないことが保証できる。そのため、特定の一つのアプリ140によるプロセスの異常が発生した場合、その異常対策処理としてユーザ定義の拡張スケジュール処理内容プログラム121を残りのアプリ140によるプロセスが動作する前に実行することが可能である。すなわち、OS150のスケジューリングの延長としての本発明の拡張スケジューリングユーザ設定の処理で実行することが可能となる。アプリによるプロセスに異常がある場合、Linux(登録商標)ではOS内部処理として例外処理関数が実行される。その例外処理関数を拡張スケジュールのイベントとして選定してその異常時に、システムのリブートや異常発生アプリ以外のアプリの実行をさせる内容を拡張スケジュール処理内容プログラムとしてユーザは柔軟に設定可能である。
【0059】
次に、
図7ないし
図12を用いて本実施形態のプロセススケジュール方法の処理について説明する。
これは、拡張スケジュールイベント選定部101により実行される処理である。
【0060】
先ず、情報処理装置100の拡張スケジュールイベント選定部101のOS内部処理関数CallGraph管理部102は、OS内部処理関数CallGraph画面を表示する(S101)。OS内部処理関数CallGraph画面のユーザインタフェースは、後に詳説する。
【0061】
次に、ユーザは、OS内部処理関数CallGraph画面に表示されるOS内部処理関数を指定し、拡張スケジュールを実行するためのフックポイントを入力する(S102)。
【0062】
次に、拡張スケジュールイベント選定部101は、拡張スケジュールを一意に識別するための拡張スケジュールイベント識別子を生成し、拡張スケジュール管理テーブル200に設定する(S103)。
【0063】
次に、拡張スケジュールイベント選定部101は、入力されたフックポイントに対応するイベントフック識別子を生成し、拡張スケジュール管理テーブル200に設定する(S104)。
【0064】
次に、
図8を用いて拡張スケジュールイベントフック処理作成処理について説明する。
これは、
図7に示した拡張スケジュールイベント選定処理の後に実行される処理であり、拡張スケジュールイベントフック処理作成部110により実行される処理である。
【0065】
先ず、情報処理装置100の拡張スケジュールイベントフック処理作成部110は、拡張スケジュールイベントフック処理テンプレート201を読み込む(S201)。
【0066】
次に、拡張スケジュールイベントフック処理作成部110は、拡張スケジュールイベントフックプログラムのPARM0に、拡張スケジュール管理テーブル200から拡張スケジュールイベント識別子を読み込む(S202)。
【0067】
次に、拡張スケジュールイベントフック処理作成部110は、読み込んだ拡張スケジュールイベント識別子を代入するパラメータ設定処理文201aのコードを生成する(S203)。
【0068】
次に、拡張スケジュールイベントフック処理作成部110は、拡張スケジュールイベント識別子に関するイベントフック識別子と拡張スケジュールイベントフックプログラムを対応付け、入力されたフックポイントに対応するOS内部処理関数に、拡張スケジュールイベントフックプログラムを挿入する(S204)。
【0069】
イベントフック識別子と拡張スケジュールイベントフックプログラムを対応付けは、例えば、拡張スケジュールイベントフックプログラムの関数名をイベントフック識別子とすることにより行うことができる(
図3、
図4の例では、テンプレートのHOOKFUNC-♯から、イベントフック識別子として、HOOKFUNC-1~HOOKFUNC-nを生成している)。拡張スケジュールイベントフックプログラムを挿入するとは、例えば、Linux(登録商標)のFtraceユーティリティのように、OS150のカーネルのバイナリコードの対応する箇所にプログラムの実行コードを埋め込むことである。
【0070】
次に、
図9を用いて拡張スケジュールイベントフック処理について説明する。
これは、
図8に示した拡張スケジュールイベントフック処理作成処理の後に実行される処理であり、拡張スケジュールイベントフック処理内容プログラム152により実行される処理である。
【0071】
先ず、拡張スケジュールイベントフック処理内容プログラム152は、PARM0に、拡張スケジュールイベント識別子を設定する(S301)。このためのパラメータ設定処理文201aのコードは、
図8のS203で生成されている。
【0072】
次に、拡張スケジュールイベントフック処理内容プログラム152は、呼び出されたOS内部処理関数のパラメータを、順に、PARM1,PARM2,…に設定する(S302)。
【0073】
次に、拡張スケジュールイベントフック処理内容プログラム152は、PARM0,PARM1,PARM2,…のパラメータを渡して、拡張スケジュールプロセス起床処理を呼び出す(S303)。
【0074】
次に、
図10を用いて拡張スケジュール処理内容プログラム登録処理について説明する。
これは、拡張スケジュール処理内容プログラム登録部120によって実行される処理である。
【0075】
先ず、ユーザは、情報処理装置100に、拡張スケジュール処理内容プログラム121を指定し、かつ、拡張スケジュール処理内容プログラム121を実行する拡張スケジュールイベントを識別するための拡張スケジュールイベント識別子を入力する(S401)。
【0076】
次に、情報処理装置100の拡張スケジュール処理内容プログラム登録部120は、入力された拡張スケジュールイベント識別子に対応し、拡張スケジュール処理内容プログラム121を一意に識別する拡張スケジュール処理内容プログラム識別子を、拡張スケジュール管理テーブル200の拡張スケジュール処理内容プログラム識別子200cに設定する(S402)。拡張スケジュール処理内容プログラム識別子は、例えば、実行ファイル名やFucntion pointerなどのプログラムを一意に識別できるものであればよい。
【0077】
次に、
図11を用いて実施形態1に係る拡張スケジュール起床処理について説明する。
これは、拡張スケジュール起床処理部153によって実行されるプログラムであり、
図8の拡張スケジュールイベントフック処理作成処理により、OS内部処理関数に挿入された拡張スケジュールイベントフックプログラムを実行することにより呼び出される処理である。
【0078】
先ず、情報処理装置100の拡張スケジュール起床処理部153は、呼びされたときのパラメータとして、PARM0,PARM1,PARM2,…を読み込む(
図4参照)(S501)。
【0079】
次に、拡張スケジュール起床処理部153は、拡張スケジュールイベント情報テーブル202の拡張スケジュールイベント識別子202aにPARM0、イベントフックパラメータ202bに、PARM1,PARM2,…を代入する(S502)。PARM0は、拡張スケジュールイベントフックプログラムにより代入された拡張スケジュールイベント識別子であり、PARM1,PARM2,…は、OS内部処理関数より渡されたそれ以降のパラメータである。
【0080】
次に、拡張スケジュール起床処理部153は、OS150のスケジューラ部151に、拡張スケジュールプロセス処理を、他のアプリ140によるプロセスより高い優先度に設定する(S503)。
【0081】
次に、拡張スケジュール起床処理部153は、拡張スケジュールプロセス部130に、起動する拡張スケジュールイベント識別子を渡して、起床通知を行う(S504)。
【0082】
拡張スケジュール起床処理部153は、カーネル内部処理として動作するため、この処理が終了するまで、他アプリ140によるプロセスは動作しない。拡張スケジュールプロセス部130に起床通知は、OS内部処理関数から最初に拡張スケジュールプロセス処理を実行するために通知するものである。
【0083】
さらに、拡張スケジュールプロセスは、他アプリよるプロセスより、高い優先度で動作することにし、他アプリによるプロセスの動作前に必ず拡張スケジュールプロセス処理を実行することを保証する。
【0084】
次に、
図12を用いて実施形態1に係る拡張スケジュールプロセス処理について説明する。
これは、拡張スケジュールプロセス部130によって実行される処理であり、拡張スケジュール起床処理部153に起床通知されることを契機して実行される処理である。
【0085】
先ず、情報処理装置100の拡張スケジュールプロセス部130は、拡張スケジュールプロセス起床部153から起床通知があるか否かを判定し(S601)、起床通知があったときには(S601:YES)、S602に行き、起床通知がないときには(S601:NO)、waitする(S610)。
【0086】
拡張スケジュールプロセス部130は、拡張スケジュールプロセス起床部153から起床通知があったときには、拡張スケジュールプロセス起床部153から渡された拡張イベント識別子をキーにして、拡張スケジュールイベント情報テーブル202を検索し、イベントフックパラメータを取得する(S602)。
【0087】
次に、拡張スケジュールプロセス部130は、拡張スケジュールプロセス起床部153から渡された拡張イベント識別子をキーにして、拡張スケジュール管理テーブル200を検索し、拡張スケジュール処理内容プログラム識別子を取得する(S603)。
【0088】
次に、拡張スケジュールプロセス部130は、S602で取得したイベントフックパラメータを渡して、拡張イベント識別子に該当する拡張スケジュール処理内容プログラム121によるプロセスを起動する(S604)。
【0089】
次に、
図13を用いてOS内部処理関数CallGraph画面のユーザインタフェースについて説明する。
図13は、OS内部処理関数CallGraph画面のユーザインタフェースを説明する図である。
【0090】
OS内部処理関数CallGraph画面600は、
図13に示されるように、OS150のカーネルで実行されるOS内部処理関数の処理の流れと関数呼び出し関係を表示する画面である。図中の黒丸601が関数Callを行う点である。黒丸601が交差する場所が二つ以上OS内部処理関数から同じ関数に対して、関数Callを行うことを示している。
【0091】
OS150にフックポイントを埋め込み、拡張スケジューリングを行う際には、スケジュール用イベント多発を防ぐために、スケジュールイベントとして使いたいOSカーネル処理を厳選する必要がある。そのため、ユーザは、OS内部処理関数CallGraph画面600により、複数のカーネル処理から呼び出される共通部分が少ないOS内部処理関数を選択することが望ましい。
【0092】
ユーザは、そのCallGraphから拡張スケジュールイベントのフックポイントとして使いたいOS150のカーネルで実行されるOS内部処理関数を選定する。選定の際には、他のOS内部処理関数と重複しないOS内部処理関数を選定する。それによって拡張スケジュールプロセス処理が行われる回数を抑制することが可能である。
【0093】
このための
図7のS102の拡張スケジュールを実行するためのフックポイントを入力する処理では、例えば、該当するOS内部処理関数表示602を指定し、マウスを右クリックし、コンテクストメニュー603を表示して、「フックポイント指定」のコマンドを入力する。
【0094】
このとき、拡張スケジュールイベント識別子は、システムがOS内部処理関数名などより自動生成してもよいし、ダイアローグ(図示せず)などによりユーザに入力させるようにしてもよい。
【0095】
以上、本実施形態では、OSのカーネルで実行される内部処理関数に、フックポイントを設定して、起動のタイミングと処理内容を定義し、他のアプリより優先度の高い拡張スケジュールプロセスを起動することにより、OSのプロセスのスケジューリングとは別のあらたなプロセスの拡張スケジューリングを行うことができる。
【0096】
したがって、これによれば、制御アプリのスケジューラが汎用OS上でも実現可能となり、そのスケジュールする時点とそのスケジュール内容をユーザが変更しうるプロセスのスケジューリングを行うことが可能になる。
【0097】
例えば、特定の一つのアプリに異常が発生した場合、その異常対策処理をユーザ定義の拡張スケジュール処理内容として登録すれば、残りのアプリが動作する前にユーザ定義の処理を実行することが可能である。
【0098】
〔実施形態2〕
以下、本発明に係る実施形態2を、
図14ないし
図18Bを用いて説明する。
【0099】
実施形態1では、OSのスケジュールの外に、起動タイミングと処理する内容を付け加えてユーザが定義可能な拡張スケジュールを行うことのできるプロセススケジュール方法について説明した。
【0100】
本実施形態は、実施形態1と同様の思想のプロセススケジュール方法であるが、プロセッサとして、複数のCPUコアを有する情報処理装置を前提とすることが異なっている。
【0101】
すなわち、実施形態1の情報処理装置100では、一つのCPU300がOS150とアプリ140を実行することとしていたが、本実施形態では、CPU300は、複数のCPUコアを有しており、それらの一つ一つについて、個別にプロセスを実行することが可能であるとする。そして、それらのCPUコアに対応して、それぞれの拡張スケジュールプロセス部を設けて、各々がOS150とは、別個の拡張スケジュールを実行することを可能とするものである。
【0102】
先ず、
図14および
図15を用いて実施形態2に係るプロセススケジュール方法が適用される情報処理装置の構成について説明する。
【0103】
本発明のプロセススケジュール方法が適用される情報処理装置100は、機能構成として、
図1に示した実施形態1とほぼ同様であるが、CPUコア301(後述)ごとに拡張スケジュールプロセス部130(図では、130a、130b、…と表記)が複数あることが異なっている。そして、実施形態1と同様に、各CPUコア301で実行されるアプリ140より高い優先度で拡張スケジュールプロセス部130の処理が実行される。
【0104】
拡張スケジュールプロセス起床部22は、実施形態1と異なり、各CPUコア301で実行されるすべての拡張スケジュールプロセス部130を起床させる。
【0105】
また、記憶部160には、複数の拡張スケジュールプロセス部130のスケジューリングを調整するためのスケジュール排他フラグ210を有する。スケジュール排他フラグ210は、システムでただ一つ存在する。スケジュール排他フラグ210の設定の詳細は、後に説明する。
【0106】
また、拡張スケジュールイベント情報テーブル202の形式が異なっている(詳細は、後述)。
【0107】
また、プロセススケジュール方法が適用される情報処理装置100は、ハードウェア構成として、
図2に示した実施形態1とほぼ同様であるが、
図15に示されるように、CPU300の中に、各々が個別にプロセスを実行可能な複数のCPUコア301(図では、301a、301b、…と表記)を有する。
【0108】
次に、
図16を用いて本発明のプロセススケジュール方法に用いられるデータ構造について説明する。
本実施形態で用いられるテーブルは、実施形態1と比較して拡張スケジュールイベント情報テーブル202のみ異なっている。
【0109】
本実施形態の拡張スケジュールイベント情報テーブル202は、
図16に示されるように、拡張スケジュールイベント識別子202a、イベントフックパラメータ202b、実行CPUコア識別子202cの各フィールドからなり、
図5に示した実施形態1の拡張スケジュールイベント情報テーブル202に実行CPUコア識別子202cが付け加わっていることのみ異なっている。
【0110】
実行CPUコア識別子202cには、該当する拡張スケジュールイベント識別子に対応する拡張スケジュールのプロセスを実行するCPUコア301を一意に識別する識別子が格納される。これにより指定されたCPUコア301が、対応する拡張スケジュールプロセス部の処理と、拡張スケジュール処理内容プログラム121を走らせることによりスケジューリングされたプロセスを実行する。
【0111】
次に、
図17および
図18A、
図18Bを用いて本実施形態のプロセススケジュール方法の処理について説明する。
本実施形態では、実施形態1に示したプロセススケジュール方法と比較して、拡張スケジュール起床処理と拡張スケジュールプロセス処理のみ異なっている。
【0112】
先ず、
図17を用いて実施形態2に係る拡張スケジュール起床処理を説明する。
先ず、情報処理装置100の拡張スケジュール起床処理部153は、呼びされたときのパラメータとして、PARM0,PARM1,PARM2,…を読み込む(
図4参照)(S701)。
【0113】
次に、拡張スケジュール起床処理部153は、拡張スケジュールイベント情報テーブル202の拡張スケジュールイベント識別子202aにPARM0、イベントフックパラメータ202bに、PARM1,PARM2,…を代入する(S702)。PARM0は、拡張スケジュールイベントフックプログラムにより代入された拡張スケジュールイベント識別子であり、PARM1,PARM2,…は、OS内部処理関数より渡されたそれ以降のパラメータである。
【0114】
次に、拡張スケジュール起床処理部153は、OS150のスケジューラ部151に、拡張スケジュールプロセス処理を、他のアプリによるプロセスより高い優先度に設定する(S703)。
【0115】
次に、拡張スケジュール起床処理部153は、システムコールにより自分が実行されているCPUコアのCPUコア識別子を取得し、拡張スケジュールイベント情報テーブル202の実行CPUコア識別子202cに設定する(S704)。
【0116】
次に、拡張スケジュール起床処理部153は、全ての拡張スケジュールプロセス部130に、起動する拡張スケジュールイベント識別子を渡して、起床通知を行う(S705)。
【0117】
次に、
図18A、
図18Bを用いて実施形態2に係る拡張スケジュールプロセス処理について説明する。
先ず、情報処理装置100の拡張スケジュールプロセス部130は、拡張スケジュールプロセス起床部153から起床通知があるか否かを判定し(
図18AのS801)、起床通知があったときには(S801:YES)、S802に行き、起床通知がないときには(S801:NO)、waitする(S820)。
【0118】
拡張スケジュールプロセス部130は、拡張スケジュールプロセス起床部153から起床通知があったときには、拡張スケジュールプロセス起床部153から渡された拡張イベント識別子をキーにして、拡張スケジュールイベント情報テーブル202より、実行CPUコア識別子を読み込む(S802)
次に、拡張スケジュールプロセス部130は、システムコールにより自分が実行されているCPUコアのCPUコア識別子を取得する(S803)。
【0119】
そして、拡張スケジュールプロセス部130は、自分が実行されているCPUコアのCPUコア識別子と実行CPUコア識別子を比較し(S804)、一致するときには(S804:YES)、S805に行き、一致しないときには(S804:NO)、S801に戻る。
【0120】
自分が実行されているCPUコアのCPUコア識別子と実行CPUコア識別子が一致するときには、拡張スケジュール起床処理部153は、スケジュール排他フラグ210を参照し、ONかOFFかを判定する(S805)。
【0121】
スケジュール排他フラグ210がONのときには、他のCPUコアによりスケジューリングされており、そのスケジューリングによるプロセスが実行されていることを意味し、スケジュール排他フラグ210がOFFのときには、他のCPUコアによりスケジューリングがされておらず、新たにスケジューリングが可能であることを意味する。なお、スケジュール排他フラグ210は、システムの立ち上げ時には、OFFに初期化されることにする。
【0122】
スケジュール排他フラグ210がONのときには(S805:ON)、OFFになるまで、waitする(S830)。
【0123】
スケジュール排他フラグ210がOFFのときには(S805:OFF)、
図18BのS806に行く。
【0124】
スケジュール排他フラグ210がOFFのときには、拡張スケジュールプロセス部130は、スケジュール排他フラグ210をONに設定する(S806)。
【0125】
次に、拡張スケジュールプロセス部130は、拡張スケジュールプロセス起床部153から渡された拡張イベント識別子をキーにして、拡張スケジュールイベント情報テーブル202を検索し、イベントフックパラメータを取得する(S807)。
【0126】
次に、拡張スケジュールプロセス部130は、拡張スケジュールプロセス起床部153から渡された拡張イベント識別子をキーにして、拡張スケジュール管理テーブル200を検索し、拡張スケジュール処理内容プログラム識別子を取得する(S808)。
【0127】
次に、拡張スケジュールプロセス部130は、S802で取得したイベントフックパラメータを渡して、拡張イベント識別子に該当する拡張スケジュール処理内容プログラムによるプロセスを起動する(S809)。
【0128】
次に、拡張スケジュールプロセス部130は、スケジュール排他フラグ210をOFFに設定する(S810)。
【0129】
本実施形態によれば、マルチコアシステムにおいて、各々のCPUごとに、起動のタイミングと処理内容を定義して、各々がOS150とは、別個の拡張スケジュールを実行することができる。
【符号の説明】
【0130】
100…情報処理装置、101…拡張スケジュールイベント選定部、102…OS内部処理関数CallGraph管理部、110…拡張スケジュールイベントフック処理作成部、120…拡張スケジュール処理内容プログラム登録部、121…拡張スケジュール処理内容プログラム、130…拡張スケジュールプロセス部、140…アプリ、150…OS(Operating System)、151…スケジュール部、152…拡張スケジュールイベントフック処理プログラム、153…拡張スケジュールプロセス起床部、160…記憶部、200…拡張スケジュール管理テーブル、201…拡張スケジュールイベントフック処理テンプレート、202…拡張スケジュールイベント情報テーブル、210…スケジュール排他フラグ