selectはドライバのサポートを必要とし、ドライバはfopsでポーリング機能を実装します。 selectは、各デバイスファイルに対応するpoll関数によって提供される情報を介して利用可能なリソース(読み取り可能または書き込み可能など)があるかどうかを判断し、そうであれば使用可能なリソースのファイル記述子の数を返します。それが利用可能になると、それは目覚めて実行を続けます。
以下はselectの2プロセス分析です。
1. selectのスリーププロセス
<ブロッキング操作をサポートするデバイスドライバは、通常、上位層(ユーザー層)に必要なBLOCK操作またはNONBLOCK操作をサポートするために、読み取り/書き込み待ち行列などの一連の独自の待ち行列を実装します。アプリケーションがデバイスドライバを介してデバイスにアクセスするとき(デフォルトはBLOCK操作)、デバイスに現在読み書きするデータがない場合は、デバイスドライバに対応する読み書き待ちキューにユーザープロセスが挿入され、一定時間スリープされます。データが読み書き可能になるまで待ってからプロセスを起動します。
selectは、読み書き可能なリソースがないときにユーザープロセスを適切にスリープさせ、読み書き可能なリソースがあるときにウェイクアップするための待機キューメカニズムの賢い使い方です。選択睡眠の詳細なプロセスを見てみましょう。
selectは、監視対象のfd_set内のすべてのファイル記述子に対応するドライバのポーリング機能をループします。ドライバによって提供されるポーリング関数は、最初にselectを呼び出すユーザプロセスをデバイスドライバの対応するリソースの待ち行列(read /write wait queueなど)に挿入し、次にビットマスクを返して現在のリソースのどれが利用可能であるかを伝えます。 selectループがすべてのfd_setsで指定されたファイル記述子に対応するポーリング関数を通過するとき、利用可能なリソースがない(つまり、操作に使用できるファイルがない)場合、selectはリソースが利用可能になるまでプロセスをスリープさせます。ウェイクアップ(またはタイムアウト)は実行を続けます。
コードの実装方法を分析した後。
selectの呼び出しパスは次のとおりです。sys_select - > core_sys_select - > do_select
最も重要な機能はdo_selectです。主な作業はここにあります。最初の2つの機能は主にいくつか行います。仕事の準備をしなさい。 Do_selectは次のように定義されています。
int do_select(int n、fd_set_bits * fds、s64 *タイムアウト)
{ - poll_table * wait; int retval、i; rcu_read_lock(); retval = max_select_fd(n、fds); rcu_read_unlock (); if(retval< 0) return retval; n = retval; poll_initwait(& table); wait =& table.pt; if(!* timeout) wait = NULL; retval = 0; //retvalは、準備された記述子の数を節約するために使用されます。最初は0です。 unsigned long * rinp、* routesp、* Rexp、* inp、* outp、* exp; long __timeout; set_current_state(TASK_INTERRUPTIBLE); //現在のプロセスの状態をTASK_INTERRUPTIBLEに変更します。 p> inp = fds-> in; outp = fds-> out; exp = fds-> ex; rinp = fds-> res_in; routesp = fds- > res_out; rexp = fds-> res_ex; for(i = 0; i< n; ++ rinp、++ routes、++ rexp){//各記述子を走査します。 unsigned long in、out、ex、all_bそのビット= 1、マスク、j; 符号なしlong res_in = 0、res_out = 0、res_ex = 0; const struct file_operations * f_op = NULL; 構造体ファイル* file = NULL; in = * inp ++; out = * outp ++; ex = * exp ++; all_bits = in
(;;){
のTelnetサービスの設定手順は以下の通りである: A、Telnetのインストールパッケージ(通常2つ)ログイン 1、telnet-クライアント(またはtelnet)は、そのパッケージのt
実際に読むときには、共有記憶領域の説明は役に立ちませんので、小さなプログラムを書いて、子プロセスを大まかに作成し、子プロセスはその文字列を端末から受け取り、共有領域に格納します。文字列を読み、それを
Computer Store News マイクロソフトは8月1日、PC OEMメーカーおよびメーカーのパートナー向けにWindows 8 RTMをリリースしました。この版はまた、2012年10月26
WebサーバーにPHPバージョン
を隠すには、apacheとphpのバージョン情報を表示できない、そしてLinuxサーバーに PHP バージョンを隠すには? Xiaobianは PHP バージョンのLinuxサーバーの隠しバージョンを