第1及び第2プロセッサを備えるリアルタイムシステムであって、あるプロセッサのいずれかがオブジェクトロックを占有中に、他のプロセッサがオブジェクトロックを要求したか否かを示すマジックナンバー変数を管理するセマフォ情報部を備え、前記オブジェクトロックを取得した第1プロセッサは、前記マジックナンバー変数を参照して前記第1及び前記第2プロセッサの要求する処理を実行し、前記オブジェクトロックを取得できなかった第2プロセッサは、前記マジックナンバー変数を更新する、リアルタイムシステム。前記セマフォ情報部は、前記マジックナンバー変数の同期情報であるサブロックを管理し、前記第2プロセッサは、前記マジックナンバー変数を更新する前に、前記サブロックを占有し、更新後に前記サブロックを解放することを特徴とする請求項1に記載のリアルタイムシステム。前記第1プロセッサは、前記第1プロセッサが要求する処理を実行した後に、前記第2プロセッサが要求する処理を実行することを特徴とする請求項1または請求項2に記載のリアルタイムシステム。前記第1及び前記第2プロセッサが要求する処理は、セマフォ資源の返却にかかる処理であることを特徴とする請求項1乃至請求項3のいずれか1項に記載のリアルタイムシステム。第1及び第2プロセッサを備えるリアルタイムシステムにおける排他制御方法であって、あるプロセッサのいずれかがオブジェクトロックを占有中に、他のプロセッサがオブジェクトロックを要求したか否かを示すマジックナンバー変数を管理し、前記オブジェクトロックを取得した第1プロセッサは、前記マジックナンバー変数を参照して前記第1及び前記第2プロセッサの要求する処理を実行し、前記オブジェクトロックを取得できなかった第2プロセッサは、前記マジックナンバー変数を更新する、排他制御方法。前記マジックナンバー変数の同期情報であるサブロックを管理し、前記第2プロセッサは、前記マジックナンバー変数を更新する前に、前記サブロックを占有し、更新後に前記サブロックを解放することを特徴とする請求項5に記載の排他制御方法。前記第1プロセッサは、前記第1プロセッサが要求する処理を実行した後に、前記第2プロセッサが要求する処理を実行することを特徴とする請求項5または請求項6に記載の排他制御方法。前記第1及び前記第2プロセッサが要求する処理は、セマフォ資源の返却にかかる処理であることを特徴とする請求項5乃至請求項7のいずれか1項に記載の排他制御方法。図7~図10に示したマルチコアプロセッサシステムでは、プロセッサコア間を跨いだ共有資源の操作を行う場合、ロックを用いた排他制御を行う。ここで、あるプロセッサがロックを取得している間に、他のプロセッサがロックを取得しようとする場合がある。この場合、先にロックを取得したプロセッサがロックを解放するまで、他のプロセッサは待ち状態、すなわちスピンロック状態となる。これにより、この他のプロセッサ例えば、図10のプロセッサBは他の処理を行うことができないため、リアルタイムOSのカーネル時間がスピンロックの時間分だけ長くなってしまう。本発明にかかるリアルタイムシステムの一態様は、第1及び第2プロセッサを備えるリアルタイムシステムであって、あるプロセッサのいずれかがオブジェクトロックを占有中に、他のプロセッサがオブジェクトロックを要求したか否かを示すマジックナンバー変数を管理するセマフォ情報部を備え、前記オブジェクトロックを取得した第1プロセッサは、前記マジックナンバー変数を参照して前記第1及び前記第2プロセッサの要求する処理を実行し、前記オブジェクトロックを取得できなかった第2プロセッサは、前記マジックナンバー変数を更新する、ものである。本発明にかかる排他制御方法の一態様は、第1及び第2プロセッサを備えるリアルタイムシステムにおける排他制御方法であって、あるプロセッサのいずれかがオブジェクトロックを占有中に、他のプロセッサがオブジェクトロックを要求したか否かを示すマジックナンバー変数を管理し、前記オブジェクトロックを取得した第1プロセッサは、前記マジックナンバー変数を参照して前記第1及び前記第2プロセッサの要求する処理を実行し、前記オブジェクトロックを取得できなかった第2プロセッサは、前記マジックナンバー変数を更新する、ものである。本発明では、オブジェクトロックを取得できなかった第2プロセッサは、マジックナンバー変数の更新のみを行い、処理を終了できる。また、オブジェクトロックを取得した第1プロセッサは、自身の処理に加えて第2プロセッサの処理も実行する。これにより、第2プロセッサの待ち時間が減少、すなわちスピンロックが生じなくなり、かつ所望の処理を実行することができる。本発明によれば、スピンロックの時間を短縮した排他制御を実現するリアルタイムシステム、排他制御方法を提供することができる。<実施の形態1>以下、図面を参照して本発明の実施の形態について説明する。はじめに、本実施の形態にかかるリアルタイムシステムの備えるカーネル管理ブロックの構成を、図1を参照して説明する。カーネル管理ブロック1は、タスク情報2と、プロセッサ情報3と、セマフォ情報4と、を具備する情報である。タスク情報2は、タスク毎に持つ情報であり、タスク管理ブロックから構成される。タスク管理ブロックは、タスクキューtsk_queue21と、タスク状態tstat22と、待ち解除時のエラーコードwercd23と、タイムイベントブロックp_tmevtb24と、待ちオブジェクトの管理ブロックp_wobjcb25と、を備える。プロセッサ情報3は、プロセッサ毎に持つ情報であり、プロセッサ管理ブロックから構成される。プロセッサ管理ブロックは、タスクロックtsk_lock31により構成される。セマフォ情報4は、セマフォ管理ブロックSEMCBと、セマフォ初期化ブロックSEMINIBと、から構成される。セマフォ管理ブロックSEMCBは、セマフォ待ちキューwait_queue41と、初期化ブロックp_seminib42と、オブジェクトロックobj_lock43と、セマフォ現在カウント値semcnt44と、サブロックsub_lock45と、マジックナンバー変数SemMN46と、を具備する構成である。セマフォ初期化ブロックSEMINIBは、セマフォの初期値を保持するブロックであり、セマフォ属性47と、セマフォ資源数の初期値semcmt48と、セマフォ最大資源数maxsem49と、を持つ情報である。図1の構成は、セマフォ管理ブロック内にサブロックsub_lock45と、マジックナンバー変数SemMN46と、を備える点が図7の構成と異なる。サブロックsub_lock45は、セマフォ現在カウント値semcnt44またはマジックナンバー変数SemMN46を書き換える際に取得する必要があるロック情報である。マジックナンバー変数SemMN46は、オブジェクトロックobj_lock43を取得できなかったプロセッサがカウンタ操作セマフォ現在カウント値semcnt44を行ったことを、オブジェクトロックobj_lock43を取得したプロセッサが認識するための変数である。マジックナンバー変数SemMN46が1である場合、カウンタ操作が行われたことを示す。続いて、本実施の形態にかかるリアルタイムシステムの動作を説明する。図2及び図3は、本実施の形態にかかるリアルタイムシステムにおいて、マルチプロセッサ用リアルタイムOSがサービスコールsig_semを呼び出した場合の動作を示すフローチャートである。サービスコールsig_semは、セマフォ資源を返却し、返却にかかるセマフォに対する取得待ち状態のタスクが存在する場合には、当該タスクを起動するサービスコールである。リアルタイムOSは、タスクからサービスコールsig_semが呼び出されたら、サービスコールsig_semの処理を開始する。リアルタイムOSは、割り込みを禁止する。S11。リアルタイムOSは、オブジェクトロックobj_lock43の取得を試みるS12。オブジェクトロックobj_lock43の取得が成功しなかった場合S12:No、リアルタイムOSは、サブロックsub_lock45の取得を行うS13。リアルタイムOSは、セマフォ現在カウント値semcnt44と、セマフォ最大資源数maxsem49と、を比較するS14。セマフォ最大資源数maxsem49がセマフォ現在カウント値semcnt44よりも大きい場合S14:Yes、リアルタイムOSは、セマフォ現在カウント値semcnt44を1増加させるS15。リアルタイムOSは、マジックナンバー変数SemMN46を1に更新するS16。そして、リアルタイムOSは、戻り値をE_OKに設定するS17。一方、セマフォ最大資源数maxsem49がセマフォ現在カウント値semcnt44よりも大きくない場合S14:No、リアルタイムOSは、戻り値をE_QOVRに設定するS18。リアルタイムOSは、S17またはS18の処理の後にサブロックsub_lock45を解放するS19。続いて、S12にてオブジェクトロックobj_lock43の取得が成功したS12:Yes場合の処理を説明する。リアルタイムOSは、セマフォ待ちキューwait_queue41が空か否かを判定するS20。まず、S20にてセマフォ待ちキューwait_queue41が空であった場合の処理S20:Yesを説明する。リアルタイムOSは、セマフォ現在カウント値semcnt44と、セマフォ最大資源数maxsem49と、を比較するS21。セマフォ最大資源数maxsem49がセマフォ現在カウント値semcnt44よりも大きい場合S21:Yes、リアルタイムOSは、サブロックsub_lock45を取得するS22。リアルタイムOSは、セマフォ現在カウント値semcnt44を1増加させるS23。その後、リアルタイムOSは、サブロックsub_lock45を解放するS24。そしてリアルタイムOSは、戻り値をE_OKに設定するS25。一方、セマフォ最大資源数maxsem49がセマフォ現在カウント値semcnt44よりも大きくない場合S21:No、リアルタイムOSは、戻り値をE_QOVRに設定するS26。次に、S20にてセマフォ待ちキューwait_queue41が空ではなかった場合の処理S20:Noを説明する。リアルタイムOSは、セマフォ待ちキューwait_queue41の先頭タスクのタスク管理ブロックTCBを取得するS27。リアルタイムOSは、タスクロックtsk_lock31を参照するS28。そして、リアルタイムOSは、タスクロックtsk_lock31の取得を試みるS29。タスクロックtsk_lock31の取得が失敗した場合S29:No、リアルタイムOSは、前述のS12から処理を再度行う。タスクロックtsk_lock31の取得が成功した場合S29:Yes、リアルタイムOSは、セマフォ待ちキューwait_queue41の先頭タスクを削除、すなわち待ち状態の解除を行うS30。リアルタイムOSは、待ち解除の対象となったタスクのタスク状態tstat22の値を参照して、ディスパッチが必要か否かを判定するS31。ディスパッチが必要である場合S31:Yes、リアルタイムOSは、ディスパッチが必要であるという情報を保持するS32。ディスパッチが必要ではない場合S31:No、リアルタイムOSは、ディスパッチが必要であるという情報を保持しない。その後、リアルタイムOSは、タスクロックtsk_lock31を解放しS33、戻り値をE_OKに設定するS34。リアルタイムOSは、S34、S25、S26のいずれかの処理の後に他のプロセッサの代替処理を実行するS35。この代替処理の詳細については、図4~図6を参照して後述する。サービスコールsig_semの戻り値は、代替処理S35の後にもいずれかの値E_OKまたはE_QOVRに設定されたままとなる。代替処理の後に、リアルタイムOSは、オブジェクトロックobj_lock43を解放するとともに、ディスパッチ処理を必要に応じて行うS36。そして、リアルタイムOSは、割り込み処理を許可するS37。続いて、他のプロセッサの代替処理S35の詳細について、図4及び図5を参照して説明する。リアルタイムOSは、サブロックsub_lock45の取得を行うS41。リアルタイムOSは、マジックナンバー変数SemMN46の設定値が0であるか否かを判定するS42。マジックナンバー変数SemMN46の設定値が0である場合S42:Yes、リアルタイムOSは、後述のS60の処理を行う。マジックナンバー変数SemMN46の設定値が0ではない場合S42:No、リアルタイムOSは、セマフォ待ちキューwait_queue41が空か否かを判定するS43。まず、セマフォ待ちキューwait_queue41が空ではない場合S43:Noについて説明する。リアルタイムOSは、セマフォ現在カウント値semcnt44が0であるか否かを判定するS44。セマフォ現在カウント値semcnt44が0である場合S44:Yes、リアルタイムOSは、後述のS59から処理を行う。セマフォ現在カウント値semcnt44が0ではない場合S44:No、リアルタイムOSは、セマフォ現在カウント値semcnt44の値を1減少するS45。リアルタイムOSは、S45のデクリメントの後にサブロックsub_lock45を解放するS46。リアルタイムOSは、セマフォ待ちキューwait_queue41の先頭タスクのタスク管理ブロックTCBを取得するS47。そして、リアルタイムOSは、タスクロックtsk_lock31の取得するS48。続いて、リアルタイムOSは、セマフォ待ちキューwait_queue41の先頭タスクを削除、すなわち待ち状態を解除するS49。リアルタイムOSは、待ち解除の対象となったタスクのタスク状態tstat22の値を参照して、ディスパッチが必要か否かを判定するS50。ディスパッチが必要である場合S50:Yes、リアルタイムOSは、ディスパッチが必要であるという情報を保持するS51。ディスパッチが必要ではない場合S50:No、リアルタイムOSは、ディスパッチが必要であるという情報を保持しない。その後、リアルタイムOSは、タスクロックtsk_lock31を解放しS52、サブロックsub_lock45を取得するS53。リアルタイムOSは、セマフォ現在カウント値semcnt44が1以上であり、かつセマフォ待ちキューwait_queue41が空でない、という条件を満たすか否かを判定するS54。条件を満たす場合S54:Yes、リアルタイムOSは、後述のS59の処理を実行する。一方、条件を満たさない場合S54:No、リアルタイムOSは、S45から処理を実行する。次に、セマフォ待ちキューwait_queue41が空ではある場合S43:Yesの一連の処理について説明する。リアルタイムOSは、サービスコールsig_semの戻り値がE_QOVRであるか否かを判定するS55。当該判定により、S26の処理が実行されたか否かを判定することができる。戻り値がE_QOVRである場合S55:Yes、すなわちS26の処理が実行された場合、リアルタイムOSは、セマフォ現在カウント値semcnt44と、セマフォ最大資源数maxsem49と、を比較するS56。セマフォ最大資源数maxsem49がセマフォ現在カウント値semcnt44よりも大きくない場合S56:No、リアルタイムOSは、後述のS59の処理を実行する。セマフォ最大資源数maxsem49がセマフォ現在カウント値semcnt44よりも大きい場合S56:Yes、リアルタイムOSは、セマフォ現在カウント値semcnt44を1減少させるS57。そして、リアルタイムOSは、戻り値をE_OKに設定するS58。リアルタイムOSは、S44の判定S44Yes、S54の判定S54:No、S55の判定S55:No、S56の判定S56No、S58の処理、またはS59の処理の後にSemMN46の値を0に設定するS59。リアルタイムOSは、S42の判定S42:YesまたはS59の処理の後にサブロックsub_lock45を解放するS60。続いて、2つのプロセッサがほぼ同時にサービスコールsig_semを呼び出した場合における、本実施の形態にかかるリアルタイムシステムの動作を、図6及び上述のフローチャート図2~図5を参照して説明する。プロセッサAのリアルタイムOSは、プロセッサAのタスクでサービスコールsig_semの呼び出しが生じると図6T0、カーネル処理を開始する図6T1。リアルタイムOSは、オブジェクトロックobj_lock43の取得を試みる図2S12。オブジェクトロックを取得できた図2S12:Yes場合、プロセッサAのリアルタイムOSは、通常の処理を行う図6T2~T3。一方、プロセッサBがプロセッサAに遅れてサービスコールsig_semを呼び出している図6T5。この場合、プロセッサAがすでにオブジェクトロックobj_lock43を取得しているため、プロセッサBはオブジェクトロックobj_lock43を取得できない図2S12:No。プロセッサBのリアルタイムOSは、サブロックsub_lock45を取得し図2S13、セマフォ現在カウント値semcnt44をインクリメントする図2S15。そして、カウンタ操作を行ったことを他のプロセッサ本例ではプロセッサAから判別可能にするためのマジックナンバー変数SemMN46を1に更新する図2S16。プロセッサBのリアルタイムOSは、サブロックsub_lock45を解放し図2S19、割り込みを許可し図2S37、サービスコールsig_semの処理を終了する図6T7。プロセッサBのリアルタイムOSは、このような処理によりオブジェクトロックobj_lock43を取得するまでの待ち時間が生じない、すなわちスピンロックが生じない。オブジェクトロックobj_lock43を取得しているプロセッサAのリアルタイムOSは、通常処理図2S20~図3S34、図2S20~図3S25、図2S20~図3S26のいずれかを実行する。その後、プロセッサAのリアルタイムOSは、他のプロセッサの代替処理図3S35を実行する。プロセッサAのリアルタイムOSは、サブロックsub_lock45を取得し図4S41、マジックナンバー変数SemMN46の値を確認する図4S42、図6T3。マジックナンバー変数SemMN46の値が1であった場合、プロセッサAのリアルタイムOSは、他のプロセッサによるセマフォ操作が行われたと判定する。この場合、プロセッサAのリアルタイムOSは、他のプロセッサの肩代わり処理を実行する図6T3~T4、図3及び図4S43~S58。肩代わり処理とは、セマフォ現在カウント値semcnt44が0となるか、セマフォ待ちキューwait_queue41が空となるまで、セマフォ待ちキューwait_queue41に登録されているタスクのセマフォ待ち状態の解除処理を実行することである。セマフォ待ちキューwait_queue41が空であるかの判定図4S43及びセマフォ現在カウント値semcnt44が0か否かの判定図4S44の後に、プロセッサAのリアルタイムOSは、一連のセマフォ待ち解除処理図4S45~図5S53を実行する。その後に、プロセッサAのリアルタイムOSは、セマフォ現在カウント値semcnt44が1以上であり、かつセマフォ待ちキューwait_queue41が空でない、という条件を満たすか否かを判定する図5S54。条件を満たす場合図5S54:Yes、プロセッサAのリアルタイムOSは、再び一連のセマフォ待ち解除処理図4S45~図5S53を実行する。続いて、本実施の形態にかかるリアルタイムシステムの効果について図6を参照して説明する。オブジェクトロックを取得できなかったプロセッサBは、セマフォ現在カウント値semcnt44とマジックナンバー変数SemMN46の更新のみを行い、処理を終了できる。また、オブジェクトロックobj_lock43を取得したプロセッサAは、自身の処理に加えてプロセッサBの処理も肩代わりして実行する。これにより、プロセッサBの待ち時間が減少、すなわちスピンロックが生じなくなり、かつ所望の処理を実行することができる。さらに、本実施の形態にかかるリアルタイムシステムでは、上述のセマフォ現在カウント値semcnt44とマジックナンバー変数SemMN46の更新の際に、サブロックsub_lock45を取得する必要がある。これにより、セマフォ現在カウント値semcnt44とマジックナンバー変数SemMN46の更新を正確に行うことができる。さらに、プロセッサAは、自身の処理を実行図6T2~T3した後に、プロセッサBの肩代わり処理図6T3~T4を実行する。このように、オブジェクトロックobj_lock43の取得要求を発行したプロセッサの順序が保たれたまま処理を実行することができる。なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上述の説明ではセマフォに関するサービスコールsig_semを扱う例を説明したが、必ずしもこれに限られない。本発明は、キュー構造を用いて実現しているオブジェクトであるメールボックス、データキュー、イベントフラグ等に関するサービスコールに関しても応用することが可能である。さらに、上述の説明では、プロセッサA及びプロセッサBを含むリアルタイムシステムについて説明したが必ずしもこれに限られず、本発明を3以上のプロセッサを含むリアルタイムシステムに応用することも可能である。