Để hạn chế các lỗi có thể xảy ra do sử dụng tài nguyên găng, hệ điều hành phải điều khiển các tiến trình sao cho, tại một thời điểm chỉ có một tiến trình nằm trong đoạn găng, nếu có nhiề
Trang 1Câu 1: Tại sao phải điều độ tiến trình qua đoạn găng? Hãy trình bày phương pháp sử dụng cặp
chỉ thị STI và CLI
a Để hạn chế các lỗi có thể xảy ra do sử dụng tài nguyên găng, hệ điều hành phải điều khiển các tiến trình sao cho, tại một thời điểm chỉ có một tiến trình nằm trong đoạn găng, nếu có nhiều tiến trình cùng muốn vào (thực hiện) đoạn găng thì chỉ có một tiến trình được vào, các tiến trình khác phải chờ, một tiến trình khi ra khỏi (kết thúc) đoạn găng phải báo cho hệ điều hành và/hoặc các tiến trình khác biết để các tiến trình này vào đoạn găng, vv Các công tác điều khiển tiến trình thực hiện đoạn găng của hệ điều
hành được gọi là điều độ tiến trình qua đoạn găng Để công tác điều độ tiến trình qua
đoạn găng được thành công, thì cần phải có sự phối hợp giữa vi xử lý, hệ điều hành và người lập trình Vi xử lý đưa ra các chỉ thị, hệ điều hành cung cấp các công cụ để người lập trình xây dựng các sơ đồ điều độ hợp lý, để đảm bảo sự độc quyền trong việc sử dụng tài nguyên găng của các tiến trình
b Một số vi xử lý cung cấp cặp chỉ thị CLI và STI để người lập trình thực hiện các thao tác mở ngắt (STI: Setting Interrupt) và cấm ngắt (CLI: Clean Interrupt) của hệ thống trong lập trình Người lập trình có thể dùng cặp chỉ thị này để tổ chức điều độ cho các tiến trình như sau: Trước khi vào đoạn găng tiến trình thực hiện chỉ thị CLI, để yêu cầu cấm các ngắt trong hệ thống, khi đó ngắt đồng hồ không thể phát sinh, nghĩa là không
có một tiến trình nào khác có thể phát sinh, nhờ đó mà tiến trình trong đoạn găng toàn quyền sử dụng tài nguyên găng cho đến hết thời gian xử lý của nó Khi kết thúc truy xuất tài nguyên găng, tiến trình ra khỏi đoạn găng, tiến trình thực hiện chỉ thị STI để cho phép ngắt trở lại Khi đó các tiến trình khác có thể tiếp tục hoạt động và có thể vào đoạn găng
Trong sơ đồ điều độ này tiến trình Pi được viết như sau:
Procedure P(i: integer);
Begin
Repeat
<Đoạn găng của P>;
<Đoạn không găng>;
Until F
End;
{ -}
Câu 2 : Trình bày sơ đồ điều độ chung cho các tiến trình Trình bày phương pháp điều độ sử
dụng khóa chung
a Program MultualExclution;
Const
N = … /*số lượng tiến trình */
{ -}
Procedure P(i: integer);
Begin
Repeat
EnterCritical(R); {kiểm tra và xác lập quyền vào đoạn găng}
<Đoạn găng của P>;
ExitCritical(R); {xác lập khi rời đoạn găng}
<Đoạn không găng của>;
Until F
End;
{ -}
BEGIN {*chương trình chính chứa các tiến trình đồng thời*}
Trang 2PerBegin
P(1);
P(2);
…
P(n);
ParEnd;
END
{ -}
b Với mỗi tài nguyên găng, hệ điều hành dùng một biến chung để điều khiển việc sử dụng tài nguyên này của các tiến trình đồng thời Tạm gọi là biến chung này là Lock, Lock được chia sẻ cho nhiều tiến trình và được khởi gán = 0
Theo đó, mỗi tiến trình trước khi vào đoạn găng phải kiểm tra giá trị của Lock:
• Nếu Lock = 1, tức là đã có tiến trình nào đó trong đoạn găng, thì tiến trình phải chờ cho đến khi Lock = 0 (có thể chuyển sang trạng thái blocked để chờ)
• Nếu Lock = 0, tức là không có tiến trình nào trong đoạn găng, thì tiến trình thiết lập quyền vào đoạn găng, đặt Lock = 1, và vào đoạn găng Tiến trình vừa ra khỏi đoạn găng phải đặt Lock = 0, để các tiến trình khác có thể vào đoạn găng
Trong sơ đồ điều độ này tiến trình P được viết như sau:
Procedure P(Lock: integer);
Begin
Repeat
While Lock = 1 DO ; {đợi cho đến khi Lock = 0}
Lock :=1; {thiết lập quyền vào đoạn găng}
<Đoạn găng của P>; {vào đoạn găng}
Lock:= 0; {thông báo là đã rời đoạn găng }
<Đoạn không găng>;
Until F
End;
{ -}
Câu 3: Một hệ thống máy tính với bộ nhớ chính có kích thước 512MB Hệ thống sử dụng địa
chỉ logic 32 bit Kích thước trang được sử dụng là 32KB Yêu cầu xác định các thông số sau:
1 Cho biết số bit dùng cho địa chỉ offset (1 điểm)
2 Số khung trang vật lý (1 điểm)
3 Số trang logic trong không gian tiến trình (1 điểm)
4 Cho địa chỉ logic 23032, yêu cầu đổi sang dạng <p, d> p là số trang, d là độ lệch trong trang (1 điểm)
Trang 3Câu 1: Tại sao phải điều độ tiến trình qua đoạn găng? Hãy trình bày phương pháp sử dụng chỉ
thị Test and Set (TSL)
a Để hạn chế các lỗi có thể xảy ra do sử dụng tài nguyên găng, hệ điều hành phải điều khiển các tiến trình sao cho, tại một thời điểm chỉ có một tiến trình nằm trong đoạn găng, nếu có nhiều tiến trình cùng muốn vào (thực hiện) đoạn găng thì chỉ có một tiến trình được vào, các tiến trình khác phải chờ, một tiến trình khi ra khỏi (kết thúc) đoạn găng phải báo cho hệ điều hành và/hoặc các tiến trình khác biết để các tiến trình này vào đoạn găng, vv Các công tác điều khiển tiến trình thực hiện đoạn găng của hệ điều
hành được gọi là điều độ tiến trình qua đoạn găng Để công tác điều độ tiến trình qua
đoạn găng được thành công, thì cần phải có sự phối hợp giữa vi xử lý, hệ điều hành và người lập trình Vi xử lý đưa ra các chỉ thị, hệ điều hành cung cấp các công cụ để người lập trình xây dựng các sơ đồ điều độ hợp lý,
b Để tổ chức điều độ cho những trường hợp như vậy, một số vi xử lý cung cấp một chỉ thị đặc biệt cho phép kiểm tra và cập nhật nội dung một vùng nhớ trong một thao tác không thể phân chia đươc, gọi là Test and Set lock (TSL) TSL được định nghĩa như sau :
Function TestAndSetLock(Var I:Integer):Boolean;
Begin
IF I = 0 Then Begin
TestAndSetLock:=True; {thể tách rời}
End Else
TestAndSetLock := False End;
{ -}
Để tổ chức điều độ tiến trình với TSL chương trình phải sử dụng biến chia sẻ Lock, khời gán bằng 0 Theo đó, mỗi tiến trình trước khi vào đoạn găng phải kiểm tra giá trị của Lock Nếu Lock = 0 thì vào đoạn găng Nếu Lock = 1 thì phải đợi cho đến khi Lock = 0 Như vậy, trước khi vào đoạn găng tiến trình phải gọi hàm TestAndSetLock, để kiểm tra giá trị trả
về của hàm này:
1 Nếu bằng False, là đang có một tiến trình trong đoạn găng, thì phải chờ cho đến khi hàm trả về True, có một tiến trình vừa ra khỏi đoạn găng
2 Nếu bằng True, thì tiến trình sẻ vào đoạn găng để sử dụng tài nguyên găng Khi kết thúc sử dụng tài nguyên găng ra khỏi đoạn găng thì tiến trình phải đặt lại gía trị của Lock, Lock = 0, để các tiến trình khác có thể vào đoạn găng
Câu 2: Trình bày sơ đồ điều độ chung cho các tiến trình Trình bày phương pháp điều độ sử
dụng khóa riêng
a Program MultualExclution;
Const
N = … /*số lượng tiến trình */
{ -}
Procedure P(i: integer);
Begin
Repeat
EnterCritical(R); {kiểm tra và xác lập quyền vào đoạn găng}
<Đoạn găng của P>;
ExitCritical(R); {xác lập khi rời đoạn găng}
<Đoạn không găng của>;
Trang 4Until F
End;
{ -}
BEGIN {*chương trình chính chứa các tiến trình đồng thời*}
PerBegin
P(1);
P(2);
…
P(n);
ParEnd;
END
{ -}
b Mỗi tiến trình sử dụng một biến khoá Lock riêng, tương ứng với một tài nguyên găng trong hệ thống Biến khoá riêng của tất cả các tiến trình đều được khởi gán bằng 0, tức
là chưa vào đoạn găng
Theo đó, mỗi tiến trình trước khi vào đoạn găng ứng với một tài nguyên găng nào đó thì trước hết phải kiểm tra biến khoá riêng, tương ứng với tài nguyên găng mà tiến trình muốn truy xuất, của tất cả các tiến trình còn lại:
1 Nếu tồn tại một biến khoá riêng của một tiến trình nào đó bằng 1, Lock = 1, tức là đã
có một tiến trình nào đó ở trong đoạn găng, thì tiến trình phải chờ ngoài đoạn găng cho đến khi tất cả biến khoá riêng = 0
2 Nếu tất cả các biến khóa riêng của các tiến trình đều = 0, Lock = 0, tức là không có tiến trình nào trong đoạn găng, thì tiến trình thiết lập quyền vào đoạn găng, đặt Lock = 1,
và vào đoạn găng Tiến trình vừa ra khỏi đoạn găng phải đặt Lock = 0, để các tiến trình khác có thể vào đoạn găng
Sau đây là sơ đồ điều độ dùng biến khoá riêng cho hai tiến trình đồng thời P1 và P2 Hai tiến trình này dùng hai biến khoá riêng là Lock1 và Lock2:
Program MultualExclution;
Const N:2;
Var
Lock1, Lock2: byte;
BEGIN
Lock1 = 0; Lock2 = 0;
ParBegin
While Lock2 = 1 Do ; {P2 đang ở trong đoạn găng } Lock1 := 1; {P1 thiết lập quyền vào đoạn găng}
<Đoạn găng của P1>;
<Đoạn không găng của P1>;
Until F
While Lock1 = 1 Do; {P1 đang ở trong đoạn găng } Lock2 := 1; {P2 thiết lập quyền vào đoạn găng}
<Đoạn găng của P2>;
<Đoạn không găng của P2>;
Until F
ParEnd
END
{ -}
Trang 5Câu 3: Một hệ thống máy tính với bộ nhớ chính có kích thước 640MB Hệ thống sử dụng địa
chỉ logic 32 bit Kích thước trang được sử dụng là 16KB Yêu cầu xác định các thông số sau:
1 Cho biết số bit dùng cho địa chỉ offset (1 điểm)
2 Số khung trang vật lý (1 điểm)
3 Số trang logic trong không gian tiến trình (1 điểm)
4 Cho địa chỉ logic 20030, yêu cầu đổi sang dạng <p, d>.(1 điểm)