Linuxシステムコールと割り込み解像度

Linuxシステムコールと割り込み解像度

システムコールと割り込みの構造図

著者:トマトの風味BAKの
リンク:https://www.zhihu.com/question/30432536/answer/54998416
出典:ほとんど知っている
著者が著作権を保有。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。

割り込み:としても知られている非同期割り込み、他のハードウェアランダムに生成されたCPUクロック信号に応じてさん。中断は、に分割されているマスク可能ハードウェア割り込みノンマスカブル割り込み原則的にコンピュータコースは、そのような信号割り込み8259A管理などの2本の割り込み信号を受信するための責任プロセッサのピンNMIやINTR、だけでなく、高度なプログラマブル割り込みコントローラ(APIC)は、あります。ハードウェア割り込みが遮蔽されてもよい:任意のINTR信号がマスク可能ハードウェア割り込みと呼ばれる割り込みプロセッサまたはローカルAPICにより、IOデバイスによって生成されたIRQ(割り込み要求)マスク可能ハードウェア割り込みです。しかし、INTRピンマスク可能ハードウェア割り込みを通過させることによって、インテル・アーキテクチャーに割り込みベクタ(0-255)を使用して定義され、いくつかのローカルAPICは、ベクタ番号16から255を使用して送信されてもよいです。割り込み信号がピンNMIを介して送信される場合は、ノンマスカブル割り込みで起こります。

私たちの共通の、キーボード、ネットワークカードの入力が非同期の割り込みであると同様、非同期割り込み(ハードウェア割り込み)処理アセンブリ言語で、私たちはAを学びました

ノンマスカブル割り込み要求元たら、CPUは無条件に対応しなければならない、とマスカブル割り込み要求元、CPUの応答のために、応答しないことがあります。マスク可能な割り込み要求INTR(割り込み要求)とノンマスカブル割り込み要求NMI(ノンマスカブル割り込み):要求割り込みCPUは、一般に、2本の入力ラインが設けられています。ビットが1である場合(割り込みフラグ)CPU内のフラグが、CPUを得ることができればマスク可能な割り込みのために、それ自体が、マスクビットの添加によって制御するだけでなく、全体的な制御の対象となる、すなわち、割り込み制御レジスタは、イネーブルフラグ応答、そうでない場合は、応答がありません。ビットは、ユーザが制御することができ、またはSTI命令は、(割り込みオフ)1(ブレーク上の)IF位置、CLIまたはTurbo_c()関数の無効コマンド、0にIFビットを()関数のターボCを有効にした場合。

ノンマスカブル割り込みソースの代表的な例としては、停電で一度そこに、あなたは即座に無条件に応答、または任意の他の作業を実行する必要があり無意味です。

マスク可能な割り込みソースの典型的な例は、割り込みプリンタであり、要求割り込みCPUにプリンタ応答を速くすることができるメークに子供用のプリンタ待機が完全に可能であるため、また、より遅いことができます。
----------------
免責事項:この記事はCSDNブロガー「lidandan2016の元記事である、CC 4.0 BY-SAの著作権契約書に従ってください、複製、元のソースのリンクと、この文を添付してください。 。
オリジナルリンク:https://blog.csdn.net/lidandan2016/java/article/details/53437273

異常:としても知られている同期割り込み場合、命令を実行する CPU制御ユニットは生成 CPUのみ終了割り込みつの命令を実行した後に発行されるため、同期と呼ばれます。実装プロセスの継続性を失うことなく、同時に、異常な命令によって引き起こされる再実行し、それらが報告された方法によれば、障害は、に分類するか否か誤差トラップ、及び終了 3つの場合。

エラー:エラーが訂正後、異常で一般的に修正することができ、その後、プログラムは連続性を失うことなく実行することができます。エラーが発生した報告すると、プロセッサが実行エラーに前の状態にマシンの状態を復元します。間違った命令ではなく、エラーコマンドにルーチンの戻りアドレスのポインティングエラー処理後の命令から。このようなページエラーなど。

トラップ:トラップを発生させた命令は、すぐに例外を発生させます。トラップは、プログラムが継続性を失うことなく継続することができます。トラップトラップリターンアドレスは、次の命令(エラーの性質の違い)を指して生じたルーチン命令を扱います。このようなオーバーフローなど。

終了:それは常に位置指令例外を決定するためにレポートを生成しません、プロセスの終了を引き起こすことが許可されていないか、タスクを再実行してください。このような異常終了の原因バスエラーなど。


割り込みベクタでのLinuxの場合:

ノンマスカブル割り込みと例外に対応する0-19割り込みベクタ。

20-31Intelの予約

32-127マスク可能ハードウェア割り込み

システムコール128のためのプログラム可能な異常

129から238のマスク可能ハードウェア割り込み

239ローカルAPICタイマ割り込み

高温割り込み240ローカルAPIC

Linuxが将来の使用のために予約241-250

プロセッサ間割り込み251〜253

254ローカルAPICエラー割り込み

ローカルAPIC 255ダミー割り込み(割り込みがマスクで生成されたCPU)

また、主にシステムコール、すなわち* int型は0x80 *デバッガとソフト割り込みが異常であるので、特定のイベントを通知するために、ソフト割り込みプログラミング異常として知られ、同期割り込みです。

私たちのシステムコールは、ベースのソフト割り込みを実装している:注は、私が実装されているソフト割り込みシステムコールに基づいていると言うことを、ソフト、システムコールが中断されていないこと!この視点以下の原則を知っているシステムコール

Linuxシステムでは、割り込みや呼び出しを処理します

私たちは、割り込みハードウェア割り込みと呼ばれた後に入れても、例外を使用我々は、システムコール、例外やその他のハードウェア割り込みに焦点を当てた後、システムコールは、区別を表示します

割り込み、例外とシステムコールの処理の流れ

図のこのペアで、私たちは、見ることができます主にシステムコールを介してユーザとカーネルの間の相互作用を、主に外部ハードウェア割り込みを通じてカーネルとデバイス間の

システムコールの実行

  1. システムコール(int型は0x80、SYSENTER、システムコール)特定の命令を発行します

    int型は0x80は例外のためのプログラム可能なシステムコールで、当然のことながら、これが原因割り込みモードによって開始されたシステムコールのパフォーマンスの低下に、ちょうど達成するための方法の一つである、CPU以降のカーネルは、これら二つのシステムコールSYSENTERと特別な指示の使用をサポートシステムコールを開始します。前記SYSENTER用いて32ビットシステム、出口SYSEXITに対応する命令;システムコールの64ビットシステムでは、対応する命令出口SYSRET。

  2. CPUは、カーネルモードで、いくつかのレジスタと環境設定にユーザーモードから切り替えられました

  3. SYSTEM_CALLカーネル関数の呼び出しによって、システムコール番号システムコールテーブルに対応するサービスルーチンを取得

  4. システムコールハンドラ

  5. 特定の命令を使用して、システムからユーザモード(IRET、SYSEXIT、SYSRET)への復帰を呼び出し

私たちは見ることができ、異なるハードウェア割り込みは、ソフトウェアは、オペレーティングシステムのカーネル・プロセスによって基本的に中断しました。そして、すべてのシステムコールは、唯一の割り込みベクタを使用します

実行ハードウェア割り込み

  1. 駆動装置カーネルに独自の割込みハンドラは、カーネルは、割り込みベクタテーブルの初期化、割り込みベクタテーブル関数処理割り込み割り込みベクタにドライバを有する場合にロードされます

割り込みベクタ:セグメント・ベース値とオフセット割込みサービス・ルーチンのエントリ・アドレスであり、4バイトの割り込みベクタは、空間を占めます。割り込みベクタテーブルは、スペースの1Kバイト最もローエンドのシステム・メモリ8088であり、その役割は、割り込みベクトルを対応するストレージの昇順に割り込み番号の種類に応じて、256個の割込みベクトルの合計が格納されています。割り込み処理では、割込みのテーブルで、取得した位置ベクトルに対応する割込み種別番号(割込みベクタ番号)インタフェース回路を計算することによりCPU、及び、割り込みベクタテーブルから割り込みベクタ、割り込みサービス・ルーチンのエントリにプログラムの流れを得ますアドレス。

  1. 割り込みをチェックするために、検出のサイクルを終了CPUの命令実行の週では、割り込みサイクルは、割り込み要求を入力したと扱うことができ、ブレークポイントの保存、準備作業をやって起動割り込みベクタ(割り込みハンドラのエントリアドレス)を決定し、その後に設定PCは、それがフェッチして実行します。

  2. 外部装置の底部との通信に使用するコンピュータが中断された:ハードウェア(例えば、キーボードを押した)電気信号をトリガ信号ブレークスルーは、到達するために、割り込みコントローラi8259A、i8259Aをこの信号が受信された後、CPUは、送信INTを信号アプリケーションCPUは、単にハードウェアの動作を実行し、そしてう型番割り込みもCPUに送られました

  3. CPUは、割り込みベクタテーブルをチェックするために中断した後に、割り込みサービスルーチンを見つけ、ルーチン呼び出し外部装置と対応するデバイスドライバとの間の通信

それはまれオペレーティングシステムのカーネルに一部関連し、CPUの仕事の基本的なハードウェア割り込みで見ることができます

同様に、割り込みベクタについての詳細は、達成するために、あなたがこの記事を見ることができます:https://www.cnblogs.com/frankyou/p/8649435.html

参照

  1. https://blog.csdn.net/weixin_41376979/article/details/83756975?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
  2. https://www.cnblogs.com/answercard/p/4288431.html
  3. https://www.zhihu.com/question/30432536
  4. https://blog.csdn.net/dillanzhou/java/article/details/82733562
  5. https://www.cnblogs.com/frankyou/p/8649435.html

おすすめ

転載: www.cnblogs.com/jiading/p/12606978.html