【ソフトウェア設計者編】第4章 オペレーティングシステムの知識


1. オペレーティングシステムの概要

システム内のさまざまなソフトウェアおよびハードウェア リソースを効果的に整理および管理し、コンピューター システムのワークフローを合理的に整理し、プログラムの実行を制御し、ユーザーに良好な作業環境とフレンドリーなインターフェイスを提供できます。

1.1 オペレーティング システムの役割

  • 管理システムのハードウェア、ソフトウェア(API インターフェイス)、データ リソース
  • 制御プログラム実行中
  • 人と機械のインターフェース
  • アプリケーション ソフトウェアとハ​​ードウェア間の直接インターフェイス

1.2 オペレーティングシステムの特徴と機能

  • プロセス管理
    • プロセス状態、先行グラフ、PV動作、デッドロック問題
  • ストレージ管理
    • セグメント ページ ストレージ、ページ置換アルゴリズム
  • ファイル管理
  • インデックス ファイル、ビットマップ
  • ジョブ管理
  • 端末管理
  • マイクロカーネル オペレーティング システム
    • 仮想デバイスと SPOOLING テクノロジー

2. 工程管理

ここに画像の説明を挿入

ここに画像の説明を挿入

2.1 前駆体図

プリカーサー ダイアグラムは、プロセスのモデリングと分析で一般的に使用されるツールです. 前提条件、プロセス、およびイベントやタスクのその後の影響などの情報をグラフィカルに表示し、人々が複雑なプロセスをよりよく理解し、習得するのに役立ちます. プロセスの関係. 順傾向図を使用すると、タスク間の関係をよりよく理解し、プロセスの効率を最適化し、リスクを軽減し、作業の質を向上させることができます。同時に、フォワード トレンド マップは、プロジェクト管理、生産計画、リソース割り当て、リスク評価などにも使用でき、非常に実用的なツールです。

通常、先行グラフはノードと矢印で構成され、ノードはタスクまたはイベントを表し、矢印はそれらの間の関係を表します。従来の図では、矢印は一般に次の 3 つのタイプに分けられます。

  • 実線の矢印はタスクの依存関係を示します
  • 破線の矢印は、タスクへの代替パスを示します
  • 両方向矢印は、タスク間の相互依存性を示しています。

先行マップを描画するときは、まずタスクの順序と依存関係を決定し、各タスクの名前と期間にラベルを付ける必要があります。次に、タスク間の依存関係とオプションのパスに従って、ノードと矢印を描画し、対応するテキストの説明を追加して、読者がよりよく理解して使用できるようにします。

2.2 プロセスの同期と相互排除

  • プロセスの同期
    プロセスの同期とは、予測できない結果を避けるために、特定の順序で複数のプロセスを実行することです。プロセス同期の実装方法には、相互排除、セマフォ、モニターなどがあります。その中で、相互排除は最も一般的で単純な実装です。
  • プロセスの相互排除 相互
    排除とは、複数のプロセスが同時に共有リソースにアクセスする場合、リソースをロックおよびロック解除して、同時に 1 つのプロセスのみが共有リソースにアクセスできるようにする必要があることを意味します。これにより、競合や競合が回避されます。一般的に使用される相互排除方法には、クリティカル セクション、ミューテックス、読み書きロックなどがあります。
  • プロセスの相互排除を実装するには、次の条件を満たす必要があります。
    • ミューテックスはバイナリです。つまり、「ロック」と「ロック解除」の 2 つの状態しかありません。
    • プロセスがミューテックスを取得すると、他のプロセスは、ロックを取得してクリティカル セクションに入る前に、そのミューテックスがロックを解放するのを待つ必要があります。
    • 一度に 1 つのプロセスだけがクリティカル セクションに入り、共有リソースへのアクセスを実行できます。

2.3 PV操作(セマフォ操作)

3つのコンセプト

  • 重要なリソース: 相互に排他的な方法でプロセス間で共有する必要があるリソース (プリンター、テープ ドライブなど)。
  • クリティカル セクション: 各プロセスで重要なリソースにアクセスするコードのセクションは、クリティカル セクションと呼ばれます。
  • セマフォ: は特別な変数です

ここに画像の説明を挿入
[例 1] P1 と P2 の 2 つのプロセスがあり、リソースを共有する必要がありますが、同時にリソースにアクセスできるプロセスは 1 つだけです。競合状態とデッドロックを回避するために、PV 操作を使用できます。次のコード スニペットでは、2 つのプロセス P1 と P2 が実装され、共有リソースが使用されます。その中で、セマフォは初期値が 1 のグローバル変数です。リソースが正しく共有されるように、コード スニペットで PV 操作関数を補足してください。

#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>

sem_t semaphore;

void *process_one(void *arg)
{
    
    
    printf("P1 is waiting to access the resource.\n");
    // PV操作
    printf("P1 is accessing the resource.\n");
    sleep(2);
    printf("P1 is releasing the resource.\n");
    // PV操作
    pthread_exit(NULL);
}

void *process_two(void *arg)
{
    
    
    printf("P2 is waiting to access the resource.\n");
    // PV操作
    printf("P2 is accessing the resource.\n");
    sleep(1);
    printf("P2 is releasing the resource.\n");
    // PV操作
    pthread_exit(NULL);
}

int main()
{
    
    
    pthread_t t1, t2;
    sem_init(&semaphore, 0, 1);

    pthread_create(&t1, NULL, process_one, NULL);
    pthread_create(&t2, NULL, process_two, NULL);

    pthread_join(t1, NULL);
    pthread_join(t2, NULL);

    sem_destroy(&semaphore);

    return 0;
}

【答え】

void P(sem_t *sem)
{
    
    
    sem_wait(sem);
}

void V(sem_t *sem)
{
    
    
    sem_post(sem);
}

【解説】
PV操作関数のP関数で(sem_wait)セマフォを取得し、V関数で(sem_post)セマフォを解放することで、共有資源への相互排他アクセスを実現している。main 関数では、sem_init を使用してセマフォを初期化し、各プロセスで P 関数と V 関数を使用してセマフォを取得および解放します。最後に、pthread_join 関数を使用して 2 つのスレッドの終了を待機することにより、共有リソースが正しく共有されることが保証されます。

【例2】
ここに画像の説明を挿入

【解決策】 (1)A (2)C

ここに画像の説明を挿入

【例3】
ここに画像の説明を挿入
【回答】 (1)C (2)A (3​​)A

ここに画像の説明を挿入

2.3 デッドロック問題 (p138)

デッドロックの定義: グループ内の各プロセスが、グループ内の他のプロセスによってのみ発生するイベントの発生を待機している場合、プロセスのグループはデッドロック状態です

プロセス管理はオペレーティング システムの中核ですが、適切に設計されていないと、デッドロックの問題が発生します。プロセスが不可能なイベントを待っている場合、プロセスはデッドロックされます。また、1 つ以上のプロセスがデッドロックを生成すると、システムのデッドロックが発生します。

【例】
A、B、Cの3つのプロセスがあるシステム 3 つのプロセスはすべて、5 つのシステム リソースを必要とします。システムに少なくともその数のリソースがある場合、デッドロックは不可能です。
【答え】

K*(n-1)+1

少なくとも 3*(5-1)+1=13 個のリソースが必要であると結論付けられました

デッドロックの 4 つの条件

  • 相互に排他的な条件
  • リクエストとホールドの条件
  • 非先制条件
  • ループ待ち状態

デッドロックに対処する方法

  • デッドロック防止
  • デッドロックを避ける
  • デッドロックの検出
  • デッドロックを取り除く

2.4 バンカーのアルゴリズム

銀行家のアルゴリズム: リソースを割り当てるための原則

  • リソースの最大需要がシステム内のリソース数を超えない場合、プロセスを許可できます。
  • プロセスはリソースを分割して要求できますが、要求の合計数が最大要求を超えることはできません
  • システムの既存のリソースが、プロセスでまだ必要なリソースの数を満たすことができない場合、プロセスの要求は延期できますが、プロセスは限られた時間内に常にリソースを取得できます [例
    ]

    システムに 3 種類の相互に排他的なリソース R1、R2、および R3 があり、使用可能なリソースがそれぞれ 9、8、および 5 であると仮定します。時間 T0 の時点で、システムには P1、P3、P4 の 5 つのプロセスがあります。 、および P5。これらのプロセスによるリソースの最大要求と割り当てられたリソースの数は次のとおりです. プロセスが_____の順序で実行されている場合, デビルシステムの状態は安全です.

ここに画像の説明を挿入
別の答え:
A. P1->P2->P4->P5->P3
B. P2->P4->P5->P1->P3
C. P2->P1->P4->P5->P3
D. P4->P2->P4->P1->P3

3.保管管理

3.1 パーティションストレージ管理 (P204)

ここに画像の説明を挿入

3.2 ページのストレージ構成

ユーザー プログラムを同じサイズのページに分割する
ここに画像の説明を挿入

ページ ストレージ編成の長所と短所

  • 高いメモリ使用率、小さな断片化、簡単な割り当てと管理
  • システムのオーバーヘッドが大きくなり、ジッターが発生する可能性がある
    ここに画像の説明を挿入
    【解決策】: D、B
    ここに画像の説明を挿入

3.3 セグメントストレージ編成

  • 利点: 複数のプログラムがメモリを共有し、各プログラムの変更が相互に影響しない
  • 短所: メモリ使用率が低く、メモリの断片化による大量の浪費
    ここに画像の説明を挿入

3.4 セグメントページのストレージ編成

  • 利点: スペースの無駄が少ない、ストレージの共有が容易、ストレージの保護が容易、動的リンク
  • 短所:管理ソフトウェアの増加により、複雑さとオーバーヘッドも増加し、必要なハードウェアと占有コンテンツも増加し、実行速度が大幅に低下します

3.5 高速ウォッチ

高速テーブルは、高速なキャッシュで構成された小容量の連想メモリ (Associative Memory) です. 高速で、ハードウェアからのコンテンツによる並列検索を保証できます. 通常、少数のページ番号を格納するために使用されます.現在最も頻繁にアクセスされているアクティブなページ。

3.6 ページ置換アルゴリズム

  • 先入れ先出しアルゴリズム (FIFO)
  • ジッタが発生する
    ここに画像の説明を挿入
    ここに画像の説明を挿入
    【例】
    ここに画像の説明を挿入
    【対策】
    ここに画像の説明を挿入

4 ファイル管理

4.1 索引ファイルの構造

インデックスファイルの構造例
【例】
ここに画像の説明を挿入
【対処法】 5~6は全て第1レベルの間接アドレス参照で、アドレスが占めるバイト数をディスクのブロックサイズで割ると1kb/4となる
インデックス ファイルの構造 サンプルの質問と回答

4.2 ファイルとツリーのディレクトリ構造

ここに画像の説明を挿入

絶対パス: ドライブ文字から始まるパス
相対パス: 現在のパスから始まるパス
現在のパスが D1 で、F2 パスが必要な場合: 絶対パス: /D1/W2/F2、相対パス: W2 /F2

  • ファイルのプロパティ
    • R 読み取り専用ファイル属性
    • アーカイブ属性
    • S システムファイル
    • 隠しファイル
  • ファイル名の構成
    • ドライブレター
    • メインファイル名
    • 拡張子名

4.3 空き容量の管理

  • フリーエリアテーブル方式
  • フリーリスト方式
  • ビットマップ
  • グループ連鎖

【ビットマップの例】
ここに画像の説明を挿入
【解決策】
ここに画像の説明を挿入

5.設備管理

5.1 データ伝送制御方法

データ伝送制御方式の詳細まとめ
ここに画像の説明を挿入

5.2 仮想デバイスと SPOOLING テクノロジー

ここに画像の説明を挿入
SPOOLING (Simultaneous Peripheral Operations Online) テクノロジは、コンピュータ システムに入出力バッファリングを実装するテクノロジであり、キュー内の入出力タスクを管理することで、システムの同時実行性と効率を向上させることができます。

SPOOLING テクノロジの主な原則は、入出力タスクをキューに入れてバッファリングすることであり、専用のプロセスが管理とスケジューリングを担当します。入出力デバイスの準備が整うと、プロセスはキューからタスクを取得して処理し、入出力操作を実現します。

SPOOLING テクノロジの利点は、入力タスクと出力タスクをホスト処理タスクから分離して、同時処理とタスク スケジューリングを実現できることです。コンピュータシステムのリソースを最大限に活用し、システムの効率と信頼性を向上させることができます。さらに、SPOOLING テクノロジは、印刷出力の並べ替えやページ付けなどの機能も実装できるため、出力の品質と読みやすさが向上します。

SPOOLING テクノロジには、印刷、ディスク ストレージ、ネットワーク通信など、幅広い用途があります。実際のアプリケーションでは、SPOOLING テクノロジは通常、仮想プリンタを使用して印刷出力のバッファリングとスケジューリングを実装するなど、仮想デバイスと組み合わせて使用​​され、それによって印刷出力の効率と品質が向上します。

6. マイクロカーネル オペレーティング システム

ここに画像の説明を挿入

物質 アドバンテージ 欠点
モノリシックコア グラフィックス、デバイス ドライバー、ファイル システムなどのすべての機能がカーネルに実装され、カーネル状態と同じアドレス空間で実行されます。 プロセス間通信や状態切り替えのシステムオーバーヘッドを削減し、より高い運用効率を実現 カーネルは巨大で、より多くのリソースを消費し、カットするのは簡単ではありません。システムの安定性とセキュリティは高くありません
マイクロカーネル 基本的な機能のみを実現し、グラフィックス システム、ファイル システム、デバイス ドライバ、および通信機能をカーネルの外に置きます。 コアは洗練されており、カットや移植が容易です。システムサーバープログラムはユーザーアドレス空間で動作し、システムは高い信頼性、安定性、セキュリティを備えています。分散システムで使用可能 ユーザー状態とカーネル状態を頻繁に切り替える必要があるため、システムは単一のカーネルほど効率的ではありません

おすすめ

転載: blog.csdn.net/qq_54351538/article/details/129214348