JP6462521B2 - 通常部の故障が安全部へ伝播することを防止するapi及びその処理部 - Google Patents

通常部の故障が安全部へ伝播することを防止するapi及びその処理部 Download PDF

Info

Publication number
JP6462521B2
JP6462521B2 JP2015151444A JP2015151444A JP6462521B2 JP 6462521 B2 JP6462521 B2 JP 6462521B2 JP 2015151444 A JP2015151444 A JP 2015151444A JP 2015151444 A JP2015151444 A JP 2015151444A JP 6462521 B2 JP6462521 B2 JP 6462521B2
Authority
JP
Japan
Prior art keywords
program
safety
api
normal
task
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.)
Active
Application number
JP2015151444A
Other languages
English (en)
Other versions
JP2017033208A (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.)
Hitachi Solutions Technology Ltd
Original Assignee
Hitachi ULSI Systems Co Ltd
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 Hitachi ULSI Systems Co Ltd filed Critical Hitachi ULSI Systems Co Ltd
Priority to JP2015151444A priority Critical patent/JP6462521B2/ja
Publication of JP2017033208A publication Critical patent/JP2017033208A/ja
Application granted granted Critical
Publication of JP6462521B2 publication Critical patent/JP6462521B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、オペレーティングシステム(OS)におけるアプリケーションプログラミングインタフェース(API)に関する。
コンピュータシステムのOSには、プログラムを並行に実行する機能を備えるものがある。並行実行のプログラムの単位は「タスク」と呼ばれる。タスクを並行に実行する機能を備えるオペレーティングシステムは、特定の動作後、あるいは、一定時間間隔で、次に実行するタスクを選択し、実行権を与える。次に実行するタスクを選択し、実行権を与える動作は、「スケジューリング」と呼ばれる。実行権を与えられたタスクは、次のスケジューリングが発生するまで、タスク毎にあらかじめ決められた処理を実行する。
いくつかのタスクは、リアルタイム性を必要とする。リアルタイム性とは、他のタスクに実行を妨げられずに、特定のイベントの後、すぐに処理を実行することを指す。例えば、車のブレーキを実行するタスクは、ブレーキペダルを踏むというイベント後、すぐにブレーキをかける必要があるため、リアルタイム性を必要とする。リアルタイム性を必要とするタスクは、他のタスクよりも優先的に実行される必要がある。特定のタスクを優先的に動作させるために、各タスクに優先度をつけ、優先度に応じてタスクをスケジューリングする方法がある。
特許文献1で開示されている方法は、起動されたタスクの優先度に応じてタスクの実行可能状態キューを制御する。起動されたタスクが実行中のタスクの優先度よりも低いか、もしくは等しければ起動されたタスクを実行可能状態キューの最後尾につなぎ、起動されたタスクの優先度が実行中のタスクの優先度よりも高ければ実行中のタスクを中断して起動されたタスクを実行可能状態キューの先頭につなぐ。
その際、中断されたタスクに巡回スケジュール抑止フラグが設定されていれば、実行中のタスクを実行可能状態キューの先頭につなぎ、設定されていなければ実行可能状態キューの最後尾につなぐ。スケジューラは実行可能状態キューの先頭にあるタスクをキューから取り外して実行させる。
特開平3-100831
タスクを安全タスクと通常タスクに分類する場合を考える。安全タスクは人命や環境、経済に係るような安全性を必要とする処理を実行する。このような処理を安全処理と呼ぶ。通常タスクはそれ以外の処理を実行する。この処理を通常処理と呼ぶ。安全処理は、安全性に関わるため、安全性を維持できないような通常処理からの時間的あるいは空間的な影響を受けてはならない。
特許文献1の方法は、タスクの優先度および特定のフラグで、実行可能状態キューを制御している。しかし、タスクの種別やそのタスクが操作するプログラムの種別によるスケジューリングの変更を考慮していない。そのため、安全タスクの能動的なプログラム操作により、通常タスクあるいは通常プログラムの故障が安全タスクに伝播する恐れがある。
例えば、タスクが操作するプログラムを安全部と通常部に分類する。安全タスクが通常部のプログラムを操作対象とするとき、そのプログラムを操作できるようになるまで安全タスクが待つならば、安全タスクが通常部のプログラムによって実行を妨げられることになる。タスクの起動時に実行可能状態キューを制御する特許文献1の方法では、タスク種別と、その操作対象プログラムの種別によって、スケジューリングを変更することは難しい。
各タスクを安全タスクと通常タスクのどちらかに分類する。OSは、タスク種別ごとに異なるトラップ番号あるいは異なるライブラリを持つAPI、および、タスク種別ごとのAPI処理部を持つ。ここでトラップとは、プログラムの処理中に発生する例外を指す。トラップ番号とは、トラップに付けられた番号であり、発生したトラップの種別を識別するために使われる。トラップ番号あるいはライブラリがタスク種別ごとに異なるため、呼び出されるAPI処理部もタスク種別によって異なる。そのため、OSはAPIを呼び出したタスクを調べることなく、そのタスクのタスク種別を特定できる。各タスクはAPIを介して、OSが管理するプログラムを操作することができる。タスクが操作するプログラムは、プログラム種別を特定するためのフラグを持つ。各API処理部は、呼び出し元タスクが操作しようとしているプログラムの種別を、そのフラグを見て特定する。その後、各API処理部は、呼び出し元のタスク種別と操作対象となるプログラムの種別に応じたスケジューリングを行う。
タスク種別と操作対象プログラムの種別に応じてスケジューリングを変更することにより、安全タスクの能動的なプログラム操作による、通常タスク故障あるいは通常プログラム故障の安全タスクへの伝播を防ぐことができる
本発明の代表的な実施形態の特徴を示すソフトウェアモジュール図。 本発明のハードウェア構成の一例を示すブロック図。 実施例1における安全API処理部111の一例を示すソフトウェアモジュール図。 実施例1における通常API処理部112の一例を示すソフトウェアモジュール図。 実施例1における、OS110が取り扱うプログラムの一種であるセマフォの、カーネルオブジェクトコントロールブロック121の一例を示す図。 実施例1における安全API処理部111の処理の一例を示すフローチャート図。 実施例1における通常API処理部112の処理の一例を示すフローチャート図。 実施例1において、安全処理が安全部のカーネルオブジェクトを操作する場合の図6のステップ608の処理の一例を示すフローチャート図。 実施例1において、安全処理が通常部のカーネルオブジェクトを操作する場合の図6のステップ608の処理の一例を示すフローチャート図。 実施例1において、通常処理が通常部のカーネルオブジェクトを操作する場合の図8のステップ705の処理の一例を示すフローチャート図。 実施例2における安全API処理部111の一例を示すソフトウェアモジュール図。 実施例2における通常API処理部112の一例を示すソフトウェアモジュール図。 実施例2におけるOS110が取り扱うプログラムの一種であるメールボックスのカーネルオブジェクトコントロールブロック121の一例を示す図。 実施例2において、安全処理が安全部のカーネルオブジェクトを操作する場合の図6のステップ608の処理の一例を示すフローチャート図。 実施例2において、安全処理が通常部のカーネルオブジェクトを操作する場合の図7のステップ608の処理の一例を示すフローチャート図。 実施例2において、通常処理が通常部のカーネルオブジェクトを操作する場合の図7のステップ705の処理の一例を示すフローチャート図。
以下、図面を用いて本発明の実施例を説明する。
図1は、本発明の代表的な実施形態の特徴を示すソフトウェアモジュール図であり、アプリケーション100とOS110とコントロールブロック120から構成される。アプリケーション100は少なくとも1つの安全ドメイン101と、少なくとも1つの通常ドメインを持つ。安全ドメイン101は少なくとも1つの安全タスク103を持つ。通常ドメイン102は少なくとも1つの通常タスク104を持つ。安全ドメイン101および安全タスク103は、安全APIの呼び出し105によって、OS110の機能を呼び出し、安全処理を行う。通常ドメイン102および通常タスク104は、通常APIの呼び出し106によってOS110の機能を呼び出し、通常処理を行う。
安全APIと通常APIは、異なるトラップ番号あるいは異なるライブラリによって実現する。トラップ番号あるいはライブラリが異なるため、OS110は、APIが呼び出された時点で、そのAPI処理が安全処理か通常処理かを判定できる。安全タスクが通常処理を実行するのを防止するため、安全タスクは安全APIのみ呼び出せ、通常APIを呼び出せないように実装する。通常タスクが安全処理を実行するのを防止するため、通常タスクは通常APIのみ呼び出せ、安全APIを呼び出せないように実装する。この実装の実現方法の一例は、コンパイル時に誤ったAPI呼び出しを検出すること、である。
OS110は安全APIを処理する安全API処理部111と、通常APIを処理する通常API処理部112と、ユーザ定義基本処理部113と基本処理部114と、実行可能状態キュー115と、タイマイベントキュー116を持つ。安全API処理部111は、安全APIに関連する安全処理を行う。通常API処理部112は、通常APIに関連する通常処理を行う。安全API処理部111と通常API処理部112は、APIを呼び出したタスクが操作するプログラムの種別に応じて、スケジューリングを変更する。基本処理部114はハードウェアやコントロールブロック120から得られるデータを処理する。ユーザ定義基本処理部113はOS110のユーザが定義したOSの追加機能を処理する。基本処理部114やユーザ定義基本処理部113が上記以外の処理を行うことも可能である。
実行可能状態キュー115は、実行可能状態のタスクが実行予定順に並んだキューである。実行可能状態とは、タスクの状態の1つであり、実行権を与えられればいつでも実行できる状態である。本実施例のスケジューリングでは、実行可能状態キュー115の先頭のタスクに、実行権を与える。タイマイベントキュー116は、指定された時間後に起動するタスクが時間順に並んだキューである。
コントロールブロック120は0個あるいは1個以上のカーネルオブジェクトコントロールブロック121を持つ。カーネルオブジェクトコントロールブロック121は、OS110の取り扱うプログラムに関する情報を格納する。タスクは、これらのプログラムを安全APIあるいは通常APIを介して操作する。OS110の取り扱うプログラムの実行時の単位をカーネルオブジェクトと呼ぶ。本実施例では、各カーネルオブジェクトは、安全部と通常部のどちらかに分類する。
本実施例では、安全API処理部111および通常API処理部112は、タスクが操作するカーネルオブジェクトの種別に応じてスケジューリングを変更する。本実施例における、安全処理部111が実施するスケジューリングは、次のようなスケジューリングである。安全タスク103が操作するカーネルオブジェクトが安全部の場合、安全APIを呼び出した安全タスク103は、カーネルオブジェクトを操作可能なときは操作し、操作不可能なときは時間制限付きの待ち状態に移行する。操作するカーネルオブジェクトが通常部の場合、安全APIを呼び出した安全タスク103は、操作するカーネルオブジェクトをすぐに操作可能な場合は操作し、すぐに操作不可能な場合はAPI処理を終了する。これにより、APIを呼び出した安全タスク103は、通常部のカーネルオブジェクトを操作するとき、待ち状態にならないため、通常部による時間的侵害を受けない。
本実施例における、通常API処理部112が実施するスケジューリングは、次のようなスケジューリングである。通常タスク104が操作するカーネルオブジェクトが通常部であれば、通常APIを呼び出した通常タスク104は、カーネルオブジェクトを操作可能なときは操作し、操作不可能なときは待ち状態に移行する。カーネルオブジェクトが安全部であれば、API処理を実行しない。これにより、呼び出した通常タスク104は、安全部のカーネルオブジェクトを操作しないため、安全部を時間的に侵害しない。
図2は、本発明のハードウェア構成の一例を示す図である。処理装置200は、少なくとも1つのRAM210と、少なくとも1つのROM220と、少なくとも1つのCPU230と、少なくとも1つの割込みコントローラ240と、少なくとも1つのI/O250と、0個あるいは1個以上の外部記憶装置260から構成される。
アプリケーションプログラム221は、アプリケーション100のプログラムである。OSプログラム222はOS110のプログラムである。アプリケーションプログラム221とOSプログラム222は、起動時にRAM210に展開される。アプリケーションプログラム221とOSプログラム222の機能は、CPU230によってプログラムが解釈実行されることにより実現する。
各機能を実現するプログラム等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、IC(Integrated Circuit)カード、SD(Secure Digital)カード、DVD(Digital Versatile Disc)等の記録媒体に格納されてもよい。
図3は、図1の安全API処理部111の一例を示すソフトウェアモジュール図である。安全API処理部111は、引数確認部301と、API種別確認部302と、安全判定部303と、待ち行列確認部304と、API処理部305から構成される。引数確認部301は、APIの引数に、処理範囲外の値が指定されていないか確認を行う。API種別確認部302は、呼び出されたAPIが、呼び出し元タスクを待ち状態にするようなAPIかどうかを判定する。安全判定部303は、タスクが操作するカーネルオブジェクトが安全部かを判定する。待ち行列確認部304は、APIを呼び出したタスクが操作する予定のカーネルオブジェクトを、他のタスクが待っているかどうかを判定する。API処理部305は、OS110のカーネルオブジェクトを操作するカーネルオブジェクト操作部310を持つ。本実施例において、OS110のカーネルオブジェクトは、セマフォのみである。セマフォは排他制御を実現するためのカーネルオブジェクトである。セマフォは有限の資源を持つ。資源の初期数および最大値は、セマフォが生成されたときに決定する。タスクがセマフォの獲得を試みたとき、セマフォの持つ資源数が、タスクが希望する資源数より多ければ、タスクはセマフォを獲得できる。セマフォの持つ資源数が、タスクが希望する資源数より少なければ、タスクはセマフォを獲得できない。カーネルオブジェクト操作部310は、セマフォを操作するためのセマフォ操作部311を持つ。セマフォに関するAPI処理はセマフォ操作部311が行う。
図4は、図1の通常API処理部112の一例を示すソフトウェアモジュール図である。通常API処理部112は、通常判定部401とAPI処理部402を持つ。通常判定部401は、APIが取り扱うカーネルオブジェクトが通常部のプログラムかを判定する。API処理部402は、OS110のカーネルオブジェクトを操作するカーネルオブジェクト操作部410を持つ。カーネルオブジェクト操作部410は、通常APIのためのセマフォ操作部411を持つ。
図5は、セマフォのカーネルオブジェクトコントロールブロック121の一例を示す図である。安全API処理部111および通常API処理部112は、待ち行列先頭アドレス501を調べることで、セマフォの待ち行列に並んでいるタスクの有無を判別する。セマフォを獲得できなかったタスクは、セマフォを獲得できるようになるまで、待つことができる。このような一定の条件が成立するまで待つ状態を、待ち状態と呼ぶ。セマフォを獲得するために待ち状態になったタスクは、対象のセマフォの待ち行列に並ぶ。セマフォを獲得しているタスクが資源を返却すると、待ち状態に並んでいるタスクが一つ選択され、セマフォの獲得を試みる。
カーネルオブジェクトコントロールブロック121は、カーネルオブジェクトを一意に識別するためのID502を持つ。安全フラグ503は、カーネルオブジェクトが安全部か通常部かを示す。安全フラグ503は、カーネルオブジェクト生成時にセットする。拡張情報504には、カーネルオブジェクトに関する任意の情報をセットできる。属性105は、カーネルオブジェクトの属性を表す情報である。セマフォカウント506はセマフォが持つ資源の数量を表す。タスクが希望する資源の数量がセマフォカウント506より小さい場合のみ、タスクはセマフォを獲得することができる。タスクがセマフォを獲得すると、タスクが希望した数量だけ、セマフォカウント506が減少する。セマフォカウント最大値507はセマフォカウント506の取りうる最大値である。
図6は、実施例1における安全API処理部111の処理の一例を示すフローチャート図である。タスクが安全APIを呼び出すと(S602)、安全API処理部111が安全処理を開始する。
まず、実行中のタスクが使用していたレジスタの内容をRAM210に退避する(S603)。次に、引数確認部301が、呼び出された安全APIの引数に処理対象外の値が指定されていないかを確認する(S604)。処理対象外の値が指定されている場合は、エラー処理のためにS610へ進む。引数が全て処理対象の値であれば、安全処理を続行する。
前述したように、安全タスク103は、安全部のカーネルオブジェクトを操作する場合は待ち状態になれるが、通常部のカーネルオブジェクトを操作する場合は待ち状態になれない。これを達成するために、まず、API種別確認部302が、呼び出された安全APIがタスクを待ち状態にするような処理を含むAPIかを判定する(S605)。呼び出された安全APIがタスクを待ち状態にしないAPIならば、スケジューリングは必要ないため、API処理を続行する。呼び出された安全APIがタスクを待ち状態にするAPIならば、安全判定部303が、操作するカーネルオブジェクトが安全部かを判定するために、カーネルオブジェクトの安全フラグ503を確認する(S606)。安全部のカーネルオブジェクトであれば、API処理を続行する。通常部のカーネルオブジェクトであれば、カーネルオブジェクトの操作権を待っている他のタスクの有無を調べるために、待ち行列確認部304がカーネルオブジェクトの待ち行列が空か確認する(S607)。他のタスクが待ち行列に並んでいる場合、すぐにカーネルオブジェクトを操作できないためAPI処理を終了し、エラー処理へと進む。他のタスクが待ち行列にいない場合、すぐにカーネルオブジェクトを操作できる可能性があるため、API処理を続行する。
操作するカーネルオブジェクトの待ち行列が空であった場合、API処理部305がAPI処理を実行する(S900)。API処理で、S606で判定した結果に基づいたスケジューリングを実施する。
その後、APIの返り値が処理対象外の値でないかを判定する(S608)。返り値が処理対象外の場合は、API処理に不具合があると考えられるため、処理内容を破棄し(S609)、エラー処理を実行する(S610)。引数が不正であった場合や操作するカーネルオブジェクトの待ち行列が残っていた場合も、エラー処理を実行する(S612)。
以上の処理の後、S603でRAM210に退避したレジスタの内容をレジスタに戻す(S611)。安全API処理部111が、安全API処理を終了する(S612)。
図7は、実施例1における通常API処理部112の処理の一例を示すフローチャート図である。タスクが通常APIを呼び出すと(S702)、通常API処理部112が通常処理を開始する。
まず、実行中のタスクの使用していたレジスタの内容をRAM210に退避する(S703)。
前述したように、通常タスク104は、通常部のカーネルオブジェクトを操作する場合は待ち状態になれるが、安全部のカーネルオブジェクトを操作することはできない。以上を達成するために、まず、通常判定部401が、操作するカーネルオブジェクトが通常部のプログラムかどうかを判定するために、カーネルオブジェクトの安全フラグ503を確認する(S704)。通常部のプログラムであれば、API処理部402がAPI処理を実行する(S1100)。安全部のプログラムであれば、エラー処理を実行する(S707)。
以上の処理のあと、S703でRAM210に退避したレジスタの内容をレジスタに戻す(S705)。通常API処理部112が通常API処理を終了する(S706)。
図8は、実施例1において、安全処理が、安全部のカーネルオブジェクトを操作する場合の、図6のS900の内部処理の一例を示すフローチャート図である。同図は、安全API処理部111のセマフォ操作部311が、安全部のセマフォを獲得する処理を行う例を示す。
まず、排他的なセマフォ操作を実現するために、割込みをマスクする(S901)。次に、セマフォカウント最大値507が、APIの引数で指定されたセマフォ獲得希望数より多いかどうか判定する(S902)。少ない場合には、APIを呼び出したタスクは、セマフォを獲得できず、エラー処理を実行する(S912)。
S902でセマフォカウント最大値507が、APIの引数で指定されたセマフォ獲得希望数より、多いあるいは同数の場合には、セマフォカウント506が、APIの引数で指定されたセマフォ獲得希望数より多いかどうかを判定する(S903)。セマフォカウント506が、APIの引数で指定されたセマフォ獲得希望数より、多いあるいは同数の場合には、セマフォの獲得処理を行う(S904)。セマフォ獲得処理では、セマフォカウント506から、APIの引数で指定されたセマフォ獲得希望数を引いたものを、セマフォカウント506に格納する。
S903でセマフォカウント506が、APIの引数で指定されたセマフォ獲得希望数より少ないと判定された場合、APIを呼び出したタスクは時間制限付きの待ち状態に移行する(S907〜S911)。まず、待ち状態の時間制限を指定しているかを確認する(S907)。待ち状態の時間制限の指定方法の例として、APIの引数で指定する方法や、カーネルオブジェクトにあらかじめ設定しておく方法がある。待ち状態の時間制限が指定されていない場合は、エラー処理を行う(S912)。
待ち状態の時間制限が指定されている場合、APIを呼び出したタスクは実行可能状態から待ち状態に遷移する(S908〜S911)。まず、実行可能状態キュー115から、APIを呼び出したタスクを取り外す(S908)。次に、APIを呼び出したタスクの状態を実行可能状態から待ち状態に変更する(S909)。待ち状態の時間制限経過後に起動できるように、APIを呼び出したタスクをタイマイベントキュー116につなぐ(S910)。APIを呼び出したタスクを待ち対象となるカーネルオブジェクトの待ち行列501につなぐ(S911)。
セマフォ獲得処理(S904)あるいは待ち状態への移行(S908〜S911)あるいはエラー処理(S912)が終了したら、S901で実行した割込みマスクを解除する(S905)。安全API処理部111のAPI処理部305は、処理を終了する(S906)。
図9は、実施例1において、安全処理が通常部のカーネルオブジェクトを操作する場合の図7のS900の内部処理の一例を示すフローチャート図である。本図は、安全API処理部111のセマフォ操作部311が通常部のセマフォを獲得する処理を行う例を示す。
セマフォカウント506が、APIの引数で指定されたセマフォ獲得希望数より少ない場合の動作は図9と異なり、エラー処理を行う(S912)。これは、本実施例の安全処理において通常部のカーネルオブジェクトを取得する際、待ち状態に移行できないためである。
図10は、実施例1において、通常処理が通常部のカーネルオブジェクトを操作する場合の図8のS1105の内部処理の一例を示すフローチャート図である。本図は、通常API処理部112のセマフォ操作部411が通常部のセマフォを獲得する処理を行う例を示す。
S1101〜S1102の処理は、図9のS901〜S902と同様である。セマフォカウント506が、APIの引数で指定されたセマフォ獲得希望数より多いあるいは同数の場合の処理(S1103〜S1106)は、図9のS903〜S906と同様である。
セマフォカウント506が、APIの引数で指定されたセマフォ獲得希望数より少ないと判定された場合の処理(S1108〜S1112)は図9と異なる。本実施例では、通常処理において、通常部のカーネルオブジェクトを取得する際、待ち状態に時間制限をつける必要はない。そのため、時間制限の指定の有無をチェックせずに、実行可能状態キュー115からAPIを呼び出したタスクを取り外し(S1108)、APIを呼び出したタスクの状態を実行可能状態から待ち状態に変更する(S1109)。
待ち状態の時間制限が指定されている場合には(S1110)、待ち状態の時間制限経過後に起動できるように、APIを呼び出したタスクをタイマイベントキュー116につなぐ(S1112)。待ち状態の時間制限の指定の有無に関わらず、APIを呼び出したタスクをカーネルオブジェクトの待ち行列501につなぐ(S1112)。
その後の処理(S1105〜S1106)は図9のS906〜S907と同様である。
以上の処理により、安全タスクは、操作対象のカーネルオブジェクトが安全部ならば時間制限付きの待ち状態に移行でき、通常部ならば待ち状態に移行できず、通常タスクは、操作対象のカーネルオブジェクトが安全部ならば操作できず、通常部ならば時間制限を問わない待ち状態に移行できる。よって、タスクの種別とカーネルオブジェクトの種別に応じたスケジューリングの制御が可能となり、通常部の故障が安全タスクに伝播するような時間的侵害を防ぐことができる。
本発明の第二の実施例は、図3、および、図4において、カーネルオブジェクトの種別を一種類から七種類に変更したものである。追加されたカーネルオブジェクトはタスク、イベントフラグ、メールボックス、ミューテックス、ランデブポート、メッセージボックスである。本実施例には、それぞれのカーネルオブジェクトを操作するための、カーネルコントロールブロック121、安全API、通常API、安全API処理部111の操作部、通常API処理部112の操作部を追加する。以下、本実施例において、実施例1と同じ構成には同じ番号を付与して説明を省略する。
図11は、本実施例における安全API処理部111の一例を示すソフトウェアモジュール図である。追加されたカーネルオブジェクトを操作するために、カーネルオブジェクト操作部310にタスク操作部1201、イベントフラグ操作部1202、メールボックス操作部1203、ミューテックス操作部1204、ランデブポート操作部1205を追加する。それぞれのカーネルオブジェクトに関するAPI処理を、それぞれの操作部が行う。
図12は、本実施例における通常API処理部112の一例を示すソフトウェアモジュール図である。追加されたカーネルオブジェクトを操作するために、カーネルオブジェクト操作部410にタスク操作部1301、イベントフラグ操作部1302、メールボックス操作部1303、ミューテックス操作部1304、メッセージバッファ操作部1305、ランデブポート操作部1306を追加する。それぞれのカーネルオブジェクトに関するAPI処理を、それぞれの操作部が行う。
図13は、本実施例において、カーネルオブジェクトの一種であるメールボックスのカーネルオブジェクトコントロールブロック121の一例を示す図である。
メッセージキューとは、送信されたメッセージを入れるためのキューである。タスクが送信APIを呼ぶと、安全API処理部111のメールボックス操作部1203あるいは通常API処理部112のメールボックス操作部1303が、メッセージキューにメッセージを入れる。タスクが受信APIを呼ぶと、安全API処理部111のメールボックス操作部1203あるいは通常API処理部112のメールボックス操作部1303が、メッセージキュー内のメッセージを、APIを呼んだタスクに渡す。メッセージキューの先頭メッセージ1401はメッセージキューの先頭メッセージのアドレスを格納する。メッセージキューの最後尾メッセージ1402はメッセージキューの最後尾メッセージのアドレスを格納する。
図14は、本実施例において、安全処理が安全部のカーネルオブジェクトを操作する場合の図7のS900の処理の一例を示すフローチャート図である。本図は、安全API処理部111のメールボックス操作部1203が安全部のメールボックスからメッセージを受信する処理を行う例を示す。
メールボックス操作部1203は、メールボックスのメッセージキューの先頭メッセージ1401あるいはメッセージキューの最後尾メッセージ1402を確認し、メールボックスにメッセージが存在するかを判定する(S931)。
メールボックスにメッセージが存在する場合には、メッセージ受信処理を行う(S932)。メッセージ受信処理では、メッセージキューの先頭メッセージ1401をメッセージキューから取り外し、APIを呼び出したタスクへ返すための処理を行う。
メールボックスにメッセージが存在しない場合には、APIを呼び出したタスクは待ち状態に移行する(S907〜S912)。待ち状態の時間制限が指定されていない場合には(S907)、エラー処理を行う(S912)。
図15は、本実施例において、安全処理が通常部のカーネルオブジェクトを操作する場合の図6のS900の処理の一例を示すフローチャートである。本図は、安全API処理部111のメールボックス操作部1203が通常部のメールボックスからメッセージを受信する処理を行う例を示す。
メールボックス操作部1203は、メールボックスのメッセージキューの先頭メッセージ1401あるいはメッセージキューの最後尾メッセージ1402を確認し、メールボックスにメッセージが存在するかを判定する(S951)。メールボックスにメッセージが存在する場合の処理(S932)は、図15と同様である。
メールボックスにメッセージが存在しない場合、エラー処理を行う(S912)。これは、安全APIを呼び出したタスクは、通常部のカーネルオブジェクトを取得する際、待ち状態に移行できないためである。
図16は、本実施例において、通常処理が通常部のカーネルオブジェクトを操作する場合の図7のS1100の処理の一例を示すフローチャート図である。本図は、通常API処理部112のメールボックス操作部1303が通常部のメールボックスからメッセージを受信する処理を行う例を示す。
メールボックスのメッセージキューの先頭メッセージ1401あるいはメッセージキューの最後尾メッセージ1402を確認し、メールボックスにメッセージが存在するかを判定する(S1122)。メールボックスにメッセージが存在する場合は、メッセージ受信処理を行う(S1123)。メッセージ受信処理では、メッセージキューの先頭メッセージ1401をメッセージキューから取り外し、APIを呼び出したタスクへ返すための処理を行う。
以上の処理により、カーネルオブジェクトの種類が複数存在していても、カーネルオブジェクトの種類に応じて、タスクの種別とカーネルオブジェクトの種別に依存したスケジューリングの制御が可能となる。これにより、カーネルオブジェクトの種類ごとに、時間的侵害による安全タスクへの、通常部故障の伝播を防ぐスケジューリングを実現することができる。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例を含む。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
100…アプリケーション、103…安全タスク、104…通常タスク、110…OS、111…安全API処理部、112…通常API処理部、120…コントロールブロック、121…カーネルオブジェクトコントロールブロック、115…実行可能状態キュー、116…タイマイベントキュー、501…待ち行列先頭アドレス、503…安全フラグ

Claims (8)

  1. アプリケーション処理を実行する計算機システムであって、
    実行要求のあったプログラムが他のプログラムの実行が完了したときに実行するプログラムであった場合、
    実行要求のあったプログラムが安全アプリケーションのプログラムであることを判定する安全判定部と、
    前記安全判定部が実行要求のあったプログラムが安全アプリケーションのプログラムであると判定したとき要求されたプログラムを実行し、
    前記安全判定部が実行要求のあったプログラムが安全アプリケーションのプログラムでないと判定したとき、プログラムの実行待ち行列キューが空であれば要求されたプログラムを実行する安全アプリケーション処理部を備えることを特徴とする計算機システム。
  2. 実行要求のあったプログラムが他のプログラムの実行完了を待たないプログラムであった場合、
    前記安全アプリケーション処理部は実行要求のあったプログラムを実行することを特徴とする請求項1に記載の計算機システム。
  3. 安全アプリケーション処理部が要求されたプログラムを実行したとき処理結果が正しくなければ処理内容を破棄してプログラムを終了し、処理結果が正しいとき処理内容を破棄せずプログラムを終了することを特徴とする請求項2に記載の計算機システム。
  4. 実行要求されたプログラムが通常アプリケーションであることを判定する通常判定部をさらに備え、
    前記通常判定部が実行要求のあったプログラムが通常アプリケーションのプログラムと判定したとき要求されたプログラムを実行し、
    前記通常判定部が実行要求のあったプログラムが通常アプリケーションのプログラムでないと判定したとき、要求されたプログラムを実行しない通常アプリケーション処理部を備えることを特徴とする請求項2に記載の計算機システム。
  5. アプリケーション処理を実行する計算機システムの処理方法であって、
    安全判定部は実行要求のあったプログラムが他のプログラムの実行が完了したときに実行するプログラムであった場合実行要求のあったプログラムが安全アプリケーションのプログラムであると判定し、
    安全アプリケーション処理部は前記安全判定部が実行要求のあったプログラムが安全アプリケーションのプログラムであると判定したとき要求されたプログラムを実行し、
    前記安全判定部が実行要求のあったプログラムが安全アプリケーションのプログラムでないと判定したとき、プログラムの実行待ち行列キューが空であれば要求されたプログラムを実行することを特徴とする計算機システムの処理方法。
  6. 実行要求のあったプログラムが他のプログラムの実行完了を待たないプログラムであった場合、前記安全アプリケーション処理部は実行要求のあったプログラムを実行することを特徴とする請求項5に記載の計算機システムの処理方法。
  7. 安全アプリケーション処理部が要求されたプログラムを実行したとき処理結果が正しくなければ処理内容を破棄してプログラムを終了し、処理結果が正しいとき処理内容を破棄せずプログラムを終了することを特徴とする請求項6に記載の計算機システムの処理方法。
  8. 通常判定部が実行要求されたプログラムが通常アプリケーションであるかどうかを判定し、通常アプリケーション処理部は前記通常判定部が実行要求のあったプログラムが通常アプリケーションのプログラムと判定したとき要求されたプログラムを実行し、
    前記通常判定部が実行要求のあったプログラムが通常アプリケーションのプログラムでないと判定したとき、要求されたプログラムを実行しないことを特徴とする請求項5に記載の計算機システムの処理方法。
JP2015151444A 2015-07-31 2015-07-31 通常部の故障が安全部へ伝播することを防止するapi及びその処理部 Active JP6462521B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015151444A JP6462521B2 (ja) 2015-07-31 2015-07-31 通常部の故障が安全部へ伝播することを防止するapi及びその処理部

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015151444A JP6462521B2 (ja) 2015-07-31 2015-07-31 通常部の故障が安全部へ伝播することを防止するapi及びその処理部

Publications (2)

Publication Number Publication Date
JP2017033208A JP2017033208A (ja) 2017-02-09
JP6462521B2 true JP6462521B2 (ja) 2019-01-30

Family

ID=57988864

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015151444A Active JP6462521B2 (ja) 2015-07-31 2015-07-31 通常部の故障が安全部へ伝播することを防止するapi及びその処理部

Country Status (1)

Country Link
JP (1) JP6462521B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110309024B (zh) * 2019-04-23 2023-07-18 网宿科技股份有限公司 数据处理系统及其执行数据处理任务的方法

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005190238A (ja) * 2003-12-26 2005-07-14 Matsushita Electric Ind Co Ltd リアルタイム制御方式
JP4514201B2 (ja) * 2004-05-31 2010-07-28 キヤノン株式会社 情報処理装置、情報処理装置の制御方法およびプログラム
JP5374752B2 (ja) * 2009-01-19 2013-12-25 株式会社東芝 保護制御計測システムと装置、およびデータ伝送方法
JP5965723B2 (ja) * 2011-05-19 2016-08-10 日本放送協会 受信機
JP5591883B2 (ja) * 2012-07-23 2014-09-17 株式会社東芝 情報処理装置、プログラム
JP5676664B2 (ja) * 2013-02-27 2015-02-25 Necプラットフォームズ株式会社 リソース管理装置、リソースの管理方法、及びプログラム
JP6029553B2 (ja) * 2013-08-22 2016-11-24 日立オートモティブシステムズ株式会社 車両制御装置
JP2015052852A (ja) * 2013-09-05 2015-03-19 富士通株式会社 情報処理装置、機能制限プログラム及び機能制限方法

Also Published As

Publication number Publication date
JP2017033208A (ja) 2017-02-09

Similar Documents

Publication Publication Date Title
KR102062945B1 (ko) 정보 처리 장치 및 그의 제어 방법, 및 프로그램
EP0767938B1 (en) Method for enforcing a hierarchical invocation structure in real time asynchronous software applications
US9424103B2 (en) Adaptive lock for a computing system having multiple runtime environments and multiple processing units
CN106569891B (zh) 一种存储系统中任务调度执行的方法和装置
US7844971B2 (en) Method and apparatus for detecting cross-thread stack access in multithreaded programs
US20070234322A1 (en) Dynamic delegation chain for runtime adaptation of a code unit to an environment
CN107797848B (zh) 进程调度方法、装置和主机设备
JP2011054161A (ja) マルチコア/スレッドのワークグループ計算スケジューラ
KR100902977B1 (ko) 하드웨어 공유 시스템 및 방법
US8561070B2 (en) Creating a thread of execution in a computer processor without operating system intervention
US9928105B2 (en) Stack overflow prevention in parallel execution runtime
US6295602B1 (en) Event-driven serialization of access to shared resources
WO2012139067A2 (en) Messaging interruptible blocking wait with serialization
EP2664989A1 (en) Task scheduling
US20120304026A1 (en) Separation of error information from error propagation information
US9128754B2 (en) Resource starvation management in a computer system
CN110413210B (zh) 用于处理数据的方法、设备和计算机程序产品
CN109558235B (zh) 一种处理器的调度方法、装置及计算机设备
US9229716B2 (en) Time-based task priority boost management using boost register values
JP6462521B2 (ja) 通常部の故障が安全部へ伝播することを防止するapi及びその処理部
JP5067723B2 (ja) 情報処理装置、情報処理方法およびプログラム
US9430196B2 (en) Message inlining
JP7042105B2 (ja) プログラム実行制御方法および車両制御装置
CN115904644A (zh) 任务调度方法、电子设备和计算机程序产品
CN115113990A (zh) 用于处理中断请求的方法和装置

Legal Events

Date Code Title Description
RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20170119

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20170125

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180223

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180223

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20181031

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20181106

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20181126

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181227

R150 Certificate of patent or registration of utility model

Ref document number: 6462521

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250