TEDIA会員に登録したメールアドレスとパスワードを入力してください

メールアドレス:

     パスワード:


パスワードを忘れた方はパスワードの確認を行ってください。

TEDIA会員へのご登録がお済みで無い方はこちらで登録ができます


>> テクノロジーポータル TEDIA トップページへ戻る <<

Think IT Software Developer's Think IT Find-IT 失敗しないソフト選び Find-IT TEDIA テクノロジーポータル TEDIA インストールマニアックス2008 インストールマニアックス2008

TEDIA SponsorsOpen Source Web Development Tutorials - Dev Shed

Linuxファイルとイベントポーリングインターフェース
(2009/03/10公開)

エッジトリガイベント VS. レベルトリガイベント

 epoll_ctl()に渡されるeventパラメータのeventsフィールドにEPOLLETの値が設定されている場合、fdの監視はレベルトリガではなくエッジトリガです。

 Unixパイプ上で交信している生産者と消費者の間で、次のようなイベントを考えてみましょう。

1.生産者はパイプ上に1KBのデータを書き込んできます。
2.消費者は、パイプ上でepoll_wait()を実行し、パイプがデータを入手して、読み取り可能になるのを待っています。

 レベルトリガによる監視の場合、上記2.のepoll_wait()のコールは直ちに戻って、パイプの読み取り準備が整ったことを示します。エッジトリガによる監視の場合は、上記1.が発生するまで、コールは戻りません。すなわち、たとえepoll_wait()の呼び出し時にパイプが読み出し可能であっても、パイプ上にデータが書き込まれるまでコールは戻らないのです。

 デフォルト動作はレベルトリガです。poll()やselect()はレベルトリガで動作しており、大多数の開発者が予期するのもレベルトリガです。エッジトリガ動作には、一般的にノンブロッキングを利用し、EAGAINを入念にチェックするなど、異なるプログラミング方法が必要です。

 これらの用語は電気工学から来ています。レベルトリガ方式の割り込みは、信号線がアサートされるたびにかかります。エッジトリガ方式の割り込みは、信号線のアサート中、エッジの上昇や下降の変化が生じたときのみ、かかります。レベルトリガ方式の割り込みは、イベントの状態(アサートした信号線)に注目する場合に便利です。エッジトリガ方式の割り込みは、イベント自体(アサート中の信号線)に注目する場合に、便利です。

 では、次回も学習を続けましょう。

(編集部より:次回は、2009年3月17日に公開予定です)

(著者: O'Reilly Media)

原文へのリンク


前のページ     1    2    3    4   

Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.