Oracle® Solaris 11.2 デバイスドライバの記述

印刷ビューの終了

更新: 2014 年 9 月
 
 

イベントの概要

イベントとは、状態の変化が発生したことを示すためにデバイスドライバから対象のエンティティーに送信されるメッセージのことです。Oracle Solaris OS ではイベントはユーザー定義の名前-値ペア構造体として実装されており、この構造体は nvlist* 関数を使用して管理されます。nvlist_alloc(9F) のマニュアルページを参照してください。イベントはベンダー、クラス、およびサブクラスに基づいて編成されます。たとえば、環境の状態をモニターするためのクラスを定義します。環境用のクラスには、温度、ファンのステータス、および電力の変化を示すためのサブクラスが存在する場合があります。

状態の変化が発生すると、デバイスはドライバに通知します。次に、ドライバは ddi_log_sysevent(9F) 関数を使用して、sysevent という名前のキュー内にこのイベントを記録します。sysevent キューは、syseventd または syseventconfd のいずれかのデーモン経由でユーザーレベルにイベントを処理対象として渡します。これらのデーモンは、指定されたイベントの通知を受け取るように登録しているすべてのアプリケーションに、通知を送信します。

ユーザーレベルアプリケーションの設計者にとって、イベントを処理するには次の 2 つの方法があります。

  • アプリケーションは、libsysevent(3LIB) 内のルーチンを使用することで、特定のイベントの発生時に通知を受け取ることができるように syseventd デーモンに登録できます。

  • 開発者は、イベントに応答するための独立したユーザーレベルアプリケーションを記述できます。このタイプのアプリケーションは、syseventadm(1M) に登録する必要があります。指定されたイベントを syseventconfd が検出すると、アプリケーションが実行され、そのイベントを適切に処理します。

このプロセスを示したのが次の図です。

図 5-1  イベントの plumb

image:図は、イベントがユーザーレベルアプリケーションへの通知用として sysevent キューにロギングされる様子を示したものです。