kernel:about "割り込み/シグナル"

  • kernelはCPUリソースを最大限有効活用するために1つの処理の完了を待たずに他の処理を行う
  • kernelはCPUに対して"割り込み"を指示することにより、CPUは現在の処理から他の処理の実行へと切り替えを行う

割り込み

  • 割り込みとそれに対応する処理はkernelの起動時に定義されている
  • kernelはファイルの入出力処理を開始する前に、完了時の処理を登録する
  • kernelの指示に従い、CPUはファイルの入出力開始命令を発行する
  • HDDからのファイルの読み書き処理を行っている間に、CPUは他の処理を行う
  • ファイルの読み書き処理で待ち状態となっていた処理が完了した時点で"割り込み"が発生する
  • 割り込みに従い、CPUは入出力処理の完了処理を実行する
    • 入出力処理はミリ秒単位、CPUはナノ秒単位で処理を実行するため、CPUは入出力処理待ちの間に100万以上の命令を処理することができる
  • kernelは定期的な割り込み処理を使用して時刻管理を行う

システムコール

  • ユーザプログラムがkernelを呼び出す際には"システムコール"が使用される
  • システムコールはその処理の中で割り込みを使用する
  • システムコールを利用して割り込みによりCPUモードの変更を行うことにより、ユーザプログラムは特権モードによる処理を実行する
    • 特権モードが必要になる処理としては、物理メモリの操作やHDDへの読み書き、ネットワークを使用したデータの送受信などのハードウェアリソースを使用する命令がある

シグナル

  • kernelは"シグナル"という機能により、ユーザによる割り込み処理と同様の仕組みの利用を提供する
  • シグナルに対する処理を事前に定義することにより、特定の事象が生じた場合に登録した処理を実行する
    • 処理の種類としては、同期的な事象と非同期的な事象がある
  • 同期的な事象:プログラムによる命令実行によるエラー処理など
  • 非同期的な事象:プログラムの命令とは無関係に発生するキーボードからの割り込み処理やタイマー処理など
  • kernelはハードウェアからの割り込みを受け取り、ユーザプログラムに対してシグナルを送信する