进程间同步(Process Synchronization)-1 简介

何故、同期が必要なのか?


プログラムが、要求された仕様を満たすことを整合(consistent) という。一般的な整合性(Consistency)は、並列に動作するプログラムが直列可能(Serializable)である場合にのみ得られる。並列環境下で直列可能性を保証するためには、同期機構が必要となる。(consitentの反対はinconsitent (矛盾)、従って、整合のことを無矛盾ともいう)

 

プロセスは固有のアドレス空間において実行される。アドレス空間を複数のプロセスが共有する場合がある。プロセス自身の要求もあれば、(メモリ使用量を減らすために)カーネルが自動的に行うこともある。

 

プロセス間通信を利用して、一部のアドレス空間を共有することもできる。mmap()システムコールは、ファイルやブロック型デバイス内の情報をアドレス空間の一部へマッピングできる。

 

再入可能なカーネルを実装するには同期機構が必要である。

 

何らかの計算結果が2つ以上のプロセスのスケジューリングに依存する場合、これを競合状態にある(race condition)という。

 

グローバル変数へのアクセスは、分割できない操作(atomic operation)を行うことにより保証するが、1回の操作でアクセスできないデータ(例えば連結リスト)があり、少なくとも2つのポインタへ同時にアクセスすることになる。

 

クリティカル区間(critical section)とは、その部分の実行を開始したプロセスが、他のプロセスが同じ部分を実行する前にその処理を終了する必要があるコード領域のことをいう。

 

カーネルパスが互いに同期を取る方法として、以下のもの挙げられる。

 

カーネル内プリエンプト(preemptive)の禁止

クリティカル区間を実行する前にカーネル内のプリエンプトを禁止し、クリティカル区間を抜けたときにプリエンプトを許可する。異なるCPUが同じデータに同時にアクセスする可能性があるため、マルチプロセッサシステムでは不十分といえる。

 

割り込み禁止

カーネル内のプリエンプトの禁止と同じように、クリティカル区間のハードウェアの割り込みを禁止する方法。これも、マルチプロセッサシステムでは不十分である。

 

セマフォ(semaphore)

セマフォとは、データに関連付けたカウンタである。整数型変数、待ち状態にあるプロセスのリスト、2つのメソッド(down()up())のオブジェクトからなる。保護するデータのセマフォを1に初期化しdown()を実行して正の値であればデータへのアクセスが許可され、負であれば実効を止め、他のプロセスがup()を実行するまで再開できない。

 

スピンロック(spin lock)

短い時間でデータ更新する場合、スピンロックが利用される。セマフォと似ているが,スピンロックはプロセスリストを持たない。他のプロセスによってロックされていることを検出したプロセスは、ロックが解除されるまで短いループを繰り返してアクセスできないようにする

 

デッドロック(Dead Lock)の回避

最も分かり易いデッドロックとして、プロセスp1がデータaへのアクセスを許可され、プロセスp2bへのアクセスを許可されるが、p1は次にbへのアクセス許可を待ち、p2aへのアクセス許可を待つ、というものがある。p1p2が互いに待っている状態なのでプロセスやカーネル実行パスが完全に停止していることになる。ロック要求をある決まった順序で揃えることで、この問題を回避する。

 

マルチプロセッサのプログラミングは必要なスキルだし、ここって、結構重要な部分だ。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值