プリエンプティブカーネルで失われたウェイクアップチャンスを処理しますか?

ダグラス・スー

通常、プロセスが利用できないイベントを待機したい場合は、プロセスをスリープ状態にして、後でイベントが発生したときにウェイクアップすることができます。

以下のよく知られたコードは、このタスクを実行します。

while (!events) {
    DEFINE_WAIT(wait);

    prepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE);
    if (!events)
        schedule();
    finish_wait(&q, &wait);
}

想像プリエンプティブカーネルプロセスAは、プロデューサとプロセスBは、消費者である、二つのプロセスが存在します。プロセスBは上記のコードを実行しており、プロセスAによって生成されたいくつかのデータが有効になるのを待っています。

さて、2つのプロセスの実行パスが以下のようになっていると、プロセスBはウェイクアップのチャンスを失うと思います。

  1. プロセスBはwhileステートメント内のイベントをチェックし、falseを返します。
  2. プロセスBが実行されDEFIN_WAIT(wait)ます。
  3. プロセスAは、プロセスBの実行が終了した直後、実行DEFIN_WAIT(wait)前にいくつかのデータを生成しprepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE);ます。
  4. プロセスBが実行されprepare_to_wait(&q, &wait, TASK_INTERRUPTIBLE);ます。
  5. プロセスBは、実行直前に他のプロセスにプリエンプトされif (!events)ます。

プロセスBの状態が現在であるため、TASK_INTERRUPTIBLECPUに再度スケジュールされることはありません。ですから、プロセスBは決して目覚めないだろうと思います。

Tsyvarev

最終的な判断は間違っています。プリエンプションはタスクの状態では機能しません。したがって、TASK_INTERRUPTIBLEプリエンプトされた状態のタスクでも、CPUを再び獲得できます。

たとえば、これまたはあれ参照してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

反応ネイティブチャットアプリケーションでGraphQlサブスクリプションを使用して、GraphQlクエリからリアルタイムの更新を取得するにはどうすればよいですか?

分類Dev

反応 - ネイティブ "Reduxのキャッチされないエラー:アクションは、プレーンなオブジェクトでなければなりません。ボタンを押して上の非同期アクションの使用カスタムミドルウェア

分類Dev

インバウンドアダプタ、アウトバウンドアダプタ、エラーチャネルを含み、同じCachingConnectionfactoryで設定されたフローでjmsセッションはどのように処理されますか

分類Dev

WPFアプリケーションのコントロールがフォーカスされている場合、アクティブなウィンドウタイトルのキャプチャに失敗しました

分類Dev

[INSTALL_FAILED_NO_MATCHING_ABIS:ネイティブライブラリの抽出に失敗しました。64ビットアーキテクチャにアプリをインストールしようとすると、res = -113になります。

分類Dev

ストアドプロシージャのアーキテクチャ-MVCアプリケーションでストアドプロシージャを処理する必要がありますか、それとも「ワーカーロール」に似たもので処理する必要がありますか?

分類Dev

.NETネイティブツールチェーンでコンパイルされたUWPアプリは、カスタムスタイルが原因で起動時にクラッシュします

分類Dev

フリップブックスタイルのボリュームテクスチャでハードウェアの3Dテクスチャサンプリングを使用するにはどうすればよいですか?

分類Dev

アーカイブの光沢のあるリアクティブスキャン、次にwrite()してダウンロード、cat()で失敗->引数タイプ「クロージャ」が処理されない

分類Dev

ループでチェックボックスを処理する方法ネイティブの反応

分類Dev

ウェブカメラからキャプチャした画像/フレームを使用して、同じスクリプトで後処理する方法

分類Dev

Angular 6アプリをデプロイした後、Firebaseホスティングでウェルカムページが表示されますか?

分類Dev

Pythonで別のアプリケーションからライブアクティビティをキャプチャして処理するにはどうすればよいですか?

分類Dev

非アクティブなFBOスロットにアタッチされたテクスチャをサンプリングできますか?

分類Dev

アクティブなウィンドウのスクリーンショットをキャプチャしますか?

分類Dev

アプリが起動したためにフォーカスが失われたウィンドウを取得できますか?

分類Dev

プロジェクトリアクターのフラックスは、エラーの処理中に失敗したアイテムを取得します

分類Dev

最初にチェックボックスをクリックすると、モーダルポップアップウィンドウが表示されます。オンセカンドクリックでチェックボックスのチェックを外すにはどうすればよいですか?

分類Dev

反応ネイティブアプリケーションでreduxを使用してデータをフェッチおよび表示していますが、バックエンドからのデータ変更時に更新されません

分類Dev

反応ネイティブアプリケーションでreduxを使用してデータをフェッチおよび表示していますが、バックエンドからのデータ変更時に更新されません

分類Dev

タスクマネージャーがジョブマネージャーへの接続に失敗する[ループバックまたはリンクローカルではないIPv4アドレスが見つかりませんでした。ローカルホストアドレスを使用します。]

分類Dev

Angularjsアプリケーションがマルチリクエストの処理に失敗しました

分類Dev

Linuxのユーザー空間にネイティブコードのプリエンプティブマルチタスクを実装できますか?

分類Dev

CakePHP:セキュリティコンポーネントからブラックホールをトリップせずに写真をキャプチャしてアップロードするにはどうすればよいですか?

分類Dev

パーティションテーブルが失われました-失われたLUKSパーティションを回復する方法、いくつかのバックアップパーティションデータがあります

分類Dev

アクティブなウィンドウスイッチをキャッチします(同じアプリケーション、たとえばChromeタブでも)

分類Dev

バックエンドを備えたネイティブデスクトップアプリのGoogleアカウントでの認証

分類Dev

ネットワークがアップした後にサービスを開始しているときに、「クライアントクリティカルインターフェイスeth0 / 2がダウンしているか、リンクローカルアドレスがありません」

分類Dev

ネットワークがアップした後にサービスを開始しているときに、「クライアントクリティカルインターフェイスeth0 / 2がダウンしているか、リンクローカルアドレスがありません」

Related 関連記事

  1. 1

    反応ネイティブチャットアプリケーションでGraphQlサブスクリプションを使用して、GraphQlクエリからリアルタイムの更新を取得するにはどうすればよいですか?

  2. 2

    反応 - ネイティブ "Reduxのキャッチされないエラー:アクションは、プレーンなオブジェクトでなければなりません。ボタンを押して上の非同期アクションの使用カスタムミドルウェア

  3. 3

    インバウンドアダプタ、アウトバウンドアダプタ、エラーチャネルを含み、同じCachingConnectionfactoryで設定されたフローでjmsセッションはどのように処理されますか

  4. 4

    WPFアプリケーションのコントロールがフォーカスされている場合、アクティブなウィンドウタイトルのキャプチャに失敗しました

  5. 5

    [INSTALL_FAILED_NO_MATCHING_ABIS:ネイティブライブラリの抽出に失敗しました。64ビットアーキテクチャにアプリをインストールしようとすると、res = -113になります。

  6. 6

    ストアドプロシージャのアーキテクチャ-MVCアプリケーションでストアドプロシージャを処理する必要がありますか、それとも「ワーカーロール」に似たもので処理する必要がありますか?

  7. 7

    .NETネイティブツールチェーンでコンパイルされたUWPアプリは、カスタムスタイルが原因で起動時にクラッシュします

  8. 8

    フリップブックスタイルのボリュームテクスチャでハードウェアの3Dテクスチャサンプリングを使用するにはどうすればよいですか?

  9. 9

    アーカイブの光沢のあるリアクティブスキャン、次にwrite()してダウンロード、cat()で失敗->引数タイプ「クロージャ」が処理されない

  10. 10

    ループでチェックボックスを処理する方法ネイティブの反応

  11. 11

    ウェブカメラからキャプチャした画像/フレームを使用して、同じスクリプトで後処理する方法

  12. 12

    Angular 6アプリをデプロイした後、Firebaseホスティングでウェルカムページが表示されますか?

  13. 13

    Pythonで別のアプリケーションからライブアクティビティをキャプチャして処理するにはどうすればよいですか?

  14. 14

    非アクティブなFBOスロットにアタッチされたテクスチャをサンプリングできますか?

  15. 15

    アクティブなウィンドウのスクリーンショットをキャプチャしますか?

  16. 16

    アプリが起動したためにフォーカスが失われたウィンドウを取得できますか?

  17. 17

    プロジェクトリアクターのフラックスは、エラーの処理中に失敗したアイテムを取得します

  18. 18

    最初にチェックボックスをクリックすると、モーダルポップアップウィンドウが表示されます。オンセカンドクリックでチェックボックスのチェックを外すにはどうすればよいですか?

  19. 19

    反応ネイティブアプリケーションでreduxを使用してデータをフェッチおよび表示していますが、バックエンドからのデータ変更時に更新されません

  20. 20

    反応ネイティブアプリケーションでreduxを使用してデータをフェッチおよび表示していますが、バックエンドからのデータ変更時に更新されません

  21. 21

    タスクマネージャーがジョブマネージャーへの接続に失敗する[ループバックまたはリンクローカルではないIPv4アドレスが見つかりませんでした。ローカルホストアドレスを使用します。]

  22. 22

    Angularjsアプリケーションがマルチリクエストの処理に失敗しました

  23. 23

    Linuxのユーザー空間にネイティブコードのプリエンプティブマルチタスクを実装できますか?

  24. 24

    CakePHP:セキュリティコンポーネントからブラックホールをトリップせずに写真をキャプチャしてアップロードするにはどうすればよいですか?

  25. 25

    パーティションテーブルが失われました-失われたLUKSパーティションを回復する方法、いくつかのバックアップパーティションデータがあります

  26. 26

    アクティブなウィンドウスイッチをキャッチします(同じアプリケーション、たとえばChromeタブでも)

  27. 27

    バックエンドを備えたネイティブデスクトップアプリのGoogleアカウントでの認証

  28. 28

    ネットワークがアップした後にサービスを開始しているときに、「クライアントクリティカルインターフェイスeth0 / 2がダウンしているか、リンクローカルアドレスがありません」

  29. 29

    ネットワークがアップした後にサービスを開始しているときに、「クライアントクリティカルインターフェイスeth0 / 2がダウンしているか、リンクローカルアドレスがありません」

ホットタグ

アーカイブ