tailieunhanh - Bài tập chương 5 - Đồng bộ hoá tiến trình

Bài 1 : Xét giải pháp phần mềm do Dekker đề nghị để tổ chức truy xất độc quyền cho hai tiến trình . Hai tiến trình P0, P1 chia sẻ các biến sau : var flag : array [01] of boolean; (khởi động là false) turn : 01; Cấu trúc một tiến trình Pi ( i =0 hay 1, và j là tiến trình còn lại ) như sau : repeat flag[i] := true; while flag[j] do if turn = j then begin flag[i]:= false; while turn = j do ; flag[i]:= true; end; critical_section(); turn:= j; flag[i]:= false; non_critical_section(); until false; Giải pháp này có. | 12/09/2007 Khoa KTMT Baøi taäp chöông 5 Ñoàng boä hoaù tieán trình Baøi 1 : Xeùt giaûi phaùp phaàn meàm do Dekker ñeà nghò ñeå toå chöùc truy xaát ñoäc quyeàn cho hai tieán trình . Hai tieán trình P0, P1 chia seû caùc bieán sau : var flag : array [01] of boolean; (khôûi ñoäng laø false) turn : 01; Caáu truùc moät tieán trình Pi ( i =0 hay 1, vaø j laø tieán trình coøn laïi ) nhö sau : repeat flag[i] := true; while flag[j] do if turn = j then begin flag[i]:= false; while turn = j do ; flag[i]:= true; end; critical_section(); turn:= j; flag[i]:= false; non_critical_section(); until false; Giaûi phaùp naøy coù phaûi laø moät giaûi phaùp ñuùng thoûa maõn 4 yeâu caàu khoâng ? Baøi 2: Xeùt giaûi phaùp ñoàng boä hoaù sau : while (TRUE) { int j = 1-i; flag[i]= TRUE; turn = i; while (turn == j && flag[j]==TRUE); critical-section (); flag[i] = FALSE; Noncritical-section (); } Ñaây coù phaûi laø moät giaûi phaùp baûo ñaûm ñöôïc ñoäc quyeàn truy xuaát khoâng ? Baøi 3: Giaû söû moät maùy | 12/09/2007 Khoa KTMT Baøi taäp chöông 5 Ñoàng boä hoaù tieán trình Baøi 1 : Xeùt giaûi phaùp phaàn meàm do Dekker ñeà nghò ñeå toå chöùc truy xaát ñoäc quyeàn cho hai tieán trình . Hai tieán trình P0, P1 chia seû caùc bieán sau : var flag : array [01] of boolean; (khôûi ñoäng laø false) turn : 01; Caáu truùc moät tieán trình Pi ( i =0 hay 1, vaø j laø tieán trình coøn laïi ) nhö sau : repeat flag[i] := true; while flag[j] do if turn = j then begin flag[i]:= false; while turn = j do ; flag[i]:= true; end; critical_section(); turn:= j; flag[i]:= false; non_critical_section(); until false; Giaûi phaùp naøy coù phaûi laø moät giaûi phaùp ñuùng thoûa maõn 4 yeâu caàu khoâng ? Baøi 2: Xeùt giaûi phaùp ñoàng boä hoaù sau : while (TRUE) { int j = 1-i; flag[i]= TRUE; turn = i; while (turn == j && flag[j]==TRUE); critical-section (); flag[i] = FALSE; Noncritical-section (); } Ñaây coù phaûi laø moät giaûi phaùp baûo ñaûm ñöôïc ñoäc quyeàn truy xuaát khoâng ? Baøi 3: Giaû söû moät maùy tính khoâng coù chæ thò TSL, nhöng coù chæ thò Swap coù khaû naêng hoaùn ñoåi noäi dung cuûa hai töø nhôù chæ baèng moät thao taùc khoâng theå phaân chia : procedure Swap() var a,b: boolean); var temp : boolean; begin temp := a; a:= b; b:= temp; end; Söû duïng chæ thò naøy coù theå toå chöùc truy xuaát ñoäc quyeàn khoâng ? Neáu coù, xaây döïng caáu truùc chöông trình töông öùng. Baøi 5 : Xeùt hai tieán trình sau : process A { while (TRUE) na = na +1; } process B { while (TRUE) nb = nb +1; } Ñoàng boä hoaù xöû lyù cuûa hai tieán trình treân, söû duïng hai semaphore toång quaùt, sao cho taïi baát kyø thôøi ñieåm naøo cuõng coù nb < na <= nb +10 Neáu giaûm ñieàu kieän chæ laø na <= nb +10, giaûi phaùp cuûa baïn seõ ñöôïc söûa chöõa nhö theá naøo ? Giaûi phaùp cuûa baïn coù coøn ñuùng neáu coù nhieàu tieán trình loaïi A vaø B cuøng thöïc hieän? Baøi 6 : Moät bieán X ñöôïc chia seû bôûi hai tieán trình cuøng thöïc hieän ñoaïn code sau : do X = X +1; if ( X == 20) X = 0; while ( TRUE ); .

TỪ KHÓA LIÊN QUAN