ホームページ php教程 PHP开发 Linux デバイスドライバー割り込みの詳細な分析 (1) (2)

Linux デバイスドライバー割り込みの詳細な分析 (1) (2)

Dec 23, 2016 pm 02:31 PM

4. 割り込みハンドラー

Linux の割り込みハンドラーは、上半分 (上半分) と下半分 (下半分) の 2 つの部分に分かれています。上半分と下半分がある理由はひとえに割り込み処理の効率化によるものです。

上半分の機能は「登録中断」です。割り込みが発生すると、デバイス ドライバーの割り込みルーチンの下半分がデバイスの実行キューの下半分にハングされ、その後は問題なく、新しい割り込みが到着するのを待ちます。このようにして、上半分は迅速に実行され、彼女が担当する機器によって生成されるより多くの中断を受け入れることができます。上部の方が速い理由は、実行が完了しない場合、他の割り込みの処理が間に合わず、割り込みハンドラが実行されるまで待つことしかできないためです。したがって、デバイスによって生成されるできるだけ多くの割り込みを処理および処理するには、割り込みハンドラーが高速である必要があります。

ただし、一部の割り込みイベントの処理はより複雑なので、割り込みハンドラーが処理を完了するまでにもう少し時間がかかる必要があります。しかし、複雑な処理を短時間で完了させるという矛盾をどう解決するか、このときLinuxは下半分の概念を導入しました。下半分と上半分の最大の違いは、下半分は中断可能であるのに対し、上半分は中断不可能であることです。

下半分は、割り込みハンドラーが行うことのほぼすべてを実行します。上半分は、下半分を担当デバイスの割り込み処理キューにキューに入れるだけで、後は何も気にしないからです。下半分は通常、デバイスを監視して割り込みを生成するイベント情報を取得し、この情報 (通常はデバイス上のレジスタを読み取ることで取得) に基づいて対応する処理を実行する役割を担います。後半で何をすべきかわからない場合は、有名なダチョウのアルゴリズムを使用して問題を解決します。率直に言って、イベントを無視します。

下半分は割り込み可能なため、実行中に他のデバイスが割り込まれた場合、そのデバイスの上半分の実行が終了するまで待ってから、再度実行することができます。ただし、注意しなければならない点が 1 つあります。つまり、デバイス割り込みハンドラーが実行されている場合、上半分が実行されているか下半分が実行されているかに関係なく、割り込みハンドラーが処理されない限り、その間にデバイスによって新しい割り込みが生成されます。この期間は割り込みは無視されます。割り込みハンドラはリエントラントではないため、同じ割り込みハンドラを並列実行することはできません。

Linux カーネル 2.0 より前では、割り込みは高速割り込みと低速割り込みに分割されていました (ここでは擬似割り込みについては説明しません)。高速割り込みの下半分も割り込み不可なので、より高速に実行できます。しかし、ハードウェアのレベルが向上し続けると、高速割り込みと低速割り込みの実行速度に差がなくなるため、割り込みルーチンのトランザクション処理の効率を向上させるために、Linux カーネル 2.0 からはすべての割り込みハンドラが組み込まれます。スロー割り込みの形式 - 下半分は割り込み可能です。

ただし、後半では、コードの特定の部分を中断できない場合に、中断をマスクすることもできます。 cti、sti、または save_flag、restore_flag を使用してアイデアを実現できます。使い方や違いについては、本記事の指定参考書の割り込み処理の章を参照してください。

詳細については、この記事で指定されている参考書籍を参照してください。ここでは詳細を説明することは目的ではありません。概念を整理することが目的です。

5. 割り込みフラグビットを設定します

割り込みを処理するとき、割り込みコントローラーは、送信した最後の割り込みが処理されるまで、最初に割り込みを送信したデバイスをブロックします。したがって、割り込みを送信したデバイスが割り込み処理中に別の割り込みを送信すると、その割り込みは永久に失われます。

これが起こる理由は、割り込みコントローラーが割り込み情報をバッファーできないためです。そのため、現在の割り込みが処理される前に新しい割り込みが到着すると、新しい割り込みは確実に失われます。ただし、メインプロセッサ(CPU)には割り込みをバッファリングする機能があるため、この不具合はメインプロセッサ(CPU)上で「割り込みフラグ設定」(sti)をセットすることで解決できます。 「割り込みフラグビットの設定」を使用すると、割り込みの処理後に、以前にマスクされた割り込みを処理するために sti 関数を使用できます。

上記は、Linux デバイス ドライバーの割り込み (1) (2) の詳細な分析です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

マルチスレッドをC言語で実装する4つの方法 マルチスレッドをC言語で実装する4つの方法 Apr 03, 2025 pm 03:00 PM

言語のマルチスレッドは、プログラムの効率を大幅に改善できます。 C言語でマルチスレッドを実装する4つの主な方法があります。独立したプロセスを作成します。独立して実行される複数のプロセスを作成します。各プロセスには独自のメモリスペースがあります。擬似マルチスレッド:同じメモリ空間を共有して交互に実行するプロセスで複数の実行ストリームを作成します。マルチスレッドライブラリ:pthreadsなどのマルチスレッドライブラリを使用して、スレッドを作成および管理し、リッチスレッド操作機能を提供します。 Coroutine:タスクを小さなサブタスクに分割し、順番に実行する軽量のマルチスレッド実装。

web.xmlを開く方法 web.xmlを開く方法 Apr 03, 2025 am 06:51 AM

web.xmlファイルを開くには、次の方法を使用できます。テキストエディター(メモ帳やテキストエディットなど)を使用して、統合開発環境(EclipseやNetBeansなど)を使用してコマンドを編集できます(Windows:Notepad web.xml; Mac/Linux:Open -A Textedit Web.xml)

PythonインタープリターはLinuxシステムで削除できますか? PythonインタープリターはLinuxシステムで削除できますか? Apr 02, 2025 am 07:00 AM

Linux Systemsに付属するPythonインタープリターを削除する問題に関して、多くのLinuxディストリビューションは、インストール時にPythonインタープリターをプリインストールし、パッケージマネージャーを使用しません...

Linuxは何に最適なものですか? Linuxは何に最適なものですか? Apr 03, 2025 am 12:11 AM

Linuxは、サーバー管理、組み込みシステム、デスクトップ環境として最適です。 1)サーバー管理では、LinuxはWebサイト、データベース、アプリケーションをホストするために使用され、安定性と信頼性を提供します。 2)組み込みシステムでは、Linuxは柔軟性と安定性のため、スマートホームおよび自動車電子システムで広く使用されています。 3)デスクトップ環境では、Linuxは豊富なアプリケーションと効率的なパフォーマンスを提供します。

Debian Hadoopの互換性はどうですか Debian Hadoopの互換性はどうですか Apr 02, 2025 am 08:42 AM

DebianLinuxは、その安定性とセキュリティで知られており、サーバー、開発、デスクトップ環境で広く使用されています。現在、DebianとHadoopとの直接的な互換性に関する公式の指示が不足していますが、この記事では、DebianシステムにHadoopを展開する方法について説明します。 Debianシステムの要件:Hadoop構成を開始する前に、DebianシステムがHadoopの最小動作要件を満たしていることを確認してください。これには、必要なJavaランタイム環境(JRE)とHadoopパッケージのインストールが含まれます。 Hadoop展開手順:Hadoopをダウンロードして解凍:公式ApachehadoopのWebサイトから必要なHadoopバージョンをダウンロードして解決します

GOを使用してOracleデータベースに接続するときにOracleクライアントをインストールする必要がありますか? GOを使用してOracleデータベースに接続するときにOracleクライアントをインストールする必要がありますか? Apr 02, 2025 pm 03:48 PM

GOを使用してOracleデータベースに接続するときにOracleクライアントをインストールする必要がありますか? GOで開発するとき、Oracleデータベースに接続することは一般的な要件です...

Debian文字列は、複数のブラウザと互換性があります Debian文字列は、複数のブラウザと互換性があります Apr 02, 2025 am 08:30 AM

「DebianStrings」は標準的な用語ではなく、その特定の意味はまだ不明です。この記事は、ブラウザの互換性について直接コメントすることはできません。ただし、「DebianStrings」がDebianシステムで実行されているWebアプリケーションを指す場合、そのブラウザの互換性はアプリケーション自体の技術アーキテクチャに依存します。ほとんどの最新のWebアプリケーションは、クロスブラウザーの互換性に取り組んでいます。これは、次のWeb標準と、適切に互換性のあるフロントエンドテクノロジー(HTML、CSS、JavaScriptなど)およびバックエンドテクノロジー(PHP、Python、Node.jsなど)を使用することに依存しています。アプリケーションが複数のブラウザと互換性があることを確認するには、開発者がクロスブラウザーテストを実施し、応答性を使用する必要があることがよくあります

See all articles