オペレヌティングシステム3぀の簡単なピヌス。 パヌト5蚈画マルチレベルフィヌドバックキュヌ翻蚳

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



こんにちは、Habr 私の考えでは、OSTEPずいう興味深い文献の䞀連の翻蚳蚘事に泚目したいず思いたす。 この蚘事では、unixに䌌たオペレヌティングシステムの動䜜、぀たり、プロセス、さたざたなスケゞュヌラ、メモリ、および珟代のOSを構成する他の同様のコンポヌネントの動䜜に぀いお詳しく説明したす。 ここで芋るこずができるすべおの資料のオリゞナル。 翻蚳は専門的ではない非垞に自由に行われたしたが、䞀般的な意味を保持したいず思いたす。



このテヌマの実隓宀の仕事はここで芋぀けるこずができたす





その他の郚品





そしお、あなたは電報で私のチャンネルを芋るこずができたす=



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



この講矩では、最も有名なアプロヌチの1぀を開発する問題に぀いお説明したす。

マルチレベルフィヌドバックキュヌ MLFQず呌ばれる蚈画。 MLFQスケゞュヌラヌは、1962幎にFernando J.CorbatóによっおCompatible Time-Sharing SystemCTSSず呌ばれるシステムで初めお説明されたした。 これらの䜜品Multicsに関する埌の䜜品を含むは、その埌チュヌリング賞に提出されたした。 スケゞュヌラはその埌改善され、䞀郚の最新システムですでに芋られる倖芳を獲埗したした。



MLFQアルゎリズムは、2぀の基本的な暪断的な問題を解決しようずしたす。

最初に 、圌はタヌンアラりンド時間の最適化を詊みたす。これは、前の講矩で怜蚎したように、最短タスクのキュヌの先頭から開始するこずにより最適化されたす。 ただし、OSはこのプロセスたたはそのプロセスがどのくらいの期間機胜するかを知りたせん。これは、SJF、STCFアルゎリズムの操䜜に必芁な知識です。 次に 、MLFQはシステムナヌザヌがタスクの完了を埅っおいる間に座っお画面を芋぀めおいるナヌザヌなどにシステムを応答させ、応答時間を最小化しようずしおいたす。 残念ながら、RRのようなアルゎリズムは応答時間を短瞮したすが、タヌンアラりンドタむムメトリックに非垞に悪い圱響を及がしたす。 したがっお、私たちの問題芁件を満たし、同時にプロセスの性質に぀いお䜕も知らないスケゞュヌラを䞀般的にどのように蚭蚈するのでしょうか スケゞュヌラヌは、起動するタスクの特性をどのようにしお孊習し、それにより、より良い蚈画決定を䞋すこずができたすか



問題の本質完党な知識なしにタスクの定匏化を蚈画する方法は 察話型タスクの応答時間を最小化するず同時に、タスクを完了する時間を知らずに所芁時間を最小化するスケゞュヌラを開発する方法は



泚以前のむベントから孊ぶ



MLFQラむンナップは、過去のむベントから孊習しお未来を予枬するシステムの優れた䟋です。 OSおよびハヌドりェア予枬ブランチやキャッシングアルゎリズムを含むコンピュヌタヌサむ゚ンスの他の倚くのブランチでも、同様のアプロヌチがよく芋られたす。 タスクに行動段階があり、したがっお予枬可胜な堎合、同様の旅行が機胜したす。



ただし、そのような手法には泚意が必芁です。予枬が非垞に簡単に間違っおいるこずが刀明し、システムがたったく知識を持たない堎合よりも悪い刀断を䞋す可胜性があるためです。



MLFQ基本ルヌル



MLFQアルゎリズムの基本的なルヌルを考慮しおください。 このアルゎリズムにはいく぀かの実装がありたすが、基本的なアプロヌチは䌌おいたす。



怜蚎する実装では、MLFQにいく぀かの個別のキュヌがあり、それぞれが異なる優先床を持ちたす。 い぀でも実行可胜なタスクは1぀のキュヌにありたす。 MLFQは優先順䜍を䜿甚しお、実行するタスクを決定したす。 優先床の高いタスク優先床の高いキュヌからのタスクが最初に起動されたす。



間違いなく、耇数のタスクが特定のキュヌに存圚する可胜性があるため、それらのタスクの優先順䜍は同じです。 この堎合、RR゚ンゞンを䜿甚しお、これらのタスク間の起動をスケゞュヌルしたす。



したがっお、MLFQの2぀の基本的なルヌルになりたす。





䞊蚘に基づいお、MLFQ蚈画の重芁な芁玠は優先事項です。 MLFQは、各タスクに固定の優先床を蚭定する代わりに、芳察された動䜜に応じお優先床を倉曎したす。



たずえば、キヌボヌド入力を埅機しおいる間にタスクがCPUでの䜜業を絶えず終了する堎合、MLFQは察話型プロセスの動䜜方法であるため、プロセスの優先床を高いレベルに維持したす。 それどころか、タスクが長期間にわたっおCPUを絶えず集䞭的に䜿甚しおいる堎合、MLFQは優先順䜍を䞋げたす。 したがっお、MLFQはプロセスの動䜜時の動䜜を調査し、その動䜜を䜿甚したす。



ある時点でキュヌがどのように芋えるか䟋を瀺しおみたしょう。その埌、次のような結果が埗られたす。



画像



このスキヌムでは、2぀のプロセスAずBが最高の優先床でキュヌにありたす。 プロセスCは䞭間のどこかにあり、プロセスDはキュヌの最埌にありたす。 䞊蚘のMLFQアルゎリズムの説明によれば、スケゞュヌラはRRに埓っお最高の優先床でのみタスクを実行し、タスクC、Dは動䜜しなくなりたす。



圓然、静的なスナップショットでは、MLFQがどのように機胜するかを完党に把握するこずはできたせん。

時間の経過ずずもに画像がどのように倉化するかを正確に理解するこずが重芁です。



è©Šè¡Œ1優先床を倉曎する方法



この時点で、ラむフサむクル䞭にMLFQがタスクの優先床レベルおよびキュヌ内のタスクの䜍眮をどのように倉曎するかを決定する必芁がありたす。 これを行うには、ワヌクフロヌを芚えおおく必芁がありたす短い実行時間したがっおCPUの頻繁なリリヌスを持぀倚数の察話型タスクず、CPUをすべおの䜜業時間で䜿甚するいく぀かの長いタスクですが、そのようなタスクの応答時間は重芁ではありたせん。 したがっお、次のルヌルを䜿甚しおMLFQアルゎリズムを実装する最初の詊行を行うこずができたす。





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



この䟋でわかるように、入堎時のタスクは最高の優先床で提瀺されたす。 10ミリ秒のタむムりィンドりの埌、スケゞュヌラによっおプロセスの優先床が䞋げられたす。 次の時間枠の埌、タスクは最終的にシステム内で最も䜎い優先床に萜ち、そこで残りたす。







䟋2圌らは短いタスクを持ち出したした



次に、MLFQがSJFに近づこうずする方法の䟋を芋おみたしょう。 この䟋には2぀のタスクがありたす。AはCPUを垞に占有する長時間実行されるタスクであり、Bは短い察話型タスクです。 タスクBが到着するたでに、Aがすでにしばらく働いおいたずしたす。







スクリプトの結果は、このグラフに衚瀺されたす。 タスクAは、CPUを䜿甚する他のタスクず同様に、䞀番䞋にありたす。 タスクBはT = 100に到着し、優先床が最も高いキュヌに配眮されたす。 圌女の䜜品の時間は短いため、最終段階に達する前に終了したす。



この䟋から、アルゎリズムの䞻な目暙を理解する必芁がありたす。アルゎリズムは長いタスクや短いタスクを知らないため、たずタスクが短いず仮定し、最高の優先順䜍を䞎えたす。 これが本圓に短いタスクである堎合、それはすぐに完了したす。そうでない堎合、それが長いタスクである堎合、優先床がゆっくり䞋に移動し、すぐに応答を必芁ずしない本圓に長いタスクであるこずを蚌明したす。



䟋3I / Oはどうですか



次に、I / Oの䟋を芋おみたしょう。 ルヌル4bで述べたように、プロセスがプロセッサ時間を完党に利甚せずにプロセッサを解攟した堎合、プロセスは同じ優先床レベルのたたです。 このルヌルの意図は非垞に単玔です。たずえば、ナヌザヌがキヌたたはマりスを抌すのを埅぀など、察話型タスクが倚数のI / O操䜜を実行する堎合、そのようなタスクは割り圓おられたりィンドりの前にプロセッサを解攟したす。 このようなタスクを優先しお省略したくないため、同じレベルのたたになりたす。







この䟋は、このようなプロセスでアルゎリズムがどのように機胜するかを瀺しおいたす。I/ Oプロセスを実行する前に1msだけCPUを必芁ずする察話型タスクBず、垞にCPUを䜿甚する長いタスクAです。



MLFQは垞に継続するため、プロセスBを最高の優先床で保持したす。

CPUを解攟したす。 Bが察話型タスクの堎合、アルゎリズムは察話型タスクをすばやく起動するずいう目暙を達成したした。



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



前の䟋では、MLFQの基本バヌゞョンを構築したした。 そしお、長いタスク間でプロセッサ時間を誠実に分配し、短いタスクや集䞭的にI / Oにアクセスするタスクが迅速に動䜜できるように、うたく、正盎に仕事をしおいるようです。 残念ながら、このアプロヌチにはいく぀かの重倧な問題がありたす。



たず 、空腹の問題システムに倚くの察話型タスクがある堎合、それらはすべおのプロセッサヌ時間を消費するため、単䞀の長いタスクを実行できたせん飢えおいたす。



第二に 、賢いナヌザヌは自分のプログラムを曞いお、

プランナヌをだたす。 トリックは䜕かをするこずです

プロセスにより倚くのプロセッサ時間を䞎えるスケゞュヌラ。 アルゎリズム

䞊蚘のような攻撃は、このような攻撃に察しお非垞に脆匱です時間枠が実質的に切れる前

I / O操䜜を実行する必芁がありたしたどのファむルに関係なく、䞀郚に察しお

したがっお、CPUを解攟したす。 この動䜜により、同じ状態を保぀こずができたす

キュヌ自䜓もCPU時間の割合が倧きくなりたす。 完了したら

これは正しいですたずえば、CPUを解攟する前のりィンドり時間の99

そのようなタスクは、プロセッサを単玔に独占できたす。



最埌に、プログラムは時間ずずもにその動䜜を倉曎できたす。 それらのタスク

CPUを䜿甚したナヌザヌはむンタラクティブになりたす。 この䟋では、同様の

他の人が受け取るように、タスクはスケゞュヌラから適切な凊理を受けたせん

初期察話型タスク。



聎衆ぞの質問珟代䞖界では、プランナヌに察するどんな攻撃が可胜でしょうか



è©Šè¡Œ2優先床を䞊げる





ルヌルを倉曎しお、問題を回避できるかどうかを確認したしょう

断食。 その関連性を確保するために私たちにできるこず

CPUタスクは時間を取埗したす長くない堎合でも。

問題の簡単な解決策ずしお、定期的に提䟛するこずができたす

システム内のそのようなすべおのタスクの優先床を䞊げたす。 倚くの方法がありたす。

これを達成するために、䟋ずしお簡単なものを翻蚳しおみたしょう翻蚳

すべおのタスクを䞀床に最高の優先床で、したがっお新しいルヌル



新しいルヌルは、2぀の問題を同時に解決したす。 たず、プロセス

飢えないこずを保蚌最も優先床の高いタスクが共有されたす

RRアルゎリズムによるプロセッサ時間、したがっおすべおのプロセスが受信したす

プロセッサヌ時間。 第二に、以前に䜿甚したプロセスがある堎合

プロセッサのみがむンタラクティブになり、より高いプロセッサず䞀臎したたたになりたす

優先床が䞀床高くなるず、優先床が最も高くなりたす。

䟋を考えおみたしょう。 このシナリオでは、1぀のプロセスを䜿甚しお怜蚎したす





CPUず2぀の察話型の短いプロセス。 図の巊偎の図は、優先順䜍を䞊げない堎合の動䜜を瀺しおいるため、2぀の察話型タスクがシステムに到着した埌、長いタスクは飢え始めたす。 右偎の図では、50ミリ秒ごずに優先床が䞊がるため、すべおのプロセスがプロセッサ時間を受け取るこずが保蚌され、定期的に開始されたす。 この堎合の50ミリ秒が䟋ずしお採甚されおいたすが、実際にはこの数はいくぶん倧きいです。

明らかに、Sの呚期的な増加期間の远加は、

論理的な質問どの倀を蚭定する必芁がありたすか 名誉ある

システム゚ンゞニアのJohn Ousterhoutは、voo-dooのようなシステムで同様の量を呌び出したした

圌らは䜕らかの方法で正しいために黒魔術を必芁ずしたため、定数

出品䞭。 残念ながら、Sにはそのような銙りがありたす。 倀も蚭定した堎合

倧きな-長いタスクは飢え始めたす。 蚭定した倀が䜎すぎるず、

むンタラクティブなタスクは、適切なプロセッサ時間を受け取りたせん。



è©Šè¡Œ3ベストアカりンティング





解決する必芁があるもう1぀の問題がありたす。

プランナヌをcheしたしょうか この機䌚の有眪は

ルヌル4a、4b。タスクが優先床を維持し、プロセッサを解攟できるようにしたす

割り圓おられた時間の満了前。 これに察凊する方法は

この堎合の゜リュヌションは、それぞれのCPU時間の最適なアカりンティングず芋なすこずができたす

MLFQレベル。 プログラムが䜿甚した時間を忘れる代わりに

割り圓おられた期間のプロセッサ、それを考慮し、保存する必芁がありたす。 埌

プロセスに費やされた時間は次の時間に短瞮されるべきです

優先レベル。 プロセスがその時間をどのように䜿甚するかに関係なく-どのように

絶えずプロセッサヌ䞊で蚈算するか、同じくらい倚くの呌び出し。 このように

ルヌル4は次のように曞き換える必芁がありたす。





䟋を芋おみたしょう

」



この図は、スケゞュヌラをだたそうずするずどうなるかを瀺しおいたす。

前のルヌル4a、4bであった堎合、巊偎に結果が衚瀺されたす。 ハッピヌニュヌ

ルヌルは右偎の結果です。 保護の前に、プロセスは完了たでI / Oを呌び出し、

したがっお、動䜜に関係なく、保護を有効にした埌、CPUを支配したす

I / O、それはただラむンをドロップダりンし、したがっお䞍正ではありたせん

CPUリ゜ヌスを占有したす。



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



䞊蚘の改善により、新しい問題が発生したす。

質問-そのようなスケゞュヌラをパラメヌタ化する方法は ぀たり いくらですか

バヌスト キュヌ内のプログラムりィンドりのサむズはどれくらいですか どうやっお

飢starを避けるために、プログラムの優先床を䞊げる必芁がありたす。

プログラムの動䜜の倉化を考慮したすか これらの質問には、簡単なこずはありたせん

応答ず、負荷およびその埌の蚭定による実隓のみ

蚈画者は、満足のいくバランスをずるこずができたす。



たずえば、ほずんどのMLFQ実装では、異なる

異なるキュヌぞの時間間隔。 通垞、高優先床キュヌ

短い間隔が割り圓おられたす。 これらのキュヌはむンタラクティブなタスクで構成され、

切り替えは非垞に敏感であり、10以䞋を芁する

ミリ秒 察照的に、䜎優先床キュヌは、次を䜿甚する長いタスクで構成されたす

CPU この堎合、長い時間間隔は非垞にうたく適合したす100ミリ秒。





この䟋では、高優先床キュヌで機胜する2぀のタスクがありたす20

ミリ秒、10ミリ秒間Windowsで砎損。 䞭皋床のキュヌ20msのりィンドりおよび䜎優先床で40ms

キュヌ時間枠は40ミリ秒になり、タスクが䜜業を完了したした。



SolarisのMLFQ実装は、タむムシェアリングスケゞュヌラのクラスです。

スケゞュヌラヌは、どのようにすべきかを正確に決定するテヌブルのセットを提䟛したす

プロセスの存続期間の優先床を倉曎したす。サむズはどうあるべきですか

遞択したりィンドりず、タスクの優先床を䞊げる必芁がある頻床。 管理者

システムはこのテヌブルず察話しお、スケゞュヌラを動䜜させるこずができたす

別の方法で。 デフォルトでは、このテヌブルには60個の増分キュヌがありたす。

20ミリ秒高優先床から数癟ミリ秒最䜎優先床のりィンドりサむズ

たた、すべおのタスクが1秒に1回ブヌストされたす。



他のMLFQプランナヌは、テヌブルたたは特定の

この講矩で説明されおいるルヌルは、逆に、

数匏。 そのため、たずえば、FreeBSDのスケゞュヌラは次の匏を䜿甚したす

プロセスの量に基づいおタスクの珟圚の優先床を蚈算する

䜿甚されたCPU。 さらに、CPUの䜿甚は時間ずずもに枛衰するため、

したがっお、優先床の増加は、䞊蚘ずは倚少異なりたす。 そうです

枛衰アルゎリズムず呌ばれたす。 バヌゞョン7.1以降、FreeBSDはULEスケゞュヌラを䜿甚しおいたす。



最埌に、倚くのプランナヌには他の機胜がありたす。 たずえば、

スケゞュヌラは、オペレヌティングシステムの最高レベルを予玄したす。

そのため、どのナヌザヌプロセスも最高の優先床を埗るこずができたせん

システム。 䞀郚のシステムでは、支揎するためにアドバむスを提䟛できたす。

スケゞュヌラヌが優先順䜍を正しく蚭定したす。 たずえば、 niceコマンドを䜿甚する

タスクの優先床を䞊げたり䞋げたりするこずができたす

プロセッサ時間のプログラムの可胜性を枛らしたす。

MLFQ抂芁



MLFQず呌ばれる蚈画アプロヌチに぀いお説明したした。 圌の名前

仕事の原則で結論-それはいく぀かのキュヌを持ち、フィヌドバックを䜿甚したす

タスクの優先床を決定したす。

ルヌルの最終圢匏は次のずおりです。



MLFQは次の理由で興味深い-の知識を芁求する代わりに

事前にタスクの性質、アルゎリズムはタスクの過去の動䜜を調査し、蚭定したす

それに応じお優先順䜍。 したがっお、圌は䞀床に2぀の怅子に座ろうずしたす-小さなタスク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



All Articles