[TIL]オペレーティングシステム恐竜書Chapter 1.1-1.2


コンピュータの基本的なハードウェアから、ハードウェアを管理するオペレーティングシステムまで、CSの基礎を固めるために、恐竜の本を読むことにしました.

オペレーティングシステムは、コンピュータユーザとコンピュータハードウェアとの間で仲介者として機能する.

ターゲットGoals

  • コンピュータシステムの一般的な構成および割り込みの役割について説明する.
  • 現代マルチプロセッサコンピュータシステムの構成部分について説明する.
  • ユーザモードからカーネルモードへの変換について説明する.
  • の複数のコンピューティング環境でオペレーティングシステムをどのように使用するかについて説明します.
  • オープンソースオペレーティングシステムの例を示します.

  • 1.1. オペレーティングシステムがやるべきこと


    ハードウェアは、中央プロセッサ(CPU)、メモリ、I/Oデバイスで構成され、基本的なコンピューティングリソースをサポートします.
    アプリケーションword、Excel、コンパイラ、Webブラウザなどは、これらのリソースが~をどのように使用するかを定義し、~計算の問題を解決します.
    オペレーティングシステムは異なるユーザーのために異なるアプリケーション間のハードウェアの使用を制御し、調整します!!

    1.1.1. ユーザーの観点

    - Personal Computer System은 한 사용자가 자원을 독점하도록 설계됨, 사용자가 수행하는 작업을 최대화하는 것
    	- 사용의 용이성↑을 위해 설계, 자원의 이용↓에는 전혀 신경쓰지 않는다.

    1.1.2. システム観点

    - Computer 관점에서 운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램
    - 자원 할당자(Resource allocator)
    - 제어 프로그램(Control program)

    1.1.3. OS定義

  • コア
  • システムプログラム
  • アプリケーション
  • 最初の3つの部分からなる
    オペレーティングシステムには、頻繁に実行されるカーネル、アプリケーションの開発と機能の提供に便利なミドルウェアプログラム、およびシステムの実行中にシステムの管理を支援するシステムプログラムが含まれます.
    なぜオペレーティングシステムを学ぶ必要がありますか?!
    すべてのコードがオペレーティングシステム上で実行されるため、オペレーティングシステムの起動知識は、適切で効率的で効率的で安全なプログラミングにとって非常に重要です.
    オペレーティングシステムの基本的な知識、コンピュータのハードウェア駆動方法、アプリケーションに提供される内容を理解することは、プログラマーにとって役立つ場合があります.

    1.2. コンピュータシステムの構成コンピュータ-システム組織


    現代の汎用コンピュータシステムは、共通バスを介して1つ以上のCPU、コンポーネント、および共有メモリ間のアクセスを提供する複数のデバイスコントローラから構成される.

    1.2.1. わりこみわりこみわりこみ


    コンピュータのI/O操作
    1.デバイスドライバは、デバイスコントローラの適切なレジスタに値をロードする
    2.デバイスコントローラは、これらのレジスタの内容を確認し、実行する操作を決定する.
    e.g.キーボードから文字を読み出す
    3.コントローラは、デバイスからローカルバッファへのデータの転送を開始します.
    4.データ転送が完了すると、デバイスコントローラはデバイスドライバの操作が完了したことを通知します.
    5.デバイスドライバは、要求の読み出し時にデータまたはデータへのポインタを返し、オペレーティングシステムの他の部分に制御権を渡す.
    他の操作では、デバイスドライバは、書き込み完了やデバイス使用中などのステータス情報を返します.
  • コントローラが完了したことをデバイスドライバに知らせる方法->中断!
  • 1.2.1.1. 概要


    ハードウェアは、いつでもシステムバスを介してCPUに信号を送信し、割り込みを発生させることができる.
    CPUが中断すると、CPUは動作を停止し、直ちに運転を固定位置に移行する.
    割り込みサービスルーチンの実行が完了すると、CPUは割り込みの演算を再開する.
    割り込みは、適切なサービスインスタンスを介して制御を伝達する.
    割り込みには迅速な処理が必要ですが、必要な速度を提供するために、割り込みルーチンのポインタテーブルを使用できます.
    この場合、中間ルーチンを必要とせずに、表から割り込みルーチンを間接的に呼び出すことができます.
    ポインタのテーブルはサブメモリに格納されます.(上位100箇所)
    これらのロケーションには、複数のデバイスの割り込みサービスルーチンのアドレスが含まれます.
    要求が中断された場合、中断されたデバイスに中断サービスルーチンのアドレス~アドレスの配列(すなわち、中断バックエンド~)が、中断要求とともに所与の一意のデバイス番号(Indexing)にインデックスされる.
    わりこみこうぞう
  • 割り込みのすべての情報->割り込み処理を保存すると、この情報を復元できます.
  • 割り込みルーチンがプロセッサの状態を変更する必要がある場合、割り込みルーチンは現在の状態を明示的に保存し、戻る前に状態を回復する必要があります.
  • サービス終了
  • が中断すると、保存した戻りアドレスをプログラムカウンタ->停止外の演算にロードし、
  • を再起動する.

    1.2.1.2. インプリメンテーション


    デフォルトの割り込みメカニズム
  • CPUハードウェアには割り込み要求線という線
  • がある.
  • CPUは、1つのコマンドの実行が完了するたびに、このライン
  • を検出する.
  • コントローラは、割り込み要求線に信号
  • を送信する.
  • が検出すると、割り込み番号を読み出して割り込みベクトルのインデックスとして使用し、割り込みハンドルルーチン
  • にジャンプする.
  • インデックス関連アドレスから
  • が実行する.
    割込み処理ルーチン
  • 割り込みプロセッサは、実行時にステータス変更
  • を保存することができる.
    チェック
  • 中断原因
  • 必要な処理
  • を実行する.
  • 実行状態回復
  • return from interruptコマンド
  • を実行
  • CPUは、割り込み前運転状態
  • に復帰する.

    フルプログラム

  • デバイスコントローラは、割り込み要求線に信号
  • を送信する.
  • raise割り込み
  • catch CPUキャプチャ割り込み
  • dispatch割込みハンドル派遣
  • clear Handlerは設備を修理し、中断をクリアします.

  • 基本割り込み技術により、CPUは、デバイスコントローラがサービスを準備している場合などの非同期イベントに応答することができる.
    しかし、最新のオペレーティングシステムでは、より細かい割り込み処理機能が必要です.
    最新のコンピュータハードウェアは、CPUおよび割り込み制御ハードウェアに以下の機能を提供します.
    1.重要処理における遅延割込み処理
    2.適切な割り込み処理プログラムを使用して効率的に設備を派遣する
    3.オペレーティングシステムは、優先度の高い割り込みと優先度の低い割り込みを区別し、適切な緊急応答のマルチレベル割り込み構成を提供することができる
    バックエンドわりこみぎじゅつ
  • サービスを必要とするデバイスを特定するためには、割り込みハンドラが可能なすべての割り込みソースを検索する必要を低減する必要がある.
  • しかし、実際のコンピュータでは、割り込みベクトルのアドレス個数よりも多くのデバイスがある.
  • 割り込みチェーンを使用して、上記の問題を解決することができる.
  • 割り込みベクトルの各要素は、割り込みハンドルリストのヘッダを指します.
  • 割り込みが発生した場合、処理要求が検出されるまで、対応するリスト内のプロセッサが1つずつ呼び出されます.
  • この構造は、大きな割り込みテーブルのオーバーヘッドと割り込みハンドルを使用してdispatchを行う低効率のトレードオフスキームである.
  • 1.2.2. きおくこうぞう


    RAMは揮発性であるため、ブートプログラムはEEPROMおよび他の形式のファームウェアを使用する.
    すべての形式のメモリはバイトの配列を提供します.
    各バイトには独自のアドレスがあります.
    インタラクションは、特定のメモリアドレスに対する一連のロードおよびストレージコマンドによって実現される.

    1.2.3. I/O構造


    OSコードの大部分はI/O管理用です.
    割込み駆動I/Oの形態は少量のデータ移動に有利であるが、NVS I/Oのような帯域幅データ移動に用いる場合、高いオーバーヘッドを招く.
    ダイレクトメモリアクセス(DMA)
    デバイスのバッファとポインタ、I/Oカウンタを設定すると、デバイスコントローラはCPUの介入なしにメモリから自分のバッファデバイスにデータブロックを転送します.
    バイトごとに割り込みは発生せず、ブロックデータ単位で、ブロックの全盛期が完了するたびに割り込みが発生する.

    デバイスコントローラが転送動作を実行する場合、CPUは他の動作を実行することができる.