2017-12-09 8 views
-1



Silveschatz、Galvin、Gagneの「オペレーティングシステムの概念」(2012年)を読んでいます。「2つのtest_and_set()命令が(それぞれ異なるCPU上で)同時に実行されると、何らかの順序で逐次実行される」 210ページで、私はなぜそのような機関の2つがのマルチプロセッサでもでも実行される理由を理解できません。各命令が異なるプロセッサ上で実行されるとどうなるでしょうか?私の知る限りでは、これら2つの機関は同時に実行される

命令のアトミック性とマルチプロセッサの理解はかなり表面的なレベルにとどまっているので、私はこの問題を当然のことと考えています。誰も私を助けてくれますか?test_and_set()命令がマルチプロセッサ上で動作するのはどうしてですか?

答えて

1

テストセットのポイントは、1つのプロセッサが最初に実行し、次にもう1つのプロセッサがそれを実行し、ではなくが同時に実行されることです。

これを実現するには、両方のプロセッサ間で通信が行われます。基本的に、1つのプロセッサは、メモリからメモリ位置を含むキャッシュラインをメモリからロードし、テストおよびセットの両方が終了するまで、そのキャッシュラインを有することができないことを他のプロセッサに知らせる。

1

結果はマシン命令によって異なります。それは理解しやすいプロセッサであると私は例として、VAXを使用してみましょう:

http://www.ece.lsu.edu/ee4720/doc/vax.pdf

VAXはBBSS(ビットセットとセットに支店を)持っている命令とビットセットとセットにBBSSI(支店インターロックされた)命令。

あなたは同じクリアビットにBBSSをやって2つのプロセッサを持っている場合は、あなたが得ることができる:

P1 Tests Bit (Clear) 
P2 Tests Bit (Clear) 
P1 Sets Bit and does not branch 
P2 Sets Bit and dot not branch 

あなたが同じビットにBBSSIを行う場合は、プロセッサがメモリをロックします。あなたは得る

p1 locks the memory 
p1 Tests Bit (Clear)  
P2 Tests Bit and is Blocked 
P1 Sets Bit and does not branch 
p1 unlocks the memory 
P2 Tests Bit (SET) 
P2 Branches 

ほとんどの場合、命令は1ステップで実行されず、プロセッサは互いに独立して動作することができます。

+0

ありがとうございました!本当に優れた答えと材料!私はリンクからBBSSIの説明を読んだ。私はちょっと混乱している "ビットがメモリに含まれている場合、ビットの状態の読み取りと新しい状態へのビットの設定は連動した操作である"ということは、テストするビットセットはメモリまたはプロセッサのレジスタに含めることができますか?それが1つのレジスタに含まれていれば、ビットをインターロックする必要はありませんが、ビットがレジスタに入ってからBBSSIがどのようにプログラマによって使用されるのでしょうか? – Mark

+0

VAXには直交命令セットがあります。つまり、オペランドに任意のアドレッシングモードを許可します(レジスタを使用するメモリの移動アドレスを除く)。したがって、BBSSI命令をレジスタ・オペランドとともに使用することができます。その場合、実行はインターロックされず、BBSS命令のように動作します。それは本当に意味をなさないでしょう。 – user3344003

関連する問題