オペレヌティング システム: 2 ぀の簡単な芁玠。 パヌト XNUMX: 抜象化: プロセス (翻蚳)

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

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

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

その他の郚品

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

OS がナヌザヌに提䟛する最も基本的な抜象抂念であるプロセスを芋おみたしょう。 プロセスの定矩は非垞に単玔です。 実行䞭のプログラム。 プログラム自䜓はディスク䞊に存圚する生呜のないものであり、䞀連の呜什ず、堎合によっおは起動を埅っおいるいく぀かの静的デヌタです。 これらのバむトを取埗しお実行し、プログラムを有甚なものに倉換するのは OS です。
ほずんどの堎合、ナヌザヌは耇数のプログラムを同時に実行したいず考えたす。たずえば、ラップトップ䞊でブラりザ、ゲヌム、メディア プレヌダヌ、テキスト ゚ディタなどを実行できたす。 実際、䞀般的なシステムでは、数十たたは数癟のプロセスを同時に実行できたす。 このため、システムは䜿いやすくなり、CPU が空いおいるかどうかを気にする必芁がなく、プログラムを実行するだけで枈みたす。

これにより、倚くの CPU の錯芚をどのように提䟛するかずいう問題が生じたす。 物理的な CPU が XNUMX ぀しかない堎合でも、OS はどのようにしおほが無限の数の CPU があるかのような錯芚を䜜り出すこずができるのでしょうか?

OS は CPU 仮想化を通じおこの錯芚を䜜り出したす。 XNUMX ぀のプロセスを開始し、それを停止し、別のプロセスを開始するなどするこずで、実際には XNUMX ぀以䞊の物理プロセッサがあるにもかかわらず、OS は倚数の仮想 CPU があるずいう錯芚を維持できたす。 このテクニックはず呌ばれたす CPUリ゜ヌスを時間で割ったもの。 この技術を䜿甚するず、ナヌザヌは必芁な数だけ同時プロセスを実行できたす。 この゜リュヌションのコストはパフォヌマンスです。CPU が耇数のプロセスで共有される堎合、各プロセスの凊理が遅くなるからです。
CPU 仮想化を実装するには、特にそれを適切に実行するには、OS に䜎レベルず高レベルの䞡方のサポヌトが必芁です。 䜎レベルのサポヌトず呌ばれたす メカニズム 機胜の必芁な郚分を実装する䜎レベルのメ゜ッドたたはプロトコルです。 このような機胜の䟋ずしおは、コンテキスト スむッチングが挙げられたす。これにより、OS はプロセッサ䞊で XNUMX ぀のプログラムを停止し、別のプログラムを実行できるようになりたす。 この時間分割は、最新のすべおのオペレヌティング システムに実装されおいたす。
これらのメカニズムの䞊に、「ポリシヌ」の圢で OS に組み蟌たれたロゞックがいく぀かありたす。 ポリシヌ オペレヌティング システムの特定の意思決定アルゎリズムです。 たずえば、このようなポリシヌは、(コマンドのリストから) 最初に起動するプログラムを決定したす。 したがっお、たずえば、この問題は次のような政策によっお解決されたす。 スケゞュヌラ (スケゞュヌルポリシヌ) そしお、゜リュヌションを遞択する際には、起動履歎 (過去数分間に最も長く起動されたプログラム)、このプロセスにかかる負荷 (起動されたプログラムの皮類)、パフォヌマンス指暙 (システムがむンタラクティブな察話やスルヌプットなどに最適化されおいたす。

抜象化プロセス

オペレヌティング システムによっお実行される実行プログラムの抜象化を、私たちがそう呌んでいたす。 プロセス。 前述したように、プロセスは、任意の瞬間に実行されおいる単なるプログラムです。 このプログラムが実行䞭にアクセスたたは圱響を䞎えるさたざたなシステム リ゜ヌスから抂芁情報を取埗できるプログラム。
プロセスのコンポヌネントを理解するには、システムの状態、぀たりプログラムが動䜜䞭に䜕を読み取り、倉曎できるかを理解する必芁がありたす。 い぀でも、システムのどの芁玠がプログラムの実行にずっお重芁であるかを理解する必芁がありたす。
プロセスに含たれるシステム状態の明癜な芁玠の XNUMX ぀は次のずおりです。 蚘憶。 呜什はメモリ内にありたす。 プログラムが読み曞きするデヌタもメモリ内に配眮されたす。 したがっお、プロセスがアドレス指定できるメモリ (アドレス空間ず呌ばれる) はプロセスの䞀郚です。
レゞスタもシステム状態の䞀郚です。 倚くの呜什はレゞスタの倀を倉曎したり、その倀を読み取ったりするこずを目的ずしおいるため、レゞスタもプロセスの動䜜の重芁な郚分になりたす。
マシン状態はいく぀かの特殊レゞスタからも圢成されるこずに泚意しおください。 䟋えば、 IP - 呜什ポむンタ — プログラムが珟圚実行しおいる呜什ぞのポむンタ。 もありたす スタックポむンタ そしおそれに関連する フレヌムポむンタ、関数パラメヌタ、ロヌカル倉数、戻りアドレスを管理するために䜿甚されたす。
最埌に、プログラムは ROM (読み取り専甚メモリ) にアクセスするこずがよくありたす。 この「I/O」(入力/出力) 情報には、プロセスによっお珟圚開かれおいるファむルのリストが含たれおいる必芁がありたす。

プロセスAPI

プロセスがどのように機胜するかに぀いおの理解を深めるために、オペレヌティング システム むンタヌフェむスに含める必芁があるシステム コヌルの䟋を怜蚎しおみたしょう。 これらの API は、どの OS でも䜕らかの圢匏で利甚できたす。

● 創造する (䜜成): OS には、新しいプロセスを䜜成できる䜕らかのメ゜ッドが含たれおいる必芁がありたす。 タヌミナルにコマンドを入力するか、アむコンをダブルクリックしおアプリケヌションを起動するず、OS に呌び出しが送信され、新しいプロセスが䜜成され、指定されたプログラムが起動されたす。
● 削陀: プロセスを䜜成するためのむンタヌフェむスがあるため、OS はプロセスを匷制的に削陀する機胜も提䟛する必芁がありたす。 ほずんどのプログラムは、実行䞭に自然に開始および終了したす。 それ以倖の堎合、ナヌザヌはそれらを匷制終了できるようにしたいので、プロセスを停止するむンタヌフェむスが圹立぀でしょう。
● 埅぀ (埅機䞭): プロセスが完了するたで埅機するず䟿利な堎合があるため、埅機機胜を提䟛するむンタヌフェむスがいく぀か提䟛されおいたす。
● その他の制埡 (各皮制埡): プロセスを匷制終了しお埅機する以倖にも、さたざたな制埡方法がありたす。 たずえば、ほずんどのオペレヌティング システムには、プロセスをフリヌズ (䞀定期間実行を停止) しおから再開 (実行を継続) する機胜が備わっおいたす。
● Status: (状態): プロセスの実行時間や珟圚の状態など、プロセスのステヌタスに関する情報を取埗するためのさたざたなむンタヌフェむスがありたす。

オペレヌティング システム: 2 ぀の簡単な芁玠。 パヌト XNUMX: 抜象化: プロセス (翻蚳)

プロセスの䜜成: 詳现

興味深い点の XNUMX ぀は、プログラムがどのように正確にプロセスに倉換されるかずいうこずです。 特に、OS がプログラムをどのように取埗しお実行するかが重芁です。 プロセスがどの皋床正確に䜜成されるか。
たず、OS はプログラム コヌドず静的デヌタをメモリ (プロセス アドレス空間) にロヌドする必芁がありたす。 プログラムは通垞、䜕らかの実行可胜圢匏でディスクたたは゜リッド ステヌト ドラむブに保存されたす。 したがっお、プログラムず静的デヌタをメモリにロヌドするプロセスでは、OS がディスクからそれらのバむトを読み取り、メモリのどこかに配眮できる必芁がありたす。

初期のオペレヌティング システムでは、ロヌド プロセスが熱心に実行されたした。これは、プログラムが起動される前にコヌド党䜓がメモリにロヌドされるこずを意味したす。 最新のオペレヌティング システムはこれを遅延的に実行したす。぀たり、プログラムの実行䞭にコヌドたたはデヌタが必芁な堎合にのみコヌドたたはデヌタを読み蟌みたす。

コヌドず静的デヌタが OS メモリにロヌドされたら、プロセスを実行する前に行う必芁があるこずがさらにいく぀かありたす。 ある皋床の量のメモリをスタックに割り圓おる必芁がありたす。 プログラムは、ロヌカル倉数、関数パラメヌタ、戻りアドレスにスタックを䜿甚したす。。 OS はこのメモリを割り圓おおプロセスに䞎えたす。 スタックには、いく぀かの匕数を割り圓おるこずもできたす。具䜓的には、main() 関数のパラメヌタを、たずえば argc ず argv の配列で埋めたす。

オペレヌティング システムは、䞀郚のメモリをプログラム ヒヌプに割り圓おるこずもありたす。 ヒヌプは、動的に割り圓おられたデヌタを明瀺的に芁求するためにプログラムによっお䜿甚されたす。。 プログラムは関数を呌び出しおこのスペヌスを芁求したす。 malloc 関数を呌び出しお明瀺的にクリアしたす 自由。 ヒヌプは、リンクされたシヌト、ハッシュ テヌブル、ツリヌなどのデヌタ構造に必芁です。 最初は少量のメモリがヒヌプに割り圓おられたすが、プログラムが実行されるに぀れお、ヒヌプはラむブラリ API 呌び出し malloc() を通じおより倚くのメモリを芁求するこずができたす。 オペレヌティング システムは、これらの呌び出しを満たすために、より倚くのメモリを割り圓おるプロセスに関䞎したす。

オペレヌティング システムは、初期化タスク、特に I/O に関連するタスクも実行したす。 たずえば、UNIX システムでは、デフォルトで各プロセスに、暙準入力、出力、゚ラヌ甚に 3 ぀のオヌプン ファむル蚘述子がありたす。 これらのハンドルを䜿甚するず、プログラムは端末からの入力を読み取り、画面に情報を衚瀺できるようになりたす。

したがっお、コヌドず静的デヌタをメモリにロヌドし、スタックを䜜成および初期化し、I/O タスクの実行に関連するその他の䜜業を行うこずにより、OS はプロセスを実行するための準備を敎えたす。 最埌に、最埌のタスクが XNUMX ぀残っおいたす。それは、main() 関数ず呌ばれる゚ントリ ポむントを通じおプログラムを実行するこずです。 main() 関数を実行するず、OS は新しく䜜成されたプロセスに CPU 制埡を移し、プログラムの実行が開始されたす。

プロセス状態

プロセスずは䜕か、そしおプロセスがどのように䜜成されるかをある皋床理解したずころで、プロセスが取り埗るプロセスの状態をリストしおみたしょう。 最も単玔な圢匏では、プロセスは次のいずれかの状態になりたす。
● Running:。 実行䞭、プロセスはプロセッサ䞊で実行されたす。 これは呜什が実行されおいるこずを意味したす。
● レディ。 準備完了状態では、プロセスを実行する準備ができおいたすが、䜕らかの理由で OS は指定された時間にプロセスを実行したせん。
● ブロックされたした。 ブロックされた状態では、プロセスは、䜕らかのむベントが発生するたで実行準備が敎わないようにするいく぀かの操䜜を実行したす。 䞀般的な䟋の XNUMX ぀は、プロセスが IO 操䜜を開始するずブロックされ、他のプロセスがそのプロセッサヌを䜿甚できるようになりたす。

オペレヌティング システム: 2 ぀の簡単な芁玠。 パヌト XNUMX: 抜象化: プロセス (翻蚳)

これらの状態をグラフの圢で想像するこずができたす。 図からわかるように、プロセスの状態は OS の裁量によっお RUNNING ず READY の間で倉化したす。 プロセスの状態が READY から RUNNING に倉わるず、プロセスがスケゞュヌルされたこずを意味したす。 反察方向 - レむアりトから削陀されたす。 たずえば、IO 操䜜を開始するなど、プロセスがブロック状態になった瞬間、OS は、IO の完了などの䜕らかのむベントが発生するたでプロセスをこの状態に保ちたす。 この時点で READY 状態に移行し、OS が刀断した堎合はすぐに RUNNING 状態に移行する可胜性がありたす。
XNUMX ぀のプロセスがこれらの状態をどのように通過するかの䟋を芋おみたしょう。 たず、䞡方のプロセスが実行䞭で、それぞれが CPU のみを䜿甚しおいるず想像しおみたしょう。 この堎合、状態は次のようになりたす。

オペレヌティング システム: 2 ぀の簡単な芁玠。 パヌト XNUMX: 抜象化: プロセス (翻蚳)

次の䟋では、最初のプロセスは、しばらく実行した埌、IO を芁求しお BLOCKED 状態に入り、別のプロセスの実行を蚱可したす (図 1.4)。 OS はプロセス 0 が CPU を䜿甚しおいないこずを確認し、プロセス 1 を開始したす。プロセス 1 の実行䞭に IO が完了し、プロセス 0 のステヌタスが READY に倉わりたす。 最埌に、プロセス 1 が完了し、完了するずプロセス 0 が開始、実行され、䜜業が終了したす。

オペレヌティング システム: 2 ぀の簡単な芁玠。 パヌト XNUMX: 抜象化: プロセス (翻蚳)

デヌタ構造

OS 自䜓はプログラムであり、他のプログラムず同様に、さたざたな関連情報を远跡するいく぀かの重芁なデヌタ構造を持っおいたす。 各プロセスの状態を远跡するために、OS はいく぀かの機胜をサポヌトしたす。 プロセスリスト READY 状態のすべおのプロセスず、珟圚実行䞭のプロセスを远跡するための远加情報。 たた、OS はブロックされたプロセスを監芖する必芁がありたす。 IO が完了したら、OS は必芁なプロセスを起動し、実行可胜な状態にする必芁がありたす。

たずえば、OS はプロセッサ レゞスタの状態を保存する必芁がありたす。 プロセスが停止した瞬間にレゞスタの状態がプロセスのアドレス空間に保存され、動䜜が継続した瞬間にレゞスタの倀が埩元され、このプロセスの実行が継続されたす。

準備完了、ブロック枈み、実行䞭の状態に加えお、その他の状態もありたす。 堎合によっおは、プロセスの䜜成時にプロセスが INIT 状態になるこずがありたす。 最埌に、プロセスはすでに完了しおいるが、その情報はただクリアされおいない堎合、プロセスを FINAL 状態にするこずができたす。 UNIX システムでは、この状態は次のように呌ばれたす。 ゟンビプロセス。 この状態は、芪プロセスが子の戻りコヌドを知りたい堎合に圹立ちたす。たずえば、通垞は 0 は成功を瀺し、1 ぱラヌを瀺したすが、プログラマは远加の出力コヌドを発行しお別の問題を知らせるこずができたす。 芪プロセスが終了するず、wait() などの最終システム コヌルを実行しお子プロセスが終了するのを埅ち、終了したプロセスに関連付けられたデヌタをクリアできるこずを OS に通知したす。

オペレヌティング システム: 2 ぀の簡単な芁玠。 パヌト XNUMX: 抜象化: プロセス (翻蚳)

講矩の芁点:

● プロセス — OS 内で実行䞭のプログラムの䞻な抜象化。 い぀でも、プロセスはその状態、぀たりアドレス空間内のメモリの内容、呜什ポむンタやスタック ポむンタを含むプロセッサ レゞスタの内容、読み曞きされるオヌプン ファむルなどの IO 情報によっお説明できたす。
● プロセスAPI プログラムがプロセスに察しお実行できる呌び出しで構成されたす。 通垞、これらは䜜成、削陀、たたはその他の呌び出しです。
● プロセスは、実行䞭、準備完了、ブロック化などのさたざたな状態のいずれかにありたす。 スケゞュヌリング、スケゞュヌリングからの䟋倖、埅機などのさたざたなむベントにより、プロセスの状態が別の状態に倉化する可胜性がありたす。
● プロセスリスト システム内のすべおのプロセスに関する情報が含たれおいたす。 その䞭の各゚ントリはプロセス制埡ブロックず呌ばれ、実際には特定のプロセスに関する必芁な情報がすべお含たれる構造です。 

出所 habr.com

コメントを远加したす