OSノート1割り込み異常とシステム呼び出しメカニズム

5685 ワード

プロセッサー
CPUは、演算器、コントローラ、一連のレジスタおよびキャッシュCacheから構成される.
  • の2種類のレジスタ:
  • のクラスはユーザ可視レジスタであり、高度な言語コンパイラはアルゴリズムを最適化することによってこれらのレジスタを割り当て、これらのレジスタを使用し、主な目的はメモリへのアクセス回数を減らし、プログラムの実行効率を高めることである.
  • のクラスは、制御およびステータスレジスタである.これらのレジスタはプロセッサを制御するための動作であり、通常はオペレーティングシステムコードでしか使用できない.


  • 一般的な制御とステータスレジスタ:
         (PC program counter),            
         (IR instruction register),         
         (PSW program status word),             、      
    

    オペレーティング・システムの要件-保護
    オペレーティングシステムの特徴:同時、共有、保護と制御を要求し、ユーザープログラムとユーザープログラムの間に干渉せず、ユーザープログラムはオペレーティングシステムに干渉しない.ハードウェアに対してこのような基本的な動作メカニズムを提供することを望んでいる.すなわち、CPUは、オペレーティングシステムとユーザプログラムの分離を達成するために、異なる特権レベルで異なる命令セットを実行することができる特権レベルを有する.
    プロセッサの状態(モードMODE)
    CPUの状態は2種類の3種類あるいは4種類に分けられて、大部分の私達のよく知っているオペレーティングシステム、Linux、Windows、Unix、すべてR 0とR 3のこの2つの特権のレベルだけを選んだので、プログラムの状態の字のレジスタPSWの中でもっぱら1位を設けて制御します.
    OSには2つのCPUステータスが必要です.
  • カーネル状態管理kernel mode:オペレーティングシステムプログラムを実行し、IOの制御、メモリの管理、ステータスワードの変更、クロックの設定、割り込みの設定などの特権命令を実行できます.
  • ユーザー状態user mode:ユーザープログラムを実行し、非特権命令しか実行できません.例えば、訪問管理命令(陥没命令)、算術演算、制御移行、取数命令などです.

  • アクセス管理命令は特殊な命令であり、オペレーティングシステムの機能を呼び出すためにユーザープログラムに提供される口実である.例えば:int,trap,syscall
    2つの状態の変換:
  • ユーザー・ステータスからカーネル・ステータスへ:割り込み/例外/陥没メカニズムが唯一の方法です.
  • カーネル状態からユーザ状態へ:PSWを設定します.

  • 中断と異常メカニズムの概念
    オペレーティングシステムは「割り込み駆動」であり、各種要求をタイムリーに処理し、破壊的な活動を防止し、システムの信頼性と正常な動作を維持することができると言える.
    割り込みと異常の概念:CPUがシステムで発生したあるイベントに対する反応.実行中のプログラムを一時停止し、現場を保持した後、対応するイベントの処理プログラムを実行し、処理が完了した後、ブレークポイントに戻り、中断されたプログラムを実行し続けます.割り込みは、CPUとデバイス間の並列動作をサポートします.異常とは、CPUが命令を実行する際に発生する問題を示し、広義の割り込みには異常が含まれる.
    割り込みと例外
  • 割り込み(外部割り込み):外部IOデバイス、その他のハードウェアによって引き起こされる.I/O割込み、メモリチェック、クロック割込み、ハードウェア障害など、シールド可能非シールドに分けられます.常に次のコマンドに戻ります.
  • 異常(内部割り込み):現在の実行命令によって開始されます.システム呼び出し、ページ障害、境界外、ブレークポイント命令、プログラム異常
  • 故障Fault:回復可能なエラー、次の指令除零
  • に戻る
  • トラpに陥る:意識的に手配され、現在の命令、例えばブレークポイントに戻り、命令
  • に陥る.
  • 異常中止Abort:回復不可能なエラー、
  • は返されません.

    中断と異常メカニズムの動作原理
    ハードウェアとソフトウェアは互いに協力し合い、ハードウェアは応答を完了し、ソフトウェアは処理を完了する.命令が実行されるたびに、プロセッサは中段レジスタをスキャンし、割り込み信号があれば、割り込みハードウェアは割り込みトリガの内容を所定の符号化でPSWの該当ビットに送り込み、割り込み符号となり、ハードウェアは割り込みベクトルテーブルを調べることによって割り込み処理プログラムを引き出す.割り込み処理プログラムを実行します.
    割り込みベクトルテーブルは、ソフトとハードを組み合わせたデータ構造です.
    割り込みベクトルは、割り込み処理プログラムを格納するメモリユニットのエントリアドレスプログラムとプログラムステータスワードである.
    割り込み/例外メカニズム(ソフトウェアはハードウェアコンポーネントを事前に設定して実行)
  • は、CPUに割り込み信号(ハードウェア)
  • を送る.
  • CPUは、現在の指令を処理する後、スキャンにより割り込みを検出し、割り込み源を判断する、関連機器に確認信号(ハードウェア)
  • を送信する.
  • CPUはソフトウェア処理中断の準備を開始した:状態をカーネル状態に切り替え、重要なレジスタ内容をシステムスタックに保存し、主にPC、PSWを指す.(ハードウェア)
  • CPUは、割り込みコードに従って割り込みベクトルテーブルを照会し、割り込み処理プログラムのエントリアドレスを取得し、PCをこのアドレスに設定し、新しい指令周期が開始されると、CPU制御を割り込み処理プログラムに移行する.(ハードウェア)
  • は処理プログラムを中断して動作を開始し,それほど重要でないレジスタの情報を保存し,システムスタックに現場情報を保存するなど比較的具体的な動作を行う.(ソフトウェア)//I/O操作にエラーが発生した場合、操作を繰り返し、上限回数に達した後、ハードウェア障害を判定します.
  • 割り込み処理が終了し、CPUは割り込み復帰指令をモニタし、割り込み前の状態に復帰する.(ハードウェア)
  • システム呼び出しメカニズム
    システム呼び出し:ユーザーがプログラミング時に呼び出すことができるオペレーティングシステム機能は、オペレーティングシステムがプログラマに提供する唯一のインタフェースであり、CPU状態をユーザー状態からカーネル状態に陥れる.
    システム呼び出し、ライブラリ関数、API、カーネル関数の区別
  • アプリケーションは直接システム呼び出しを呼び出すことができるが、通常、アプリケーションはライブラリ関数またはAPIのインタフェースを介して間接的にシステム呼び出し
  • を呼び出す.
  • オペレーティングシステムのカーネルでは、多くのカーネル関数が提供されています.これらのカーネル関数はパッケージ化されています.実際には、ライブラリ関数またはAPIインタフェース
  • に提供されています.
  • カーネル関数は、システム呼び出しのプロセッサ
  • である.
  • ライブラリ関数には、システム呼び出しが1つ含まれる可能性があり、いくつかのシステム呼び出しがある可能性があります.もちろん、システム呼び出しがない可能性もあります.カーネルに関連する機能を必要としない操作もあります.
  • ライブラリ関数呼び出しは言語またはアプリケーションの一部であり、システム呼び出しはオペレーティングシステムの一部である.
  • アプリケーションの使用の観点から、ライブラリ関数はシステム呼び出しと変わらない.しかし、実現の観点から見ると、二つには大きな違いがある.

  • システム呼び出しメカニズムの設計
  • 割り込み/異常メカニズムは、システム呼び出しサービスの実装
  • をサポートする.
  • 特殊指令を選択:訪問管指令が異常を起こし、カーネル状態(ソフトブレーク)
  • に切り替える
  • システム呼び出し番号とパラメータ各システム呼び出しには事前に1つの番号が与えられており、伝送の実現は一般的に汎用レジスタによってパラメータが伝達されるが、パラメータの個数は限られている.また、スタック伝達パラメータ
  • は、陥没命令に付随するパラメータまたはメモリにおいて開くこともできる.
  • システム呼び出しテーブル格納システム呼び出しサービスルーチンのエントリアドレス
  • システム呼び出しの例
    cコード
    write(1,string,7)return 0

    アセンブリ言語
    	mov $4, %eax                 					#eax       
    	mov $1, %ebx									#    
    	mov $output, %ecx
    	mov $len, %edx
    	int $0x80										#        
    end:
    	mov $1, %eax
      	mov $0, %ebx
      	int $0x80										#           
    

    システムコール実行プロセス
  • 割り込み異常メカニズム:ハードウェア保護現場、割り込みベクトルテーブルを検索し、制御権をシステム呼び出し総エントリプログラムに転送する.
  • システム呼び出し総エントリプログラム:現場を保存し、パラメータを保存し、レジスタを利用してシステム呼び出しエントリテーブルを検索し、このシステム呼び出しのサービス履歴のエントリアドレスを見つける.
  • システム呼び出しルーチン
  • を実行する.
  • は現場を回復し、ユーザープログラム
  • に戻る.