- 前ページ
- 次ページ
送信バッファというひとつの資源をコンソール・ドライバ・スレッドと割込み処理という異なるコンテキストから操作していることで送信バッファについて「排他処理」を考える必要があります。
資源を操作する前に「ロック処理」を行って、他のスレッドがその資源を操作する際にはロックが解除されるまでスリープ状態に入って待ち合わせるという方法があります。
このような動作を「スレッド間で同期を取る」というようにいいます。
ロックとロック解除、ロック中の待ち合わせを行うようなサービスをシステム・コールとしてOSに実装する必要があります。
このためのOSの機能は「ミューテックス」と呼ばれます。さらにミューテックスを拡張し、資源を同時操作でききるユーザ数を指定できるようにしたものを「セマフォ」と呼びます。
「ミューテックス」は上限1の「セマフォ」です。
資源を操作する前に「ロック処理」を行って、他のスレッドがその資源を操作する際にはロックが解除されるまでスリープ状態に入って待ち合わせるという方法があります。
このような動作を「スレッド間で同期を取る」というようにいいます。
ロックとロック解除、ロック中の待ち合わせを行うようなサービスをシステム・コールとしてOSに実装する必要があります。
このためのOSの機能は「ミューテックス」と呼ばれます。さらにミューテックスを拡張し、資源を同時操作でききるユーザ数を指定できるようにしたものを「セマフォ」と呼びます。
「ミューテックス」は上限1の「セマフォ」です。
割込みハンドラでシステムコールで定義した機能を使うためにサービスコールというI/Fを設けます。
トラップ命令を利用せずに、システムコールの処理をそのまま関数呼び出しするためのサービス関数です。
KOZOSでは割込み処理中は割込み禁止になっていますから、処理関数の呼び出し中に割込みによって別動作に切り替わることはありません。このためカーネル定義に動作は完全に排他されたものになっており、システム・コールの処理用関数が再入される懸念はありません。
トラップ命令を利用せずに、システムコールの処理をそのまま関数呼び出しするためのサービス関数です。
KOZOSでは割込み処理中は割込み禁止になっていますから、処理関数の呼び出し中に割込みによって別動作に切り替わることはありません。このためカーネル定義に動作は完全に排他されたものになっており、システム・コールの処理用関数が再入される懸念はありません。