2012-02-19 8 views
1

私はStallingのオペレーティングシステム:宿題および設計主体から宿題問題に取り組んでいます。このように、私は答えを求めていませんが、これを理解する助けがあれば、私はこの頭の中で頭を包むのに苦労しています。この質問の最初の部分は、私はロジックをトレース何の問題もなかったこれ、印刷することができ、「xが10である」は、どのように尋ねオペレーティングシステムの設計競争条件

shared int x; 
x = 10; 
while (1) 
{ 
    x = x - 1; 
    x = x + 1; 
    if (x != 10) 
     printf(“x is %d”,x) 
} 

両方のプロセスは、次のコードを実行されています実行2つのプロセスがあります。ために。

しかし、第2部では「xが8」を印刷できるかどうか尋ねられます。さらに、それがヒントを与える:

「あなたがソース言語レベルでのインクリメント/デクリメントがアトミックに行われていないことを忘れてはならない、それは、アセンブリ言語コードです:」

LD r0,X 
INCR r0 
STO r0,X 

「は、単一のCを実装します命令x = x + 1 "

ヒントにもかかわらず、プロセスがprintfセクションに到達する方法を見て、値を少なくとも9までインクリメントしなくても問題があります。何が欠けていますか?このよう

答えて

4

Thread 1    Thread 2 

Load x (10) 
Decr x (9) 
Store x (9) 
         Load x (9) 
Load x (9) 
Incr x (10) 
Store x (10) 
         Decr x (8) 
         Store x (8) 
Load x (8) 
Print x (8) 
         // ... 

ここでの教訓操作がアトミックでない場合、彼らは上書きされ得れば、その後、失われる可能性が書き込まれていることです。

+1

彼は具体的に答えを与えないように頼んだ。 –

+0

ああ、もちろん、私は何かが精神的に欠けていたことを知っていました。私はすぐに受け入れて時間制限を待つのを待っている。 –

+0

@HunterMcMillen - そうではありません。彼は彼が「答えを求めていない」と答えた - 彼は決して答えを与えないように要求した。 – Steve

1

私はあなたが持っているトラブルは、あなたがまだ

x = x - 1x = x + 1単一の操作を検討しているという事実から来ていると思います。

Process A    Process B    X    r0 
------------------------------------------------------------------- 
LD r0, x          10   10 
         LD r0, x    10   10 
         DECR r0     10    9 
         STORE r0,x    9 

ここではそのデクリメント演算の途中でプロセスB中断したプロセスA:

は、インスタンス・プロセスBはCPUを盗むことによって、プロセスAの初期動作x=x-1操作を中断するために、それがある場合に何が起こるかについて考えてみ。

+0

これはまた時間を割いてくれてありがとう、とても役に立ちました。ここでも+1してください。 –

関連する問題