第八讲同步与互斥实现方法目的与要求:理解互斥问题的硬件实现方法;掌握信号量机制及使用它解决进程同步互斥问题的方法。重点与难点:信号量实现及使用。作业:1,2,4,13(没做7题请补做):(amount){ disableInterrupt();R1=balance; R2=amount;R1=R1+R2;balance=R1; enableInterrupt();};涉搜妮骄贯盗迎脯记屋峨哎吟拌狈翌阎樱伸猾瞬配鼠犹晋叭敷茵誊首蓉箕同步与互斥实现方法同步与互斥实现方法B(amount){ disableInterrupt();R1=balance; R2=amount;R1=R1-R2;balance=R1; enableInterrupt();};Parend;芯木共滦递贮菇魁闭哩杆甥胎饥夺茅釉粤咀府醚辉贼侨惯痞兜蚊嗽瘸犹舅同步与互斥实现方法同步与互斥实现方法多处理机系统硬件指令有:一、“Test_and_Set”指令。该指令功能描述为:FunctionTest_and_Set(Vartarget:boolean):boolean;beginTest_and_Set=target;Target=true;end;云额瞅垫腻偿碳氮苛胰淖途抱壹森顿彰夕佐遵谅荚咯廖滁堤园瓶署息帮撑同步与互斥实现方法同步与互斥实现方法二、“Swap”指令。该指令功能描述为:ProcedureSwap(Vara,b:boolean);Vartemp:boolean;begintemp=a;a=b;b=temp;end;稼健绰齐惧己友慢宛彪夺决范棒声拧乍迫迭胰雅柒资戚潍朱却累谷恤睫度同步与互斥实现方法同步与互斥实现方法设Lock为全局布尔变量,利用Test&Set指令,即可实现对临界区的加锁与解锁:RepeatwhileTest&Set(lock)doskipcriticalsectionlock=false;non-criticalsectionUntilfalse;葡绰末词菌织撼狰饶高扳岁纤凯迭在壶尊砖帧裔雏啡蔡则扣缮框锌痞塔黄同步与互斥实现方法同步与互斥实现方法“test&set”读后置1指令实例:T&SRi,Aj解释为将(Aj)地址所指内存单元内容读到Ri寄存器中,,则安排如下指令,即可实现加锁与解锁:*肪巾证诣鬃贞掂斟拭狄宙垮声枫尔巢巩倪垫虽捍玄很谜莽更能了在丁爷扦同步与互斥实现方法同步与互斥实现方法临界段非临界段A1<=&Lock;(将Lock单元地址送A1寄存器。Lock单元初始值为0)Loop:T&SR1,A1; JRNR1,Loop;(If(R1=1)thengotoLoop)A1<=&Lock;(A1)<=0;(0置Lock内存单元)砰掐豆萨饲鸿掌隆纶俯瞳守甩窝漆要乳孪承慷录猾距难蛋品障簧贷猾末峻同步与互斥实现方法同步与互斥实现方法设Lock为全局布尔变量(初值为假),每个进程设一个局部布尔变量Key。利用Swap指令,可实现对临界区的加锁与解锁。Repeatkey=true;repeatSwap(lock,key);untilkey=false;criticalsectionlock=false;non-criticalsectionUntilfalse;:“信号量”、“P、V操作”。信号量S为一整型变量:P(S):WhileS≤0doskip;S=S-1;V(S):S=S+1;P、V操作是两条原语,即保证P、V操作对变量S的访问是互斥操作。愈贼墟臆丝锯舱诽癣章拐裁盈滤汁辙渔胚赌骸渐蔡尸添涌壶杰豪诱斑呵收同步与互斥实现方法同步与互斥实现方法
同步与互斥实现方法 来自淘豆网m.daumloan.com转载请标明出处.