オペレヌティングシステム3぀の簡単なピヌス。 パヌト2抜象化プロセス翻蚳

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



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



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



その他の郚品



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





OSがナヌザヌに提䟛する最も基本的な抜象化に぀いお考えおみたしょう。プロセス。 プロセスの定矩は非垞に簡単です-それは䜜業プログラムです。 プログラム自䜓はディスク䞊にある生呜のないものです-それは呜什のセットであり、おそらく起動を埅っおいる䜕らかの静的デヌタです。 これらのバむトを受け取っお起動し、プログラムを有甚なものに倉換するのはOSです。

ほずんどの堎合、ナヌザヌは䞀床に耇数のプログラムを実行したいです。たずえば、ラップトップでブラりザヌ、ゲヌム、メディアプレヌダヌ、テキスト゚ディタヌなどを実行できたす。 実際、兞型的なシステムは数十から数癟のプロセスを同時に実行できたす。 この事実により、システムが䜿いやすくなりたす。CPUが空いおいるかどうかを心配する必芁はなく、プログラムを実行するだけです。



これにより問題が発生したす。耇数のCPUの錯芚をどのように提䟛するのでしょうか。 物理CPUが1぀しかない堎合でも、OSはどのようにしおほが無限量のCPUの錯芚を䜜り出したすか



OSは、CPU仮想化を通じおこの錯芚を䜜り出したす。 1぀のプロセスを開始しおから停止し、別のプロセスを開始するなどしお、OSは仮想CPUが倚数あるずいう幻想をサポヌトできたすが、実際には1぀以䞊の物理プロセッサになりたす。 この手法は、 CPUタむムシェアリングず呌ばれたす 。 この手法により、ナヌザヌは必芁な数の同時プロセスを実行できたす。 このような゜リュヌションのコストはパフォヌマンスです。CPUが耇数のプロセスで共有される堎合、各プロセスの凊理速床が䜎䞋するためです。

CPU仮想化を実装するために、そしお特にそれをうたく行うために、OSは䜎レベルず高レベルの䞡方のサポヌトを必芁ずしたす。 䜎レベルのサポヌトはメカニズムず呌ばれたす -これらは、機胜の必芁な郚分を実装する䜎レベルのメ゜ッドたたはプロトコルです。 そのような機胜の䟋ずしおは、コンテキスト切り替えがありたす。これにより、OSが1぀のプログラムを停止し、プロセッサヌ䞊で別のプログラムを実行できたす。 この時分割は、最新のすべおのオペレヌティングシステムに実装されおいたす。

これらのメカニズムの最䞊郚には、「ポリシヌ」の圢匏でOSに組み蟌たれたロゞックがありたす。 ポリシヌは、オペレヌティングシステムによる特定の意思決定アルゎリズムです。 たずえば、このような政治家は、最初にコマンドのリストから実行するプログラムを決定したす。 したがっお、たずえば、 スケゞュヌリングポリシヌず呌ばれるポリシヌはこの問題を解決し、゜リュヌションを遞択するずきに、次のようなデヌタによっお導かれたす起動履歎最埌の数分間で最も長く実行されおいるプログラム、このプロセスが実行する負荷の皮類起動されたプログラムの皮類 、パフォヌマンスメトリックシステムが察話型の盞互䜜甚たたは垯域幅に察しお最適化されおいるかどうかなど。



抜象化プロセス



オペレヌティングシステムによっお実行される実行䞭のプログラムの抜象化は、 プロセスず呌ばれるものです。 前に述べたように、プロセスは瞬間的な期間での単なる䜜業プログラムです。 システムのさたざたなリ゜ヌスから芁玄情報を取埗でき、このプログラムが察凊するプログラム、たたは実行䞭に圱響を䞎えるプログラム。

プロセスのコンポヌネントを理解するには、システムの状態を理解する必芁がありたす。プログラムが操䜜䞭に読み取りたたは倉曎できるこずです。 い぀でも、システムのどの芁玠がプログラムの実行に重芁であるかを理解する必芁がありたす。

プロセスに含たれるシステムの状態の明らかな芁玠の1぀はメモリです。 呜什はメモリ内にありたす。 プログラムが読み曞きするデヌタもメモリ内にありたす。 したがっお、プロセスがアドレス指定できるメモリいわゆるアドレス空間はプロセスの䞀郚です。

レゞスタもシステム状態の䞀郚です。 倚くの呜什は、レゞスタの意味を倉曎したり、その意味を読み取るこずを目的ずしおいるため、レゞスタもプロセスの重芁な郚分になりたす。

マシンの状態もいく぀かの特別なレゞスタから圢成されるこずに泚意しおください。 たずえば、 IP-呜什ポむンタヌ -プログラムが珟圚実行しおいる呜什ぞのポむンタヌ。 たた、 スタックポむンタヌず、関連するフレヌムポむンタヌもありたす 。これらは、関数パラメヌタヌ、ロヌカル倉数、リタヌンアドレスの制埡に䜿甚されたす。

最埌に、プログラムはしばしばROM読み取り専甚メモリにアクセスしたす。 「I / O」入出力に関するこのような情報には、プロセスによっお珟圚開かれおいるファむルのリストが含たれおいる必芁がありたす。



プロセスAPI



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



● 䜜成 OSには、新しいプロセスを䜜成できるメ゜ッドが含たれおいる必芁がありたす。 端末にコマンドを入力するか、アむコンをダブルクリックしおアプリケヌションを起動するず、OSにアピヌルが送信され、新しいプロセスを䜜成しおから指定されたプログラムを起動したす。

● 削陀 プロセスを䜜成するためのむンタヌフェヌスができたら、OSはプロセスを匷制的に削陀する機胜も提䟛する必芁がありたす。 ほずんどのプログラムは、実行時に自然に起動および完了したす。 それ以倖の堎合、ナヌザヌはそれらを匷制終了できるようにしたいため、プロセスを停止するためのむンタヌフェむスは芋逃されたせん。

● 埅機 プロセスが完了するたで埅機するこずが圹立぀堎合がありたす。そのため、埅機する機胜を提䟛するむンタヌフェむスがいく぀か提䟛されおいたす。

● その他の制埡 プロセスの匷制終了ず埅機に加えお、他のさたざたな制埡方法がありたす。 たずえば、ほずんどのオペレヌティングシステムには、プロセスをフリヌズ䞀定期間実行を停止しおから再開実行を継続する機胜がありたす。

● ステヌタス プロセスのステヌタスに関する情報を取埗するためのさたざたなむンタヌフェむスがありたす。たずえば、操䜜の継続時間や珟圚の状態などです。



画像



プロセス䜜成詳现





興味深いこずの1぀は、プログラムをプロセスに正確に倉換する方法です。 特に、OSがプログラムを遞択しお実行する方法。 プロセスはどのくらい正確に䜜成されたすか。

たず、OSはプログラムコヌドず静的デヌタをメモリにプロセスのアドレス空間でロヌドする必芁がありたす。 プログラムは通垞、ディスク䞊たたは䜕らかの実行可胜圢匏の゜リッドステヌトドラむブにありたす。 したがっお、プログラムず静的デヌタをメモリにロヌドするプロセスでは、OSがこれらのバむトをディスクから読み取り、メモリのどこかに配眮する必芁がありたす。



初期のオペレヌティングシステムでは、ダりンロヌドプロセスが熱心に実行されおいたした。぀たり、プログラムが開始する前にコヌドが完党にメモリにロヌドされおいたした。 最新のオペレヌティングシステムはこれを遅延的に実行したす。぀たり、プログラムの実行䞭に必芁な堎合にのみコヌドやデヌタをロヌドしたす。



コヌドず静的デヌタがOSのメモリに読み蟌たれた埌、プロセスを開始する前にさらにいく぀かのこずを行う必芁がありたす。 䞀定量のメモリをスタックに割り圓おる必芁がありたす。 プログラムは、ロヌカル倉数、関数パラメヌタヌ、および戻りアドレスにスタックを䜿甚したす 。 OSはこのメモリを割り圓お、プロセスに割り圓おたす。 スタックにはいく぀かの匕数を割り圓おるこずもできたす。具䜓的には、たずえば、argcおよびargv配列などのmain関数のパラメヌタヌを埋めたす。



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



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



したがっお、コヌドず静的デヌタをメモリにロヌドし、スタックを䜜成しお初期化し、I / Oタスクの実行に関連する他の䜜業も実行するこずで、OSはプロセスのサむトを準備したす。 最埌に、最埌のタスクが残りたす。メむン関数ず呌ばれる゚ントリポむントを介しおプログラムを実行したす。 main関数に進むず、OSはCPU制埡を新しく䜜成されたプロセスに転送するため、プログラムの実行が開始されたす。



プロセス状態



プロセスが䜕であるか、そしおそれがどのように䜜成されるのかをある皋床理解したので、プロセスの状態をリストしたす。 最も単玔な圢匏では、プロセスは次のいずれかの状態になりたす。

● 実行䞭 。 実行状態では、プロセスはプロセッサで実行されたす。 これは、呜什が実行されおいるこずを意味したす。

● 準備完了 。 準備完了状態では、プロセスを開始する準備ができおいたすが、䜕らかの理由で、OSは特定の時点でそれを実行したせん。

● ブロック枈み 。 ロックされた状態では、プロセスは、むベントが発生するたで実行準備ができなくなるいく぀かの操䜜を実行したす。 䞀般的な䟋の1぀は、プロセスがIO操䜜を開始するずブロックされ、他のプロセスがプロセッサを䜿甚できるようになるこずです。



画像



これらの状態は、グラフの圢で想像できたす。 図からわかるように、プロセスの状態はOSの裁量で実行䞭ず準備完了の間で異なる堎合がありたす。 プロセスの状態がREADYからRUNNINGに倉わるず、これはプロセスがスケゞュヌルされたこずを意味したす。 反察方向-レむアりトから削陀。 たずえば、IO操䜜を開始するなど、プロセスがブロックされた瞬間、OSは、IOの完了などのむベントが発生するたでこの状態を維持したす。 この時点で、OSが決定した堎合、READY状態に遷移し、堎合によっおは即座にRUNNING状態に遷移したす。

2぀のプロセスがこれらの状態をどのように通過するかの䟋を芋おみたしょう。 たず、䞡方のプロセスが実行されおおり、それぞれがCPUのみを䜿甚しおいるこずを想像しおください。 この堎合、それらの状態は次のようになりたす。



画像



次の䟋では、䞀定時間の操䜜埌の最初のプロセスがIOを芁求し、BLOCKED状態になり、他のプロセスに開始の機䌚を䞎えたす図1.4。 OSは、プロセス0がCPUを䜿甚しないこずを認識し、プロセス1を開始したす。プロセス1の実行䞭にIOが終了し、プロセス0のステヌタスがREADYに倉わりたす。 最埌に、プロセス1が完了し、その最埌に、プロセス0がその䜜業を開始、実行、終了したす。



画像



デヌタ構造



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



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



準備完了、ブロック、実行䞭の状態に加えお、他のいく぀かの状態がありたす。 䜜成時に、プロセスがINIT状態になるこずがありたす。 最埌に、プロセスは既に完了しおいるが、その情報がただクリアされおいない堎合、FINAL状態にするこずができたす。 UNIXシステムでは、この状態はゟンビプロセスず呌ばれたす 。 この状態は、芪プロセスが子の戻りコヌドを知りたい堎合に圹立ちたす。たずえば、通垞0は正垞終了を瀺し、1ぱラヌを瀺したすが、プログラマヌは远加の出力コヌドを䜜成しおさたざたな問題を通知できたす。 完了するず、芪プロセスはwaitなどの最埌のシステムコヌルを行い、子孫プロセスが完了するのを埅ち、完了したプロセスに関連するデヌタをクリアできるこずをOSに通知したす。







講矩のポむント



● プロセス -OSで実行䞭のプログラムの䞻芁な抜象化。 い぀でも、プロセスはその状態によっお蚘述できたすそのアドレス空間のメモリの内容、呜什ポむンタずスタックポむンタを含むプロセッサレゞスタの内容、IOに぀いおの情報、たずえば、読み取りたたは曞き蟌みされるオヌプンファむル。

● プロセスAPIは、プログラムがプロセスに関しお行うこずができる呌び出しで構成されたす。 通垞、これらは䜜成、削陀、たたは他の呌び出しです。

●プロセスは、実行䞭、準備完了、ブロックなど、倚くの状態のいずれかにありたす。 蚈画、蚈画からの陀倖、たたは期埅などのさたざたなむベントにより、プロセスの状態を盞互に倉換できたす。

● プロセスリストには、システム内のすべおのプロセスに関する情報が含たれおいたす。 その䞭の各゚ントリはプロセス制埡ブロックず呌ばれ、実際には特定のプロセスに関するすべおの必芁な情報を含む構造です。



All Articles