プライベートな連絡先の最初の情報
送料メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
2024-07-04: オペレーティング システムの同期と相互排他に関する研究メモ
同時プロセスまたはプログラムは、実行時にクロージャを失います。つまり、2 つのプログラムが別々の領域で共有リソースを使用する場合、それぞれの実行結果が異なる可能性があります。
その理由は、プログラム a とプログラム b の両方がアクセスする必要がある共有リソース x を保護していないためです。
相互に制限的な関係が同期です。同期を簡単に理解すると、プロセスの実行には順序が必要です。
間接的に相互に制限する関係は、相互排他関係と呼ばれます。
「生産者と消費者モデル」
カウンター+ +
首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
カウンター- -
首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
解決策: counter を重要なリソースとして扱い、プロセスが変数 counter に相互にアクセスできるようにします (同期メカニズムについては後で学びます)
ハードウェアクリティカルなリソースであっても、ソフトウェアクリティカルなリソースであっても、複数のプロセスが相互にアクセスする必要があります。
これらの領域は本質的にコードです
クリティカル セクションにプロセスが存在しない場合は、クリティカル セクションのリソースがアイドル状態であることを示します。リソースを効果的に利用するために、クリティカル セクションへの参加を要求するプロセスは、すぐに自身のクリティカル セクションへの参加を許可される必要があります。
既存のプロセスがクリティカル セクションに入ると、クリティカル リソースにアクセス中であることを示します。そのため、クリティカル セクションに入ろうとする他のプロセスは、クリティカル リソースへの相互排他的なアクセスを確保するために待機する必要があります。
クリティカルなリソースへのアクセスが必要なプロセスの場合、「待機中」状態に陥るのを避けるために、限られた時間内にプロセスが独自のクリティカル セクションに入ることができるようにする必要があります。
プロセスが自身のクリティカル セクションに入ることができない場合、プロセスが「ビジー待機」状態に陥るのを防ぐために、プロセッサ (CPU) を直ちに解放する必要があります。
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则
ダブルフラグファーストチェックメソッドは、各プロセスがクリティカルセクションに入ろうとしていることをマークするブール配列 flag[2] を設定します。 flag[i]=true は、Pi がクリティカルセクションに入ろうとしていることを意味します。
- while ループは信号機のメカニズムに相当します
- 相手側のフラグを立てることは、相手側の信号機を変更することと同じです。
- ただし、両方のプロセスが最初にフラグをチェックし [最初に信号機を確認] し、最初は両方とも false (両方の信号が青) であるため、2 つのプロセスが同時に信号機を通過し、クリティカル セクションに一緒に入る可能性があります。 。
ダブルフラグポストチェック方式では、相手のフラグをチェックしてから自分のフラグを設定します。この 2 つの操作は一度に実行できないため、2 つのプロセスが同時にクリティカル セクションに入る可能性があります。まず自分のフラグを立ててから相手のフラグを確認し、相手のフラグがtrueの場合は待機し、クリティカルセクションに入るという方法が考案されました。
Peterson のアルゴリズムは次のことを組み合わせます。シングルマーク方式そしてダブルマーク事後チェック方法このアイデアは、flag[] を使用して相互排他的アクセスの問題を解決し、turn を使用して飢餓問題を解決することです。
両方の当事者がクリティカル セクションに入るために競合している場合、プロセスは他の当事者にクリティカル セクションに入る機会を与えることを許可できます。
各プロセスはクリティカルセクションに入る前に、自身のフラグを設定し、その後、相手のフラグを検出し、同時にターンを行うことで、1 つのプロセスのみがクリティカルセクションに入ることができるようにします。双方が同時にクリティカルセクションへの入力を要求します。
待つ権利を放棄しないこと
クリティカルセクションへの各プロセスの相互排除の問題をソフトウェアで解決することは困難であり、そのため、コンピュータはこの問題を解決するためにいくつかの特別なハードウェア命令を提供します。
TS命令は、実行過程が分割不可能な関数処理(プリミティブ)とみなすことができる。
TS を使用して重要なセクションを管理し、各重要なリソースにロックを設定します。
これはスワップ命令と呼ばれ、2 つのワードの内容を交換するために使用されます。
これは、リソースの数を表すために使用される整数 S として定義されます。この整数セマフォには、初期化 (初期値の割り当て)、待機 (デクリメント)、シグナル (インクリメント) の 3 つの操作しかありません。
「ビジー待機」現象のないプロセス同期メカニズム
- wait 操作は P 操作と同等です。
- 信号操作はV操作と同等です。
- 名前が違うだけで機能は全く同じです
- 待つ(A) = P(A)
- 信号(B) = V(A)
相互に排他的なセマフォ mutex=1 を設定し、重要なリソースにアクセスする各プロセスのクリティカル セクションを wait(mutex) と signal(mutex) の間に配置します。
同期セマフォ S=0 を設定して、最初に実行する必要があるステートメントのシグナル (S) が実行され、次に待機 (S) が実行されるようにします。