睡眠の導入のLinuxプロセス

「スリープ」を意味する?プロセスがスリープ状態に置かれたとき、それが特定の状態にあると識別され、中に実行キュースケジューラから削除されるためのプロセスは何ですか。何かが起こるまで、そのプロセスの状態を変更しますしたがって、実行されません。眠っているプロセスは、システムの側に棚上げされてきた、事件後を待ち、任意のCPU上でスケジュール、およびされていません。

 

Linuxドライバは、プロセスを作るためには、安全な方法コーディング睡眠に忘れてはならないいくつかのルールがあり、非常に簡単です。しかし、眠ります。

 

これらの規則の最初は、次のとおりです。あなたは、原子コンテキストで実行しているときに眠ることができない私たちは、第5章でアトミック操作を導入し、コンテキスト原子は、ステップ数が同時アクセス状況のいずれかのタイプなしでなければならないだけの状態です。実施しました。これは、スピンロック、seqlock、またはRCUロックを保持しながら、睡眠のために、あなたのドライブが眠ることができないことを意味します。あなたがオフになって、あなたは睡眠を中断することができない場合。睡眠中フラグを保持しています合法的な、しかし、あなたは慎重にこれを行うに任意のコードを確認してください。コードはフラグがスリープ状態にするために、他のスレッドも待っているフラグを保持した状態でスリープ状態にした場合。任意の睡眠のフラグを保持することは簡単である必要がありながら、そう発生し、このフラグの保有者は、あなたが最終的にあなたを目覚めさせます。このプロセスをブロックすることはできませんので、あなたは、自分自身を納得させる必要があります。

 

心に留めておくべきもう一つは、あなたが目を覚ますときCPUどのくらいか、どのような変化が起こっているを残したまま、あなたのプロセスを知っていることはないということである。別のプロセスが同じイベントを待ってスリープ状態に持っている場合は、多くの場合、知りません;そのプロセスは、目を覚ますと、あなたが結果を待っているリソースを取得する前に、本当に、あなたはどのような仮定を作る目覚めた後に、システムに述べることはできない、とあなたはあなたが条件が実際に待機させるためにチェックしなければならないということであるかもしれませんA。

 

また、当然のことながら、他の人はどこか、それが目を覚ますだろうと確信していない限り、あなたのプロセスは眠ることができない、関連するポイントです。ウェイクアップもウェイクアップを確実にするためにその仕事をするために、あなたのプロセスを見つけることができなければならないコードを実行する作業を、深くあなたのコードを検討され、各睡眠のために、睡眠を終了するイベントのまさにシリーズを知っているが発生します。あなたのプロセスを作るデータ構造によって、実際に、実施のための待ち行列と呼ばれる見つけることができます。待ち行列は、それがのように聞こえることをされています。プロセスの一覧、我々は特定のイベントを待っています。

 

Linuxでは、によって、キュー内の構造物のwait_queue_head_tタイプを管理するために、「キューの先頭を待つ」、待ちキューの先頭の定義は、定義されたとは<linux / wait.h>使用時に初期化することができます。

 

DECLARE_WAIT_QUEUE_HEAD(名);

 

または動的に、としては、次のとおりです。

 

wait_queue_head_tのMY_QUEUE。init_waitqueue_head(&MY_QUEUE)。

 

私たちは、すぐにキュー構造に戻りますが、我々は最初の睡眠と覚醒を見に十分知っています。

おすすめ

転載: www.cnblogs.com/fanweisheng/p/11141829.html