Operating-system-quick-guide
オペレーティングシステム-概要
オペレーティングシステム(OS)は、コンピューターユーザーとコンピューターハードウェア間のインターフェイスです。 オペレーティングシステムは、ファイル管理、メモリ管理、プロセス管理、入出力の処理、ディスクドライブやプリンタなどの周辺機器の制御など、すべての基本的なタスクを実行するソフトウェアです。
一般的なオペレーティングシステムには、Linuxオペレーティングシステム、Windowsオペレーティングシステム、VMS、OS/400、AIX、z/OSなどがあります。
定義
オペレーティングシステムは、ユーザーとコンピューターハードウェア間のインターフェイスとして機能し、あらゆる種類のプログラムの実行を制御するプログラムです。
以下は、オペレーティングシステムの重要な機能の一部です。
- メモリ管理
- プロセッサ管理
- 端末管理
- ファイル管理
- セキュリティ
- システムパフォーマンスの制御
- 職務経理
- エラー検出エイド
- 他のソフトウェアとユーザー間の調整
メモリ管理
メモリ管理とは、プライマリメモリまたはメインメモリの管理を指します。 メインメモリは、各ワードまたはバイトが独自のアドレスを持つワードまたはバイトの大きな配列です。
メインメモリは、CPUから直接アクセスできる高速ストレージを提供します。 プログラムを実行するには、メインメモリ内にある必要があります。 オペレーティングシステムは、メモリ管理のために次のアクティビティを行います-
- プライマリメモリ、つまり、そのどの部分が誰によって使用されているか、どの部分が使用されていないかを追跡します。
- マルチプログラミングでは、OSはどのプロセスがいつどのくらいメモリを取得するかを決定します。
- プロセスが要求したときにメモリを割り当てます。
- プロセスがメモリを必要としなくなった、または終了したときに、メモリの割り当てを解除します。
プロセッサ管理
マルチプログラミング環境では、OSは、どのプロセスがいつどのくらいの時間プロセッサを取得するかを決定します。 この関数は、*プロセススケジューリング*と呼ばれます。 オペレーティングシステムは、プロセッサ管理のために次の活動を行います-
- プロセッサとプロセスのステータスを追跡します。 このタスクを担当するプログラムは、*トラフィックコントローラー*と呼ばれます。
- プロセッサ(CPU)をプロセスに割り当てます。
- プロセスが不要になったときにプロセッサの割り当てを解除します。
端末管理
オペレーティングシステムは、それぞれのドライバーを介してデバイス通信を管理します。 デバイス管理のために次のアクティビティを行います-
- すべてのデバイスを追跡します。 このタスクを担当するプログラムは、* I/Oコントローラー*と呼ばれます。
- どのプロセスがいつどのくらいの時間デバイスを取得するかを決定します。
- 効率的な方法でデバイスを割り当てます。
- デバイスの割り当てを解除します。
ファイル管理
通常、ファイルシステムは、ナビゲーションと使用を容易にするためにディレクトリに編成されます。 これらのディレクトリには、ファイルやその他の指示が含まれる場合があります。
オペレーティングシステムは、ファイル管理のために次の活動を行います-
- 情報、場所、用途、ステータスなどを追跡します。 集合施設は、多くの場合、*ファイルシステム*として知られています。
- 誰がリソースを取得するかを決定します。
- リソースを割り当てます。
- リソースの割り当てを解除します。
その他の重要な活動
以下は、オペレーティングシステムが実行する重要なアクティビティの一部です-
- セキュリティ-パスワードおよび同様のその他の手法により、プログラムおよびデータへの不正アクセスを防止します。
- システムパフォーマンスの制御-サービスの要求とシステムからの応答の間の記録遅延。
- ジョブアカウンティング-さまざまなジョブとユーザーが使用する時間とリソースを追跡します。
- エラー検出支援-ダンプ、トレース、エラーメッセージ、その他のデバッグおよびエラー検出支援の作成。
- 他のソフトウェアとユーザーの間の調整-コンピューターシステムのさまざまなユーザーへのコンパイラ、インタープリター、アセンブラー、および他のソフトウェアの調整と割り当て。
オペレーティングシステムの種類
オペレーティングシステムは最初のコンピューター世代から存在し、時間とともに進化し続けます。 この章では、最も一般的に使用される重要な種類のオペレーティングシステムについて説明します。
バッチオペレーティングシステム
バッチオペレーティングシステムのユーザーは、コンピューターと直接対話しません。 各ユーザーは、パンチカードなどのオフラインデバイスでジョブを準備し、コンピューターオペレーターに送信します。 処理を高速化するために、同様のニーズを持つジョブはまとめてバッチ処理され、グループとして実行されます。 プログラマーはプログラムをオペレーターに任せ、オペレーターは同様の要件を持つプログラムをバッチに分類します。
バッチシステムの問題は次のとおりです-
- ユーザーとジョブ間の相互作用の欠如。
- 機械的I/Oデバイスの速度はCPUよりも遅いため、CPUは多くの場合アイドル状態です。
- 望ましい優先度を提供するのが難しい。
タイムシェアリングオペレーティングシステム
タイムシェアリングは、さまざまな端末にいる多くの人々が特定のコンピューターシステムを同時に使用できるようにする技術です。 タイムシェアリングまたはマルチタスクは、マルチプログラミングの論理的な拡張機能です。 複数のユーザーが同時に共有するプロセッサーの時間は、タイムシェアリングと呼ばれます。
マルチプログラムバッチシステムとタイムシェアリングシステムの主な違いは、マルチプログラムバッチシステムの場合、目的はプロセッサの使用を最大化することですが、タイムシェアリングシステムでは、応答時間を最小化することです。
複数のジョブは、CPUによって切り替えられて実行されますが、切り替えは頻繁に発生します。 したがって、ユーザーはすぐに応答を受け取ることができます。 たとえば、トランザクション処理では、プロセッサは各ユーザープログラムを短いバーストまたは計算量で実行します。 つまり、 n ユーザーが存在する場合、各ユーザーはタイムクォンタムを取得できます。 ユーザーがコマンドを送信すると、応答時間はせいぜい数秒です。
オペレーティングシステムは、CPUスケジューリングとマルチプログラミングを使用して、各ユーザーに時間のわずかな部分を提供します。 主にバッチシステムとして設計されたコンピューターシステムは、タイムシェアリングシステムに変更されました。
タイムシェアリングオペレーティングシステムの利点は次のとおりです-
- 迅速な応答という利点があります。
- ソフトウェアの重複を回避します。
- CPUのアイドル時間を短縮します。
タイムシェアリングオペレーティングシステムの欠点は次のとおりです-
- 信頼性の問題。
- ユーザープログラムとデータのセキュリティと整合性の問題。
- データ通信の問題。
分散オペレーティングシステム
分散システムは、複数の中央処理装置を使用して、複数のリアルタイムアプリケーションと複数のユーザーにサービスを提供します。 データ処理ジョブは、それに応じてプロセッサ間で分散されます。
プロセッサは、さまざまな通信回線(高速バスや電話回線など)を介して相互に通信します。 これらは、*疎結合システム*または分散システムと呼ばれます。 分散システムのプロセッサは、サイズと機能が異なる場合があります。 これらのプロセッサは、サイト、ノード、コンピューターなどと呼ばれます。
分散システムの利点は次のとおりです-
- リソース共有機能を使用すると、あるサイトのユーザーが別のサイトで利用可能なリソースを使用できる場合があります。
- 電子メールを介した相互のデータ交換を高速化します。
- 分散システムで1つのサイトに障害が発生した場合、残りのサイトは動作を継続できる可能性があります。
- 顧客へのより良いサービス。
- ホストコンピューターの負荷の軽減。
- データ処理の遅延の削減。
ネットワークオペレーティングシステム
ネットワークオペレーティングシステムはサーバー上で実行され、データ、ユーザー、グループ、セキュリティ、アプリケーション、およびその他のネットワーク機能を管理する機能をサーバーに提供します。 ネットワークオペレーティングシステムの主な目的は、ネットワーク内の複数のコンピューター、通常はローカルエリアネットワーク(LAN)、プライベートネットワーク、または他のネットワーク間でファイルとプリンターの共有アクセスを許可することです。
ネットワークオペレーティングシステムの例には、Microsoft Windows Server 2003、Microsoft Windows Server 2008、UNIX、Linux、Mac OS X、Novell NetWare、およびBSDが含まれます。
ネットワークオペレーティングシステムの利点は次のとおりです-
- 集中サーバーは非常に安定しています。
- セキュリティはサーバー管理です。
- 新しいテクノロジーとハードウェアへのアップグレードは、システムに簡単に統合できます。
- サーバーへのリモートアクセスは、さまざまな場所やシステムの種類から可能です。
ネットワークオペレーティングシステムの欠点は次のとおりです-
- サーバーの購入と実行のコストが高い。
- ほとんどの操作の中央の場所への依存。
- 定期的なメンテナンスと更新が必要です。
リアルタイムオペレーティングシステム
リアルタイムシステムは、入力を処理して応答するのに必要な時間が非常に短いため、環境を制御するデータ処理システムとして定義されます。 システムが必要な更新情報の入力と表示に応答するのにかかる時間は、*応答時間*と呼ばれます。 したがって、この方法では、オンライン処理に比べて応答時間が非常に短くなります。
リアルタイムシステムは、プロセッサの動作やデータの流れに厳しい時間が必要な場合に使用され、リアルタイムシステムは専用アプリケーションの制御デバイスとして使用できます。 リアルタイムオペレーティングシステムには、明確に定義された固定の時間制約が必要です。そうしないと、システムが故障します。 たとえば、科学実験、医用画像システム、産業用制御システム、兵器システム、ロボット、航空交通管制システムなど。
リアルタイムオペレーティングシステムには2つのタイプがあります。
ハードリアルタイムシステム
ハードリアルタイムシステムは、重要なタスクが時間通りに完了することを保証します。 ハードリアルタイムシステムでは、2次ストレージが制限されているか不足しており、データはROMに保存されます。 これらのシステムでは、仮想メモリはほとんど検出されません。
ソフトリアルタイムシステム
ソフトリアルタイムシステムの制限は緩和されています。 重要なリアルタイムタスクは他のタスクよりも優先され、完了するまでその優先度を保持します。 ソフトリアルタイムシステムの用途は、ハードリアルタイムシステムよりも限られています。 たとえば、マルチメディア、仮想現実、海底探査や惑星探査機などの高度な科学プロジェクトなど。
オペレーティングシステム-サービス
オペレーティングシステムは、ユーザーとプログラムの両方にサービスを提供します。
- プログラムに実行環境を提供します。
- ユーザーにプログラムを便利な方法で実行するサービスを提供します。
以下は、オペレーティングシステムによって提供されるいくつかの一般的なサービスです-
- プログラム実行
- 入出力操作
- ファイルシステムの操作
- コミュニケーション
- エラー検出
- 資源配分
- 保護
プログラム実行
オペレーティングシステムは、ユーザープログラムからプリンタースプーラー、ネームサーバー、ファイルサーバーなどのシステムプログラムまで、さまざまな種類のアクティビティを処理します。 これらの各アクティビティは、プロセスとしてカプセル化されます。
プロセスには、完全な実行コンテキスト(実行するコード、操作するデータ、レジスタ、使用中のOSリソース)が含まれます。 以下は、プログラム管理に関するオペレーティングシステムの主要なアクティビティです。
- プログラムをメモリにロードします。
- プログラムを実行します。
- プログラムの実行を処理します。
- プロセス同期のメカニズムを提供します。
- プロセス通信のメカニズムを提供します。
- デッドロック処理のメカニズムを提供します。
入出力操作
I/Oサブシステムは、I/Oデバイスとそれに対応するドライバーソフトウェアで構成されます。 ドライバーは、特定のハードウェアデバイスの特性をユーザーから隠します。
オペレーティングシステムは、ユーザーとデバイスドライバー間の通信を管理します。
- I/O操作とは、任意のファイルまたは特定のI/Oデバイスでの読み取りまたは書き込み操作を意味します。
- オペレーティングシステムは、必要なときに必要なI/Oデバイスへのアクセスを提供します。
ファイルシステム操作
ファイルは、関連情報のコレクションを表します。 コンピューターは、長期保存目的で、ファイルをディスク(2次ストレージ)に保存できます。 記憶媒体の例には、磁気テープ、磁気ディスク、およびCD、DVDなどの光ディスクドライブが含まれます。 これらの各メディアには、速度、容量、データ転送速度、データアクセス方法などの独自のプロパティがあります。
通常、ファイルシステムは、ナビゲーションと使用を容易にするためにディレクトリに編成されます。 これらのディレクトリには、ファイルやその他の指示が含まれる場合があります。 以下は、ファイル管理に関するオペレーティングシステムの主要なアクティビティです。
- プログラムは、ファイルを読み取るか、ファイルに書き込む必要があります。
- オペレーティングシステムは、ファイルに対する操作の許可をプログラムに与えます。
- 許可は、読み取り専用、読み取り/書き込み、拒否などによって異なります。
- オペレーティングシステムは、ファイルを作成/削除するためのユーザーインターフェイスを提供します。
- オペレーティングシステムは、ディレクトリを作成/削除するためのユーザーインターフェイスを提供します。
- オペレーティングシステムは、ファイルシステムのバックアップを作成するためのインターフェイスを提供します。
コミュニケーション
メモリ、周辺機器、またはクロックを共有しないプロセッサの集まりである分散システムの場合、オペレーティングシステムはすべてのプロセス間の通信を管理します。 複数のプロセスは、ネットワーク内の通信回線を介して互いに通信します。
OSは、ルーティングと接続の戦略、および競合とセキュリティの問題を処理します。 以下は、通信に関するオペレーティングシステムの主要な活動です-
- 多くの場合、2つのプロセス間でデータを転送する必要があります
- 両方のプロセスは、1台のコンピューターまたは別のコンピューターに配置できますが、コンピューターネットワークを介して接続されます。
- 通信は、共有メモリまたはメッセージパッシングの2つの方法で実装できます。
エラー処理
エラーはいつでもどこでも発生する可能性があります。 CPU、I/Oデバイス、またはメモリハードウェアでエラーが発生する場合があります。 エラー処理に関するオペレーティングシステムの主要なアクティビティは次のとおりです-
- OSは、考えられるエラーを常にチェックします。
- OSは、適切で一貫性のあるコンピューティングを確保するための適切なアクションを実行します。
資源管理
マルチユーザー環境またはマルチタスク環境の場合、メインメモリ、CPUサイクル、ファイルストレージなどのリソースが各ユーザーまたはジョブに割り当てられます。 以下は、リソース管理に関するオペレーティングシステムの主要なアクティビティです。
- OSは、スケジューラを使用してあらゆる種類のリソースを管理します。
- CPUの効率的な使用のために、CPUスケジューリングアルゴリズムが使用されます。
保護
複数のユーザーを持ち、複数のプロセスを同時に実行するコンピューターシステムを考えると、さまざまなプロセスを互いのアクティビティから保護する必要があります。
保護とは、コンピューターシステムで定義されたリソースへのプログラム、プロセス、またはユーザーのアクセスを制御するメカニズムまたは方法を指します。 以下は、保護に関するオペレーティングシステムの主要な活動です-
- OSは、システムリソースへのすべてのアクセスを確実に制御します。
- OSは、外部I/Oデバイスが無効なアクセス試行から保護されるようにします。
- OSは、パスワードを使用して各ユーザーに認証機能を提供します。
オペレーティングシステム-プロパティ
バッチ処理
バッチ処理は、処理を開始する前にオペレーティングシステムがプログラムとデータをまとめてバッチで収集する手法です。 オペレーティングシステムは、バッチ処理に関連する次のアクティビティを行います-
- OSは、コマンド、プログラム、およびデータの事前定義されたシーケンスを1つのユニットとして持つジョブを定義します。
- OSは多数のジョブをメモリに保持し、手動情報なしでそれらを実行します。
- ジョブは、送信順に処理されます。つまり、先着順です。
- ジョブの実行が完了すると、メモリが解放され、ジョブの出力が出力スプールにコピーされて、後で印刷または処理されます。
利点
- バッチ処理では、オペレーターの多くの作業がコンピューターにかかります。
- 前のジョブが終了するとすぐに、手動での介入なしに新しいジョブが開始されるため、パフォーマンスが向上しました。
デメリット
- プログラムのデバッグが難しい。
- ジョブが無限ループに入る可能性があります。
- 保護スキームがないため、1つのバッチジョブが保留中のジョブに影響を与える可能性があります。
マルチタスク
マルチタスクとは、複数のジョブを切り替えることにより、CPUが同時に実行することです。 スイッチは非常に頻繁に発生するため、ユーザーは実行中に各プログラムを操作できます。 OSは、マルチタスクに関連する次のアクティビティを行います-
- ユーザーは、オペレーティングシステムまたはプログラムに直接指示を与え、すぐに応答を受け取ります。
- OSは、一度に複数の操作を処理/複数のプログラムを実行できるようにマルチタスクを処理します。
- マルチタスクオペレーティングシステムは、タイムシェアリングシステムとしても知られています。
- これらのオペレーティングシステムは、合理的なコストでコンピューターシステムをインタラクティブに使用できるように開発されました。
- 時分割オペレーティングシステムは、CPUスケジューリングとマルチプログラミングの概念を使用して、各ユーザーに時分割CPUのごく一部を提供します。
- 各ユーザーは、メモリに少なくとも1つの個別のプログラムを持っています。
- メモリにロードされて実行中のプログラムは、一般に*プロセス*と呼ばれます。
- プロセスが実行されると、通常、プロセスが終了するか、I/Oを実行する必要がある前に非常に短い時間だけ実行されます。
- 通常、対話型I/Oは低速で実行されるため、完了するまでに時間がかかる場合があります。 この間、CPUは別のプロセスで使用できます。
- オペレーティングシステムにより、ユーザーはコンピューターを同時に共有できます。 時分割システムの各アクションまたはコマンドは短い傾向があるため、各ユーザーに必要なCPU時間はわずかです。
- システムがCPUをあるユーザー/プログラムから次のユーザーに急速に切り替えると、各ユーザーは自分のCPUを持っているという印象を与えられますが、実際には1つのCPUが多くのユーザー間で共有されます。
マルチプログラミング
複数のプログラムが同時にメモリに存在する場合、プロセッサを共有することを*マルチプログラミング*と呼びます。 マルチプログラミングでは、単一の共有プロセッサを想定しています。 マルチプログラミングでは、ジョブを整理することでCPUの使用率が向上し、CPUは常に実行するようになります。
次の図は、マルチプログラミングシステムのメモリレイアウトを示しています。
OSは、マルチプログラミングに関連する次のアクティビティを実行します。
- オペレーティングシステムは、一度に複数のジョブをメモリに保持します。
- この一連のジョブは、ジョブプールに保持されているジョブのサブセットです。
- オペレーティングシステムは、メモリ内のジョブの1つを選択して実行を開始します。
- マルチプログラミングオペレーティングシステムは、メモリ管理プログラムを使用してすべてのアクティブなプログラムとシステムリソースの状態を監視し、処理するジョブがない限り、CPUがアイドル状態にならないようにします。
利点
- 高い効率的なCPU使用率。
- ユーザーは、多くのプログラムにほぼ同時にCPUが割り当てられていると感じています。
デメリット
- CPUスケジューリングが必要です。
- メモリ内の多くのジョブに対応するには、メモリ管理が必要です。
双方向性
対話性とは、ユーザーがコンピューターシステムと対話する能力のことです。 オペレーティングシステムは、対話性に関連する次のアクティビティを行います-
- システムと対話するためのインターフェースをユーザーに提供します。
- 入力デバイスを管理して、ユーザーからの入力を取得します。 たとえば、キーボード。
- 出力デバイスを管理して、ユーザーに出力を表示します。 たとえば、モニター。
ユーザーが結果を送信して待機するため、OSの応答時間は短くする必要があります。
リアルタイムシステム
通常、リアルタイムシステムは専用の組み込みシステムです。 オペレーティングシステムは、リアルタイムシステムアクティビティに関連する次のアクティビティを実行します。
- このようなシステムでは、オペレーティングシステムは通常、センサーデータから読み取り、センサーデータに反応します。
- オペレーティングシステムは、正しいパフォーマンスを確保するために、一定期間内のイベントへの応答を保証する必要があります。
分散環境
分散環境とは、コンピューターシステム内の複数の独立したCPUまたはプロセッサーを指します。 オペレーティングシステムは、分散環境に関連する次の活動を行います-
- OSは、複数の物理プロセッサに計算ロジックを分散します。
- プロセッサはメモリまたはクロックを共有しません。 代わりに、各プロセッサには独自のローカルメモリがあります。
- OSは、プロセッサ間の通信を管理します。 さまざまな通信回線を介して互いに通信します。
スプール
スプーリングは、オンラインでの同時周辺操作の頭字語です。 スプーリングとは、さまざまなI/Oジョブのデータをバッファーに入れることです。 このバッファは、I/Oデバイスからアクセス可能なメモリまたはハードディスク内の特別な領域です。
オペレーティングシステムは、分散環境に関連する次の活動を行います-
- デバイスのデータアクセスレートが異なるため、I/Oデバイスのデータスプールを処理します。
- 遅いデバイスが追いつく間、データが休むことができる待機ステーションを提供するスプールバッファを維持します。
- コンピューターがI/Oを並列に実行できるため、スプールプロセスのために並列計算を維持します。 計算タスクを実行している間に、コンピューターにテープからデータを読み取らせたり、ディスクにデータを書き込んだり、テーププリンターに書き込んだりすることが可能になります。
利点
- スプーリング操作では、ディスクを非常に大きなバッファーとして使用します。
- スプーリングは、あるジョブのI/O操作を別のジョブのプロセッサー操作と重複させることができます。
オペレーティングシステム-プロセス
プロセス
プロセスは基本的に実行中のプログラムです。 プロセスの実行は、順次に進行する必要があります。
'_プロセスは、システムに実装される基本的な作業単位を表すエンティティとして定義されます。_
簡単に言えば、コンピュータープログラムをテキストファイルに記述し、このプログラムを実行すると、プログラムで言及されているすべてのタスクを実行するプロセスになります。
プログラムがメモリにロードされてプロセスになると、プログラムは4つのセクション(スタック、ヒープ、テキスト、データ)に分割できます。 次の画像は、メインメモリ内のプロセスの簡略化されたレイアウトを示しています-
S.N. | Component & Description |
---|---|
1 |
Stack プロセススタックには、メソッド/関数パラメーター、戻りアドレス、ローカル変数などの一時データが含まれます。 |
2 |
Heap これは、実行時にプロセスに動的に割り当てられるメモリです。 |
3 |
Text これには、プログラムカウンタの値とプロセッサのレジスタの内容で表される現在のアクティビティが含まれます。 |
4 |
Data このセクションには、グローバル変数と静的変数が含まれます。 |
プログラム
プログラムは、1行または数百万行のコードの一部です。 コンピュータプログラムは通常、プログラミング言語でコンピュータプログラマーによって書かれています。 たとえば、ここにCプログラミング言語で書かれた簡単なプログラムがあります-
#include <stdio.h>
int main() {
printf("Hello, World! \n");
return 0;
}
コンピュータープログラムは、コンピューターによって実行されると特定のタスクを実行する命令の集まりです。 プログラムをプロセスと比較すると、プロセスはコンピュータープログラムの動的インスタンスであると結論付けることができます。
明確に定義されたタスクを実行するコンピュータープログラムの一部は、*アルゴリズム*と呼ばれます。 コンピュータプログラム、ライブラリ、および関連データの集まりは、「ソフトウェア」と呼ばれます。
プロセスライフサイクル
プロセスが実行されると、さまざまな状態を通過します。 これらの段階はオペレーティングシステムによって異なる場合があり、これらの状態の名前も標準化されていません。
一般に、プロセスは一度に次の5つの状態のいずれかになります。
S.N. | State & Description |
---|---|
1 |
Start これは、プロセスが最初に開始/作成されたときの初期状態です。 |
2 |
Ready プロセスはプロセッサに割り当てられるのを待っています。 準備ができたプロセスは、オペレーティングシステムによって実行されるようにプロセッサが割り当てられるのを待っています。 プロセスは、 Start 状態の後、または実行中にスケジューラによって中断され、CPUを他のプロセスに割り当てるときにこの状態になる場合があります。 |
3 |
Running OSスケジューラによってプロセスがプロセッサに割り当てられると、プロセスの状態は実行中に設定され、プロセッサはその命令を実行します。 |
4 |
Waiting ユーザー入力の待機やファイルが利用可能になるのを待機するなど、リソースを待機する必要がある場合、プロセスは待機状態に移行します。 |
5 |
Terminated or Exit プロセスの実行が終了するか、オペレーティングシステムによって終了されると、プロセスは終了状態に移行し、メインメモリからの削除を待機します。 |
プロセス制御ブロック(PCB)
プロセス制御ブロックは、プロセスごとにオペレーティングシステムによって維持されるデータ構造です。 PCBは整数のプロセスID(PID)で識別されます。 PCBは、以下の表にリストされているようにプロセスを追跡するために必要なすべての情報を保持します-
S.N. | Information & Description |
---|---|
1 |
Process State プロセスの現在の状態、つまり、準備ができているか、実行中か、待機中かなど。 |
2 |
Process privileges これは、システムリソースへのアクセスを許可/禁止するために必要です。 |
3 |
Process ID オペレーティングシステムの各プロセスの一意の識別。 |
4 |
Pointer 親プロセスへのポインター。 |
5 |
Program Counter プログラムカウンタは、このプロセスで実行される次の命令のアドレスへのポインタです。 |
6 |
CPU registers 実行状態の実行のためにプロセスを保存する必要のあるさまざまなCPUレジスタ。 |
7 |
CPU Scheduling Information プロセスの優先順位およびプロセスをスケジュールするために必要なその他のスケジュール情報。 |
8 |
Memory management information これには、ページテーブル、メモリ制限、オペレーティングシステムで使用されるメモリに応じたセグメントテーブルの情報が含まれます。 |
9 |
Accounting information これには、プロセスの実行に使用されるCPUの量、制限時間、実行IDなどが含まれます。 |
10 |
IO status information これには、プロセスに割り当てられたI/Oデバイスのリストが含まれます。 |
PCBのアーキテクチャはオペレーティングシステムに完全に依存しており、オペレーティングシステムごとに異なる情報が含まれている場合があります。 これはPCBの簡略図です-
PCBは、その存続期間を通してプロセスに対して維持され、プロセスが終了すると削除されます。
オペレーティングシステム-プロセススケジューリング
定義
プロセススケジューリングは、CPUから実行中のプロセスを削除し、特定の戦略に基づいて別のプロセスを選択するプロセスマネージャーのアクティビティです。
プロセススケジューリングは、マルチプログラミングオペレーティングシステムの重要な部分です。 このようなオペレーティングシステムでは、一度に複数のプロセスを実行可能メモリにロードでき、ロードされたプロセスは時分割多重化を使用してCPUを共有します。
プロセススケジューリングキュー
OSは、プロセススケジューリングキューですべてのPCBを維持します。 OSはプロセス状態ごとに個別のキューを維持し、同じ実行状態のすべてのプロセスのPCBは同じキューに配置されます。 プロセスの状態が変更されると、PCBは現在のキューからリンク解除され、新しい状態キューに移動します。
オペレーティングシステムは、次の重要なプロセススケジューリングキューを維持します-
- ジョブキュー-このキューは、システム内のすべてのプロセスを保持します。
- Ready queue -このキューは、メインメモリに常駐し、実行を待機しているすべてのプロセスのセットを保持します。 新しいプロセスは常にこのキューに入れられます。
- デバイスキュー-I/Oデバイスが使用できないためにブロックされているプロセスがこのキューを構成します。
OSは異なるポリシーを使用して各キューを管理できます(FIFO、ラウンドロビン、優先度など)。 OSスケジューラーは、システム上のプロセッサーコアごとに1つのエントリのみを持つことができる実行可能キューと実行キューの間でプロセスを移動する方法を決定します。上の図では、CPUと統合されています。
2状態プロセスモデル
二状態プロセスモデルは、以下で説明されている実行状態と非実行状態を指します-
S.N. | State & Description |
---|---|
1 |
Running 新しいプロセスが作成されると、実行状態のようにシステムに入ります。 |
2 |
Not Running 実行されていないプロセスはキューに保持され、順番が実行されるのを待ちます。 キュー内の各エントリは、特定のプロセスへのポインタです。 キューは、リンクリストを使用して実装されます。 ディスパッチャの使用は次のとおりです。 プロセスが中断されると、そのプロセスは待機キューに転送されます。 プロセスが完了または中止された場合、プロセスは破棄されます。 どちらの場合でも、ディスパッチャはキューからプロセスを選択して実行します。 |
スケジューラー
スケジューラは、さまざまな方法でプロセスのスケジューリングを処理する特別なシステムソフトウェアです。 主なタスクは、システムに送信するジョブを選択し、実行するプロセスを決定することです。 スケジューラは3種類あります-
- 長期スケジューラ
- 短期スケジューラ
- 中期スケジューラ
長期スケジューラ
- ジョブスケジューラ*とも呼ばれます。 長期スケジューラは、処理のためにシステムに許可されるプログラムを決定します。 キューからプロセスを選択し、実行のためにメモリにロードします。 CPUスケジューリングのためにプロセスがメモリにロードされます。
ジョブスケジューラの主な目的は、I/Oバウンドやプロセッサバウンドなどのジョブのバランスの取れた組み合わせを提供することです。 また、マルチプログラミングの度合いも制御します。 マルチプログラミングの程度が安定している場合、プロセス作成の平均速度は、システムを離れるプロセスの平均出発速度と等しくなければなりません。
一部のシステムでは、長期スケジューラが利用できないか、最小限のものになる場合があります。 タイムシェアリングオペレーティングシステムには、長期スケジューラはありません。 プロセスが状態を新規から準備完了に変更すると、長期スケジューラが使用されます。
短期スケジューラ
- CPUスケジューラ*とも呼ばれます。 その主な目的は、選択した一連の基準に従ってシステムのパフォーマンスを向上させることです。 これは、プロセスの準備完了状態から実行状態への変更です。 CPUスケジューラーは、実行準備ができているプロセスの中からプロセスを選択し、それらの1つにCPUを割り当てます。
ディスパッチャとも呼ばれる短期スケジューラは、次に実行するプロセスを決定します。 短期スケジューラは、長期スケジューラよりも高速です。
中期スケジューラ
中期スケジューリングは*スワップ*の一部です。 メモリからプロセスを削除します。 マルチプログラミングの度合いを減らします。 中期スケジューラは、スワップアウトされたプロセスの処理を担当します。
実行中のプロセスは、I/O要求を行うと中断される場合があります。 中断されたプロセスは、完了に向かって進行することはできません。 この状態では、プロセスをメモリから削除し、他のプロセス用のスペースを確保するために、一時停止中のプロセスはセカンダリストレージに移動されます。 このプロセスは*スワップ*と呼ばれ、プロセスはスワップアウトまたはロールアウトされると言われています。 プロセスミックスを改善するには、スワップが必要になる場合があります。
スケジューラーの比較
S.N. | Long-Term Scheduler | Short-Term Scheduler | Medium-Term Scheduler |
---|---|---|---|
1 | It is a job scheduler | It is a CPU scheduler | It is a process swapping scheduler. |
2 | Speed is lesser than short term scheduler | Speed is fastest among other two | Speed is in between both short and long term scheduler. |
3 | It controls the degree of multiprogramming | It provides lesser control over degree of multiprogramming | It reduces the degree of multiprogramming. |
4 | It is almost absent or minimal in time sharing system | It is also minimal in time sharing system | It is a part of Time sharing systems. |
5 | It selects processes from pool and loads them into memory for execution | It selects those processes which are ready to execute | It can re-introduce the process into memory and execution can be continued. |
コンテキストスイッチ
コンテキストスイッチは、プロセス制御ブロック内のCPUの状態またはコンテキストを保存および復元して、後で同じ時点からプロセスの実行を再開できるようにするメカニズムです。 この手法を使用すると、コンテキストスイッチャーにより、複数のプロセスが単一のCPUを共有できます。 コンテキストスイッチングは、マルチタスクオペレーティングシステム機能の重要な部分です。
スケジューラーがCPUをあるプロセスの実行から別のプロセスの実行に切り替えると、現在実行中のプロセスの状態がプロセス制御ブロックに保存されます。 この後、次に実行するプロセスの状態が独自のPCBからロードされ、PC、レジスタなどの設定に使用されます。 その時点で、2番目のプロセスの実行を開始できます。
コンテキストスイッチは、レジスタとメモリの状態を保存および復元する必要があるため、計算負荷が高くなります。 コンテキストの切り替え時間を回避するために、一部のハードウェアシステムでは、2セット以上のプロセッサレジスタを使用しています。 プロセスが切り替えられると、後で使用するために次の情報が保存されます。
- プログラムカウンター
- スケジューリング情報
- ベースおよび制限レジスタ値
- 現在使用されているレジスタ
- 変更された状態
- I/O状態情報
- 会計情報
オペレーティングシステムスケジューリングアルゴリズム
プロセススケジューラは、特定のスケジューリングアルゴリズムに基づいてCPUに割り当てられるさまざまなプロセスをスケジュールします。 この章では、6つの一般的なプロセススケジューリングアルゴリズムについて説明します。
- 先着順(FCFS)スケジューリング
- Shortest-Job-Next(SJN)スケジューリング
- 優先度スケジューリング
- 最短残り時間
- ラウンドロビン(RR)スケジューリング
- 複数レベルのキュースケジューリング
これらのアルゴリズムは、*非プリエンプティブまたはプリエンプティブ*です。 非プリエンプティブアルゴリズムは、一度プロセスが実行状態になると、割り当てられた時間を完了するまで先取りできないように設計されています。プロセスは準備完了状態になります。
先着順(FCFS)
- ジョブは先着順に実行されます。
- これは、プリエンプティブではないプリエンプティブなスケジューリングアルゴリズムです。
- 簡単に理解して実装できます。
- その実装は、FIFOキューに基づいています。
- 平均待機時間が長いため、パフォーマンスが低下します。
- 各プロセスの待機時間*は次のとおりです-
Process | Wait Time : Service Time - Arrival Time |
---|---|
P0 | 0 - 0 = 0 |
P1 | 5 - 1 = 4 |
P2 | 8 - 2 = 6 |
P3 | 16 - 3 = 13 |
平均待機時間:(0 + 4 + 6 + 13)/4 = 5.75
最短ジョブネクスト(SJN)
- これは、最短ジョブ優先、またはSJFとも呼ばれます
- これは、プリエンプティブではないプリエンプティブなスケジューリングアルゴリズムです。
- 待ち時間を最小限に抑えるための最良のアプローチ。
- 必要なCPU時間が事前にわかっているバッチシステムに簡単に実装できます。
- 必要なCPU時間が不明な対話型システムに実装することはできません。
- 処理者は、処理にかかる時間を事前に知る必要があります。
指定:プロセスの表、およびその到着時間、実行時間
Process | Arrival Time | Execution Time | Service Time |
---|---|---|---|
P0 | 0 | 5 | 0 |
P1 | 1 | 3 | 5 |
P2 | 2 | 8 | 14 |
P3 | 3 | 6 | 8 |
- 各プロセスの*待機時間*は次のとおりです-
Process | Waiting Time |
---|---|
P0 | 0 - 0 = 0 |
P1 | 5 - 1 = 4 |
P2 | 14 - 2 = 12 |
P3 | 8 - 3 = 5 |
平均待機時間:(0 + 4 + 12 + 5)/4 = 21/4 = 5.25
優先度ベースのスケジューリング
- 優先スケジューリングは、プリエンプティブではないアルゴリズムであり、バッチシステムで最も一般的なスケジューリングアルゴリズムの1つです。
- 各プロセスには優先順位が割り当てられます。 最も優先度の高いプロセスが最初に実行されます。
- 同じ優先度のプロセスは、先着順に実行されます。
- 優先度は、メモリ要件、時間要件、またはその他のリソース要件に基づいて決定できます。
与えられた:プロセスの表、およびそれらの到着時間、実行時間、優先度。 ここでは、1が最も低い優先度であると考えています。
Process | Arrival Time | Execution Time | Priority | Service Time |
---|---|---|---|---|
P0 | 0 | 5 | 1 | 0 |
P1 | 1 | 3 | 2 | 11 |
P2 | 2 | 8 | 1 | 14 |
P3 | 3 | 6 | 3 | 5 |
- 各プロセスの*待機時間*は次のとおりです-
Process | Waiting Time |
---|---|
P0 | 0 - 0 = 0 |
P1 | 11 - 1 = 10 |
P2 | 14 - 2 = 12 |
P3 | 5 - 3 = 2 |
平均待機時間:(0 + 10 + 12 + 2)/4 = 24/4 = 6
最短残り時間
- 最短残り時間(SRT)は、SJNアルゴリズムのプリエンプティブバージョンです。
- プロセッサは、完了に最も近いジョブに割り当てられますが、完了までの時間が短い、より新しい準備ができたジョブによってプリエンプトされる可能性があります。
- 必要なCPU時間が不明な対話型システムに実装することはできません。
- 短いジョブが優先される必要があるバッチ環境でよく使用されます。
ラウンドロビンスケジューリング
- ラウンドロビンは、プリエンプティブプロセススケジューリングアルゴリズムです。
- 各プロセスには、実行するための修正時間が提供され、*量子*と呼ばれます。
- プロセスが特定の期間実行されると、そのプロセスは横取りされ、他のプロセスは特定の期間実行されます。
- コンテキスト切り替えは、横取りされたプロセスの状態を保存するために使用されます。
- 各プロセスの待機時間*は次のとおりです-
Process | Wait Time : Service Time - Arrival Time |
---|---|
P0 | (0 - 0) + (12 - 3) = 9 |
P1 | (3 - 1) = 2 |
P2 | (6 - 2) + (14 - 9) + (20 - 17) = 12 |
P3 | (9 - 3) + (17 - 12) = 11 |
平均待機時間:(9 + 2 + 12 + 11)/4 = 8.5
複数レベルのキュースケジューリング
複数レベルのキューは、独立したスケジューリングアルゴリズムではありません。 他の既存のアルゴリズムを使用して、共通の特性を持つジョブをグループ化し、スケジュールします。
- 共通の特性を持つプロセスに対して複数のキューが維持されます。
- 各キューは、独自のスケジューリングアルゴリズムを持つことができます。
- 優先度は各キューに割り当てられます。
たとえば、CPUバウンドジョブを1つのキューでスケジュールし、すべてのI/Oバウンドジョブを別のキューでスケジュールできます。 プロセススケジューラは、各キューからジョブを交互に選択し、キューに割り当てられたアルゴリズムに基づいてCPUに割り当てます。
オペレーティングシステム-マルチスレッド
スレッドとは?
スレッドは、次に実行する命令を追跡する独自のプログラムカウンター、現在の作業変数を保持するシステムレジスタ、および実行履歴を含むスタックを備えた、プロセスコードを介した実行のフローです。
スレッドは、ピアスレッドとコードセグメント、データセグメント、開いているファイルなどの情報を共有します。 1つのスレッドがコードセグメントメモリ項目を変更すると、他のすべてのスレッドがそれを認識します。
スレッドは「軽量プロセス」とも呼ばれます。 スレッドは、並列処理によりアプリケーションのパフォーマンスを改善する方法を提供します。 スレッドは、オーバーヘッドスレッドを減らすことでオペレーティングシステムのパフォーマンスを向上させるソフトウェアアプローチを表し、従来のプロセスと同等です。
各スレッドは1つのプロセスにのみ属し、プロセスの外側にスレッドは存在できません。 各スレッドは、個別の制御フローを表します。 スレッドは、ネットワークサーバーとWebサーバーの実装に正常に使用されています。 また、共有メモリマルチプロセッサでアプリケーションを並列実行するための適切な基盤も提供します。 次の図は、シングルスレッドプロセスとマルチスレッドプロセスの動作を示しています。
プロセスとスレッドの違い
S.N. | Process | Thread |
---|---|---|
1 | Process is heavy weight or resource intensive. | Thread is light weight, taking lesser resources than a process. |
2 | Process switching needs interaction with operating system. | Thread switching does not need to interact with operating system. |
3 | In multiple processing environments, each process executes the same code but has its own memory and file resources. | All threads can share same set of open files, child processes. |
4 | If one process is blocked, then no other process can execute until the first process is unblocked. | While one thread is blocked and waiting, a second thread in the same task can run. |
5 | Multiple processes without using threads use more resources. | Multiple threaded processes use fewer resources. |
6 | In multiple processes each process operates independently of the others. | One thread can read, write or change another thread’s data. |
スレッドの利点
- スレッドは、コンテキストの切り替え時間を最小化します。
- スレッドを使用すると、プロセス内で並行性が提供されます。
- 効率的なコミュニケーション。
- スレッドを作成してコンテキストを切り替える方が経済的です。
- スレッドを使用すると、マルチプロセッサアーキテクチャをより高い規模と効率で利用できます。
スレッドの種類
スレッドは、次の2つの方法で実装されます-
- ユーザーレベルのスレッド-ユーザー管理のスレッド。
- カーネルレベルのスレッド-オペレーティングシステムのコアであるカーネルで動作するオペレーティングシステム管理スレッド。
ユーザーレベルのスレッド
この場合、スレッド管理カーネルはスレッドの存在を認識しません。 スレッドライブラリには、スレッドの作成と破棄、スレッド間のメッセージとデータの受け渡し、スレッド実行のスケジューリング、およびスレッドコンテキストの保存と復元のためのコードが含まれています。 アプリケーションは単一のスレッドで開始します。
利点
- スレッドの切り替えには、カーネルモード権限は必要ありません。
- ユーザーレベルのスレッドは、任意のオペレーティングシステムで実行できます。
- スケジューリングは、ユーザーレベルのスレッドでアプリケーション固有にすることができます。
- ユーザーレベルのスレッドは、作成と管理が高速です。
デメリット
- 一般的なオペレーティングシステムでは、ほとんどのシステムコールがブロックされています。
- マルチスレッドアプリケーションは、マルチプロセッシングを利用できません。
カーネルレベルのスレッド
この場合、スレッド管理はカーネルによって行われます。 アプリケーション領域にスレッド管理コードはありません。 カーネルスレッドは、オペレーティングシステムによって直接サポートされています。 任意のアプリケーションをマルチスレッドにプログラムできます。 アプリケーション内のすべてのスレッドは、単一のプロセス内でサポートされます。
カーネルは、プロセス全体およびプロセス内の個々のスレッドのコンテキスト情報を保持します。 カーネルによるスケジューリングは、スレッドごとに行われます。 カーネルは、カーネル空間でスレッドの作成、スケジューリング、管理を実行します。 カーネルスレッドは、通常、ユーザースレッドよりも作成と管理が遅くなります。
利点
- カーネルは、複数のプロセス上の同じプロセスから複数のスレッドを同時にスケジュールできます。
- プロセス内の1つのスレッドがブロックされている場合、カーネルは同じプロセスの別のスレッドをスケジュールできます。
- カーネルルーチン自体はマルチスレッド化できます。
デメリット
- カーネルスレッドは、通常、ユーザースレッドよりも作成と管理が遅くなります。
- 同じプロセス内で1つのスレッドから別のスレッドに制御を転送するには、カーネルへのモード切り替えが必要です。
マルチスレッドモデル
一部のオペレーティングシステムは、ユーザーレベルのスレッドとカーネルレベルのスレッド機能を組み合わせて提供します。 Solarisは、この組み合わせアプローチの好例です。 複合システムでは、同じアプリケーション内の複数のスレッドが複数のプロセッサで並行して実行でき、ブロックシステムコールはプロセス全体をブロックする必要はありません。 マルチスレッドモデルは3つのタイプです
- 多対多の関係。
- 多対1の関係。
- 1対1の関係。
多対多モデル
多対多モデルは、任意の数のユーザースレッドを同じ数または少ない数のカーネルスレッドに多重化します。
次の図は、6つのユーザーレベルのスレッドが6つのカーネルレベルのスレッドと多重化されている多対多のスレッドモデルを示しています。 このモデルでは、開発者は必要な数のユーザースレッドを作成し、対応するカーネルスレッドをマルチプロセッサマシン上で並行して実行できます。 このモデルは、同時実行で最高の精度を提供し、スレッドがブロッキングシステムコールを実行すると、カーネルは別のスレッドの実行をスケジュールできます。
多対1モデル
多対1モデルは、多くのユーザーレベルのスレッドを1つのカーネルレベルのスレッドにマップします。 スレッド管理は、スレッドライブラリによってユーザー空間で行われます。 スレッドがブロッキングシステムコールを行うと、プロセス全体がブロックされます。 一度に1つのスレッドのみがカーネルにアクセスできるため、マルチプロセッサ上で複数のスレッドを並行して実行することはできません。
ユーザーレベルのスレッドライブラリが、システムがそれらをサポートしないような方法でオペレーティングシステムに実装されている場合、カーネルスレッドは多対1の関係モードを使用します。
1対1モデル
ユーザーレベルのスレッドとカーネルレベルのスレッドは1対1の関係にあります。 このモデルは、多対1モデルよりも多くの同時実行性を提供します。 また、スレッドがブロッキングシステムコールを行ったときに別のスレッドを実行できます。 マイクロプロセッサ上で並列実行する複数のスレッドをサポートします。
このモデルの欠点は、ユーザースレッドを作成するには、対応するカーネルスレッドが必要になることです。 OS/2、Windows NT、およびWindows 2000は、1対1の関係モデルを使用します。
ユーザーレベルのスレッドとカーネルレベルのスレッドの違い
S.N. | User-Level Threads | Kernel-Level Thread |
---|---|---|
1 | User-level threads are faster to create and manage. | Kernel-level threads are slower to create and manage. |
2 | Implementation is by a thread library at the user level. | Operating system supports creation of Kernel threads. |
3 | User-level thread is generic and can run on any operating system. | Kernel-level thread is specific to the operating system. |
4 | Multi-threaded applications cannot take advantage of multiprocessing. | Kernel routines themselves can be multithreaded. |
オペレーティングシステム-メモリ管理
メモリ管理は、プライマリメモリを処理または管理し、実行中にメインメモリとディスク間でプロセスをやり取りするオペレーティングシステムの機能です。 メモリ管理は、プロセスに割り当てられているか、空きであるかにかかわらず、すべてのメモリ位置を追跡します。 プロセスに割り当てられるメモリの量をチェックします。 どのプロセスがいつメモリを取得するかを決定します。 一部のメモリが解放または未割り当てになるたびに追跡し、それに応じてステータスを更新します。
このチュートリアルでは、メモリ管理に関連する基本的な概念を学びます。
プロセスのアドレス空間
プロセスアドレス空間は、プロセスがそのコードで参照する論理アドレスのセットです。 たとえば、32ビットアドレッシングが使用されている場合、アドレスの範囲は0〜0x7fffffffです。つまり、2 ^ 31の可能な数であり、合計理論サイズは2ギガバイトです。
オペレーティングシステムは、プログラムへのメモリ割り当て時に論理アドレスを物理アドレスにマッピングします。 メモリが割り当てられる前と後にプログラムで使用されるアドレスの3種類があります-
S.N. | Memory Addresses & Description |
---|---|
1 |
Symbolic addresses ソースコードで使用されるアドレス。 変数名、定数、および命令ラベルは、シンボリックアドレス空間の基本要素です。 |
2 |
Relative addresses コンパイル時に、コンパイラはシンボリックアドレスを相対アドレスに変換します。 |
3 |
Physical addresses ローダーは、プログラムがメインメモリにロードされるときにこれらのアドレスを生成します。 |
仮想アドレスと物理アドレスは、コンパイル時とロード時のアドレスバインドスキームで同じです。 仮想アドレスと物理アドレスは、実行時のアドレスバインドスキームが異なります。
プログラムによって生成されるすべての論理アドレスのセットは、*論理アドレス空間*と呼ばれます。 これらの論理アドレスに対応するすべての物理アドレスのセットは、*物理アドレス空間*と呼ばれます。
仮想アドレスから物理アドレスへのランタイムマッピングは、ハードウェアデバイスであるメモリ管理ユニット(MMU)によって行われます。 MMUは次のメカニズムを使用して、仮想アドレスを物理アドレスに変換します。
- ベースレジスタの値は、ユーザープロセスによって生成されたすべてのアドレスに追加され、メモリに送信されるときにオフセットとして扱われます。 たとえば、ベースレジスタ値が10000の場合、ユーザーによるアドレスロケーション100の使用の試みは、ロケーション10100に動的に再割り当てされます。
- ユーザープログラムは仮想アドレスを扱います。実際の物理アドレスを見ることはありません。
静的ローディングと動的ローディング
静的ローディングまたは動的ローディングの選択は、コンピュータープログラムの開発時に行われます。 プログラムを静的にロードする必要がある場合、コンパイル時に、外部プログラムまたはモジュールの依存関係を残さずに、完全なプログラムがコンパイルおよびリンクされます。 リンカは、オブジェクトプログラムと他の必要なオブジェクトモジュールを組み合わせて、論理アドレスを含む絶対プログラムを作成します。
動的にロードされたプログラムを作成している場合、コンパイラーはプログラムをコンパイルし、動的に組み込みたいすべてのモジュールについて、参照のみが提供され、実行時に残りの作業が行われます。
ロード時に、 static loading を使用すると、実行を開始するために絶対プログラム(およびデータ)がメモリにロードされます。
- 動的ロード*を使用している場合、ライブラリの動的ルーチンは再配置可能な形式でディスクに保存され、プログラムで必要な場合にのみメモリにロードされます。
静的リンクと動的リンク
上で説明したように、静的リンクを使用すると、リンカーは、プログラムに必要な他のすべてのモジュールを単一の実行可能プログラムに結合して、実行時依存を回避します。
動的リンクを使用する場合、実際のモジュールまたはライブラリをプログラムにリンクする必要はなく、コンパイルおよびリンク時に動的モジュールへの参照が提供されます。 Windowsのダイナミックリンクライブラリ(DLL)とUnixの共有オブジェクトは、ダイナミックライブラリの良い例です。
スワッピング
スワップとは、プロセスを一時的にメインメモリからスワップ(または移動)してセカンダリストレージ(ディスク)に入れ、そのメモリを他のプロセスで使用できるようにするメカニズムです。 しばらくすると、システムはプロセスをセカンダリストレージからメインメモリにスワップバックします。
通常、パフォーマンスはスワッププロセスの影響を受けますが、複数の大きなプロセスを並行して実行するのに役立ちます。そのため、*スワップはメモリ圧縮の手法*としても知られています。
スワッププロセスにかかる合計時間には、プロセス全体をセカンダリディスクに移動してからプロセスをメモリにコピーするのにかかる時間と、プロセスがメインメモリを取り戻すのにかかる時間が含まれます。
ユーザープロセスのサイズは2048KBであり、スワッピングが行われる標準のハードディスクでは、データ転送レートが1秒あたり約1 MBであると仮定します。 メモリへの、またはメモリからの1000Kプロセスの実際の転送には、
2048KB/1024KB per second
= 2 seconds
= 2000 milliseconds
入退室時間を考慮すると、完全な4000ミリ秒に加えて、プロセスがメインメモリを取り戻すために競合する他のオーバーヘッドがかかります。
メモリ割り当て
メインメモリには通常2つのパーティションがあります-
- Low Memory -オペレーティングシステムはこのメモリにあります。
- ハイメモリ-ユーザープロセスはハイメモリに保持されます。
オペレーティングシステムは、次のメモリ割り当てメカニズムを使用します。
S.N. | Memory Allocation & Description |
---|---|
1 |
Single-partition allocation このタイプの割り当てでは、再配置レジスタスキームを使用して、ユーザープロセスを相互に保護し、オペレーティングシステムのコードとデータを変更しません。 再配置レジスタには最小の物理アドレスの値が含まれ、制限レジスタには論理アドレスの範囲が含まれます。 各論理アドレスは、制限レジスタよりも小さくなければなりません。 |
2 |
Multiple-partition allocation このタイプの割り当てでは、メインメモリはいくつかの固定サイズのパーティションに分割され、各パーティションにはプロセスを1つだけ含める必要があります。 パーティションが空いている場合、プロセスは入力キューから選択され、空いているパーティションにロードされます。 プロセスが終了すると、パーティションは別のプロセスで使用可能になります。 |
フラグメンテーション
プロセスがロードされてメモリから削除されると、空きメモリ領域は小さな断片に分割されます。 プロセスがメモリブロックに割り当てられず、サイズが小さく、メモリブロックが未使用のままである場合があります。 この問題はフラグメンテーションとして知られています。
フラグメンテーションは2種類あります-
S.N. | Fragmentation & Description |
---|---|
1 |
External fragmentation 合計メモリ領域は、要求を満たすか、その中にプロセスを常駐させるのに十分ですが、連続していないため、使用できません。 |
2 |
Internal fragmentation プロセスに割り当てられたメモリブロックが大きくなっています。 別のプロセスで使用できないため、メモリの一部は未使用のままになります。 |
次の図は、断片化がメモリの浪費を引き起こし、圧縮技術を使用して断片化されたメモリからより多くの空きメモリを作成する方法を示しています-
外部の断片化は、圧縮またはメモリ内容のシャッフルにより、すべての空きメモリを1つの大きなブロックにまとめることで削減できます。 圧縮を実行可能にするために、再配置は動的でなければなりません。
プロセスに対して十分な大きさの最小のパーティションを効果的に割り当てることにより、内部の断片化を減らすことができます。
ページング
コンピュータは、システムに物理的にインストールされている量よりも多くのメモリをアドレス指定できます。 この余分なメモリは実際には仮想メモリと呼ばれ、コンピュータのRAMをエミュレートするために設定されたハードのセクションです。 ページング技術は、仮想メモリの実装において重要な役割を果たします。
ページングは、プロセスのアドレス空間を*ページ*と呼ばれる同じサイズのブロックに分割するメモリ管理手法です(サイズは512バイトから8192バイトの間の2の累乗です)。 プロセスのサイズはページ数で測定されます。
同様に、メインメモリは(フレーム)と呼ばれる(物理)メモリの小さな固定サイズブロックに分割され、フレームのサイズはページのサイズと同じに保たれ、メインメモリの最適な利用と外部の断片化が回避されます。
アドレス変換
ページアドレスは*論理アドレス*と呼ばれ、*ページ番号*と*オフセット*で表されます。
Logical Address = Page number + page offset
フレームアドレスは*物理アドレス*と呼ばれ、*フレーム番号*と*オフセット*で表されます。
Physical Address = Frame number + page offset
- ページマップテーブル*と呼ばれるデータ構造は、プロセスのページと物理メモリ内のフレームとの関係を追跡するために使用されます。
システムがフレームをページに割り当てると、この論理アドレスが物理アドレスに変換され、プログラムの実行全体で使用されるページテーブルへのエントリが作成されます。
プロセスを実行する場合、対応するページが利用可能なメモリフレームにロードされます。 8Kbのプログラムを持っているが、特定の時点でメモリが5Kbしか収容できないと仮定すると、ページングの概念が明らかになります。 コンピューターのRAMが不足すると、オペレーティングシステム(OS)はアイドルまたは不要なメモリページをセカンダリメモリに移動して、RAMを他のプロセスに解放し、プログラムが必要とするときにそれらを戻します。
このプロセスは、OSがメインメモリからアイドルページを削除し、それらをセカンダリメモリに書き込み、プログラムが必要とするときにそれらを戻すプログラムの実行中も継続します。
ページングの長所と短所
ここにページングの利点と欠点のリストがあります-
- ページングは外部の断片化を減らしますが、それでも内部の断片化の影響を受けます。
- ページングは実装が簡単で、効率的なメモリ管理手法として想定されています。
- ページとフレームのサイズが等しいため、スワップは非常に簡単になります。
- ページテーブルには追加のメモリ領域が必要であるため、RAMが少ないシステムには適していません。
セグメンテーション
セグメンテーションは、各ジョブを異なるサイズの複数のセグメントに分割するメモリ管理手法です。各セグメントには、関連する機能を実行する部分が含まれています。 各セグメントは、実際にはプログラムの異なる論理アドレス空間です。
プロセスを実行する場合、対応するセグメンテーションは非連続メモリにロードされますが、すべてのセグメントは使用可能なメモリの連続ブロックにロードされます。
セグメンテーションメモリ管理はページングと非常によく似ていますが、ここではセグメントは可変長で、ページングページのように固定サイズです。
プログラムセグメントには、プログラムのメイン機能、ユーティリティ機能、データ構造などが含まれます。 オペレーティングシステムは、すべてのプロセスの*セグメントマップテーブル*と、セグメント番号、サイズ、およびメインメモリ内の対応するメモリ位置とともに、空きメモリブロックのリストを保持しています。 テーブルには、セグメントごとに、セグメントの開始アドレスとセグメントの長さが格納されます。 メモリ位置への参照には、セグメントとオフセットを識別する値が含まれます。
オペレーティングシステム-仮想メモリ
コンピュータは、システムに物理的にインストールされている量よりも多くのメモリをアドレス指定できます。 この余分なメモリは、実際には*仮想メモリ*と呼ばれ、コンピュータのRAMをエミュレートするためにセットアップされたハードディスクのセクションです。
このスキームの主な目に見える利点は、プログラムが物理メモリよりも大きくなる可能性があることです。 仮想メモリには2つの目的があります。 まず、ディスクを使用して物理メモリの使用を拡張できます。 次に、各仮想アドレスが物理アドレスに変換されるため、メモリ保護が可能になります。
以下は、プログラム全体をメインメモリに完全にロードする必要がない場合の状況です。
- ユーザー作成のエラー処理ルーチンは、データまたは計算でエラーが発生した場合にのみ使用されます。
- プログラムの特定のオプションと機能はほとんど使用されません。
- 実際に使用されるテーブルはごくわずかですが、多くのテーブルには固定量のアドレススペースが割り当てられます。
- メモリ内に部分的にしか存在しないプログラムを実行する機能は、多くの利点に反するでしょう。
- 各ユーザープログラムをメモリにロードまたはスワップするために必要なI/Oの数は少なくなります。
- プログラムは、使用可能な物理メモリの量に制約されなくなりました。
- 各ユーザープログラムは、より少ない物理メモリで済み、同時により多くのプログラムを実行でき、それに対応してCPU使用率とスループットが向上します。
汎用の使用を目的とした最新のマイクロプロセッサ、メモリ管理ユニット、またはMMUは、ハードウェアに組み込まれています。 MMUの仕事は、仮想アドレスを物理アドレスに変換することです。 基本的な例を以下に示します-
仮想メモリは通常、デマンドページングによって実装されます。 また、セグメンテーションシステムに実装することもできます。 デマンドセグメンテーションを使用して、仮想メモリを提供することもできます。
デマンドページング
デマンドページングシステムは、プロセスがセカンダリメモリに常駐し、ページが事前にではなくオンデマンドでロードされるスワッピングを備えたページングシステムに非常に似ています。 コンテキストの切り替えが発生すると、オペレーティングシステムは古いプログラムのページをディスクにコピーせず、新しいプログラムのページをメインメモリにコピーしません。代わりに、最初のページを読み込んで新しいプログラムの実行を開始し、参照されているプログラムのページ。
プログラムの実行中に、プログラムが少し前にスワップアウトされたためにメインメモリで利用できないページを参照する場合、プロセッサはこの無効なメモリ参照を*ページフォールト*として扱い、プログラムからオペレーティングシステムに制御を渡しますページをメモリに戻すことを要求するシステム。
利点
デマンドページングの利点は次のとおりです-
- 大容量の仮想メモリ。
- メモリのより効率的な使用。
- マルチプログラミングの程度に制限はありません。
デメリット
- ページ割り込みを処理するためのテーブルの数とプロセッサオーバーヘッドの量は、単純なページ管理技術の場合よりも大きくなります。
ページ置換アルゴリズム
ページ置換アルゴリズムは、メモリページを割り当てる必要があるときに、オペレーティングシステムがどのメモリページをスワップアウトするか、ディスクに書き込むかを決定する手法です。 ページフォールトが発生し、ページが利用できない、または空きページの数が必要なページより少ないため、空きページを割り当て目的のアカウンティングに使用できない場合は常にページングが発生します。
置換用に選択され、ページアウトされたページが再度参照されると、ディスクから読み込む必要があり、これにはI/Oの完了が必要です。 このプロセスは、ページ置換アルゴリズムの品質を決定します。ページインを待機する時間が短いほど、アルゴリズムは優れています。
ページ置換アルゴリズムは、ハードウェアによって提供されるページへのアクセスに関する限られた情報を調べ、ページミスの総数を最小化するために置換するページを選択しようとしながら、アルゴリズムのプライマリストレージとプロセッサ時間のコストとバランスをとります自体。 多くの異なるページ置換アルゴリズムがあります。 特定のメモリ参照文字列でアルゴリズムを実行し、ページフォールトの数を計算することにより、アルゴリズムを評価します。
参照文字列
メモリ参照の文字列は、参照文字列と呼ばれます。 参照文字列は、人為的に、または特定のシステムをトレースして各メモリ参照のアドレスを記録することにより生成されます。 後者を選択すると、大量のデータが生成されます。2つの点に注意してください。
- 特定のページサイズについては、アドレス全体ではなく、ページ番号のみを考慮する必要があります。
- ページ p への参照がある場合、ページ p への参照の直後にページフォールトが発生することはありません。 ページpは、最初の参照後にメモリ内にあります。すぐ後に続く参照はフォールトしません。
- たとえば、次の一連のアドレスを考えます-123,215,600,1234,76,96
- ページサイズが100の場合、参照文字列は1,2,6,12,0,0です
先入れ先出し(FIFO)アルゴリズム
- メインメモリ内の最も古いページが、置換用に選択されるページです。
- 実装が簡単で、リストを保持し、末尾のページを置き換え、先頭に新しいページを追加します。
最適なページアルゴリズム
- 最適なページ交換アルゴリズムは、すべてのアルゴリズムの中で最もページ違反率が低くなります。 最適なページ置換アルゴリズムが存在し、OPTまたはMINと呼ばれています。
- 最長期間使用されないページを置き換えます。 ページが使用される時間を使用します。
最長時間未使用(LRU)アルゴリズム
- メインメモリで最も長く使用されていないページが、置換のために選択されるページです。
- 簡単に実装し、リストを保持し、時間を振り返ってページを置き換えます。
ページバッファリングアルゴリズム
- プロセスをすぐに開始するには、空きフレームのプールを保持します。
- ページフォールトで、置換するページを選択します。
- 空きプールのフレームに新しいページを書き込み、ページテーブルをマークして、プロセスを再起動します。
- 次に、ディスクからダーティページを書き込み、置き換えられたページを保持しているフレームを空きプールに配置します。
最低使用頻度(LFU)アルゴリズム
- 最小数のページが、置換用に選択されるページです。
- このアルゴリズムは、プロセスの初期段階でページが頻繁に使用されるという状況に悩まされますが、その後再び使用されることはありません。
最も頻繁に使用される(MFU)アルゴリズム
- このアルゴリズムは、カウントが最小のページはおそらく持ち込まれたばかりでまだ使用されていないという議論に基づいています。
オペレーティングシステム-I/Oハードウェア
オペレーティングシステムの重要な仕事の1つは、マウス、キーボード、タッチパッド、ディスクドライブ、ディスプレイアダプター、USBデバイス、ビットマップスクリーン、LED、A/Dコンバーター、On/オフスイッチ、ネットワーク接続、オーディオI/O、プリンターなど
I/Oシステムは、アプリケーションI/O要求を取得して物理デバイスに送信し、デバイスから返される応答をすべて取得してアプリケーションに送信する必要があります。 I/Oデバイスは2つのカテゴリに分けることができます-
- ブロックデバイス-ブロックデバイスとは、ドライバーがデータブロック全体を送信することで通信するデバイスです。 たとえば、ハードディスク、USBカメラ、Disk-On-Keyなど。
- キャラクターデバイス-キャラクターデバイスとは、ドライバーが単一の文字(バイト、オクテット)を送受信することで通信するデバイスです。 たとえば、シリアルポート、パラレルポート、サウンドカードなど
デバイスコントローラー
デバイスドライバーは、特定のデバイスを処理するためにOSにプラグインできるソフトウェアモジュールです。 オペレーティングシステムは、デバイスドライバーの助けを借りて、すべてのI/Oデバイスを処理します。
デバイスコントローラーは、デバイスとデバイスドライバー間のインターフェイスのように機能します。 I/Oユニット(キーボード、マウス、プリンターなど)は通常、機械コンポーネントと電子コンポーネントで構成され、電子コンポーネントはデバイスコントローラーと呼ばれます。
オペレーティングシステムと通信するために、各デバイスには常にデバイスコントローラーとデバイスドライバーがあります。 デバイスコントローラーは、複数のデバイスを処理できる場合があります。 インターフェイスとしての主なタスクは、シリアルビットストリームをバイトブロックに変換し、必要に応じてエラー修正を実行することです。
コンピューターに接続されているデバイスはすべてプラグアンドソケットで接続され、ソケットはデバイスコントローラーに接続されています。 以下は、CPU、メモリ、コントローラー、およびI/Oデバイスを接続するためのモデルで、CPUとデバイスコントローラーはすべて共通のバスを使用して通信します。
同期I/Oと非同期I/O
- *同期I/O *-このスキームでは、I/Oの進行中にCPUの実行が待機します
- *非同期I/O *-I/OはCPUの実行と同時に進行します
I/Oデバイスへの通信
CPUには、I/Oデバイスと情報をやり取りする方法が必要です。 CPUおよびデバイスと通信するには、3つのアプローチがあります。
- 特別な命令I/O
- メモリマップドI/O *ダイレクトメモリアクセス(DMA)
特別な命令I/O
これは、I/Oデバイスを制御するために特別に作成されたCPU命令を使用します。 通常、これらの命令により、データをI/Oデバイスに送信したり、I/Oデバイスから読み取ったりできます。
メモリマップドI/O
メモリマップドI/Oを使用する場合、同じアドレス空間がメモリとI/Oデバイスで共有されます。 このデバイスは特定のメインメモリロケーションに直接接続されているため、I/OデバイスはCPUを経由せずにデータブロックをメモリに転送できます。
メモリマップドIOの使用中、OSはメモリ内にバッファを割り当て、そのバッファを使用してCPUにデータを送信するようI/Oデバイスに通知します。 I/OデバイスはCPUと非同期に動作し、終了するとCPUに割り込みます。
この方法の利点は、メモリにアクセスできるすべての命令を使用してI/Oデバイスを操作できることです。 メモリマップドIOは、ディスク、通信インターフェイスなどのほとんどの高速I/Oデバイスに使用されます。
ダイレクトメモリアクセス(DMA)
キーボードなどの遅いデバイスは、各バイトが転送された後にメインCPUに割り込みを生成します。 ディスクなどの高速デバイスが各バイトの割り込みを生成した場合、オペレーティングシステムはこれらの割り込みの処理にほとんどの時間を費やします。 そのため、一般的なコンピューターは、ダイレクトメモリアクセス(DMA)ハードウェアを使用してこのオーバーヘッドを削減します。
ダイレクトメモリアクセス(DMA)は、CPUが関与せずにメモリの読み取りまたは書き込みを行うためのI/Oモジュール権限を付与することを意味します。 DMAモジュール自体は、メインメモリとI/Oデバイス間のデータ交換を制御します。 CPUは転送の開始と終了にのみ関与し、ブロック全体が転送された後にのみ中断されます。
ダイレクトメモリアクセスには、データ転送を管理し、システムバスへのアクセスを調停するDMAコントローラー(DMAC)と呼ばれる特別なハードウェアが必要です。 コントローラーは、ソースポインターと宛先ポインター(データの読み取り/書き込み先)、転送バイト数を追跡するカウンター、およびI/Oとメモリタイプ、CPUサイクルの割り込みと状態を含む設定でプログラムされます。
オペレーティングシステムは、次のようにDMAハードウェアを使用します-
Step | Description |
---|---|
1 | Device driver is instructed to transfer disk data to a buffer address X. |
2 | Device driver then instruct disk controller to transfer data to buffer. |
3 | Disk controller starts DMA transfer. |
4 | Disk controller sends each byte to DMA controller. |
5 | DMA controller transfers bytes to buffer, increases the memory address, decreases the counter C until C becomes zero. |
6 | When C becomes zero, DMA interrupts CPU to signal transfer completion. |
ポーリングと割り込みI/O
コンピューターには、あらゆるタイプの入力の到着を検出する方法が必要です。* ポーリング*と*割り込み*として知られる、これが起こる2つの方法があります。 これらの両方の手法により、プロセッサは、いつでも発生する可能性があり、現在実行中のプロセスに関連しないイベントを処理できます。
ポーリングI/O
ポーリングは、I/Oデバイスがプロセッサと通信するための最も簡単な方法です。 デバイスのステータスを定期的にチェックして、次のI/O操作の時間かどうかを確認するプロセスは、ポーリングと呼ばれます。 I/Oデバイスは単に情報をステータスレジスタに入れ、プロセッサが情報を取得する必要があります。
ほとんどの場合、デバイスは注意を必要とせず、ポーリングプログラムによって次に照会されるまで待機する必要があります。 これは非効率的な方法であり、プロセッサ時間の多くは不要なポーリングに無駄になります。
この方法を、クラスのすべての生徒に助けが必要かどうかを次々と尋ねる教師と比較してください。 明らかに、より効率的な方法は、学生が支援を必要とするたびに教師に通知することです。
I/Oに割り込みます
I/Oを処理するための代替スキームは、割り込み駆動方式です。 割り込みは、注意が必要なデバイスからマイクロプロセッサへの信号です。
デバイスコントローラーは、CPUが割り込みを受け取ったときにCPUの注意が必要な場合にバスに割り込み信号を送ります。現在の状態を保存し、割り込みベクター(さまざまなイベントを処理するOSルーチンのアドレス)を使用して適切な割り込みハンドラーを呼び出します。 割り込みデバイスが処理されると、CPUは割り込みされていないかのように元のタスクを続行します。
オペレーティングシステム-I/Oソフトウェア
I/Oソフトウェアは、多くの場合、次の層で構成されています-
- ユーザーレベルライブラリ-これは、入力と出力を実行するユーザープログラムへのシンプルなインターフェイスを提供します。 たとえば、 stdio はCおよびC ++プログラミング言語によって提供されるライブラリです。
- カーネルレベルモジュール-これは、デバイスドライバーが使用するデバイスコントローラーおよびデバイスに依存しないI/Oモジュールと対話するデバイスドライバーを提供します。
- ハードウェア-この層には、デバイスドライバーと対話し、ハードウェアをアクティブにする実際のハードウェアとハードウェアコントローラーが含まれます。
I/Oソフトウェアの設計における重要な概念は、デバイスを事前に指定しなくても、任意のI/Oデバイスにアクセスできるプログラムを作成できる場合、デバイスに依存しないことです。 たとえば、ファイルを入力として読み取るプログラムは、デバイスごとにプログラムを変更することなく、フロッピーディスク、ハードディスク、またはCD-ROM上のファイルを読み取ることができる必要があります。
デバイスドライバ
デバイスドライバーは、特定のデバイスを処理するためにOSにプラグインできるソフトウェアモジュールです。 オペレーティングシステムは、デバイスドライバーの助けを借りて、すべてのI/Oデバイスを処理します。 デバイスドライバーは、デバイスに依存するコードをカプセル化し、コードにデバイス固有のレジスタ読み取り/書き込みが含まれるように標準インターフェイスを実装します。 通常、デバイスドライバーは、デバイスの製造元によって作成され、デバイスと共にCD-ROMで提供されます。
デバイスドライバは、次のジョブを実行します-
- 上記のデバイスに依存しないソフトウェアからのリクエストを受け入れるため。
- デバイスコントローラーと対話してI/Oを取得および提供し、必要なエラー処理を実行します。
- リクエストが正常に実行されることを確認する
デバイスドライバーが要求を処理する方法は次のとおりです。要求がブロックNを読み取るようになったとします。 ドライバーは、リクエストの到着時にアイドル状態の場合、すぐにリクエストの実行を開始します。 それ以外の場合、ドライバーが他の要求で既にビジーである場合、新しい要求を保留中の要求のキューに入れます。
割り込みハンドラー
割り込みサービスルーチンまたはISRとしても知られる割り込みハンドラーは、ソフトウェアの一部、より具体的にはオペレーティングシステム、より具体的にはデバイスドライバーのコールバック関数であり、その実行は割り込みの受信によってトリガーされます。
割り込みが発生すると、割り込みプロシージャは、割り込みを処理するために必要な処理をすべて実行し、データ構造を更新し、割り込みの発生を待っていたプロセスを起動します。
割り込みメカニズムは、アドレス、つまり小さなセットから特定の割り込み処理ルーチン/機能を選択する番号を受け入れます。 ほとんどのアーキテクチャでは、このアドレスは割り込みベクターテーブルと呼ばれるテーブルに格納されたオフセットです。 このベクトルには、特殊な割り込みハンドラのメモリアドレスが含まれています。
デバイスに依存しないI/Oソフトウェア
デバイスに依存しないソフトウェアの基本的な機能は、すべてのデバイスに共通のI/O機能を実行し、ユーザーレベルのソフトウェアに統一されたインターフェイスを提供することです。 完全にデバイスに依存しないソフトウェアを作成することは困難ですが、すべてのデバイスに共通するモジュールをいくつか作成できます。 以下は、デバイスに依存しないI/Oソフトウェアの機能のリストです-
- デバイスドライバーの均一なインターフェイス
- デバイスの命名-メジャーおよびマイナーデバイス番号にマッピングされたニーモニック名
- デバイス保護
- デバイスに依存しないブロックサイズを提供する
- デバイスから送信されるデータを最終的な宛先に保存できないため、バッファリング。
- ブロックデバイス上のストレージ割り当て
- 専用デバイスの割り当てと解放
- エラー報告
ユーザースペースI/Oソフトウェア
これらは、カーネルの機能にアクセスするための、または最終的にデバイスドライバーと対話するための、よりリッチで簡素化されたインターフェイスを提供するライブラリです。 ユーザーレベルのI/Oソフトウェアのほとんどは、マルチプログラミングシステムで専用I/Oデバイスを処理する方法であるスプーリングシステムのようないくつかの例外を含むライブラリプロシージャで構成されています。
I/Oライブラリ(stdioなど)はユーザー空間にあり、OSに常駐するデバイスに依存しないI/O SWへのインターフェイスを提供します。 たとえば、putchar()、getchar()、printf()、およびscanf()は、Cプログラミングで利用可能なユーザーレベルのI/Oライブラリstdioの例です。
カーネルI/Oサブシステム
カーネルI/Oサブシステムは、I/Oに関連する多くのサービスを提供します。 以下は、提供されるサービスの一部です。
- スケジューリング-カーネルは一連のI/O要求をスケジュールして、それらを実行する適切な順序を決定します。 アプリケーションがブロッキングI/Oシステムコールを発行すると、そのデバイスのキューに要求が置かれます。 カーネルI/Oスケジューラは、キューの順序を並べ替えて、システム全体の効率とアプリケーションが受ける平均応答時間を改善します。
- バッファリング-カーネルI/Oサブシステムは、2つのデバイス間またはアプリケーション操作のあるデバイス間で転送されるデータを保存する*バッファ*と呼ばれるメモリ領域を維持します。 バッファリングは、データストリームのプロデューサーとコンシューマー間の速度の不一致に対処するため、または異なるデータ転送サイズを持つデバイス間で適応するために行われます。
- キャッシュ-カーネルは、データのコピーを保持する高速メモリの領域であるキャッシュメモリを維持します。 キャッシュされたコピーへのアクセスは、オリジナルへのアクセスよりも効率的です。
- スプーリングとデバイス予約-スプールは、インターリーブされたデータストリームを受け入れることができないプリンターなどのデバイスの出力を保持するバッファーです。 スプーリングシステムは、キューに入れられたスプールファイルを一度に1つずつプリンターにコピーします。 一部のオペレーティングシステムでは、スプーリングはシステムデーモンプロセスによって管理されます。 他のオペレーティングシステムでは、カーネルスレッドによって処理されます。
- エラー処理-保護されたメモリを使用するオペレーティングシステムは、多くの種類のハードウェアおよびアプリケーションエラーから保護できます。
オペレーティングシステム-ファイルシステム
File
ファイルは、磁気ディスク、磁気テープ、光ディスクなどのセカンダリストレージに記録される関連情報の名前付きコレクションです。 一般に、ファイルはビット、バイト、行、またはレコードのシーケンスであり、その意味はファイルの作成者とユーザーによって定義されます。
ファイル構造
ファイル構造は、オペレーティングシステムが理解できる必要な形式に従う必要があります。
- ファイルには、その種類に応じて特定の定義された構造があります。
- テキストファイルは、行に編成された一連の文字です。
- ソースファイルは、一連のプロシージャと関数です。
- オブジェクトファイルは、マシンが理解できるブロックに編成された一連のバイトです。
- オペレーティングシステムが異なるファイル構造を定義する場合、これらのファイル構造をサポートするコードも含まれます。 Unix、MS-DOSはファイル構造の最小数をサポートします。
ファイルの種類
ファイルの種類とは、テキストファイルのソースファイルやバイナリファイルなど、さまざまな種類のファイルを区別するオペレーティングシステムの機能のことです。 多くのオペレーティングシステムは、多くの種類のファイルをサポートしています。 MS-DOSやUNIXなどのオペレーティングシステムには、次の種類のファイルがあります-
通常のファイル
- これらは、ユーザー情報を含むファイルです。
- これらには、テキスト、データベース、または実行可能プログラムが含まれる場合があります。
- ユーザーは、ファイル全体の追加、変更、削除、または削除などのファイルにさまざまな操作を適用できます。
ディレクトリファイル
- これらのファイルには、ファイル名のリストとこれらのファイルに関連するその他の情報が含まれています。
特別なファイル
- これらのファイルは、デバイスファイルとも呼ばれます。
- これらのファイルは、ディスク、端末、プリンター、ネットワーク、テープドライブなどの物理デバイスを表します。
これらのファイルは2種類あります-
- 文字特殊ファイル-データは、端末またはプリンターの場合と同様に文字ごとに処理されます。
- ブロックスペシャルファイル-データは、ディスクやテープの場合のようにブロックで処理されます。
ファイルアクセスメカニズム
ファイルアクセスメカニズムとは、ファイルのレコードにアクセスする方法を指します。 ファイルにアクセスするにはいくつかの方法があります-
- シーケンシャルアクセス
- 直接/ランダムアクセス
- インデックスシーケンシャルアクセス
シーケンシャルアクセス
順次アクセスとは、レコードが何らかの順序でアクセスされることです。つまり、ファイル内の情報が順番に処理され、レコードが次々に処理されます。 このアクセス方法は最も原始的なものです。 例:通常、コンパイラはこの方法でファイルにアクセスします。
直接/ランダムアクセス
- ランダムアクセスファイル編成により、レコードに直接アクセスできます。
- 各レコードには、ファイル上に独自のアドレスがあり、その助けにより、読み取りまたは書き込みのために直接アクセスできます。
- レコードはファイル内の順序である必要はなく、ストレージメディア上の隣接する場所にある必要もありません。
インデックスシーケンシャルアクセス
- このメカニズムは、シーケンシャルアクセスに基づいて構築されています。
- さまざまなブロックへのポインターを含むファイルごとにインデックスが作成されます。
- インデックスは順番に検索され、そのポインタはファイルに直接アクセスするために使用されます。
スペース割り当て
ファイルには、オペレーティングシステムによってディスクスペースが割り当てられます。 オペレーティングシステムは、次の3つの主な方法でファイルにディスク領域を割り当てます。
- 連続割り当て
- リンクされた割り当て
- インデックス付き割り当て
連続割り当て
- 各ファイルは、ディスク上の連続したアドレス空間を占有します。
- 割り当てられたディスクアドレスは線形の順序です。
- 実装が簡単
- 外部断片化は、このタイプの割り当て手法の主要な問題です。
リンクされた割り当て
- 各ファイルには、ディスクブロックへのリンクのリストが含まれています。
- ディレクトリには、ファイルの最初のブロックへのリンク/ポインターが含まれます。
- 外部フラグメンテーションなし
- 順次アクセスファイルで効果的に使用されます。
- 直接アクセスファイルの場合は非効率的です。
インデックス付き割り当て
- 連続したリンクされた割り当ての問題の解決策を提供します。
- ファイルへのすべてのポインタを持つインデックスブロックが作成されます。
- 各ファイルには、ファイルが占有するディスク領域のアドレスを格納する独自のインデックスブロックがあります。
- ディレクトリには、ファイルのインデックスブロックのアドレスが含まれます。
オペレーティングシステム-セキュリティ
セキュリティとは、CPU、メモリ、ディスク、ソフトウェアプログラムなどのコンピューターシステムリソース、および最も重要なコンピューターシステムに保存されているデータ/情報に保護システムを提供することです。 許可されていないユーザーがコンピュータープログラムを実行すると、そのユーザーはコンピューターまたはコンピューターに保存されているデータに重大な損害を与える可能性があります。 そのため、コンピューターシステムは、不正アクセス、システムメモリへの悪意のあるアクセス、ウイルス、ワームなどから保護する必要があります。 この章では、次のトピックについて説明します。
- 認証
- ワンタイムパスワード
- プログラムの脅威
- システムの脅威
- コンピュータセキュリティ分類
認証
認証とは、システムの各ユーザーを識別し、実行中のプログラムをそれらのユーザーに関連付けることです。 特定のプログラムを実行しているユーザーが本物であることを保証する保護システムを作成することは、オペレーティングシステムの責任です。 オペレーティングシステムは、一般的に次の3つの方法を使用してユーザーを識別/認証します-
- ユーザー名/パスワード-ユーザーは、システムにログインするためにオペレーティングシステムで登録済みのユーザー名とパスワードを入力する必要があります。
- ユーザーカード/キー-ユーザーは、カードスロットにカードをパンチするか、オペレーティングシステムが提供するオプションでキージェネレーターによって生成されたキーを入力して、システムにログインする必要があります。
- ユーザー属性-指紋/目の網膜パターン/署名-ユーザーは、システムにログインするためにオペレーティングシステムで使用される指定された入力デバイスを介して自分の属性を渡す必要があります。
ワンタイムパスワード
ワンタイムパスワードは、通常の認証とともに追加のセキュリティを提供します。 ワンタイムパスワードシステムでは、ユーザーがシステムにログインするたびに一意のパスワードが必要です。 ワンタイムパスワードが使用されると、再度使用することはできません。 ワンタイムパスワードはさまざまな方法で実装されます。
- ランダム番号-ユーザーには、対応するアルファベットとともに番号が印刷されたカードが提供されます。 システムは、ランダムに選択されたいくつかのアルファベットに対応する数字を要求します。
- 秘密鍵-ユーザーには、ユーザーIDでマッピングされた秘密IDを作成できるハードウェアデバイスが提供されます。 システムは、ログイン前に毎回生成されるこのような秘密IDを要求します。
- ネットワークパスワード-一部の商用アプリケーションは、ログイン前に入力する必要がある登録済みのモバイル/メールでユーザーにワンタイムパスワードを送信します。
プログラムの脅威
オペレーティングシステムのプロセスとカーネルは、指示に従って指定されたタスクを実行します。 ユーザープログラムがこれらのプロセスに悪意のあるタスクを実行させた場合、「プログラムの脅威」と呼ばれます。 プログラムの脅威の一般的な例の1つは、コンピューターにインストールされたプログラムであり、ネットワークを介してユーザー資格情報を保存し、ハッカーに送信できます。 以下は、いくつかの有名なプログラムの脅威のリストです。
- トロイの木馬-このようなプログラムは、ユーザーのログイン資格情報をトラップして保存し、後でコンピューターにログインしてシステムリソースにアクセスできる悪意のあるユーザーに送信します。
- Trap Door -必要に応じて動作するように設計されたプログラムにコードにセキュリティホールがあり、ユーザーの知らないうちに違法なアクションを実行する場合、トラップドアを持つように呼び出されます。
- 論理爆弾-論理爆弾は、特定の条件が満たされた場合にのみプログラムが誤動作する状況であり、そうでない場合は本物のプログラムとして動作します。 検出が困難です。
- ウイルス-名前が示すとおり、ウイルスはコンピュータシステム上で自分自身を複製できます。 彼らは非常に危険であり、ユーザーファイルを変更/削除し、システムをクラッシュさせる可能性があります。 ウイルスは、一般的にプログラムに埋め込まれた小さなコードです。 ユーザーがプログラムにアクセスすると、ウイルスは他のファイル/プログラムに埋め込まれ始め、ユーザーがシステムを使用できなくなる可能性があります
システムの脅威
システムの脅威とは、システムサービスとネットワーク接続を悪用してユーザーをトラブルに陥れることです。 システムの脅威を使用して、プログラム攻撃と呼ばれる完全なネットワーク上でプログラムの脅威を起動できます。 システムの脅威は、オペレーティングシステムのリソース/ユーザーファイルが悪用されるような環境を作り出します。 以下は、よく知られているシステムの脅威のリストです。
- ワーム-ワームは、システムリソースを極端なレベルまで使用することでシステムパフォーマンスを低下させるプロセスです。 ワームプロセスは、各コピーがシステムリソースを使用する複数のコピーを生成し、他のすべてのプロセスが必要なリソースを取得できないようにします。 ワームプロセスは、ネットワーク全体をシャットダウンすることさえできます。
- ポートスキャン-ポートスキャンは、ハッカーがシステムの脆弱性を検出してシステムを攻撃するメカニズムまたは手段です。
- サービス拒否-サービス拒否攻撃は通常、ユーザーがシステムを正当に使用することを防ぎます。 たとえば、サービス拒否がブラウザのコンテンツ設定を攻撃する場合、ユーザーはインターネットを使用できない場合があります。
コンピュータセキュリティ分類
米国ごと 国防総省の信頼されたコンピューターシステムの評価基準コンピューターシステムには、A、B、C、Dの4つのセキュリティ分類があります。 これは、システムおよびセキュリティソリューションのセキュリティを決定およびモデル化するために広く使用されている仕様です。 次に、各分類の簡単な説明を示します。
S.N. | Classification Type & Description |
---|---|
1 |
Type A 最高レベル。 正式な設計仕様と検証手法を使用します。 プロセスのセキュリティを高度に保証します。 |
2 |
Type B 必須の保護システムを提供します。 クラスC2システムのすべてのプロパティがあります。 各オブジェクトに機密ラベルを添付します。 3種類あります。
|
3 |
Type C 監査機能を使用して保護とユーザーの説明責任を提供します。 2つのタイプがあります。
|
4 |
Type D 最低レベル。 最小限の保護。 MS-DOS、Window 3.1はこのカテゴリに分類されます。 |
オペレーティングシステム-Linux
Linuxは、UNIXオペレーティングシステムの一般的なバージョンの1つです。 ソースコードは自由に入手できるため、オープンソースです。 無料で使えます。 Linuxは、UNIXの互換性を考慮して設計されました。 その機能リストは、UNIXの機能リストと非常に似ています。
Linuxシステムのコンポーネント
Linuxオペレーティングシステムには、主に3つのコンポーネントがあります
- カーネル-カーネルはLinuxのコア部分です。 このオペレーティングシステムのすべての主要なアクティビティを担当します。 さまざまなモジュールで構成され、基盤となるハードウェアと直接対話します。 カーネルは、システムまたはアプリケーションプログラムに対して低レベルのハードウェア詳細を隠すために必要な抽象化を提供します。
- システムライブラリ-システムライブラリは、アプリケーションプログラムまたはシステムユーティリティがカーネルの機能にアクセスするための特別な機能またはプログラムです。 これらのライブラリは、オペレーティングシステムのほとんどの機能を実装し、カーネルモジュールのコードアクセス権を必要としません。
- システムユーティリティ-システムユーティリティプログラムは、専門的な個々のレベルのタスクを実行する責任があります。
カーネルモードとユーザーモード
カーネルコンポーネントコードは、*カーネルモード*と呼ばれる特別な特権モードで実行され、コンピューターのすべてのリソースに完全にアクセスできます。 このコードは単一のプロセスを表し、単一のアドレス空間で実行され、コンテキスト切り替えを必要としないため、非常に効率的で高速です。 カーネルは各プロセスを実行し、プロセスにシステムサービスを提供し、プロセスへのハードウェアへの保護されたアクセスを提供します。
カーネルモードで実行する必要のないサポートコードは、システムライブラリにあります。 ユーザープログラムと他のシステムプログラムは、システムハードウェアとカーネルコードにアクセスできない*ユーザーモード*で動作します。 ユーザープログラム/ユーティリティは、システムライブラリを使用してカーネル機能にアクセスし、システムの低レベルタスクを取得します。
基本的な機能
Linuxオペレーティングシステムの重要な機能の一部を次に示します。
- Portable -移植性とは、ソフトウェアが異なる方法のハードウェアで同じように動作できることを意味します。 Linuxカーネルおよびアプリケーションプログラムは、あらゆる種類のハードウェアプラットフォームへのインストールをサポートしています。
- オープンソース-Linuxのソースコードは無料で入手でき、コミュニティベースの開発プロジェクトです。 Linuxオペレーティングシステムの機能を強化するために、複数のチームが共同で作業し、継続的に進化しています。
- マルチユーザー-Linuxはマルチユーザーシステムであり、複数のユーザーが同時にメモリ/RAM/アプリケーションプログラムなどのシステムリソースにアクセスできます。
- マルチプログラミング-Linuxはマルチプログラミングシステムであり、複数のアプリケーションを同時に実行できます。
- 階層ファイルシステム-Linuxは、システムファイル/ユーザーファイルが配置される標準のファイル構造を提供します。
- シェル-Linuxはオペレーティングシステムのコマンドを実行するために使用できる特別なインタープリタープログラムを提供します。 さまざまなタイプの操作を実行したり、アプリケーションプログラムを呼び出したりするために使用できます。 etc.
- セキュリティ-Linuxは、パスワード保護/特定のファイルへのアクセスの制御/データの暗号化などの認証機能を使用してユーザーセキュリティを提供します。
建築
次の図は、Linuxシステムのアーキテクチャを示しています-
Linuxシステムのアーキテクチャは、次の層で構成されています-
- ハードウェア層-ハードウェアはすべての周辺機器(RAM/HDD/CPUなど)で構成されます。
- カーネル-オペレーティングシステムのコアコンポーネントであり、ハードウェアと直接対話し、上位層コンポーネントに低レベルのサービスを提供します。
- Shell -カーネルの機能の複雑さをユーザーから隠すカーネルへのインターフェース。 シェルはユーザーからコマンドを受け取り、カーネルの機能を実行します。
- ユーティリティ-オペレーティングシステムのほとんどの機能をユーザーに提供するユーティリティプログラム。