プロセス制御は通常、 OS のプリミティブによって実装されます。
ほとんどの OS カーネルには、機能の 2 つの主要な側面が含まれています。
1. サポート機能: 1) 割り込み処理 2) クロック管理 3) プリミティブ操作 (プリミティブ操作はアトミック操作です。いわゆるアトミック操作とは、操作内のすべてのアクションが完了するか、または完了しないことを意味します)
2. リソース管理機能: 1) プロセス管理 2) メモリ管理 3) デバイス管理
同期と相互排除の基本概念:
マルチプログラミング環境では、プロセスが同時に実行され、異なるプロセス間には異なる相互制約が存在します。プロセス間の相互制約を調整するために、プロセス同期の概念が導入されます。
クリティカル リソース: 一度に 1 つのプロセスでのみ使用が許可されているリソースをクリティカル リソースと呼びます。たとえば、ユニプロセッサでは、CPU が重要なリソースです。
同期は、直接制限関係とも呼ばれ、特定のタスクを完了するために確立された 2 つ以上のプロセスを指します。これらのプロセスは、特定の場所での作業の順序と、情報を渡すことによって作成される制約を調整するために待機します。プロセス間の制約は、プロセス間の相互協力に依存します。
また、相互排他は間接的な制限関係となり、一方のプロセスがクリティカルリソースを使用するためにクリティカルセクションに入ると、他方のプロセスは待機しなければならず、クリティカルリソースを占有しているプロセスがクリティカルセクションから出ると、他方のプロセスはクリティカルリソースへのアクセスを許可されます。 。
クリティカル セクション:各プロセスの重要なリソースにアクセスするコードのセクションをクリティカル セクションと呼びます。一般に、重要なリソースにアクセスする循環プロセスは次のように説明されます。
その間(TRUE)
{
エントリーエリア
クリティカルセクション
出口エリア
残りの領域
}
同期メカニズムが従うべきルール:
1. アイドルエントリ: クリティカルセクションにプロセスが存在しない場合、クリティカルリソースがアイドル状態であることを示します。クリティカルリソースを効果的に利用するために、クリティカルセクションへの入室を要求したプロセスは、直ちに自身のクリティカルセクションに入ることを許可される必要があります。
2. ビジーの場合は待機する: 既存のプロセスがクリティカル セクションに入ると、クリティカル リソースにアクセス中であることを示すため、クリティカル セクションに入ろうとする他のプロセスは、クリティカル リソースへの相互排他的アクセスを確保するために待機する必要があります。
3. 待機の制限: クリティカルなリソースへのアクセスを必要とするプロセスの場合、「デッド待機」状態に陥ることを避けるために、限られた時間内にクリティカル セクションに入ることができるようにする必要があります。
4. プロセスを待機させます (ここでの右側は CPU を指します): プロセスが自身のクリティカル セクションに入ることができない場合は、プロセスが「ビジー待機」状態に陥るのを防ぐために、プロセッサをすぐに解放する必要があります。
ハードウェア同期メカニズム
1. 相互排除を実現するために割り込みをオフにする:割り込みを使用してハードウェア同期メカニズムを実装します。割り込みはロック テストの前にオフになり、ロック テストが完了してロックがロックされるまでオンにすることはできません。
2. テストアンドセット命令を使用して相互排他を実現します。
TS 命令の利用: TS 命令の一般的な説明は次のとおりです: *lock=FALSE はリソースがアイドル状態であることを意味し、それ以外の場合はリソースが使用中であることを意味します。
ブール値 TS(ブール値 *ロック){
ブール型の古い;
old=*ロック;
*ロック=TRUE;
古いものを返す。
}
3. スワップ命令を使用してプロセスの相互排他を実現します。
この命令をスワップ命令と呼びます
void swap(boolean *a,boolean *b) do{
{ キー = True;
ブール値の温度; する{
temp=*a; 交換(&ロック、&キー)
*a=*b; }while(キー != FALSE)
*b=temp; クリティカルセクションの動作。
ロック=FALSE;
}while(TRUE);
セマフォ機構
1. 整数セマフォ:
初期化に加えて、2 つの標準的なアトミック操作 wait(s) および signal(s) を通じてのみアクセスできます。長い間、これら 2 つの操作は p 操作と v 操作と呼ばれてきました。
待ちます{
while(s<=0)
s=s-1;
}
信号{
s=s+1;
}
2.AND型セマフォ
実行中のプロセス全体でプロセスが必要とするすべてのリソースは、一度にプロセスに割り当てられ、プロセスが使い果たされた後にまとめて解放されます (データベース内のトランザクションと同様)。
いくつかの重要なリソースを割り当てる場合、アトミック操作を使用して、すべてのリソースをプロセスに割り当てるか、まったく割り当てないかのいずれかになります。
このため、待機動作に「AND」条件が追加されるため、AND 同期と呼ばれます。
3.信号量集
セマフォセットはAND型セマフォをベースに実装されており、一度に複数のユニットを申請することができます。
いくつかの特殊な状況:
SP(S,d,d) は、このとき設定されているセマフォにセマフォ S が 1 つだけありますが、一度に d 個のリソースを申請することができ、既存のリソースが d 未満の場合は割り当てられません。
SP(S,1,1) この時点でセマフォセットは一般記録セマフォ(s>1)または相互排他セマフォ(s=1)に縮退しています。
SP(S,1,0) これは非常に特殊で便利なセマフォ操作です。s>=1 の場合、複数のプロセスが特定の領域に入ることが許可され、s が 0 になると、どのプロセスも特定の領域に入ることができなくなります。言い換えれば、スイッチのような役割を果たします。
セマフォ メカニズムを使用してプロセスの相互排他を実現します。
セマフォ s=1;
P1(){
P;
プロセス P1 のクリティカルセクション。
V(s);
}