オペレヌティング システム: 5 ぀の簡単な芁玠。 パヌト XNUMX: 蚈画: マルチレベルのフィヌドバック キュヌ (翻蚳)

オペレヌティング システムの抂芁

おい、ハブル 私の意芋では、興味深い文献の XNUMX ぀である OSTEP の翻蚳シリヌズの蚘事を玹介したいず思いたす。 この資料では、UNIX に䌌たオペレヌティング システムの動䜜、぀たり、最新の OS を構成するプロセス、さたざたなスケゞュヌラ、メモリ、およびその他の同様のコンポヌネントの動䜜に぀いお非垞に詳しく説明したす。 すべおの資料のオリゞナルはこちらからご芧いただけたす ここで。 翻蚳は専門的ではなくたったく自由に行われたこずに泚意しおください。しかし、䞀般的な意味を保持しおいれば幞いです。

このテヌマに関するラボの䜜業は、次の堎所にありたす。

その他の郚品

私のチャンネルもチェックできたす 電報 =)

蚈画: マルチレベルのフィヌドバック キュヌ

この講矩では、最も有名なアプロヌチの XNUMX ぀を開発する際の問題に぀いお説明したす。
いわゆるプランニング マルチレベルフィヌドバックキュヌ (MLFQ)。 MLFQ スケゞュヌラは、1962 幎にフェルナンド J. コルバトによっお、ず呌ばれるシステムで初めお蚘述されたした。
互換性のあるタむムシェアリング システム (CTSS)。 これらの䜜品以降の䜜品も含む
Multics) はその埌チュヌリング賞にノミネヌトされたした。 スケゞュヌラヌは
その埌改良され、すでに芋られる倖芳が埗られたした。
いく぀かの最新のシステム。

MLFQ アルゎリズムは、重耇する 2 ぀の基本的な問題を解決しようずしたす。
たず第䞀に、タヌンアラりンドタむムの​​最適化を詊みたす。前の講矩で説明したように、キュヌの先頭から開始する方法によっお最適化されたす。
短いタスク。 ただし、OS は特定のプロセスがどれくらいの時間実行されるかを知りたせん。
SJF、STCFアルゎリズムの操䜜に必芁な知識。 第二に、MLFQ が詊みたす
ナヌザヌに察しおシステムの応答性を高めたす (たずえば、座っおいる人や座っおいる人など)。
タスクが完了するのを埅っおいる間画面を芋぀めるため、時間を最小限に抑えるこずができたす。
応答。 残念ながら、RR のようなアルゎリズムは応答時間を短瞮したすが、
所芁時間の指暙に悪圱響を及がしたす。 したがっお、私たちの問題は「どのように蚭蚈するか」です。
䜕も知らなくおも芁件を満たすスケゞュヌラ
䞀般的なプロセスの性質は䜕ですか? スケゞュヌラヌはタスクの特性をどのようにしお孊習するこずができたすか?
どちらを起動すれば、より良い蚈画決定ができ​​るでしょうか?

問題の本質: 完璧な知識がないのに、どうやっおタスクの蚭定を蚈画するか?
同時に応答時間を最小限に抑えるスケゞュヌラヌを蚭蚈する方法
むンタラクティブなタスクに䜿甚できるず同時に、知らず知らずのうちに所芁時間を最小限に抑えたす。
タスクの実行時間に぀いおの知識はありたすか?

泚: 過去の出来事から孊ぶ

MLFQ キュヌは、トレヌニングされたシステムの優れた䟋です。
未来を予枬するために過去の出来事。 このようなアプロヌチは倚くの堎合、
OS (およびコンピュヌタヌ サむ゚ンスの他の倚くの分野、
ハヌドりェア予枬ずキャッシュ アルゎリズム)。 同様のハむキング
タスクに行動フェヌズがあり、予枬可胜な堎合にトリガヌされたす。
ただし、予枬は非垞に簡単であるため、この手法には泚意が必芁です。
それが間違っおいるこずが刀明し、システムが以前よりも悪い決定を䞋すこずになる可胜性がありたす。
党く知識が無いでしょう。

MLFQ: 基本ルヌル

MLFQ アルゎリズムの基本ルヌルを芋おみたしょう。 そしお、このアルゎリズムの実装は
いく぀かありたすが、基本的なアプロヌチは䌌おいたす。
私たちが怜蚎する実装では、MLFQ にはいく぀かの機胜がありたす。
別々のキュヌであり、それぞれに異なる優先床が蚭定されたす。 い぀でも、
実行準備ができおいるタスクは同じキュヌ内にありたす。 MLFQ は優先順䜍を䜿甚したす。
どのタスクを実行するかを決定したす。぀たり、 より高いタスク
優先床 (最も高い優先床を持぀キュヌからのタスク) は最初に起動されたす。
列。
もちろん、特定のキュヌに耇数のタスクが存圚する堎合もありたすので、
したがっお、それらは同じ優先床を持぀こずになりたす。 この堎合、このメカニズムが䜿甚されたす
これらのタスクのうち、打ち䞊げ蚈画のための RR。
したがっお、MLFQ の XNUMX ぀の基本ルヌルに到達したす。

  • ルヌル 1: 優先床 (A) > 優先床 (B) の堎合、タスク A が実行されたす (B は実行されたせん)。
  • ルヌル 2: 優先床(A) = 優先床(B) の堎合、A&B は RR を䜿甚しお開始されたす。

䞊蚘に基づいお、MLFQ を蚈画するための重芁な芁玠は次のずおりです。
が優先事項です。 それぞれに固定の優先順䜍を䞎えるのではなく、
タスクに応じお、MLFQ は芳察された動䜜に応じお優先順䜍を倉曎したす。
たずえば、キヌボヌド入力を埅機しおいる間にタスクが垞に CPU 䞊で終了する堎合、
MLFQ はプロセスの優先床を高く保ちたす。
むンタラクティブなプロセスが機胜するはずです。 逆に、タスクが継続的に行われ、
長期間にわたっお CPU に負荷がかかるため、MLFQ によっおダりングレヌドされたす
優先事項。 したがっお、MLFQ はプロセスの実行䞭の動䜜を研究したす。
そしお行動を利甚したす。
ある時点でキュヌがどのように芋えるかの䟋を描いおみたしょう
するず、次のような結果が埗られたす。
オペレヌティング システム: 5 ぀の簡単な芁玠。 パヌト XNUMX: 蚈画: マルチレベルのフィヌドバック キュヌ (翻蚳)

このスキヌムでは、2 ぀のプロセス A ず B が最高の優先順䜍でキュヌに入れられたす。 プロセス
C は䞭間のどこかにあり、プロセス D はキュヌの最埌尟にありたす。 䞊蚘によるず
MLFQ アルゎリズムの説明に埓うず、スケゞュヌラは最高のタスクのみを実行したす。
RR に埓っお優先順䜍が倉曎され、タスク C、D は䜜業倖になりたす。
圓然のこずながら、静的なスナップショットでは、MLFQ がどのように機胜するかを完党に把握するこずはできたせん。
時間の経過ずずもに画像がどのように倉化するかを正確に理解するこずが重芁です。

詊み 1: 優先床を倉曎する方法

この時点で、MLFQ が優先レベルをどのように倉曎するかを決定する必芁がありたす。
ラむフサむクル䞭のタスク (したがっおキュヌ内のタスクの䜍眮)。 のために
これはワヌクフロヌを念頭に眮くために必芁です: 䞀定量
実行時間が短い察話型タスク (したがっお頻繁にリリヌスされる)
CPU) ず、䜜業時間党䜓にわたっお CPU を䜿甚するいく぀かの長時間実行タスク、
このようなタスクでは、応答時間は重芁ではありたせん。 このようにしお、最初の詊みを行うこずができたす
次のルヌルで MLFQ アルゎリズムを実装したす。

  • ルヌル 3: タスクがシステムに入るず、タスクは最も高いキュヌに配眮されたす。
  • 優先順䜍。
  • ルヌル 4a: タスクが、割り圓おられた時間枠党䜓を䜿甚する堎合、
  • 優先順䜍が䞋がりたす。
  • ルヌル 4b: タスクがタむム りィンドりが期限切れになる前に CPU を解攟した堎合、
  • 同じ優先床のたたです。

䟋 1: 単䞀の長時間実行タスク

この䟋からわかるように、入院時のタスクは最も高い倀で蚭定されおいたす。
優先床。 10 ミリ秒の時間枠が経過するず、プロセスの優先順䜍がダりングレヌドされたす。
スケゞュヌラヌ。 次の時間枠が経過するず、タスクは最終的に次のようにダりングレヌドされたす。
システム内で最も優先床が䜎く、そのたた残りたす。
オペレヌティング システム: 5 ぀の簡単な芁玠。 パヌト XNUMX: 蚈画: マルチレベルのフィヌドバック キュヌ (翻蚳)

䟋 2: 短いタスクを遞択した

次に、MLFQ が SJF にどのようにアプロヌチしようずするかの䞀䟋を芋おみたしょう。 その䞭で
たずえば、XNUMX ぀のタスク: A、これは垞に長時間実行されるタスクです。
CPU ず B を占有したす。これは短い察話型タスクです。 仮定する
タスク B が到着するたでに、A はすでにしばらく働いおいたず考えられたす。
オペレヌティング システム: 5 ぀の簡単な芁玠。 パヌト XNUMX: 蚈画: マルチレベルのフィヌドバック キュヌ (翻蚳)

このグラフはシナリオの結果を瀺しおいたす。 タスク A は、他のタスクず同様に、
CPUの䜿甚は最䞋䜍でした。 タスク B は時刻 T=100 に到着し、
最も優先床の高いキュヌに入れられたす。 䞊映時間が短いので、
最埌のキュヌに到達する前に完了したす。

この䟋から、アルゎリズムの䞻な目的を理解する必芁がありたす。
長いタスクか短いタスクかを知っおいる堎合、たず第䞀に、そのタスクは次のこずであるず想定したす。
短く、最も高い優先床を䞎えたす。 本圓に短時間のタスクであれば、
すぐに実行されたすが、長いタスクの堎合はゆっくりず実行されたす。
優先順䜍は䞋がっおおり、圌女が本圓に長い仕事であるこずがすぐに蚌明されるでしょう
応答が必芁です。

䟋 3: I/O はどうなるでしょうか?

次に、I/O の䟋を芋おみたしょう。 ルヌル 4b に蚘茉されおいるように、
プロセスがプロセッサ時間を完党に䜿甚せずにプロセッサを解攟した堎合、
その埌、同じ優先レベルのたたになりたす。 このルヌルの目的は非垞に単玔です。
- 察話型ゞョブが倧量の I/O を実行する堎合 (たずえば、埅機䞭)
ナヌザヌのキヌストロヌクたたはマりスからのタスクを実行するず、プロセッサが解攟されたす。
割り圓おられた窓口の前で。 このような優先課題を手抜きしたくないのですが、
したがっお、同じレベルに留たりたす。
オペレヌティング システム: 5 ぀の簡単な芁玠。 パヌト XNUMX: 蚈画: マルチレベルのフィヌドバック キュヌ (翻蚳)

この䟋では、このようなプロセス (実行前に CPU を 1 ミリ秒だけ必芁ずする察話型タスク B) でアルゎリズムがどのように機胜するかを瀺したす。
I/O プロセスず長時間実行されるゞョブ A。CPU の䜿甚にすべおの時間を費やしたす。
MLFQ はプロセス B を継続するため、最高の優先床を維持したす。
CPUを解攟したす。 B が察話型タスクの堎合、アルゎリズムは次のこずを達成したす。
その目的は、察話型タスクを迅速に起動するこずです。

珟圚の MLFQ アルゎリズムの問​​題点

前の䟋では、MLFQ の基本バヌゞョンを構築したした。 そしお圌はどうやら
その仕事は適切か぀公平に実行され、CPU 時間を公平に分配したす。
長時間のタスクず、短時間たたは倧量のタスクの実行が可胜
高速に凊理するために I/O に転送したす。 残念ながら、このアプロヌチにはいく぀かの芁玠が含たれおいたす。
深刻な問題。
たず第䞀に、飢逓の問題: システムに倚くのむンタラクティブ機胜がある堎合
タスクを実行するず、すべおの CPU 時間を消費するため、単䞀の長い時間はかかりたせん。
タスクは実行される機䌚がありたせん (タスクは飢えおいたす)。

第二に、賢いナヌザヌは次のようにプログラムを曞くこずができたす。
スケゞュヌラをバカにする。 欺瞞ずは、䜕かを匷制するこずにある
スケゞュヌラを䜿甚しおプロセスにさらに倚くの CPU 時間を䞎えたす。 そのアルゎリズムは、
䞊で説明したものは、そのような攻撃に察しお非垞に脆匱です。぀たり、時間枠が実質的に満たされる前に、
以䞊、(どのファむルであっおも) I/O 操䜜を実行する必芁がありたす。
したがっお、CPU が解攟されたす。 そのような行動により、同じ状態に留たるこずができたす
キュヌ自䜓を凊理し、再び CPU 時間のより倧きな割合を取埗したす。 完了したら
これは正しいです (たずえば、CPU を解攟する前にりィンドり時間の 99% を実行したす)。
このようなタスクは単にプロセッサを独占する可胜性がありたす。

最埌に、プログラムは時間の経過ずずもに動䜜を倉えるこずができたす。 それらのタスク
CPU を䜿甚したものはむンタラクティブになる可胜性がありたす。 この䟋では、同様の
タスクは、他のタスクずは異なり、スケゞュヌラから適切な凊理を受けたせん。
(オリゞナルの) むンタラクティブなタスク。

聎衆ぞの質問: 珟代䞖界ではスケゞュヌラに察しおどのような攻撃が行われる可胜性がありたすか?

詊み 2: 優先床を䞊げる

ルヌルを倉曎しお、問題を回避できるかどうか詊しおみたしょう。
飢逓。 関連性を確保するために䜕ができるか
CPU タスクには (長くない堎合でも) 時間がかかりたす。
問題の簡単な解決策ずしお、定期的に提案するこずができたす。
システム内のそのようなすべおのタスクの優先順䜍を䞊げたす。 たくさんの方法がありたす
これを実珟するために、䟋ずしお簡単なものを実装しおみたしょう。
すべおのタスクには盎ちに最高の優先順䜍が䞎えられるため、新しいルヌルは次のようになりたす。

  • Rule5: 䞀定期間 S の埌、システム内のすべおのタスクを最䞊䜍のキュヌに転送したす。

私たちの新しいルヌルは XNUMX ぀の問題を䞀床に解決したす。 たず、プロセス
飢えないこずが保蚌されおいたす: 最も高いキュヌにあるタスクは共有されたす
RR アルゎリズムに埓っおプロセッサヌ時間を蚭定するため、すべおのプロセスは
プロセッサヌ時間。 次に、以前に䜿甚しおいたプロセスがある堎合、
プロセッサのみが察話型になり、最も高いプロセッサのキュヌに残りたす。
䞀床最高優先床ぞのブヌストを受けた埌の優先床。
䟋を考えおみたしょう。 このシナリオでは、次を䜿甚する単䞀プロセスを怜蚎したす。
オペレヌティング システム: 5 ぀の簡単な芁玠。 パヌト XNUMX: 蚈画: マルチレベルのフィヌドバック キュヌ (翻蚳)

CPU ず 50 ぀の察話型の短いプロセス。 図の巊偎は、優先順䜍をブヌストしない堎合の動䜜を瀺しおいるため、50 ぀の察話型タスクがシステムに到着した埌、長時間実行されおいるタスクが停止し始めたす。 右の図では、XNUMX ミリ秒ごずに優先床の増加が実行されるため、すべおのプロセスがプロセッサヌ時間を受け取るこずが保蚌され、定期的に開始されたす。 この堎合の XNUMXms は䟋ずしお挙げおいたすが、実際にはこの数倀はもう少し倧きくなりたす。
呚期的な立ち䞊がり時間 S を远加するず、次の結果が埗られるこずは明らかです。
論理的な質問: どのような倀を蚭定する必芁がありたすか? 圓然のこずの XNUMX ぀
システム゚ンゞニアのゞョン・オヌスタヌハりトは、システム内の同様の量をブヌドゥヌず呌んでいたした。
正しいものを埗るには䜕らかの圢で黒魔術が必芁だったため、䞀定です。
暎露。 そしお、残念なこずに、Sにはそのような味がありたす。 倀も蚭定した堎合
倧きい - 長いタスクは枯枇したす。 たた、蚭定を䜎くしすぎるず、
察話型タスクは適切な CPU 時間を受け取りたせん。

詊み 3: 䌚蚈の改善

さお、解決すべき問題がもう XNUMX ぀ありたす。
私たちのスケゞュヌラヌがだたされるのを蚱しおください? この可胜性に぀いお責任を負うのは次の人々です
プロセッサを解攟するこずでゞョブの優先順䜍を維持できるようにするルヌル 4a、4b
割り圓おられた時間が経過する前に。 どうやっお察凊すればいいのでしょうか
この堎合の解決策は、それぞれの CPU 時間をより適切に蚈算するこずであるず考えるこずができたす。
MLFQレベル。 プログラムが䜿甚した時間を忘れる代わりに
プロセッサに割り圓おられた間隔を䜿甚する必芁がある堎合は、それを考慮しお保存する必芁がありたす。 埌
プロセスは割り圓おられた時間を䜿い果たしたので、次のプロセスに降栌する必芁がありたす
優先レベル。 今では、プロセスがどのように時間を䜿うかは問題ではありたせん。
プロセッサ䞊で、たたは䞀連の呌び出しずしお垞に蚈算されたす。 したがっお、
ルヌル 4 は次のように曞き換える必芁がありたす。

  • Rule4: タスクが珟圚のキュヌに割り圓おられた時間を䜿い果たすず (䜕床 CPU を解攟したかに関係なく)、そのタスクの優先床は䞋がりたす (キュヌの䞋に移動したす)。

䟋を芋おみたしょう:
オペレヌティング システム: 5 ぀の簡単な芁玠。 パヌト XNUMX: 蚈画: マルチレベルのフィヌドバック キュヌ (翻蚳)»

この図は、次のようにスケゞュヌラを隙そうずした堎合に䜕が起こるかを瀺しおいたす。
以前のルヌル 4a、4b を䜿甚した堎合は、巊の結果が埗られたす。 おめでずうございたす
ルヌルは結果が右偎にあるずいうこずです。 保護される前は、どのプロセスも完了前に I/O を呌び出すこずができ、
したがっお、保護を有効にした埌は、動䜜に関係なく CPU を支配したす。
I/O、圌はただキュヌに残っおいるため、䞍正にアクセスするこずはできたせん。
CPUリ゜ヌスを匕き継ぎたす。

MLFQ およびその他の問題の改善

䞊蚘の改善により、新たな問題が発生したす。
質問 - このようなスケゞュヌラをパラメヌタ化するにはどうすればよいですか? それらの。 いくらあるべきか
行列 キュヌ内のプログラム りィンドりのサむズはどれくらいにすべきでしょうか? どうやっお
倚くの堎合、飢逓を避けるためにプログラムを優先する必芁がありたす。
プログラムの動䜜の倉化を考慮するには? これらの質問に察しお、単玔な答えはありたせん
応答ず、負荷ずその埌の構成の実隓のみ
スケゞュヌラを䜿甚するず、ある皋床満足のいくバランスが埗られたす。

たずえば、ほずんどの MLFQ 実装では、異なる倀を割り圓おるこずができたす。
さたざたなキュヌの時間間隔。 通垞、優先床の高いキュヌ
短い間隔。 これらのキュヌは察話型タスクで構成されたす。
どちらの切り替えは非垞に繊现であり、10 以䞋の時間がかかるはずです
MS。 察照的に、優先床の䜎いキュヌは、次のような長時間実行タスクで構成されたす。
CPU。 この堎合、長い時間間隔 (100 ミリ秒) が非垞によく適合したす。
オペレヌティング システム: 5 ぀の簡単な芁玠。 パヌト XNUMX: 蚈画: マルチレベルのフィヌドバック キュヌ (翻蚳)

この䟋では、高優先床キュヌ 2 で動䜜しおいるタスクが 20 ぀ありたす。
ms を 10ms りィンドりに分割したす。 䞭間キュヌ (40 ミリ秒りィンドり) および䜎優先床キュヌで 20 ミリ秒
タスクが䜜業を完了するキュヌ タむム りィンドりが 40 ミリ秒になりたした。

Solaris OS での MLFQ の実装は、タむムシェアリング スケゞュヌラのクラスです。
プランナヌは、必芁なずおりに正確に定矩する䞀連のテヌブルを提䟛したす。
プロセスの存続期間党䜓にわたっおプロセスの優先順䜍を倉曎したす。サむズはどのくらいにすべきですか
割り圓おられたりィンドりず、タスクの優先順䜍を䞊げる必芁がある頻床。 管理者
システムはこのテヌブルず察話し、スケゞュヌラを動䜜させるこずができたす
違う。 デフォルトでは、このテヌブルには 60 個のキュヌがあり、埐々に増加したす。
りィンドり サむズは 20 ミリ秒 (優先床が高い) から数癟ミリ秒 (優先床が最も䜎い)、
たた、すべおのタスクを XNUMX 秒に XNUMX 回ブヌストしたす。

他の MLFQ スケゞュヌラは、テヌブルや特定のテヌブルを䜿甚したせん。
この講矩で説明するルヌルは、逆に、以䞋を䜿甚しお優先床を蚈算したす。
数匏。 たずえば、FreeBSD のスケゞュヌラは次の匏を䜿甚したす。
プロセスにかかる時間に基づいおタスクの珟圚の優先床を蚈算する
䜿甚したCPU。 さらに、CPU 䜿甚率は時間の経過ずずもに䜎䞋するため、
したがっお、優先床の増加は䞊蚘ずは倚少異なりたす。 これは本圓です
枛衰アルゎリズムず呌ばれたす。 バヌゞョン 7.1 以降、FreeBSD は ULE スケゞュヌラを䜿甚したす。

最埌に、倚くのスケゞュヌラには他の機胜もありたす。 たずえば、いく぀かの
スケゞュヌラはオペレヌティング システムの動䜜のために最高レベルを予玄するため、
したがっお、どのナヌザヌプロセスも最高の優先順䜍を取埗できたせん。
システム。 䞀郚のシステムでは、圹立぀アドバむスを提䟛できたす
スケゞュヌラが正しく優先順䜍を付けたす。 たずえば、次のコマンドを䜿甚するず、 nice
タスクの優先床を増枛できるため、増枛するこずができたす。
プログラムが CPU 時間を費やす可胜性を枛らしたす。

MLFQ: 抂芁

MLFQ ず呌ばれる蚈画アプロヌチに぀いお説明したした。 圌の名前
動䜜原理で結論付けられおいたす - いく぀かのキュヌがあり、フィヌドバックを䜿甚したす
タスクに優先順䜍を付けるため。
ルヌルの最終的な圢匏は次のようになりたす。

  • Rule1: 優先床(A) > 優先床(B) の堎合、タスク A が実行されたす (B は実行されたせん)。
  • Rule2: 優先床(A) = 優先床(B)の堎合、RRを䜿甚しおA&Bが開始されたす。
  • Rule3: タスクがシステムに入力されるず、そのタスクは最も優先床の高いキュヌに配眮されたす。
  • Rule4: タスクが珟圚のキュヌに割り圓おられた時間を䜿い果たすず (䜕床 CPU を解攟したかに関係なく)、そのタスクの優先床は䞋がりたす (キュヌの䞋に移動したす)。
  • Rule5: 䞀定期間 S の埌、システム内のすべおのタスクを最䞊䜍のキュヌに転送したす。

MLFQ が興味深いのは、次の理由からです。
タスクの性質を事前に孊習し、アルゎリズムがタスクの過去の動䜜を孊習し、
それに応じお優先順䜍が付けられたす。 したがっお、圌は䞀床に XNUMX ぀の怅子に座ろうずしたす - 小さなタスク (SJF、STCF) の生産性を達成し、正盎に長く走るために、
CPU 負荷の高いゞョブ。 したがっお、BSD ずその掟生システムを含む倚くのシステムは、
Solaris、Windows、Mac はスケゞュヌラずしお䜕らかのアルゎリズムを䜿甚したす
ベヌスラむンずしおの MLFQ。

远加の資料

  1. manpages.debian.org/stretch/manpages/sched.7.en.html
  2. en.wikipedia.org/wiki/Scheduling_コンピュヌティング
  3. Pages.lip6.fr/Julia.Lawall/atc18-bouron.pdf
  4. www.usenix.org/legacy/event/bsdcon03/tech/full_papers/roberson/roberson.pdf
  5. chebykin.org/freebsd-process-scheduling

出所 habr.com

コメントを远加したす