オペレヌティング システム: 1 ぀の簡単な芁玠。 パヌト XNUMX: むントロ (翻蚳)

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

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

このテヌマに関するラボの䜜業は、次の堎所にありたす。
- オリゞナル Pages.cs.wisc.edu/~remzi/OSTEP/宿題/宿題.html
- オリゞナル github.com/remzi-arpacidusseau/ostep-code
- 私の個人的な適応: github.com/bykvaadm/OS/tree/master/ostep

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

プログラム操䜜

プログラムの実行䞭に䜕が起こるでしょうか? 実行䞭のプログラムは、呜什を実行するずいう XNUMX ぀の単玔なこずを行いたす。 毎秒、数癟䞇、堎合によっおは数十億の呜什がプロセッサによっお RAM から取埗され、順番にそれらの呜什がデコヌドされ (たずえば、これらの呜什がどのタむプに属しおいるかを認識し)、実行されたす。 これには、XNUMX ぀の数倀の加算、メモリぞのアクセス、条件のチェック、関数ぞのゞャンプなどが考えられたす。 XNUMX ぀の呜什の実行埌、プロセッサは別の呜什の実行に進みたす。 そしお、プログラムが終了するたで、次から次ぞず呜什が実行されたす。
この䟋は圓然簡略化されおいるず考えられたす。実際、プロセッサを高速化するために、最新のハヌドりェアでは呜什を順番に実行したり、考えられる結果を蚈算したり、呜什を同時に実行したり、同様のトリックを実行したりするこずができたす。

蚈算のフォン・ノむマンモデル

私たちが説明する単玔化された䜜業圢匏は、蚈算のフォン ノむマン モデルに䌌おいたす。 フォン・ノむマンはコンピュヌタ システムの先駆者の XNUMX 人であり、ゲヌム理論の著者の XNUMX 人でもありたす。。 プログラムの実行䞭に、他の倚くのむベントが発生し、他の倚くのプロセスやサヌドパヌティのロゞックが動䜜したす。その䞻な目的は、システムの起動、運甚、およびメンテナンスを簡玠化するこずです。
プログラムを簡単に実行できるようにする (たたは耇数のプログラムを同時に実行できるようにする) 䞀連の゜フトりェアがあり、プログラムが同じメモリを共有したり、異なるデバむスず通信したりできるようにしたす。 このような䞀連の゜フトりェア (゜フトりェア) は基本的にオペレヌティング システムず呌ばれ、そのタスクには、システムが正しく効率的に動䜜するこずを監芖するこずず、このシステムの管理を容易にするこずが含たれたす。

オペレヌティングシステム

オペレヌティング システム (OS ず略されたす) は、コンピュヌタ リ゜ヌスを管理し、コンピュヌタずのナヌザヌの察話を組織化するために蚭蚈された、盞互に関連するプログラムのセットです。.
OS は、最初に最も重芁な技術、぀たり技術を通じおその効果を発揮したす。 仮想化。 OS は物理リ゜ヌス (プロセッサ、メモリ、ディスクなど) ず察話し、それをより䞀般的で、より匷力で、䜿いやすい圢匏に倉換したす。 したがっお、䞀般的な理解のために、オペレヌティング システムず仮想マシンを非垞に倧たかに比范するこずができたす。
ナヌザヌがオペレヌティング システムにコマンドを䞎え、仮想マシンの機胜 (プログラムの実行、メモリの割り圓お、ファむルぞのアクセスなど) を䜿甚できるようにするために、オペレヌティング システムは次のむンタヌフェむスを提䟛したす。 API (アプリケヌション プログラミング むンタヌフェむス)、呌び出しを行うこずができたす (call)。 䞀般的なオペレヌティング システムでは、䜕癟ものシステム コヌルを実行できたす。
最埌に、仮想化により、耇数のプログラムの実行 (したがっお CPU の共有)、同時にそれらのプログラムの呜什ずデヌタぞのアクセス (したがっおメモリの共有)、およびディスクぞのアクセス (したがっお I/O デバむスの共有) が可胜になるため、オペレヌティング システムは、オペレヌティング システムずも呌ばれたす。リ゜ヌスマネヌゞャヌ。 各プロセッサ、ディスク、メモリはシステムのリ゜ヌスであるため、オペレヌティング システムの圹割の XNUMX ぀は、これらのリ゜ヌスを管理するタスクずなり、このオペレヌティング システムが実行するタスクに応じお、効率的か぀誠実に実行したり、その逆を実行したりするこずになりたす。蚭蚈されお。

CPU仮想化

次のプログラムを怜蚎しおください。
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

オペレヌティング システム: 1 ぀の簡単な芁玠。 パヌト XNUMX: むントロ (翻蚳)

特別なアクションは実行されたせん。実際、関数を呌び出すだけです。 スピン() のタスクは、時間チェックを繰り返し、XNUMX 秒経過埌に戻るこずです。 したがっお、ナヌザヌが匕数ずしお枡した文字列を無限に繰り返したす。
このプログラムを実行しお、文字「A」を匕数ずしお枡しおみたしょう。 結果は特に興味深いものではありたせん。システムは文字「A」を定期的に衚瀺するプログラムを実行するだけです。
次に、同じプログラムの倚数のむンスタンスが実行されおいるが、わかりやすくするために異なる文字を出力する堎合のオプションを詊しおみたしょう。 この堎合、結果は倚少異なりたす。 プロセッサが XNUMX ぀あるにもかかわらず、プログラムは同時に実行されたす。 それはどのようにしお起こるのでしょうか しかし、オペレヌティング システムがハヌドりェア機胜の助けなしには錯芚を生み出すこずが刀明したした。 システムに耇数の仮想プロセッサがあるかのように錯芚し、単䞀の物理プロセッサを理論的には無限の数に倉え、それによっお䞀芋プログラムを同時に実行できるようにしたす。 この錯芚はず呌ばれたす CPU仮想化.
この図からは倚くの疑問が生じたす。たずえば、耇数のプログラムを同時に実行したい堎合、どれが起動するのでしょうか? この質問には、OS の「ポリシヌ」が関䞎したす。 ポリシヌは OS のさたざたな堎所で䜿甚され、このような質問に答えたす。ポリシヌは、OS が実装する基本的なメカニズムです。 したがっお、OS はリ゜ヌス マネヌゞャヌずしおの圹割を果たしたす。

メモリ仮想化

次にメモリを芋おみたしょう。 最新のシステムにおけるメモリの物理モデルは、バむトの配列ずしお衚されたす。。 メモリから読み取るには、次のように指定する必芁がありたす セルアドレスアクセスするには。 デヌタを曞き蟌みたたは曎新するには、デヌタず、それを曞き蟌むセルのアドレスも指定する必芁がありたす。
プログラムの実行䞭、メモリは垞にアクセスされたす。 プログラムは、そのデヌタ構造党䜓をメモリに保存し、さたざたな呜什を実行するこずでそれにアクセスしたす。 䞀方、呜什はメモリにも保存されるため、次の呜什の芁求ごずにメモリにもアクセスされたす。

malloc() 呌び出し

次のプログラムを考えおみたしょう。このプログラムは、呌び出しを䜿甚しおメモリ領域を割り圓おたす。 malloc (https://youtu.be/jnlKRnoT1m0):

オペレヌティング システム: 1 ぀の簡単な芁玠。 パヌト XNUMX: むントロ (翻蚳)

プログラムはいく぀かのこずを行いたす。 たず、メモリを割り圓お (7 行目)、次に割り圓おられたセルのアドレスを出力し (9 行目)、割り圓おられたメモリの最初のスロットに XNUMX を曞き蟌みたす。 次に、プログラムはルヌプに入り、メモリ内の倉数「p」のアドレスに栌玍されおいる倀をむンクリメントしたす。 たた、それ自䜓のプロセス ID も出力したす。 プロセス ID は実行䞭のプロセスごずに䞀意です。 いく぀かのコピヌを起動するず、興味深い結果に遭遇したす。最初のケヌスでは、䜕もせずに単にいく぀かのコピヌを実行するず、アドレスが異なりたす。 しかし、これは私たちの理論には圓おはたりたせん。 正解です。最新のディストリビュヌションではメモリのランダム化がデフォルトで有効になっおいたす。 無効にするず、期埅どおりの結果が埗られたす。同時に実行されおいる XNUMX ぀のプログラムのメモリ アドレスが䞀臎したす。

オペレヌティング システム: 1 ぀の簡単な芁玠。 パヌト XNUMX: むントロ (翻蚳)

その結果、XNUMX ぀の独立したプログラムが独自のプラむベヌト アドレス空間で動䜜し、オペレヌティング システムによっお物理メモリにマッピングされるこずが刀明したした。。 したがっお、あるプログラム内でのメモリ アドレスの䜿甚は他のプログラムにいかなる圱響も䞎えず、各プログラムには、完党に䞎えられた独自の物理メモリがあるように芋えたす。 しかし実際には、物理​​メモリはオペレヌティング システムによっお管理される共有リ゜ヌスです。

䞀貫性

オペレヌティングシステム内のもうXNUMX぀の重芁なトピックは- 䞀貫性。 この甚語は、同じプログラム内で同時に倚くのものを操䜜するずきに発生する可胜性のあるシステムの問題に぀いお話すずきに䜿甚されたす。 䞀貫性の問題は、オペレヌティング システム自䜓の内郚でも発生したす。 前のメモリずプロセッサの仮想化の䟋では、OS が最初のプロセスを開始し、次に XNUMX 番目のプロセスを開始するなど、倚くのこずを同時に管理しおいるこずがわかりたした。 結局のずころ、この動䜜はいく぀かの問題を匕き起こす可胜性がありたす。 したがっお、たずえば、最新のマルチスレッド プログラムではそのような問題が発生したす。

次のプログラムを怜蚎しおください。

オペレヌティング システム: 1 ぀の簡単な芁玠。 パヌト XNUMX: むントロ (翻蚳)

main 関数のプログラムは、次の呌び出しを䜿甚しお XNUMX ぀のスレッドを䜜成したす。 pthread_create()。 この䟋では、スレッドは、他の関数ず䞊んで同じメモリ空間で実行される関数ずしお考えるこずができ、明らかに耇数の関数が同時に実行されたす。 この䟋では、各スレッドが関数を開始しお実行したす。 worker() は単に倉数をむンクリメントしたす。,.

このプログラムを匕数 1000 で実行しおみたしょう。ご想像のずおり、各スレッドが倉数を 2000 回むンクリメントしたため、結果は 1000 になるはずです。 ただし、すべおがそれほど単玔ではありたせん。 桁違いに倚くの繰り返しでプログラムを実行しおみたしょう。

オペレヌティング システム: 1 ぀の簡単な芁玠。 パヌト XNUMX: むントロ (翻蚳)

たずえば、100000 ずいう数倀を入力するず、出力は 200000 ずいう数倀になるこずが期埅されたす。しかし、100000 ずいう数倀を数回実行するず、正解が衚瀺されないだけでなく、異なる䞍正解が埗られたす。 答えは、数倀を増やすには、メモリから数倀を抜出し、むンクリメントし、数倀を曞き戻すずいう XNUMX ぀の操䜜が必芁であるずいう事実にありたす。 これらすべおの呜什はアトミックに (すべお同時に) 実行されるわけではないため、このような奇劙なこずが発生する可胜性がありたす。 この問題はプログラミングで呌ばれたす 競合状態。 未知の瞬間に未知の力があらゆる操䜜のパフォヌマンスに圱響を䞎える可胜性があるずき。

出所 habr.com

コメントを远加したす