この記事はWeChatの公開アカウント「Xiao Lin Coding」から転載したもので、著者はXiao Lin Codingです。この記事を転載する場合は、Xiaolin Codingの公式アカウントまでご連絡ください。 オリジナルURL: https://mp.weixin.qq.com/s/JWj6_BF9Xc84kQcyx6Nf_g 序文 最近、私はこっそりと様々な技術系グループに潜んでいます。秋の採用が近づいていることもあり、大企業の面接体験談をシェアしている友人をたくさん見かけます。 すると、OSのテストには知識のポイントがかなり多く、大企業では基礎知識について質問されることが分かりました。その中で、オペレーティングシステムの「スケジューリングアルゴリズム」もよく調べられています。 そこで、オペレーティングシステムの3大スケジューリング機構である「プロセススケジューリング/ページ置換/ディスクスケジューリングアルゴリズム」についてまとめてみましたので、ぜひご覧ください。秋の採用では、皆さんが夢の内定を得られることを願っています。 文章 プロセススケジューリングアルゴリズム プロセス スケジューリング アルゴリズムは CPU スケジューリング アルゴリズムとも呼ばれ、プロセスは CPU によってスケジュールされます。 CPU がアイドル状態のとき、オペレーティング システムはメモリ内の「準備完了状態」のプロセスを選択し、それに CPU を割り当てます。 CPU スケジューリングはいつ行われるのでしょうか? 通常、次のような状況があります。
状況 1 と 4 で発生するスケジューリングは「非プリエンプティブ スケジューリング」と呼ばれ、状況 2 と 3 で発生するスケジューリングは「プリエンプティブ スケジューリング」と呼ばれます。 非プリエンプティブとは、プロセスの実行中、プロセスが完了するかイベントによってブロックされるまで実行が継続され、その後 CPU が他のプロセスに渡されることを意味します。 プリエンプティブ スケジューリングとは、その名前が示すように、プロセスの実行中に中断して CPU を他のプロセスに譲ることができることを意味します。一般に、プリエンプションには、タイム スライス原則、優先順位原則、およびショート ジョブ優先順位原則という 3 つの原則があります。 3 番目のケースでも CPU スケジューリングが行われるのはなぜか、不思議に思われるかもしれません。待機状態のプロセスがあり、その優先度が比較的高いとします。プロセスが待機しているイベントが発生すると、準備完了状態に切り替わります。準備完了状態に切り替わると、スケジューリング アルゴリズムが優先度に基づいてスケジュールされている場合、実行中のプロセスを直ちにプリエンプトするため、この時点で CPU スケジューリングが行われます。 2 番目の状態は通常、タイム スライスの有効期限が切れたときです。タイム スライスの有効期限が切れると、割り込みが発生し、実行中のプロセスがプリエンプトされて CPU が占有されるためです。 スケジューリング アルゴリズムは待機時間 (プロセスがスケジューリングのために準備完了キューで待機する合計時間) に影響しますが、プロセスが実際に CPU を使用する時間と I/O 時間には影響しません。 次に、一般的なスケジューリング アルゴリズムについて説明します。
先着順スケジューリングアルゴリズム 最も単純なスケジューリング アルゴリズムは、非プリエンプティブな First Come First Serve (FCFS) アルゴリズムです。 FCFS スケジューリング アルゴリズム 名前が示すように、先着順です。毎回、キューに入る最初のプロセスが準備完了キューから選択され、プロセスが終了するかブロックされるまで実行され、その後、キューから最初のプロセスが選択されて実行されます。 これは公平に思えますが、長いジョブが最初に実行されると、後続の短いジョブは長時間待機する必要があり、短いジョブには不利になります。 FCFS は長時間のジョブに適しており、CPU を集中的に使用するジョブを実行するシステムには適していますが、I/O を集中的に使用するジョブを実行するシステムには適していません。 最短ジョブ優先スケジューリングアルゴリズム Shortest Job First (SJF) スケジューリング アルゴリズムは、その名前が示すように、実行時間が最も短いプロセスを優先し、システムのスループットの向上に役立ちます。 SJF スケジューリング アルゴリズム これは明らかに長期的な作業には役立たず、簡単に極端な現象につながる可能性があります。 たとえば、長いジョブが準備完了キューで実行を待機していて、準備完了キューに短いジョブが多数ある場合、長いジョブは継続的に押し戻され、ターンアラウンドタイムが長くなり、長いジョブは長時間実行されません。 高応答率優先スケジューリングアルゴリズム 従来の「先着順スケジューリング アルゴリズム」と「最短ジョブ優先スケジューリング アルゴリズム」では、短いジョブと長いジョブのバランスが取れていません。 次に、Highest Response Ratio Next (HRRN) スケジューリング アルゴリズムは、主に短いジョブと長いジョブのバランスをとります。 プロセスがスケジュールされるたびに、まず「応答率優先度」が計算され、「応答率優先度」が最も高いプロセスが実行されます。「応答率優先度」の計算式は次のとおりです。 上記の式から、次のことがわかります。
タイムスライスラウンドロビンスケジューリングアルゴリズム 最も古く、最も単純で、最も公平かつ最も広く使用されているアルゴリズムは、ラウンドロビン (RR) スケジューリング アルゴリズムです。 RR スケジューリング アルゴリズム 各プロセスには、タイム スライス (Quantum) と呼ばれる期間が割り当てられます。これは、その期間中にプロセスを実行できることを意味します。
さらに、タイムスライスの長さも重要なポイントです。
通常、タイムスライスを 20ms ~ 50ms に設定すると、妥当な妥協値になります。 最高優先度のスケジューリングアルゴリズム 以前の「タイム スライス ローテーション アルゴリズム」では、すべてのプロセスが同等に重要であり、特定のプロセスが優遇されることはなく、すべてのプロセスの実行時間は同じであると想定されていました。 しかし、マルチユーザー コンピュータ システムでは、異なる考え方が採用されています。マルチユーザー コンピュータ システムでは、スケジューリングに優先順位が付けられることを期待しています。つまり、スケジューラが実行可能なキューから最も優先度の高いプロセスを選択して実行できることを期待しています。これは、最高優先度優先 (HPF) スケジューリング アルゴリズムと呼ばれます。 プロセスの優先度は、静的または動的のいずれかに分類できます。
このアルゴリズムには、高優先度を処理するための非プリエンプティブとプリエンプティブの 2 つの方法もあります。
ただし、優先度の低いプロセスが実行されない可能性があるという欠点がまだあります。 マルチレベルフィードバックキュースケジューリングアルゴリズム マルチレベルフィードバックキュースケジューリングアルゴリズムは、「タイムスライスラウンドロビンアルゴリズム」と「最高優先度アルゴリズム」を組み合わせて開発したものです。 名前が示す通り:
マルチレベルフィードバックキュー どのように動作するか見てみましょう:
短いジョブは第 1 レベルのキューで迅速に処理できることがわかります。長いジョブの場合、第 1 レベルのキューで完全に処理できない場合は、次のキューに移動して実行を待機できます。待機時間は長くなりますが、実行時間も長くなります。したがって、このアルゴリズムは長いジョブと短いジョブを適切に考慮し、応答時間が良好になります。 メモリページ置換アルゴリズム メモリ ページ置換アルゴリズムを理解する前に、ページ フォールト例外 (ページ フォールト割り込み) について説明する必要があります。 CPU がアクセスしたページが物理メモリ内にない場合、ページ フォールト割り込みが生成され、オペレーティング システムにフォールトしたページを物理メモリにロードするように要求します。一般的な割り込みとの主な違いは次のとおりです。
下図のように、ページ フォルト割り込みの処理フローを見てみましょう。 ページフォルト割り込み処理フロー
上記のプロセスでは、ステップ 4 は物理メモリ内に空きページが見つかるケースです。見つからない場合はどうなるでしょうか? 空きページが見つからない場合は、メモリがいっぱいであることを意味します。このとき、物理ページを選択するために「ページ置換アルゴリズム」が必要です。物理ページが変更されている場合(ダーティページ)、ディスクにスワップアウトされ、スワップアウトされるページテーブルエントリのステータスが「無効」に変更され、最終的にアクセス中のページがこの物理ページにロードされます。 ここで言及する価値があるのは、ページ テーブル エントリには通常、次のフィールドがあるということです。 その中で:
ここでは仮想メモリ管理のプロセス全体を整理しました。下の図から確認できます。 仮想メモリプロセス したがって、ページ置換アルゴリズムの機能は、ページフォールト例外が発生し、新しいページを呼び出す必要があるがメモリがいっぱいの場合に、置換する物理ページを選択することです。つまり、ディスクにスワップアウトする物理ページを選択し、アクセスする必要があるページを物理ページにスワップします。 アルゴリズムの目的は、ページスワップの数を可能な限り減らすことです。一般的なページ置換アルゴリズムは次のとおりです。
最適なページ置換アルゴリズム 基本的な考え方は、最も長い間アクセスされないページを「将来」に置き換えることです。 したがって、アルゴリズムの実装では、メモリ内の各論理ページの「次の」アクセス時間を計算し、比較して、将来最も長い時間アクセスされないページを選択する必要があります。 たとえば、最初に 3 つの空き物理ページがあり、その後に要求されたページ シーケンスがある場合、その置換プロセスは次のようになります。 最適なページ置換アルゴリズム この要求されたページ シーケンスでは、ページ フォールトが 7 回発生し (3 つの空きページがスワップインされ、4 つの最適ページが置き換えられました)、ページの置換が 4 回発生しました。 これは理想的ですが、プログラムは動的にページにアクセスし、「次の」アクセスまでの各ページの待機時間を予測できないため、実際のシステムでは実装できません。 したがって、最適なページ置換アルゴリズムの役割は、アルゴリズムの効率を測定することです。アルゴリズムの効率がこのアルゴリズムの効率に近いほど、アルゴリズムの効率が高くなります。 FIFO置換アルゴリズム ページへの次のアクセスまでの待ち時間を予測することはできないため、メモリ内に長時間保存されているページを置き換えることを選択できます。これが、「先入れ先出し置換」アルゴリズムの考え方です。 前回のリクエストのページ シーケンスを引き続き例にとり、先入れ先出し置換アルゴリズムが使用されていると仮定すると、プロセスは次のようになります。 FIFO置換アルゴリズム この要求されたページ シーケンスでは、ページ フォールトが 10 回、ページ置換が 7 回発生しました。最適なページ置換アルゴリズムと比較すると、パフォーマンスは大幅に低下しています。 最も最近使用されていない置換アルゴリズム LRU 置換アルゴリズムの基本的な考え方は、ページフォールトが発生したときに、最も長い時間アクセスされていないページが置換対象として選択されるというものです。つまり、このアルゴリズムでは、長期間使用されていないページは、将来も長期間使用されないままになる可能性が高いと想定しています。 このアルゴリズムは、最適置換アルゴリズムに似ています。最適置換アルゴリズムは、「将来の」使用状況に基づいて削除するページを推測しますが、LRU は、「過去の」使用状況に基づいて削除するページを推測します。 前回要求されたページ シーケンスを例に挙げてみましょう。最も最近使用されていない置換アルゴリズムが使用されていると仮定すると、プロセスは次のようになります。 最も最近使用されていない置換アルゴリズム このリクエストのページシーケンスでは、ページフォールトが 9 回発生し、ページ置換が 6 回発生しました。先入れ先出し置換アルゴリズムと比較すると、パフォーマンスがわずかに向上しています。 LRU は理論的には可能ですが、非常に高価です。 LRU を完全に実装するには、メモリ内のすべてのページのリンク リストを維持し、最も最近使用されたページをリストの先頭に、最も最近使用されなかったページをリストの末尾に配置する必要があります。 難しいのは、メモリにアクセスするたびに「リンク リスト全体」を更新する必要があることです。リンク リスト内のページを検索し、それを削除して、リストの先頭に移動する操作は非常に時間がかかります。 したがって、LRU は見た目は良いものの、オーバーヘッドが大きいため、実際のアプリケーションではほとんど使用されません。 時計ページ置換アルゴリズム 順列の数を最適化でき、実装が簡単なアルゴリズムはありますか? クロック ページ置換アルゴリズムは、両方を実現できます。これは LRU に似ており、FIFO を改良したものです。 このアルゴリズムの考え方は、すべてのページを時計の文字盤に似た「循環リンク リスト」に保存し、針が最も古いページを指すようにすることです。 ページ フォールトが発生すると、アルゴリズムはまずポインターが指すページをチェックします。
時計ページ置換アルゴリズムがどのように機能するかを図に描きました。以下をご覧ください。 時計ページ置換アルゴリズム このアルゴリズムの仕組みを理解すると、なぜクロック アルゴリズムと呼ばれるのかがわかります。 最も使用頻度の低いアルゴリズム 最も頻繁に使用されない (LFU) アルゴリズム。名前はやんちゃに聞こえますが、このアルゴリズムが一般的に使用されていないという意味ではなく、ページ フォールトが発生すると、「アクセス回数」が最も少ないページが選択され、排除されるという意味です。 実装方法は、各ページに「訪問カウンター」を設定することです。ページが訪問されるたびに、ページのアクセスカウンターが 1 ずつ増加します。ページ フォールトが発生すると、カウンター値が最も小さいページが削除されます。 一見シンプルに見え、各ページにカウンターを追加することで実装できますが、OS に実装する場合は効率やハードウェアコストを考慮する必要があります。 これを実現するには、比較的高いハードウェア コストがかかるカウンターを追加する必要があります。さらに、このカウンターを使用して、どのページの訪問数が最も少ないかを調べ、リンク リスト自体を検索する必要がある場合、リンク リストが非常に長いと、非常に時間がかかり、非効率的になります。 しかし、まだ問題が残っています。LFU アルゴリズムは頻度の問題のみを考慮しており、時間の問題は考慮していません。たとえば、一部のページは過去に頻繁にアクセスされていましたが、現在はアクセスされていません。現在頻繁にアクセスされているページは、これらのページほど頻繁にアクセスされていません。ページ フォールトが発生すると、現在頻繁にアクセスされているが、あまり頻繁にアクセスされていないページが誤って破損する可能性があります。 この問題には解決策があります。定期的に訪問回数を減らすことです。例えば、時間中断が発生したら、過去に訪問したページの訪問回数を2で割ります。つまり、時間が経つにつれて、過去の訪問回数が多かったページが徐々に減っていくので、置き換えられる確率が高くなるのと同等です。 ディスクスケジューリングアルゴリズム 以下に示すように、ディスク構造を見てみましょう。 ディスク構造 一般的な機械式ディスクは、上の写真の左側のようなものです。真ん中の丸い部分がディスク プラッターです。通常、プラッターは複数あり、各ディスクには独自のヘッドがあります。右の図はディスクの構造です。ディスクの各層は複数のトラックに分かれており、各トラックは複数のセクターに分かれており、各セクターは 512 バイトです。そして、同じ番号の複数のトラックがシリンダーを形成し、上の図の中央に示すように、ディスクのシリンダーと呼ばれます。 ディスク スケジューリング アルゴリズムの目的は非常に単純で、ディスクのアクセス パフォーマンスを向上させることです。これは通常、ディスク アクセス要求の順序を最適化することによって実現されます。 シーク時間はディスク アクセスの中で最も時間のかかる部分です。要求順序が適切に最適化されていれば、不要なシーク時間を節約でき、ディスク アクセスのパフォーマンスが向上します。 次の一連のリクエストを想定します。各番号はトラックの位置を表します。 98、183、37、122、14、124、65、67 初期ヘッドの現在の位置はトラック 53 です。 次に、上記のシーケンスを各スケジューリング アルゴリズムの例として取り上げます。一般的なディスク スケジューリング アルゴリズムは次のとおりです。
先着順 先着順 (FCFS) は、その名前が示すように、最初に到着したリクエストが最初に処理されます。 次に、この順序に従います。 98、183、37、122、14、124、65、67 次に、ディスクは以下に示すように左から右の順に書き込まれます。 先着順 先着順アルゴリズムは、合計 640 トラックの距離を移動します。一見すると、このアルゴリズムは比較的単純で粗雑です。ただし、多数のプロセスがディスクの使用を競う場合、アクセスを要求されたトラックが非常に分散することがあり、先着順アルゴリズムはシーク時間が長すぎるため、パフォーマンスが非常に悪いように見えます。 最短のシーク時間を優先 Shortest Seek First (SSF) アルゴリズムは、現在のヘッド位置からのシーク時間が最も短いリクエストを優先することによって機能します。次のシーケンスを例に挙げてみましょう。 98、183、37、122、14、124、65、67 次に、先頭に最も近いリクエスト (位置 53) のアルゴリズムに従って、特定のリクエストは左から右に次の順序になります。 65、67、37、14、98、122、124、183 最短のシーク時間を優先 ヘッドが移動する総距離は 236 トラックで、先着順のパフォーマンスに比べて大幅に向上しています。 ただし、このアルゴリズムでは、一部のリクエストでスタベーションが発生する可能性があります。この例では静的シーケンスを使用しているため、問題は確認できません。動的リクエストであると仮定すると、後続のリクエストがすべてトラック 183 より小さい場合、トラック 183 に応答されない可能性があり、スタベーションが発生します。ここでスタベーションが発生する理由は、ヘッドが狭い領域で前後に移動するからです。 スキャンアルゴリズム 最短シーク時間を優先するアルゴリズムがスターベーションを引き起こす理由は、ヘッドが狭い領域で前後に移動する可能性があるためです。 この問題を防ぐには、ヘッドが一方向に移動してすべての未完了の要求にアクセスし、その方向の最後のトラックに到達したら方向を変えるように規定することができます。これがスキャン アルゴリズムです。 このアルゴリズムはエレベーター アルゴリズムとも呼ばれ、たとえば、エレベーターは、その方向に要求がなくなるまで一方向に移動し、その後方向を変えます。 このシーケンスを例に挙げると、ヘッドの初期位置は 53 です。 98、183、37、122、14、124、65、67 次に、スキャン スケジューラが最初にトラック番号が減少する方向に移動すると仮定すると、特定の要求は左から右に次の順序になります。 37、14、0、65、67、98、122、124、183 スキャンアルゴリズム ヘッドは最初に左からの要求に応答し、左端 (トラック 0) に到達した後にのみ、右からの要求に応答するために反対方向に移動し始めます。 スキャン スケジューリング アルゴリズムはパフォーマンスが良好で、スタベーションは発生しませんが、中間部分のトラックが有利になり、中間部分の応答周波数が他の部分よりも高くなる、つまり、各トラックの応答周波数に差が生じるという問題があります。 巡回スキャンアルゴリズム スキャン アルゴリズムにより、各トラックの応答周波数に違いが生じます。この問題を最適化するには、各トラックの応答周波数が基本的に同じになるように、常に同じ方向にスキャンします。 循環スキャン (CSCAN) では、トラック アクセス要求はヘッドが特定の方向に移動するときにのみ処理され、戻るときはエッジに最も近いトラックに直接すばやく移動する、つまりヘッドをリセットすることを規定しています。このプロセスは非常に高速で、戻る途中で要求が処理されることはありません。このアルゴリズムの特徴は、トラックが一方向の要求にのみ応答することです。 このシーケンスを例に挙げると、ヘッドの初期位置は 53 です。 98、183、37、122、14、124、65、67 次に、循環スキャン スケジューラが最初にトラックを増やす方向に移動すると仮定すると、特定の要求は左から右に次の順序になります。 65、67、98、122、124、183、199、0、14、37 巡回スキャンアルゴリズム ヘッドは、右端のトラック 199 に触れるまで、まず右から要求に応答し、その後すぐにディスクの先頭 (トラック 0) に戻りますが、最初のトラックに到達するまで戻る途中ではいかなる要求にも応答せず、その後は右から順番に要求に応答し続けます。 スキャン アルゴリズムと比較すると、サイクリック スキャン アルゴリズムは、各トラック位置に対する応答周波数が比較的平均的です。 LOOK および C-LOOK アルゴリズム 前述のスキャン アルゴリズムと循環スキャン アルゴリズムはどちらも、ヘッドがディスクの「先頭または末尾」に移動したときにのみ方向の変更を開始します。 これは実際に最適化できます。ディスク ヘッドが「最も遠い要求」の位置に移動し、その後すぐに反対方向に移動するという考え方です。 SCAN アルゴリズムの最適化は、LOOK アルゴリズムと呼ばれます。その動作は、ヘッドが各方向で要求された最も遠い位置までのみ移動し、その後すぐに反対方向に移動し、ディスクの先頭または末尾に移動することはありません。逆方向への移動中に要求に応答します。 LOOKアルゴリズム C-SCAN アルゴリズムの最適化は C-LOOK と呼ばれます。これは、ヘッドが各方向で要求された最も遠い位置までのみ移動し、その後すぐに逆方向に移動し、ディスクの最初または最後に移動しないように動作します。逆方向の移動中は要求に応答しません。 C-LOOKアルゴリズム |
<<: 公開されたマイクロソフトのチャットボットの特許はユーザーの言語スタイルや表現を模倣できる
>>: マイクロサービスにおける電流制限ロジックとアルゴリズム
オープンソースの詳細については、以下をご覧ください。 51CTO オープンソース基本ソフトウェアコミ...
シーン説明: 昨年 8 月に Microsoft がリリースした「Que Shen AI」Suphx...
KDnuggets 編集者の Matthew Mayo が、機械学習とデータ サイエンスに関連する書...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
Facebook は、数十億のノードと数兆のエッジを持つグラフ モデルを効率的にトレーニングできる...
[[419044]] 「ブラックミラー」には、新婚の夫を亡くした女性が、その悲しみを和らげるために企...
データの処理と分析は基本的かつ広範囲にわたります。アルゴリズムはデータの処理と分析において重要な役割...
所有権や金額などの取引の基本的な特性は、基本的な数学的特性に基づいて機能する公開鍵暗号化のおかげで簡...
Facebook は近年、世論の嵐に何度も巻き込まれてきたが、技術革新に関しては決して無縁ではなかっ...
ChatGPT が AI を話題にしてから 1 年以上経ちましたが、今年の Consumer Ele...
次回フェリーに乗るときは、ブリッジをよく見ることを忘れないでください。舵を取っているのは人間ではない...