オペレーティングシステム-クイックガイド
オペレーティングシステム(OS)は、コンピューターユーザーとコンピューターハードウェア間のインターフェイスです。オペレーティングシステムは、ファイル管理、メモリ管理、プロセス管理、入出力の処理、ディスクドライブやプリンタなどの周辺機器の制御などのすべての基本的なタスクを実行するソフトウェアです。
一般的なオペレーティングシステムには、Linuxオペレーティングシステム、Windowsオペレーティングシステム、VMS、OS / 400、AIX、z / OSなどがあります。
定義
オペレーティングシステムは、ユーザーとコンピューターハードウェア間のインターフェイスとして機能し、あらゆる種類のプログラムの実行を制御するプログラムです。

以下は、オペレーティングシステムの重要な機能の一部です。
- メモリ管理
- プロセッサ管理
- 端末管理
- ファイル管理
- Security
- システムパフォーマンスの制御
- 仕事の会計
- エラー検出支援
- 他のソフトウェアとユーザー間の調整
メモリ管理
メモリ管理とは、プライマリメモリまたはメインメモリの管理を指します。メインメモリは、ワードまたはバイトの大きな配列であり、各ワードまたはバイトには独自のアドレスがあります。
メインメモリは、CPUから直接アクセスできる高速ストレージを提供します。プログラムを実行するには、プログラムがメインメモリにある必要があります。オペレーティングシステムは、メモリ管理のために次のアクティビティを実行します-
プライマリメモリを追跡します。つまり、メモリのどの部分が誰によって使用されているか、どの部分が使用されていないかを追跡します。
マルチプログラミングでは、OSがどのプロセスがいつどのくらいのメモリを取得するかを決定します。
プロセスが要求したときにメモリを割り当てます。
プロセスがメモリを必要としなくなったとき、または終了したときに、メモリの割り当てを解除します。
プロセッサ管理
マルチプログラミング環境では、OSは、どのプロセスがいつ、どのくらいの時間プロセッサを取得するかを決定します。この関数は呼び出されますprocess scheduling。オペレーティングシステムは、プロセッサ管理のために次のアクティビティを実行します-
プロセッサとプロセスのステータスを追跡します。このタスクを担当するプログラムは、traffic controller。
プロセッサ(CPU)をプロセスに割り当てます。
プロセスが不要になったときにプロセッサの割り当てを解除します。
端末管理
オペレーティングシステムは、それぞれのドライバーを介してデバイスの通信を管理します。デバイス管理のために以下のアクティビティを実行します-
すべてのデバイスを追跡します。このタスクを担当するプログラムは、I/O controller。
どのプロセスがいつ、どのくらいの時間デバイスを取得するかを決定します。
効率的な方法でデバイスを割り当てます。
デバイスの割り当てを解除します。
ファイル管理
ファイルシステムは通常、ナビゲーションと使用を容易にするためにディレクトリに編成されています。これらのディレクトリには、ファイルやその他の方向が含まれている場合があります。
オペレーティングシステムは、ファイル管理のために次のアクティビティを実行します-
情報、場所、用途、ステータスなどを追跡します。集合施設は、多くの場合、 file system。
誰がリソースを取得するかを決定します。
リソースを割り当てます。
リソースの割り当てを解除します。
その他の重要な活動
以下は、オペレーティングシステムが実行する重要なアクティビティの一部です。
Security −パスワードやその他の同様の手法により、プログラムやデータへの不正アクセスを防止します。
Control over system performance −サービスの要求とシステムからの応答の間の遅延を記録します。
Job accounting −さまざまなジョブとユーザーが使用する時間とリソースを追跡します。
Error detecting aids −ダンプ、トレース、エラーメッセージ、およびその他のデバッグおよびエラー検出支援の作成。
Coordination between other softwares and users −コンパイラ、インタプリタ、アセンブラ、およびその他のソフトウェアの、コンピュータシステムのさまざまなユーザーへの調整と割り当て。
オペレーティングシステムは最初のコンピュータ世代から存在し、時間とともに進化し続けます。この章では、最も一般的に使用されている重要な種類のオペレーティングシステムのいくつかについて説明します。
バッチオペレーティングシステム
バッチオペレーティングシステムのユーザーは、コンピューターと直接対話しません。各ユーザーは、パンチカードなどのオフラインデバイスでジョブを準備し、コンピューターオペレーターに送信します。処理を高速化するために、同様のニーズを持つジョブが一緒にバッチ処理され、グループとして実行されます。プログラマーはプログラムをオペレーターに任せ、オペレーターは同様の要件を持つプログラムをバッチに分類します。
バッチシステムの問題は次のとおりです-
- ユーザーと仕事の間の相互作用の欠如。
- メカニカルI / Oデバイスの速度はCPUよりも遅いため、CPUはアイドル状態であることがよくあります。
- 希望する優先順位を提供するのが難しい。
タイムシェアリングオペレーティングシステム
タイムシェアリングは、さまざまな端末にいる多くの人が特定のコンピュータシステムを同時に使用できるようにする手法です。タイムシェアリングまたはマルチタスクは、マルチプログラミングの論理的な拡張です。複数のユーザー間で同時に共有されるプロセッサの時間は、タイムシェアリングと呼ばれます。
マルチプログラムバッチシステムとタイムシェアリングシステムの主な違いは、マルチプログラムバッチシステムの場合、目的はプロセッサの使用を最大化することですが、タイムシェアリングシステムでは、目的は応答時間を最小化することです。
CPUは複数のジョブを切り替えることで実行しますが、切り替えは頻繁に発生します。したがって、ユーザーは即座に応答を受け取ることができます。たとえば、トランザクション処理では、プロセッサは各ユーザープログラムを短いバーストまたは大量の計算で実行します。つまり、nユーザーが存在する場合、各ユーザーはタイムクォンタムを取得できます。ユーザーがコマンドを送信したときの応答時間は、最大で数秒です。
オペレーティングシステムは、CPUスケジューリングとマルチプログラミングを使用して、各ユーザーにごく一部の時間を提供します。主にバッチシステムとして設計されたコンピュータシステムは、タイムシェアリングシステムに変更されました。
タイムシェアリングオペレーティングシステムの利点は次のとおりです。
- 迅速な応答の利点を提供します。
- ソフトウェアの重複を回避します。
- CPUのアイドル時間を短縮します。
タイムシェアリングオペレーティングシステムのデメリットは次のとおりです。
- 信頼性の問題。
- ユーザープログラムとデータのセキュリティと整合性の問題。
- データ通信の問題。
分散オペレーティングシステム
分散システムは、複数の中央処理装置を使用して、複数のリアルタイムアプリケーションと複数のユーザーにサービスを提供します。データ処理ジョブは、それに応じてプロセッサ間で分散されます。
プロセッサは、さまざまな通信回線(高速バスや電話回線など)を介して相互に通信します。これらはloosely coupled systemsまたは分散システム。分散システムのプロセッサは、サイズと機能が異なる場合があります。これらのプロセッサは、サイト、ノード、コンピュータなどと呼ばれます。
分散システムのメリットは次のとおりです。
- リソース共有機能を使用すると、あるサイトのユーザーが別のサイトで利用可能なリソースを使用できる場合があります。
- 電子メールを介した相互のデータ交換を高速化します。
- 分散システムで1つのサイトに障害が発生した場合、残りのサイトは動作を継続できる可能性があります。
- 顧客へのより良いサービス。
- ホストコンピュータの負荷を軽減します。
- データ処理の遅延の削減。
ネットワークオペレーティングシステム
ネットワークオペレーティングシステムはサーバー上で実行され、データ、ユーザー、グループ、セキュリティ、アプリケーション、およびその他のネットワーク機能を管理する機能をサーバーに提供します。ネットワークオペレーティングシステムの主な目的は、ネットワーク内の複数のコンピューター、通常はローカルエリアネットワーク(LAN)、プライベートネットワーク、または他のネットワーク間でファイルとプリンターを共有できるようにすることです。
ネットワークオペレーティングシステムの例には、Microsoft Windows Server 2003、Microsoft Windows Server 2008、UNIX、Linux、Mac OS X、Novell NetWare、およびBSDが含まれます。
ネットワークオペレーティングシステムの利点は次のとおりです。
- 一元化されたサーバーは非常に安定しています。
- セキュリティはサーバー管理です。
- 新しいテクノロジーやハードウェアへのアップグレードは、システムに簡単に統合できます。
- サーバーへのリモートアクセスは、さまざまな場所やタイプのシステムから可能です。
ネットワークオペレーティングシステムの欠点は次のとおりです。
- サーバーの購入と実行に高いコストがかかります。
- ほとんどの操作で中央の場所に依存します。
- 定期的なメンテナンスと更新が必要です。
リアルタイムオペレーティングシステム
リアルタイムシステムは、入力を処理して応答するために必要な時間間隔が非常に小さいため、環境を制御するデータ処理システムとして定義されます。システムが必要な更新情報の入力と表示に応答するのにかかる時間は、response time。したがって、この方法では、オンライン処理と比較して応答時間が非常に短くなります。
リアルタイムシステムは、プロセッサの動作やデータの流れに厳しい時間要件がある場合に使用され、リアルタイムシステムは専用アプリケーションの制御デバイスとして使用できます。リアルタイムオペレーティングシステムには、明確に定義された固定の時間制約が必要です。そうでない場合、システムは失敗します。たとえば、科学実験、医用画像システム、産業用制御システム、兵器システム、ロボット、航空交通管制システムなど。
リアルタイムオペレーティングシステムには2つのタイプがあります。
ハードリアルタイムシステム
ハードリアルタイムシステムは、重要なタスクが時間どおりに完了することを保証します。ハードリアルタイムシステムでは、セカンダリストレージが制限されているか欠落しており、データはROMに保存されます。これらのシステムでは、仮想メモリはほとんど見つかりません。
ソフトリアルタイムシステム
ソフトリアルタイムシステムは制限が少なくなります。重要なリアルタイムタスクは他のタスクよりも優先され、完了するまで優先度を保持します。ソフトリアルタイムシステムは、ハードリアルタイムシステムよりも有用性が限られています。たとえば、マルチメディア、バーチャルリアリティ、海底探査や惑星探査車などの高度な科学プロジェクトなどです。
オペレーティングシステムは、ユーザーとプログラムの両方にサービスを提供します。
- プログラムに実行する環境を提供します。
- 便利な方法でプログラムを実行するためのサービスをユーザーに提供します。
以下は、オペレーティングシステムによって提供されるいくつかの一般的なサービスです-
- プログラムの実行
- I / O操作
- ファイルシステムの操作
- Communication
- エラー検出
- 資源配分
- Protection
プログラムの実行
オペレーティングシステムは、ユーザープログラムから、プリンタースプーラー、ネームサーバー、ファイルサーバーなどのシステムプログラムまで、さまざまな種類のアクティビティを処理します。これらの各アクティビティは、プロセスとしてカプセル化されます。
プロセスには、完全な実行コンテキスト(実行するコード、操作するデータ、レジスタ、使用中のOSリソース)が含まれます。以下は、プログラム管理に関するオペレーティングシステムの主な活動です。
- プログラムをメモリにロードします。
- プログラムを実行します。
- プログラムの実行を処理します。
- プロセス同期のメカニズムを提供します。
- プロセス通信のメカニズムを提供します。
- デッドロック処理のメカニズムを提供します。
I / O操作
I / Oサブシステムは、I / Oデバイスとそれに対応するドライバーソフトウェアで構成されます。ドライバーは、特定のハードウェアデバイスの特性をユーザーから隠します。
オペレーティングシステムは、ユーザードライバーとデバイスドライバー間の通信を管理します。
- I / O操作とは、任意のファイルまたは特定のI / Oデバイスを使用した読み取りまたは書き込み操作を意味します。
- オペレーティングシステムは、必要に応じて必要なI / Oデバイスへのアクセスを提供します。
ファイルシステムの操作
ファイルは、関連情報のコレクションを表します。コンピュータは、長期保存の目的で、ファイルをディスク(セカンダリストレージ)に保存できます。記憶媒体の例には、磁気テープ、磁気ディスク、およびCD、DVDなどの光ディスクドライブが含まれます。これらの各メディアには、速度、容量、データ転送速度、データアクセス方法などの独自のプロパティがあります。
ファイルシステムは通常、ナビゲーションと使用を容易にするためにディレクトリに編成されています。これらのディレクトリには、ファイルやその他の方向が含まれている場合があります。以下は、ファイル管理に関するオペレーティングシステムの主なアクティビティです。
- プログラムはファイルを読み取るか、ファイルを書き込む必要があります。
- オペレーティングシステムは、ファイルでの操作をプログラムに許可します。
- 権限は、読み取り専用、読み取り/書き込み、拒否などによって異なります。
- オペレーティングシステムは、ファイルを作成/削除するためのインターフェイスをユーザーに提供します。
- オペレーティングシステムは、ディレクトリを作成/削除するためのインターフェイスをユーザーに提供します。
- オペレーティングシステムは、ファイルシステムのバックアップを作成するためのインターフェイスを提供します。
コミュニケーション
メモリ、周辺機器、またはクロックを共有しないプロセッサの集合である分散システムの場合、オペレーティングシステムがすべてのプロセス間の通信を管理します。複数のプロセスは、ネットワーク内の通信回線を介して相互に通信します。
OSは、ルーティングと接続の戦略、および競合とセキュリティの問題を処理します。以下は、通信に関するオペレーティングシステムの主な活動です。
- 2つのプロセスでは、多くの場合、それらの間でデータを転送する必要があります
- 両方のプロセスは、1台のコンピューター上でも、別のコンピューター上でも実行できますが、コンピューターネットワークを介して接続されます。
- 通信は、共有メモリまたはメッセージパッシングの2つの方法で実装できます。
エラー処理
エラーはいつでもどこでも発生する可能性があります。CPU、I / Oデバイス、またはメモリハードウェアでエラーが発生する可能性があります。以下は、エラー処理に関するオペレーティングシステムの主なアクティビティです。
- OSは常にエラーの可能性をチェックします。
- OSは適切なアクションを実行して、正しく一貫したコンピューティングを保証します。
資源管理
マルチユーザーまたはマルチタスク環境の場合、メインメモリ、CPUサイクル、ファイルストレージなどのリソースは、各ユーザーまたはジョブに割り当てられます。以下は、リソース管理に関するオペレーティングシステムの主なアクティビティです。
- OSは、スケジューラーを使用してあらゆる種類のリソースを管理します。
- CPUスケジューリングアルゴリズムは、CPUの使用率を高めるために使用されます。
保護
複数のユーザーがいて、複数のプロセスが同時に実行されるコンピュータシステムを考えると、さまざまなプロセスを互いのアクティビティから保護する必要があります。
保護とは、コンピュータシステムによって定義されたリソースへのプログラム、プロセス、またはユーザーのアクセスを制御するメカニズムまたは方法を指します。以下は、保護に関するオペレーティングシステムの主なアクティビティです。
- OSは、システムリソースへのすべてのアクセスが制御されることを保証します。
- OSは、外部I / Oデバイスが無効なアクセス試行から保護されることを保証します。
- OSは、パスワードを使用して各ユーザーに認証機能を提供します。
バッチ処理
バッチ処理は、オペレーティングシステムが、処理を開始する前にプログラムとデータをバッチで収集する手法です。オペレーティングシステムは、バッチ処理に関連する次のアクティビティを実行します-
OSは、コマンド、プログラム、およびデータの事前定義されたシーケンスを持つジョブを単一のユニットとして定義します。
OSは多数のジョブをメモリに保持し、手動情報なしでそれらを実行します。
ジョブは送信順に処理されます。つまり、先着順で処理されます。
ジョブが実行を完了すると、そのメモリが解放され、ジョブの出力が出力スプールにコピーされて、後で印刷または処理されます。

利点
バッチ処理は、オペレーターの作業の多くをコンピューターにもたらします。
手動による介入なしで、前のジョブが終了するとすぐに新しいジョブが開始されるため、パフォーマンスが向上します。
短所
- プログラムのデバッグが難しい。
- ジョブは無限ループに入る可能性があります。
- 保護スキームがないため、1つのバッチジョブが保留中のジョブに影響を与える可能性があります。
マルチタスク
マルチタスクとは、CPUが複数のジョブを切り替えて同時に実行することです。スイッチは頻繁に発生するため、ユーザーは実行中に各プログラムを操作できます。OSは、マルチタスクに関連する次のアクティビティを実行します-
ユーザーはオペレーティングシステムまたはプログラムに直接指示を出し、即座に応答を受け取ります。
OSは、一度に複数の操作を処理したり、複数のプログラムを実行したりできるように、マルチタスクを処理します。
マルチタスクオペレーティングシステムは、タイムシェアリングシステムとも呼ばれます。
これらのオペレーティングシステムは、リーズナブルなコストでコンピュータシステムのインタラクティブな使用を提供するために開発されました。
時分割オペレーティングシステムは、CPUスケジューリングとマルチプログラミングの概念を使用して、各ユーザーに時分割CPUのごく一部を提供します。
各ユーザーは、メモリ内に少なくとも1つの個別のプログラムを持っています。

メモリにロードされて実行されているプログラムは、一般に process。
プロセスが実行されると、通常、プロセスが終了するか、I / Oを実行する必要が生じるまで、非常に短い時間しか実行されません。
インタラクティブI / Oは通常低速で実行されるため、完了するまでに長い時間がかかる場合があります。この間、CPUは別のプロセスで利用できます。
オペレーティングシステムにより、ユーザーはコンピューターを同時に共有できます。タイムシェアリングシステムの各アクションまたはコマンドは短い傾向があるため、各ユーザーに必要なCPU時間はごくわずかです。
システムがCPUをあるユーザー/プログラムから次のユーザー/プログラムにすばやく切り替えると、各ユーザーは自分のCPUを持っているという印象を与えられますが、実際には1つのCPUが多くのユーザー間で共有されています。
マルチプログラミング
2つ以上のプログラムが同時にメモリに存在する場合のプロセッサの共有は、 multiprogramming。マルチプログラミングは、単一の共有プロセッサを想定しています。マルチプログラミングは、CPUが常に実行するジョブを持つようにジョブを編成することにより、CPU使用率を向上させます。
次の図は、マルチプログラミングシステムのメモリレイアウトを示しています。

OSは、マルチプログラミングに関連する次のアクティビティを実行します。
オペレーティングシステムは、一度に複数のジョブをメモリに保持します。
このジョブのセットは、ジョブプールに保持されているジョブのサブセットです。
オペレーティングシステムは、メモリ内のジョブの1つを選択して実行を開始します。
マルチプログラミングオペレーティングシステムは、メモリ管理プログラムを使用してすべてのアクティブなプログラムとシステムリソースの状態を監視し、処理するジョブがない場合を除いて、CPUがアイドル状態にならないようにします。
利点
- 高く効率的なCPU使用率。
- ユーザーは、多くのプログラムにほぼ同時にCPUが割り当てられていると感じています。
短所
- CPUスケジューリングが必要です。
- メモリ内の多くのジョブに対応するには、メモリ管理が必要です。
双方向性
対話性とは、ユーザーがコンピューターシステムと対話する能力を指します。オペレーティングシステムは、対話性に関連する次のアクティビティを実行します-
- システムと対話するためのインターフェースをユーザーに提供します。
- 入力デバイスを管理して、ユーザーからの入力を取得します。たとえば、キーボード。
- 出力デバイスを管理して、ユーザーに出力を表示します。たとえば、モニター。
ユーザーが送信して結果を待つため、OSの応答時間は短くする必要があります。
リアルタイムシステム
リアルタイムシステムは通常、専用の組み込みシステムです。オペレーティングシステムは、リアルタイムシステムアクティビティに関連する次のアクティビティを実行します。
- このようなシステムでは、オペレーティングシステムは通常、センサーデータから読み取り、センサーデータに反応します。
- オペレーティングシステムは、正しいパフォーマンスを確保するために、一定期間内のイベントへの応答を保証する必要があります。
分散環境
分散環境とは、コンピューターシステム内の複数の独立したCPUまたはプロセッサーを指します。オペレーティングシステムは、分散環境に関連する次のアクティビティを実行します-
OSは、計算ロジックを複数の物理プロセッサに分散します。
プロセッサはメモリやクロックを共有しません。代わりに、各プロセッサには独自のローカルメモリがあります。
OSはプロセッサ間の通信を管理します。それらは、さまざまな通信回線を介して相互に通信します。
スプーリング
スプーリングは、オンラインでの同時周辺機器操作の頭字語です。スプーリングとは、さまざまなI / Oジョブのデータをバッファーに入れることです。このバッファは、I / Oデバイスがアクセスできるメモリまたはハードディスクの特別な領域です。
オペレーティングシステムは、分散環境に関連する次のアクティビティを実行します-
デバイスのデータアクセスレートが異なるため、I / Oデバイスのデータスプーリングを処理します。
遅いデバイスが追いつく間、データが休むことができる待機ステーションを提供するスプーリングバッファを維持します。
コンピュータがI / Oを並列に実行できるため、スプーリングプロセスにより、並列計算を維持します。コンピュータにテープからのデータの読み取り、ディスクへのデータの書き込み、およびコンピューティングタスクの実行中にテーププリンタへの書き込みを行うことが可能になります。

利点
- スプーリング操作では、ディスクを非常に大きなバッファーとして使用します。
- スプーリングは、あるジョブのI / O操作を別のジョブのプロセッサ操作とオーバーラップさせることができます。
処理する
プロセスは基本的に実行中のプログラムです。プロセスの実行は、順次進行する必要があります。
プロセスは、システムに実装される作業の基本単位を表すエンティティとして定義されます。
簡単に言うと、コンピュータプログラムをテキストファイルで記述し、このプログラムを実行すると、プログラムに記載されているすべてのタスクを実行するプロセスになります。
プログラムがメモリにロードされてプロセスになると、スタック、ヒープ、テキスト、データの4つのセクションに分割できます。次の画像は、メインメモリ内のプロセスの簡略化されたレイアウトを示しています-

SN | コンポーネントと説明 |
---|---|
1 | Stack プロセススタックには、メソッド/関数パラメータ、リターンアドレス、ローカル変数などの一時データが含まれています。 |
2 | Heap これは、実行時にプロセスに動的に割り当てられたメモリです。 |
3 | Text これには、プログラムカウンタの値とプロセッサのレジスタの内容によって表される現在のアクティビティが含まれます。 |
4 | Data このセクションには、グローバル変数と静的変数が含まれています。 |
プログラム
プログラムは、1行または数百万行のコードです。コンピュータプログラムは通常、プログラミング言語でコンピュータプログラマによって書かれています。たとえば、これはCプログラミング言語で書かれた簡単なプログラムです-
#include <stdio.h>
int main() {
printf("Hello, World! \n");
return 0;
}
コンピュータプログラムは、コンピュータによって実行されたときに特定のタスクを実行する命令のコレクションです。プログラムとプロセスを比較すると、プロセスはコンピュータプログラムの動的インスタンスであると結論付けることができます。
明確に定義されたタスクを実行するコンピュータプログラムの一部は、 algorithm。コンピュータプログラム、ライブラリ、および関連データのコレクションは、software。
プロセスのライフサイクル
プロセスが実行されると、さまざまな状態を通過します。これらのステージはオペレーティングシステムによって異なる場合があり、これらの状態の名前も標準化されていません。
一般に、プロセスは一度に次の5つの状態のいずれかを持つことができます。
SN | 状態と説明 |
---|---|
1 | Start これは、プロセスが最初に開始/作成されたときの初期状態です。 |
2 | Ready プロセスはプロセッサに割り当てられるのを待っています。レディプロセスは、実行できるように、オペレーティングシステムによってプロセッサが割り当てられるのを待っています。プロセスは後にこの状態になる可能性がありますStart 状態または実行中に、CPUを他のプロセスに割り当てるために、スケジューラによって中断されます。 |
3 | Running OSスケジューラによってプロセスがプロセッサに割り当てられると、プロセスの状態が実行に設定され、プロセッサがその命令を実行します。 |
4 | Waiting ユーザー入力の待機やファイルが使用可能になるのを待機するなど、リソースを待機する必要がある場合、プロセスは待機状態に移行します。 |
5 | Terminated or Exit プロセスが実行を終了するか、オペレーティングシステムによって終了されると、プロセスは終了状態に移行し、メインメモリから削除されるのを待ちます。 |

プロセス制御ブロック(PCB)
プロセス制御ブロックは、すべてのプロセスについてオペレーティングシステムによって維持されるデータ構造です。PCBは、整数プロセスID(PID)によって識別されます。PCBは、以下の表にリストされているように、プロセスを追跡するために必要なすべての情報を保持します。
SN | 情報と説明 |
---|---|
1 | Process State プロセスの現在の状態、つまり、準備ができているか、実行中か、待機中かなど。 |
2 | Process privileges これは、システムリソースへのアクセスを許可/禁止するために必要です。 |
3 | Process ID オペレーティングシステムの各プロセスの一意の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は現在のキューからリンク解除され、新しい状態キューに移動されます。
オペレーティングシステムは、次の重要なプロセススケジューリングキューを維持します-
Job queue −このキューは、システム内のすべてのプロセスを保持します。
Ready queue−このキューは、メインメモリに常駐し、実行の準備ができて待機しているすべてのプロセスのセットを保持します。新しいプロセスは常にこのキューに入れられます。
Device queues − I / Oデバイスが使用できないためにブロックされたプロセスは、このキューを構成します。

OSは、さまざまなポリシーを使用して各キュー(FIFO、ラウンドロビン、優先度など)を管理できます。OSスケジューラは、システムのプロセッサコアごとに1つのエントリしか持てない準備完了キューと実行キューの間でプロセスを移動する方法を決定します。上の図では、CPUと統合されています。
2状態プロセスモデル
2状態プロセスモデルとは、以下で説明する実行状態と非実行状態を指します。
SN | 状態と説明 |
---|---|
1 | Running 新しいプロセスが作成されると、実行状態と同じようにシステムに入ります。 |
2 | Not Running 実行されていないプロセスはキューに保持され、順番が実行されるのを待ちます。キュー内の各エントリは、特定のプロセスへのポインタです。キューは、リンクリストを使用して実装されます。ディスパッチャの使用方法は次のとおりです。プロセスが中断されると、そのプロセスは待機キューに転送されます。プロセスが完了または中止された場合、プロセスは破棄されます。いずれの場合も、ディスパッチャはキューからプロセスを選択して実行します。 |
スケジューラー
スケジューラは、さまざまな方法でプロセスのスケジューリングを処理する特別なシステムソフトウェアです。彼らの主なタスクは、システムに送信するジョブを選択し、実行するプロセスを決定することです。スケジューラには3つのタイプがあります-
- 長期スケジューラ
- 短期スケジューラ
- 中期スケジューラ
長期スケジューラ
とも呼ばれます job scheduler。長期スケジューラーは、どのプログラムが処理のためにシステムに許可されるかを決定します。キューからプロセスを選択し、実行のためにメモリにロードします。プロセスは、CPUスケジューリングのためにメモリにロードされます。
ジョブスケジューラの主な目的は、I / Oバウンドやプロセッサバウンドなど、バランスの取れたジョブの組み合わせを提供することです。また、マルチプログラミングの程度も制御します。マルチプログラミングの程度が安定している場合、プロセス作成の平均速度は、システムを離れるプロセスの平均出発速度と等しくなければなりません。
一部のシステムでは、長期スケジューラが使用できないか、最小限である場合があります。タイムシェアリングオペレーティングシステムには、長期スケジューラがありません。プロセスが状態を新規から準備完了に変更すると、長期スケジューラーが使用されます。
短期スケジューラ
とも呼ばれます CPU scheduler。その主な目的は、選択した一連の基準に従ってシステムパフォーマンスを向上させることです。これは、プロセスの準備完了状態から実行状態への変更です。CPUスケジューラは、実行の準備ができているプロセスの中からプロセスを選択し、そのうちの1つにCPUを割り当てます。
ディスパッチャとも呼ばれる短期スケジューラは、次に実行するプロセスを決定します。短期スケジューラーは長期スケジューラーよりも高速です。
中期スケジューラ
中期スケジューリングはの一部です swapping。プロセスをメモリから削除します。マルチプログラミングの程度を減らします。中期スケジューラは、スワップされたアウトプロセスの処理を担当します。
実行中のプロセスがI / O要求を行うと、中断される可能性があります。中断されたプロセスは、完了に向けて前進することはできません。この状態で、プロセスをメモリから削除し、他のプロセス用のスペースを確保するために、中断されたプロセスは2次ストレージに移動されます。このプロセスはswapping、およびプロセスはスワップアウトまたはロールアウトされていると言われます。プロセスミックスを改善するために、交換が必要になる場合があります。
スケジューラ間の比較
SN | 長期スケジューラ | 短期スケジューラ | 中期スケジューラ |
---|---|---|---|
1 | それはジョブスケジューラです | CPUスケジューラーです | プロセススワッピングスケジューラです。 |
2 | 速度は短期スケジューラよりも遅い | 速度は他の2つの中で最速です | 速度は、短期スケジューラと長期スケジューラの両方の中間にあります。 |
3 | マルチプログラミングの程度を制御します | マルチプログラミングの程度をあまり制御できません | マルチプログラミングの程度を減らします。 |
4 | タイムシェアリングシステムにはほとんど存在しないか、最小限です。 | タイムシェアリングシステムも最小限です | タイムシェアリングシステムの一部です。 |
5 | プールからプロセスを選択し、実行のためにメモリにロードします | 実行する準備ができているプロセスを選択します | プロセスをメモリに再導入し、実行を続行できます。 |
コンテキストスイッチ
コンテキストスイッチは、CPUの状態またはコンテキストをプロセス制御ブロックに格納および復元して、後で同じポイントからプロセスの実行を再開できるようにするメカニズムです。この手法を使用すると、コンテキストスイッチャーは複数のプロセスが単一のCPUを共有できるようにします。コンテキストの切り替えは、マルチタスクオペレーティングシステムの機能の重要な部分です。
スケジューラがCPUをあるプロセスの実行から別のプロセスの実行に切り替えると、現在実行中のプロセスの状態がプロセス制御ブロックに格納されます。この後、次に実行するプロセスの状態が自身のPCBからロードされ、PCやレジスタなどの設定に使用されます。その時点で、2番目のプロセスが実行を開始できます。

レジスタとメモリの状態を保存して復元する必要があるため、コンテキストスイッチは計算量が多くなります。コンテキスト切り替え時間の長さを回避するために、一部のハードウェアシステムは2つ以上のプロセッサレジスタのセットを採用しています。プロセスが切り替わると、後で使用できるように次の情報が保存されます。
- プログラムカウンター
- スケジューリング情報
- ベースおよびリミットレジスタ値
- 現在使用されているレジスタ
- 状態の変更
- I / O状態情報
- 会計情報
プロセススケジューラは、特定のスケジューリングアルゴリズムに基づいて、CPUに割り当てられるさまざまなプロセスをスケジュールします。この章で説明する6つの一般的なプロセススケジューリングアルゴリズムがあります-
- 先入れ先出し(FCFS)スケジューリング
- Shortest-Job-Next(SJN)スケジューリング
- 優先スケジューリング
- 最小残余時間
- ラウンドロビン(RR)スケジューリング
- 複数レベルのキューのスケジューリング
これらのアルゴリズムはどちらかです non-preemptive or preemptive。非プリエンプティブアルゴリズムは、プロセスが実行状態に入ると、割り当てられた時間が完了するまでプリエンプションできないように設計されていますが、プリエンプティブスケジューリングは優先度に基づいており、スケジューラーは優先度の高いときにいつでも優先度の低い実行中のプロセスをプリエンプションできますプロセスは準備完了状態になります。
先入れ先出し(FCFS)
- ジョブは先着順で実行されます。
- これは、非プリエンプティブ、プリエンプティブスケジューリングアルゴリズムです。
- 理解と実装が簡単です。
- その実装はFIFOキューに基づいています。
- 平均待機時間が長いため、パフォーマンスが低下します。

Wait 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)
これは、 shortest job first、またはSJF
これは、非プリエンプティブ、プリエンプティブスケジューリングアルゴリズムです。
待ち時間を最小限に抑えるための最良のアプローチ。
必要なCPU時間が事前にわかっているバッチシステムで簡単に実装できます。
必要なCPU時間が不明なインタラクティブシステムに実装することはできません。
処理者は、処理にかかる時間を事前に知っておく必要があります。
与えられた:プロセスの表、およびそれらの到着時間、実行時間
処理する | 到着時刻 | 実行時間 | サービス時間 |
---|---|---|---|
P0 | 0 | 5 | 0 |
P1 | 1 | 3 | 5 |
P2 | 2 | 8 | 14 |
P3 | 3 | 6 | 8 |

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が最低の優先順位であると考えています。
処理する | 到着時刻 | 実行時間 | 優先 | サービス時間 |
---|---|---|---|---|
P0 | 0 | 5 | 1 | 0 |
P1 | 1 | 3 | 2 | 11 |
P2 | 2 | 8 | 1 | 14 |
P3 | 3 | 6 | 3 | 5 |

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時間が不明なインタラクティブシステムに実装することはできません。
これは、短いジョブを優先する必要があるバッチ環境でよく使用されます。
ラウンドロビンスケジューリング
ラウンドロビンは、プリエンプティブプロセススケジューリングアルゴリズムです。
各プロセスには、実行するための修正時間が提供されます。これは、 quantum。
プロセスが指定された期間実行されると、そのプロセスはプリエンプトされ、他のプロセスは指定された期間実行されます。
コンテキストスイッチングは、プリエンプトされたプロセスの状態を保存するために使用されます。

Wait 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つのスレッドがコードセグメントのメモリ項目を変更すると、他のすべてのスレッドがそれを認識します。
スレッドは、 lightweight process。スレッドは、並列処理によってアプリケーションのパフォーマンスを向上させる方法を提供します。スレッドは、オーバーヘッドスレッドを削減することにより、オペレーティングシステムのパフォーマンスを向上させるソフトウェアアプローチを表しており、従来のプロセスと同等です。
各スレッドは正確に1つのプロセスに属し、プロセスの外部にスレッドが存在することはできません。各スレッドは、個別の制御フローを表します。スレッドは、ネットワークサーバーとWebサーバーの実装に正常に使用されています。また、共有メモリマルチプロセッサでアプリケーションを並列実行するための適切な基盤も提供します。次の図は、シングルスレッドプロセスとマルチスレッドプロセスの動作を示しています。

プロセスとスレッドの違い
SN | 処理する | 糸 |
---|---|---|
1 | プロセスは重いか、リソースを大量に消費します。 | スレッドは軽量で、プロセスよりも少ないリソースで済みます。 |
2 | プロセスの切り替えには、オペレーティングシステムとの相互作用が必要です。 | スレッドの切り替えは、オペレーティングシステムと対話する必要はありません。 |
3 | 複数の処理環境では、各プロセスは同じコードを実行しますが、独自のメモリとファイルリソースを持っています。 | すべてのスレッドは、開いているファイルの同じセット、子プロセスを共有できます。 |
4 | 1つのプロセスがブロックされている場合、最初のプロセスのブロックが解除されるまで、他のプロセスは実行できません。 | 1つのスレッドがブロックされて待機している間、同じタスクの2番目のスレッドを実行できます。 |
5 | スレッドを使用しない複数のプロセスは、より多くのリソースを使用します。 | 複数のスレッド化されたプロセスは、より少ないリソースを使用します。 |
6 | 複数のプロセスでは、各プロセスは他のプロセスから独立して動作します。 | あるスレッドは、別のスレッドのデータを読み取り、書き込み、または変更できます。 |
スレッドの利点
- スレッドはコンテキスト切り替え時間を最小限に抑えます。
- スレッドを使用すると、プロセス内で並行性が提供されます。
- 効率的なコミュニケーション。
- スレッドを作成してコンテキストスイッチする方が経済的です。
- スレッドを使用すると、マルチプロセッサアーキテクチャをより大規模かつ効率的に利用できます。
スレッドの種類
スレッドは次の2つの方法で実装されます-
User Level Threads −ユーザー管理スレッド。
Kernel Level Threads −オペレーティングシステムのコアであるカーネルに作用するオペレーティングシステム管理スレッド。
ユーザーレベルのスレッド
この場合、スレッド管理カーネルはスレッドの存在を認識しません。スレッドライブラリには、スレッドの作成と破棄、スレッド間でのメッセージとデータの受け渡し、スレッド実行のスケジュール設定、スレッドコンテキストの保存と復元のためのコードが含まれています。アプリケーションはシングルスレッドで始まります。

利点
- スレッドの切り替えには、カーネルモードの権限は必要ありません。
- ユーザーレベルのスレッドは、任意のオペレーティングシステムで実行できます。
- スケジューリングは、ユーザーレベルのスレッドでアプリケーション固有にすることができます。
- ユーザーレベルのスレッドは、作成と管理が高速です。
短所
- 一般的なオペレーティングシステムでは、ほとんどのシステムコールがブロックされています。
- マルチスレッドアプリケーションは、マルチプロセッシングを利用できません。
カーネルレベルのスレッド
この場合、スレッド管理はカーネルによって行われます。アプリケーション領域にスレッド管理コードはありません。カーネルスレッドは、オペレーティングシステムによって直接サポートされています。どのアプリケーションもマルチスレッド化するようにプログラムできます。アプリケーション内のすべてのスレッドは、単一のプロセス内でサポートされます。
カーネルは、プロセス全体およびプロセス内の個々のスレッドのコンテキスト情報を維持します。カーネルによるスケジューリングはスレッドベースで行われます。カーネルは、カーネル空間でスレッドの作成、スケジューリング、および管理を実行します。カーネルスレッドは通常、ユーザースレッドよりも作成と管理に時間がかかります。
利点
- カーネルは、複数のプロセスで同じプロセスから複数のスレッドを同時にスケジュールできます。
- プロセス内の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の関係モデルを使用します。

ユーザーレベルのスレッドとカーネルレベルのスレッドの違い
SN | ユーザーレベルのスレッド | カーネルレベルのスレッド |
---|---|---|
1 | ユーザーレベルのスレッドは、作成と管理が高速です。 | カーネルレベルのスレッドは、作成と管理に時間がかかります。 |
2 | 実装は、ユーザーレベルのスレッドライブラリによって行われます。 | オペレーティングシステムは、カーネルスレッドの作成をサポートしています。 |
3 | ユーザーレベルのスレッドは汎用であり、任意のオペレーティングシステムで実行できます。 | カーネルレベルのスレッドは、オペレーティングシステムに固有です。 |
4 | マルチスレッドアプリケーションは、マルチプロセッシングを利用できません。 | カーネルルーチン自体はマルチスレッド化できます。 |
メモリ管理は、プライマリメモリを処理または管理し、実行中にメインメモリとディスクの間でプロセスを前後に移動するオペレーティングシステムの機能です。メモリ管理は、プロセスに割り当てられているか、空きであるかに関係なく、すべてのメモリ位置を追跡します。プロセスに割り当てられるメモリの量をチェックします。どのプロセスがいつメモリを取得するかを決定します。一部のメモリが解放または割り当て解除されるたびに追跡し、それに応じてステータスを更新します。
このチュートリアルでは、メモリ管理に関連する基本的な概念について説明します。
プロセスアドレス空間
プロセスアドレス空間は、プロセスがコードで参照する論理アドレスのセットです。たとえば、32ビットアドレス指定が使用されている場合、アドレスの範囲は0〜0x7fffffffです。つまり、2 ^ 31の可能な数で、理論上の合計サイズは2ギガバイトです。
オペレーティングシステムは、プログラムへのメモリ割り当て時に論理アドレスを物理アドレスにマッピングします。メモリが割り当てられる前後のプログラムで使用されるアドレスには3つのタイプがあります-
SN | メモリアドレスと説明 |
---|---|
1 | Symbolic addresses ソースコードで使用されているアドレス。変数名、定数、および命令ラベルは、シンボリックアドレス空間の基本要素です。 |
2 | Relative addresses コンパイル時に、コンパイラはシンボリックアドレスを相対アドレスに変換します。 |
3 | Physical addresses ローダーは、プログラムがメインメモリにロードされるときにこれらのアドレスを生成します。 |
仮想アドレスと物理アドレスは、コンパイル時とロード時のアドレスバインディングスキームで同じです。仮想アドレスと物理アドレスは、実行時のアドレスバインディングスキームが異なります。
プログラムによって生成されたすべての論理アドレスのセットは、 logical address space。これらの論理アドレスに対応するすべての物理アドレスのセットは、physical address space.
仮想アドレスから物理アドレスへのランタイムマッピングは、ハードウェアデバイスであるメモリ管理ユニット(MMU)によって行われます。MMUは、次のメカニズムを使用して仮想アドレスを物理アドレスに変換します。
ベースレジスタの値は、ユーザープロセスによって生成されたすべてのアドレスに追加され、メモリに送信されるときにオフセットとして扱われます。たとえば、ベースレジスタ値が10000の場合、ユーザーがアドレスロケーション100を使用しようとすると、ロケーション10100に動的に再割り当てされます。
ユーザープログラムは仮想アドレスを扱います。実際の物理アドレスは表示されません。
静的負荷と動的負荷
静的ロードと動的ロードのどちらを選択するかは、コンピュータプログラムの開発時に行います。プログラムを静的にロードする必要がある場合は、コンパイル時に、外部プログラムやモジュールの依存関係を残さずに、完全なプログラムがコンパイルおよびリンクされます。リンカは、オブジェクトプログラムを他の必要なオブジェクトモジュールと組み合わせて、論理アドレスも含む絶対プログラムにします。
動的にロードされたプログラムを作成している場合、コンパイラーはプログラムをコンパイルし、動的に含めたいすべてのモジュールについて、参照のみが提供され、残りの作業は実行時に行われます。
読み込み時、 static loading、実行を開始するために、アブソリュートプログラム(およびデータ)がメモリにロードされます。
使用している場合 dynamic loading、ライブラリの動的ルーチンは、再配置可能な形式でディスクに保存され、プログラムで必要な場合にのみメモリにロードされます。
静的リンクと動的リンク
上で説明したように、静的リンクを使用する場合、リンカーは、プログラムに必要な他のすべてのモジュールを1つの実行可能プログラムに結合して、実行時の依存関係を回避します。
ダイナミックリンクを使用する場合、実際のモジュールまたはライブラリをプログラムにリンクする必要はありません。コンパイルおよびリンク時にダイナミックモジュールへの参照が提供されます。Windowsのダイナミックリンクライブラリ(DLL)とUnixの共有オブジェクトはダイナミックライブラリの良い例です。
スワッピング
スワッピングは、プロセスをメインメモリから一時的にスワップ(または移動)してセカンダリストレージ(ディスク)に移動し、そのメモリを他のプロセスで使用できるようにするメカニズムです。後で、システムはプロセスをセカンダリストレージからメインメモリにスワップバックします。
パフォーマンスは通常、スワッピングプロセスの影響を受けますが、複数の大きなプロセスを並行して実行するのに役立ちます。それが理由です。 Swapping is also known as a technique for memory compaction。

スワッピングプロセスにかかる合計時間には、プロセス全体をセカンダリディスクに移動してからプロセスをメモリにコピーするのにかかる時間と、プロセスがメインメモリを回復するのにかかる時間が含まれます。
ユーザープロセスのサイズが2048KBで、スワッピングが行われる標準のハードディスクでは、データ転送速度が1秒あたり約1MBであると仮定します。1000Kプロセスのメモリへの、またはメモリからの実際の転送には、
2048KB / 1024KB per second
= 2 seconds
= 2000 milliseconds
インタイムとアウトタイムを考慮すると、4000ミリ秒に加えて、プロセスがメインメモリを取り戻すために競合するその他のオーバーヘッドが必要になります。
メモリ割り当て
メインメモリには通常2つのパーティションがあります-
Low Memory −オペレーティングシステムはこのメモリに常駐します。
High Memory −ユーザープロセスはハイメモリに保持されます。
オペレーティングシステムは、次のメモリ割り当てメカニズムを使用します。
SN | メモリの割り当てと説明 |
---|---|
1 | Single-partition allocation このタイプの割り当てでは、再配置レジスタスキームを使用して、ユーザープロセスを相互に保護し、オペレーティングシステムのコードとデータを変更しないようにします。再配置レジスタには最小の物理アドレスの値が含まれますが、制限レジスタには論理アドレスの範囲が含まれます。各論理アドレスは、制限レジスタよりも小さくする必要があります。 |
2 | Multiple-partition allocation このタイプの割り当てでは、メインメモリはいくつかの固定サイズのパーティションに分割され、各パーティションには1つのプロセスのみが含まれる必要があります。パーティションが空いている場合、プロセスは入力キューから選択され、空いているパーティションにロードされます。プロセスが終了すると、パーティションは別のプロセスで使用できるようになります。 |
断片化
プロセスがロードされてメモリから削除されると、空きメモリスペースが小さな断片に分割されます。サイズが小さいためにプロセスをメモリブロックに割り当てることができず、メモリブロックが未使用のままである場合があります。この問題はフラグメンテーションとして知られています。
断片化には2つのタイプがあります-
SN | 断片化と説明 |
---|---|
1 | External fragmentation 合計メモリスペースは、要求を満たすか、プロセスをその中に常駐させるのに十分ですが、連続していないため、使用できません。 |
2 | Internal fragmentation プロセスに割り当てられたメモリブロックが大きくなっています。メモリの一部は、別のプロセスで使用できないため、未使用のままになります。 |
次の図は、断片化によってメモリが浪費される可能性があり、圧縮技術を使用して断片化されたメモリからより多くの空きメモリを作成する方法を示しています。

外部の断片化は、メモリの内容を圧縮またはシャッフルして、すべての空きメモリを1つの大きなブロックにまとめることで減らすことができます。圧縮を実行可能にするには、再配置を動的にする必要があります。
最小のパーティションを効果的に割り当てることで、内部の断片化を減らすことができますが、プロセスには十分な大きさです。
ページング
コンピュータは、システムに物理的にインストールされている量よりも多くのメモリをアドレス指定できます。この余分なメモリは実際には仮想メモリと呼ばれ、コンピュータのRAMをエミュレートするように設定されたハードのセクションです。ページング技術は、仮想メモリの実装において重要な役割を果たします。
ページングは、プロセスのアドレス空間をと呼ばれる同じサイズのブロックに分割するメモリ管理手法です。 pages(サイズは2の累乗で、512バイトから8192バイトの間です)。プロセスのサイズは、ページ数で測定されます。
同様に、メインメモリは、と呼ばれる(物理)メモリの小さな固定サイズのブロックに分割されます。 frames また、フレームのサイズはページのサイズと同じに保たれ、メインメモリを最適に利用し、外部の断片化を回避します。

アドレス変換
ページアドレスは呼ばれます logical address によって表されます page number そしてその offset。
Logical Address = Page number + page offset
フレームアドレスは呼ばれます physical address で表されます frame number そしてその offset。
Physical Address = Frame number + page offset
と呼ばれるデータ構造 page map table プロセスのページと物理メモリ内のフレームとの関係を追跡するために使用されます。

システムがフレームを任意のページに割り当てると、この論理アドレスが物理アドレスに変換され、プログラムの実行中に使用されるページテーブルへのエントリが作成されます。
プロセスを実行する場合、対応するページが使用可能なメモリフレームにロードされます。8Kbのプログラムがあるが、特定の時点でメモリが5Kbしか収容できないとすると、ページングの概念が浮かび上がります。コンピューターのRAMが不足すると、オペレーティングシステム(OS)は、アイドル状態または不要なメモリページをセカンダリメモリに移動して、RAMを他のプロセス用に解放し、プログラムで必要なときにそれらを戻します。
このプロセスは、OSがメインメモリからアイドルページを削除し続け、セカンダリメモリに書き込み、プログラムで必要なときに元に戻すプログラムの実行中も継続します。
ページングの長所と短所
これがページングの長所と短所のリストです-
ページングは外部の断片化を減らしますが、それでも内部の断片化に悩まされます。
ページングは実装が簡単で、効率的なメモリ管理手法として想定されています。
ページとフレームのサイズが等しいため、交換が非常に簡単になります。
ページテーブルには追加のメモリスペースが必要なため、RAMが小さいシステムには適さない場合があります。
セグメンテーション
セグメンテーションは、各ジョブが異なるサイズのいくつかのセグメントに分割されるメモリ管理手法であり、関連する機能を実行する部分を含むモジュールごとに1つです。各セグメントは、実際にはプログラムの異なる論理アドレス空間です。
プロセスを実行する場合、対応するセグメンテーションは非連続メモリにロードされますが、すべてのセグメントは使用可能なメモリの連続ブロックにロードされます。
セグメンテーションメモリ管理はページングと非常によく似ていますが、ここではセグメントは可変長であり、ページングページと同様に固定サイズです。
プログラムセグメントには、プログラムのメイン機能、ユーティリティ機能、データ構造などが含まれます。オペレーティングシステムはsegment map tableすべてのプロセスと空きメモリブロックのリスト、セグメント番号、サイズ、メインメモリ内の対応するメモリ位置。テーブルには、セグメントごとに、セグメントの開始アドレスとセグメントの長さが格納されます。メモリ位置への参照には、セグメントとオフセットを識別する値が含まれます。

コンピュータは、システムに物理的にインストールされている量よりも多くのメモリをアドレス指定できます。この余分なメモリは実際には呼ばれますvirtual memory これは、コンピューターのRAMをエミュレートするように設定されたハードディスクのセクションです。
このスキームの主な目に見える利点は、プログラムが物理メモリよりも大きくなる可能性があることです。仮想メモリには2つの目的があります。まず、ディスクを使用して物理メモリの使用を拡張できます。次に、各仮想アドレスが物理アドレスに変換されるため、メモリ保護が可能になります。
以下は、プログラム全体をメインメモリに完全にロードする必要がない状況です。
ユーザー作成のエラー処理ルーチンは、データまたは計算でエラーが発生した場合にのみ使用されます。
プログラムの特定のオプションと機能はめったに使用されない場合があります。
実際に使用されるテーブルはごくわずかですが、多くのテーブルには固定量のアドレス空間が割り当てられています。
部分的にしかメモリにないプログラムを実行する機能は、多くの利点に反します。
各ユーザープログラムをメモリにロードまたはスワップするために必要なI / Oの数は少なくなります。
プログラムは、使用可能な物理メモリの量によって制約されなくなります。
各ユーザープログラムは、より少ない物理メモリを使用し、より多くのプログラムを同時に実行でき、それに応じてCPU使用率とスループットが向上します。
汎用使用を目的とした最新のマイクロプロセッサ、メモリ管理ユニット、またはMMUがハードウェアに組み込まれています。MMUの仕事は、仮想アドレスを物理アドレスに変換することです。基本的な例を以下に示します-

仮想メモリは通常、デマンドページングによって実装されます。セグメンテーションシステムに実装することもできます。デマンドセグメンテーションを使用して、仮想メモリを提供することもできます。
デマンドページング
デマンドページングシステムは、プロセスがセカンダリメモリに常駐し、ページが事前ではなくオンデマンドでのみロードされるスワッピングを備えたページングシステムと非常によく似ています。コンテキストスイッチが発生すると、オペレーティングシステムは、古いプログラムのページをディスクにコピーしたり、新しいプログラムのページをメインメモリにコピーしたりしません。代わりに、最初のページを読み込んだ後、新しいプログラムの実行を開始し、それをフェッチします。参照されているプログラムのページ。

プログラムの実行中に、プログラムが少し前にスワップアウトされたためにメインメモリで使用できないページを参照している場合、プロセッサはこの無効なメモリ参照を page fault プログラムからオペレーティングシステムに制御を移して、ページをメモリに戻すように要求します。
利点
デマンドページングの利点は次のとおりです-
- 大容量の仮想メモリ。
- メモリのより効率的な使用。
- マルチプログラミングの程度に制限はありません。
短所
テーブルの数とページ割り込みを処理するためのプロセッサオーバーヘッドの量は、単純なページ管理手法の場合よりも多くなります。
ページ置換アルゴリズム
ページ置換アルゴリズムは、オペレーティングシステムがスワップアウトするメモリページを決定し、メモリのページを割り当てる必要があるときにディスクに書き込むための手法です。ページングは、ページフォールトが発生し、ページが使用できない、または空きページの数が必要なページより少ないという理由で、割り当て目的のアカウンティングに空きページを使用できない場合に発生します。
置換用に選択されてページアウトされたページが再度参照されると、ディスクから読み込む必要があり、これには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)アルゴリズム
このアルゴリズムは、カウントが最も少ないページがおそらく取り込まれたばかりで、まだ使用されていないという議論に基づいています。
オペレーティングシステムの重要な仕事の1つは、マウス、キーボード、タッチパッド、ディスクドライブ、ディスプレイアダプター、USBデバイス、ビットマップ画面、LED、アナログ-デジタルコンバーター、オン/などのさまざまなI / Oデバイスを管理することです。オフスイッチ、ネットワーク接続、オーディオI / O、プリンターなど。
I / Oシステムは、アプリケーションI / O要求を受け取り、それを物理デバイスに送信してから、デバイスから返される応答を受け取り、それをアプリケーションに送信する必要があります。I / Oデバイスは2つのカテゴリに分類できます-
Block devices−ブロックデバイスは、ドライバーがデータのブロック全体を送信することによって通信するデバイスです。たとえば、ハードディスク、USBカメラ、Disk-On-Keyなど。
Character devices−文字デバイスは、ドライバが単一の文字(バイト、オクテット)を送受信することによって通信するデバイスです。たとえば、シリアルポート、パラレルポート、サウンドカードなど
デバイスコントローラー
デバイスドライバーは、特定のデバイスを処理するためにOSにプラグインできるソフトウェアモジュールです。オペレーティングシステムは、デバイスドライバの助けを借りて、すべてのI / Oデバイスを処理します。
デバイスコントローラーは、デバイスとデバイスドライバー間のインターフェイスのように機能します。I / Oユニット(キーボード、マウス、プリンターなど)は通常、機械部品と電子部品で構成され、電子部品はデバイスコントローラーと呼ばれます。
オペレーティングシステムと通信するために、各デバイスには常にデバイスコントローラーとデバイスドライバーがあります。デバイスコントローラーは、複数のデバイスを処理できる場合があります。インターフェイスとしての主なタスクは、シリアルビットストリームをバイトブロックに変換し、必要に応じてエラー訂正を実行することです。
コンピューターに接続されているデバイスはすべてプラグとソケットで接続され、ソケットはデバイスコントローラーに接続されています。以下は、CPU、メモリ、コントローラー、およびI / Oデバイスを接続するためのモデルであり、CPUとデバイスコントローラーはすべて共通のバスを使用して通信します。

同期I / Oと非同期I / O
Synchronous I/O −このスキームでは、CPUの実行はI / Oが進行する間待機します
Asynchronous 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)と呼ばれる特別なハードウェアが必要です。コントローラは、ソースポインタとデスティネーションポインタ(データの読み取り/書き込み先)、転送されたバイト数を追跡するカウンタ、およびCPUサイクルのI / Oとメモリタイプ、割り込みと状態を含む設定でプログラムされます。

オペレーティングシステムは、次のようにDMAハードウェアを使用します-
ステップ | 説明 |
---|---|
1 | デバイスドライバは、ディスクデータをバッファアドレスXに転送するように指示されます。 |
2 | 次に、デバイスドライバーは、データをバッファーに転送するようにディスクコントローラーに指示します。 |
3 | ディスクコントローラがDMA転送を開始します。 |
4 | ディスクコントローラは、各バイトをDMAコントローラに送信します。 |
5 | DMAコントローラはバイトをバッファに転送し、メモリアドレスを増やし、CがゼロになるまでカウンタCを減らします。 |
6 | Cがゼロになると、DMAはCPUに割り込み、転送の完了を通知します。 |
ポーリングと割り込みI / O
コンピュータには、あらゆるタイプの入力の到着を検出する方法が必要です。これが発生する可能性のある2つの方法があります。polling そして interrupts。これらの手法はどちらも、プロセッサがいつでも発生する可能性があり、現在実行中のプロセスとは関係のないイベントを処理できるようにします。
ポーリングI / O
ポーリングは、I / Oデバイスがプロセッサと通信するための最も簡単な方法です。デバイスのステータスを定期的にチェックして、次のI / O操作の時間かどうかを確認するプロセスは、ポーリングと呼ばれます。I / Oデバイスは単に情報をステータスレジスタに入れるだけで、プロセッサが来て情報を取得する必要があります。
ほとんどの場合、デバイスは注意を必要とせず、注意が必要な場合は、次にポーリングプログラムによって問い合わせられるまで待つ必要があります。これは非効率的な方法であり、プロセッサ時間の多くは不要なポーリングに浪費されます。
この方法を、クラスのすべての生徒に助けが必要かどうかを次々と尋ね続ける教師と比較してください。明らかに、より効率的な方法は、生徒が支援を必要とするときはいつでも教師に通知することです。
I / Oを中断します
I / Oを処理するための代替スキームは、割り込み駆動方式です。割り込みは、注意が必要なデバイスからマイクロプロセッサへの信号です。
デバイスコントローラは、CPUが割り込みを受信したときにCPUの注意が必要なときに、バスに割り込み信号を置きます。現在の状態を保存し、割り込みベクトル(さまざまなイベントを処理するOSルーチンのアドレス)を使用して適切な割り込みハンドラを呼び出します。割り込みデバイスが処理されると、CPUは、割り込みが発生したことがないかのように元のタスクを続行します。
I / Oソフトウェアは、多くの場合、次の層で構成されています-
User Level Libraries−これは、入力と出力を実行するためのユーザープログラムへのシンプルなインターフェイスを提供します。例えば、stdio は、CおよびC ++プログラミング言語によって提供されるライブラリです。
Kernel Level Modules −これにより、デバイスドライバーは、デバイスコントローラーおよびデバイスドライバーによって使用されるデバイスに依存しないI / Oモジュールと対話できます。
Hardware −このレイヤーには、実際のハードウェアと、デバイスドライバーと対話してハードウェアを稼働させるハードウェアコントローラーが含まれます。
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 / OSWへのインターフェイスを提供します。たとえば、putchar()、getchar()、printf()、scanf()は、Cプログラミングで使用できるユーザーレベルのI / Oライブラリstdioの例です。
カーネルI / Oサブシステム
カーネルI / Oサブシステムは、I / Oに関連する多くのサービスを提供する責任があります。以下は、提供されるサービスの一部です。
Scheduling−カーネルは、一連のI / O要求をスケジュールして、それらを実行する適切な順序を決定します。アプリケーションがブロッキングI / Oシステムコールを発行すると、要求はそのデバイスのキューに配置されます。カーネルI / Oスケジューラーは、キューの順序を再配置して、システム全体の効率とアプリケーションが経験する平均応答時間を改善します。
Buffering −カーネルI / Oサブシステムは、次のようなメモリ領域を維持します。 buffer2つのデバイス間、またはアプリケーション操作を使用するデバイス間でデータが転送されるときにデータを保存します。バッファリングは、データストリームのプロデューサーとコンシューマーの間の速度の不一致に対処するため、またはデータ転送サイズが異なるデバイス間で適応するために行われます。
Caching−カーネルは、データのコピーを保持する高速メモリの領域であるキャッシュメモリを維持します。キャッシュされたコピーへのアクセスは、元のコピーへのアクセスよりも効率的です。
Spooling and Device Reservation−スプールは、インターリーブされたデータストリームを受け入れることができないプリンタなどのデバイスの出力を保持するバッファです。スプーリングシステムは、キューに入れられたスプールファイルを一度に1つずつプリンタにコピーします。一部のオペレーティングシステムでは、スプーリングはシステムデーモンプロセスによって管理されます。他のオペレーティングシステムでは、カーネルスレッドで処理されます。
Error Handling −保護されたメモリを使用するオペレーティングシステムは、さまざまな種類のハードウェアおよびアプリケーションのエラーから保護できます。
ファイル
ファイルは、磁気ディスク、磁気テープ、光ディスクなどのセカンダリストレージに記録される関連情報の名前付きコレクションです。一般に、ファイルはビット、バイト、行、またはレコードのシーケンスであり、その意味はファイルの作成者とユーザーによって定義されます。
ファイル構造
ファイル構造は、オペレーティングシステムが理解できる必要な形式に従う必要があります。
ファイルには、そのタイプに応じて特定の定義された構造があります。
テキストファイルは、行に編成された一連の文字です。
ソースファイルは、一連のプロシージャと関数です。
オブジェクトファイルは、マシンが理解できるブロックに編成された一連のバイトです。
オペレーティングシステムがさまざまなファイル構造を定義する場合、これらのファイル構造をサポートするコードも含まれます。Unix、MS-DOSは最小数のファイル構造をサポートします。
ファイルタイプ
ファイルタイプとは、テキストファイル、ソースファイル、バイナリファイルなどのさまざまなタイプのファイルを区別するオペレーティングシステムの機能を指します。多くのオペレーティングシステムは、多くのタイプのファイルをサポートしています。MS-DOSやUNIXなどのオペレーティングシステムには、次の種類のファイルがあります-
通常のファイル
- これらは、ユーザー情報を含むファイルです。
- これらには、テキスト、データベース、または実行可能プログラムが含まれる場合があります。
- ユーザーは、ファイル全体の追加、変更、削除、さらには削除など、さまざまな操作をファイルに適用できます。
ディレクトリファイル
- これらのファイルには、ファイル名およびこれらのファイルに関連するその他の情報のリストが含まれています。
特別なファイル
- これらのファイルは、デバイスファイルとも呼ばれます。
- これらのファイルは、ディスク、端末、プリンター、ネットワーク、テープドライブなどの物理デバイスを表します。
これらのファイルには2つのタイプがあります-
Character special files −データは、端末やプリンターの場合と同様に、文字ごとに処理されます。
Block special files −データは、ディスクやテープの場合と同様にブロックで処理されます。
ファイルアクセスメカニズム
ファイルアクセスメカニズムとは、ファイルのレコードにアクセスする方法を指します。ファイルにアクセスする方法はいくつかあります-
- シーケンシャルアクセス
- 直接/ランダムアクセス
- インデックス付きシーケンシャルアクセス
シーケンシャルアクセス
シーケンシャルアクセスとは、レコードが何らかの順序でアクセスされるアクセスです。つまり、ファイル内の情報が順番に処理され、レコードが次々に処理されます。このアクセス方法は最も原始的な方法です。例:コンパイラは通常、この方法でファイルにアクセスします。
直接/ランダムアクセス
ランダムアクセスファイル編成が提供し、レコードに直接アクセスします。
各レコードにはファイル上に独自のアドレスがあり、それを使用して読み取りまたは書き込みのために直接アクセスできます。
レコードは、ファイル内で任意の順序である必要はなく、ストレージメディア上の隣接する場所にある必要もありません。
インデックス付きシーケンシャルアクセス
- このメカニズムは、シーケンシャルアクセスに基づいて構築されています。
- さまざまなブロックへのポインタを含むファイルごとにインデックスが作成されます。
- インデックスは順番に検索され、そのポインタを使用してファイルに直接アクセスします。
スペースの割り当て
ファイルには、オペレーティングシステムによってディスクスペースが割り当てられます。オペレーティングシステムは、ファイルにディスクスペースを割り当てるために次の3つの主な方法で展開されます。
- 連続した割り当て
- リンクされた割り当て
- インデックス付き割り当て
連続した割り当て
- 各ファイルは、ディスク上の連続したアドレス空間を占有します。
- 割り当てられたディスクアドレスは線形の順序です。
- 実装が簡単。
- このタイプの割り当て手法では、外部の断片化が大きな問題になります。
リンクされた割り当て
- 各ファイルには、ディスクブロックへのリンクのリストが含まれています。
- ディレクトリには、ファイルの最初のブロックへのリンク/ポインタが含まれています。
- 外部の断片化はありません
- シーケンシャルアクセスファイルで効果的に使用されます。
- 直接アクセスファイルの場合は非効率的です。
インデックス付き割り当て
- 連続したリンクされた割り当ての問題に対するソリューションを提供します。
- ファイルへのすべてのポインタを持つインデックスブロックが作成されます。
- 各ファイルには、ファイルが占めるディスク領域のアドレスを格納する独自のインデックスブロックがあります。
- ディレクトリには、ファイルのインデックスブロックのアドレスが含まれています。
セキュリティとは、CPU、メモリ、ディスク、ソフトウェアプログラム、そして最も重要なのはコンピュータシステムに保存されているデータ/情報などのコンピュータシステムリソースに保護システムを提供することです。コンピュータプログラムが許可されていないユーザーによって実行された場合、そのユーザーはコンピュータまたはそれに保存されているデータに重大な損害を与える可能性があります。したがって、コンピュータシステムは、不正アクセス、システムメモリへの悪意のあるアクセス、ウイルス、ワームなどから保護する必要があります。この章では、次のトピックについて説明します。
- Authentication
- ワンタイムパスワード
- プログラムの脅威
- システムの脅威
- コンピュータセキュリティの分類
認証
認証とは、システムの各ユーザーを識別し、実行中のプログラムをそれらのユーザーに関連付けることです。特定のプログラムを実行しているユーザーが本物であることを保証する保護システムを作成するのは、オペレーティングシステムの責任です。オペレーティングシステムは通常、次の3つの方法を使用してユーザーを識別/認証します-
Username / Password −ユーザーは、システムにログインするために、オペレーティングシステムに登録されているユーザー名とパスワードを入力する必要があります。
User card/key −システムにログインするには、ユーザーはカードスロットにカードをパンチするか、オペレーティングシステムが提供するオプションにキージェネレーターによって生成されたキーを入力する必要があります。
User attribute - fingerprint/ eye retina pattern/ signature −ユーザーは、オペレーティングシステムがシステムにログインするために使用する、指定された入力デバイスを介して自分の属性を渡す必要があります。
ワンタイムパスワード
ワンタイムパスワードは、通常の認証に加えて追加のセキュリティを提供します。ワンタイムパスワードシステムでは、ユーザーがシステムにログインしようとするたびに一意のパスワードが必要です。ワンタイムパスワードを使用すると、再度使用することはできません。ワンタイムパスワードはさまざまな方法で実装されます。
Random numbers−ユーザーには、対応するアルファベットとともに数字が印刷されたカードが提供されます。システムは、ランダムに選択されたいくつかのアルファベットに対応する番号を要求します。
Secret key−ユーザーには、ユーザーIDにマップされたシークレットIDを作成できるハードウェアデバイスが提供されます。システムは、ログイン前に毎回生成されるそのような秘密IDを要求します。
Network password −一部の商用アプリケーションは、ログイン前に入力する必要がある登録済みのモバイル/電子メールでユーザーにワンタイムパスワードを送信します。
プログラムの脅威
オペレーティングシステムのプロセスとカーネルは、指示に従って指定されたタスクを実行します。ユーザープログラムがこれらのプロセスに悪意のあるタスクを実行させた場合、それはとして知られていますProgram Threats。プログラムの脅威の一般的な例の1つは、ネットワークを介してユーザーの資格情報を保存してハッカーに送信できるコンピューターにインストールされたプログラムです。以下は、いくつかのよく知られたプログラムの脅威のリストです。
Trojan Horse −このようなプログラムは、ユーザーのログイン資格情報をトラップして保存し、悪意のあるユーザーに送信します。悪意のあるユーザーは、後でコンピューターにログインして、システムリソースにアクセスできます。
Trap Door −必要に応じて動作するように設計されたプログラムが、コードにセキュリティホールを持ち、ユーザーの知らないうちに違法なアクションを実行する場合、トラップドアを持つように呼び出されます。
Logic Bomb−論理爆弾は、特定の条件が満たされた場合にのみプログラムが誤動作する状況であり、そうでない場合は本物のプログラムとして機能します。検出するのは難しいです。
Virus−名前が示すように、ウイルスはコンピュータシステム上で自分自身を複製することができます。それらは非常に危険であり、ユーザーファイルを変更/削除したり、システムをクラッシュさせたりする可能性があります。ウイルスは一般に、プログラムに埋め込まれた小さなコードです。ユーザーがプログラムにアクセスすると、ウイルスは他のファイル/プログラムに埋め込まれ始め、ユーザーがシステムを使用できなくなる可能性があります
システムの脅威
システムの脅威とは、システムサービスとネットワーク接続を悪用してユーザーを困らせることです。システム脅威は、プログラム攻撃と呼ばれる完全なネットワーク上でプログラム脅威を起動するために使用できます。システムの脅威は、オペレーティングシステムのリソース/ユーザーファイルが悪用されるような環境を作り出します。以下は、いくつかのよく知られたシステムの脅威のリストです。
Worm−ワームは、システムリソースを極端なレベルまで使用することにより、システムパフォーマンスを低下させる可能性のあるプロセスです。ワームプロセスは、各コピーがシステムリソースを使用する複数のコピーを生成し、他のすべてのプロセスが必要なリソースを取得できないようにします。ワームプロセスは、ネットワーク全体をシャットダウンすることさえできます。
Port Scanning −ポートスキャンは、ハッカーがシステムの脆弱性を検出してシステムを攻撃するためのメカニズムまたは手段です。
Denial of Service−サービス拒否攻撃は通常、ユーザーがシステムを合法的に使用することを妨げます。たとえば、サービス拒否がブラウザのコンテンツ設定を攻撃した場合、ユーザーはインターネットを使用できない可能性があります。
コンピュータセキュリティの分類
米国国防総省のTrustedComputer Systemの評価基準によると、コンピュータシステムにはA、B、C、およびDの4つのセキュリティ分類があります。これは、システムおよびセキュリティソリューションのセキュリティを決定およびモデル化するために広く使用されている仕様です。以下は、各分類の簡単な説明です。
SN | 分類の種類と説明 |
---|---|
1 | Type A 最高レベル。正式な設計仕様と検証手法を使用します。プロセスのセキュリティを高度に保証します。 |
2 | Type B 必須の保護システムを提供します。クラスC2システムのすべてのプロパティを持っています。各オブジェクトに感度ラベルを添付します。3種類あります。
|
3 | Type C 監査機能を使用して保護とユーザーの説明責任を提供します。2種類あります。
|
4 | Type D 最低レベル。最小限の保護。MS-DOS、ウィンドウ3.1はこのカテゴリに分類されます。 |
Linuxは、UNIXオペレーティングシステムの人気のあるバージョンの1つです。ソースコードは無料で入手できるため、オープンソースです。無料でご利用いただけます。LinuxはUNIXの互換性を考慮して設計されました。その機能リストはUNIXのものと非常に似ています。
Linuxシステムのコンポーネント
Linuxオペレーティングシステムには主に3つのコンポーネントがあります
Kernel−カーネルはLinuxのコア部分です。このオペレーティングシステムのすべての主要なアクティビティを担当します。さまざまなモジュールで構成され、基盤となるハードウェアと直接対話します。カーネルは、システムまたはアプリケーションプログラムに低レベルのハードウェアの詳細を隠すために必要な抽象化を提供します。
System Library−システムライブラリは、アプリケーションプログラムまたはシステムユーティリティがカーネルの機能にアクセスするために使用する特別な関数またはプログラムです。これらのライブラリは、オペレーティングシステムのほとんどの機能を実装しており、カーネルモジュールのコードアクセス権を必要としません。
System Utility −システムユーティリティプログラムは、専門的な個別レベルのタスクを実行する責任があります。

カーネルモードとユーザーモード
カーネルコンポーネントコードは、と呼ばれる特別な特権モードで実行されます kernel modeコンピュータのすべてのリソースへのフルアクセスが可能です。このコードは単一のプロセスを表し、単一のアドレス空間で実行され、コンテキストスイッチを必要としないため、非常に効率的で高速です。カーネルは各プロセスを実行し、システムサービスをプロセスに提供し、ハードウェアへの保護されたアクセスをプロセスに提供します。
カーネルモードで実行する必要のないサポートコードは、システムライブラリにあります。ユーザープログラムやその他のシステムプログラムはUser Modeシステムハードウェアとカーネルコードにアクセスできません。ユーザープログラム/ユーティリティは、システムライブラリを使用してカーネル関数にアクセスし、システムの低レベルのタスクを取得します。
基本的な機能
以下は、Linuxオペレーティングシステムの重要な機能の一部です。
Portable−移植性とは、ソフトウェアがさまざまなタイプのハードウェアで同じように機能できることを意味します。Linuxカーネルおよびアプリケーションプログラムは、あらゆる種類のハードウェアプラットフォームへのインストールをサポートしています。
Open Source− Linuxソースコードは無料で入手でき、コミュニティベースの開発プロジェクトです。Linuxオペレーティングシステムの機能を強化するために複数のチームが協力して作業し、Linuxオペレーティングシステムは継続的に進化しています。
Multi-User − Linuxはマルチユーザーシステムであるため、複数のユーザーがメモリ/ RAM /アプリケーションプログラムなどのシステムリソースに同時にアクセスできます。
Multiprogramming − Linuxはマルチプログラミングシステムであるため、複数のアプリケーションを同時に実行できます。
Hierarchical File System − Linuxは、システムファイル/ユーザーファイルが配置される標準のファイル構造を提供します。
Shell− Linuxは、オペレーティングシステムのコマンドを実行するために使用できる特別なインタプリタプログラムを提供します。さまざまなタイプの操作を実行したり、アプリケーションプログラムを呼び出したりするために使用できます。等
Security − Linuxは、パスワード保護/特定のファイルへの制御されたアクセス/データの暗号化などの認証機能を使用してユーザーセキュリティを提供します。
建築
次の図は、Linuxシステムのアーキテクチャを示しています-

Linuxシステムのアーキテクチャは、次のレイヤーで構成されています-
Hardware layer −ハードウェアはすべての周辺機器(RAM / HDD / CPUなど)で構成されます。
Kernel −オペレーティングシステムのコアコンポーネントであり、ハードウェアと直接対話し、上位層のコンポーネントに低レベルのサービスを提供します。
Shell−カーネルへのインターフェース。カーネルの機能の複雑さをユーザーから隠します。シェルはユーザーからコマンドを受け取り、カーネルの機能を実行します。
Utilities −オペレーティングシステムのほとんどの機能をユーザーに提供するユーティリティプログラム。