Operating System-work2

例题:考虑下面的程序

const int n=50; int tally;
void total()
	{	
		int count;
		for(count =1;count <=n;count ++)
 		{
 			tally++;
		}
	}
void main()
{
		tally =0; 
		parbegin(total(),total(); write(tally);
}

a.确定这个并行程序最终输出变冷tally的合适下界和上界。假设这些进程可以任意相对速度执行,且一个变量只能在被一条单独的机器指令载入到寄存器后自增。
b.在a中假设的基础上,进一步假设允许并行执行任意数量的这种进程,对着tally的上界和下界有何影响?

Answer:
a.

  1. 首先先确定大致的范围,因为当没有互斥时候可以从0直接加到50,所以先确定tally大概在[50,100]区间

  2. 但是考虑两个进程交替顺序执行载入、增加、存储的情况,同时变更这个共享变量的取值,过程如下:
    1. 进程A载入tally值,tally值加到1,并同时丢失处理器,虽然增加到1,但还没有存储
    2. 进程B载入tally值,tally值仍为0,运行完成49次增加操作,将49存储给tally后,丢失处理器
    3. 进程A重新获得处理器并存储1,代替之前的49,然后被迫立即放弃处理器
    4. 进程B重新开始,将此时为1的tally值载入寄存器,同时被迫放弃处理器,完成最后一次B的载入
    5. 进程A重新开始,没有被中断,运行完成剩下的49次载入、增加、存储操作,结束后tally为50
    6. 进程B在这之前完成最后一次增加和存储操作,寄存器值变为2,同时存储这个值作为共享变量的最终结果。

  3. 所以tally的最小值可以为2,最终范围为[ 2, 100 ],一般不会出现低于2的结果。

b.
   在有N个进程的情况下,tally的值最终范围是[ 2, N * 50 ],因为对所有进程来说,最初开始运行到第五步的时候完成,但在第六步都会被进程B破坏掉,下界都会回到2 。
   所以上界会发生改变,下界不会。

发布了42 篇原创文章 · 获赞 5 · 访问量 2706

猜你喜欢

转载自blog.csdn.net/weixin_44198992/article/details/105055697