Giáo trình phân tích nguyên lý làm việc của các loại tiểu trình và tiến trình phần 4 doc - Pdf 21

Sau đây là sơ đồ điều độ sử dụng monitor cho 2 tiến trình P1 và P2.
Program MultualExclution;
Monitor ……. Endmonitor; {monitor được định nghĩa như trên}
{ }
BEGIN
ParBegin
P1: Repeat
<Đoạn không găng của P1>;
<monitor>.Action
i
; {Đoạn găng của P1};
<Đoạn không găng của P1>;
Until .F.
P2: Repeat
<Đoạn không găng của P2>;
<monitor>.Action
j
; {Đoạn găng của P2};
<Đoạn không găng của P2>;
Until .F.
Parend
END.
{ }
Với monitor, việc tổ chức truy xuất độc quyền được trình biên dịch thực
hiện, nên nó đơn giản hơn cho người lập trình. Tuy nhiên hiện nay rất ít ngôn ngữ
lập trình hỗ trợ cấu trúc monitor cho lập trình.
II.3.3.c. Giải pháp trao đổi Message (thông điệp)
Khi các tiến trình có sự tương tác với tiến trình khác, hai yêu cầu cơ bản cần phải
được thỏa mãn đó là: sự đồng bộ hoá (synchronization) và sự truyền thông
(communication). Các tiến trình phải được đồng bộ để thực hiện độc quyền. Các
tiến trình hợp tác có thể cần phải trao đổi thông tin. Một hướng tiếp cận để cung

w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V

 Có nhiều tiến trình khác yêu cầu sử dụng tài nguyên găng này.
 Tiến trình có yêu cầu tài nguyên găng sẽ gởi một thông điệp đến tiến
trình kiểm soát và sau đó chuyển sang trạng thái blocked cho đến khi nhận
được một thông điệp chấp nhận cho truy xuất từ tiến trình kiểm soát tài
nguyên găng.
 Khi sử dụng xong tài nguyên găng, tiến trình vừa sử dụng tài nguyên
găng gởi một thông điệp khác đến tiến trình kiểm soát để báo kết thúc truy
xuất.
 Tiến trình kiểm soát, khi nhận được thông điệp yêu cầu tài nguyên
găng, nó sẽ chờ cho đến khi tài nguyên găng sẵn sàng để cấp phát thì gởi một
thông điệp đến tiến trình đang bị khoá trên tài ngyên đó để đánh thức tiến
trình này.
Trong sơ đồ điều độ dùng message tiến trình P được viết như sau:
Procedure P(i: Integer);
Begin
Repeat
Send(process controler, request message);
Receive(process controler, accept message );
<Đoạn găng của P>;
Send(process controler ,end message);
<Đoạn không găng của P>;
Until .F.
End;
{ }
Giải pháp này thường được cài đặt trên các hệ thống mạng máy tính, đặc biệt
là trên các hệ thống mạng phân tán. Đây là lợi thế mà semaphore (sự đánh tín hiệu
bằng cờ) và monitor không có được.
Sơ đồ điều độ dùng message phải chú ý sự đồng bộ giữa các tiến trình nhận
và giử message, nếu không các tiến trình này sẽ không thoát khỏi trạng thái
Click to buy NOW!

c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d

các tiến trình Producer và Consumer trong bài toán trên.
II.3.4.1. Giải pháp dùng Semaphore (sự đánh tín hiệu bằng cờ)
Với giải pháp này sơ đồ điều độ phải sử dụng 3 Semaphore (sự đánh tín hiệu
bằng cờ):
 Full: dùng để theo dõi số chỗ đã có dữ liệu trong bộ đệm, nó được khởi
gán bằng 0. Tức là, ban đầu Buffer rỗng.
 Empty: dùng để theo dõi số chỗ còn trống trên bộ đệm, nó được khởi
gán bằng 3. Tức là, ban đầu Buffer không chứa một phần tử dữ liệu nào.
 Mutex: dùng để kiểm tra truy xuất đồng thời trên bộ đệm, nó được khởi
gán bằng 1. Tức là, chỉ có 1 tiến trình được phép truy xuất buffre.
Sơ đồ điều độ sẽ như sau:
Program Producer/Consumer;
Var Full, Empty, Mutex: Semaphore (sự đánh tín hiệu bằng cờ);
{ }
Procedure Producer();
Begin
Repeat
< Tạo dữ liệu>;
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c

Buffer. Xử lý của các thủ tục này phụ thuộc vào các biến điều kiện full và empty.
Full và Emtry được quy định định sử dụng như trong giải pháp semaphore (sự đánh
tín hiệu bằng cờ).
Sơ đồ điều độ sẽ như sau:
Program Producer/Consumer;
Monitor ProducerConsumer;
Condition Full, Empty;
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.

w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Var Count: Integer; {để đếm số phần tử đữ liệu được đưa vào Buffer}
N: Interger; {số phần tử của Buffer}
{ }
Procedure Enter();
Begin
If Count = N Then Wait(Full); {nếu Buffer đầy thì đợi }
<Đặt dữ liệu vào đệm>; {Buffer rỗng}
Count := Count + 1;
If Count = 1 Then Signal(Empty); {nếu Buffer không rỗng thì}

-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.

-
t
r
a
c
k
.
c
o
m
Producer/Consumer.Remove;
<Xử lý dữ liệu>;
Until .F.
End;
Parend
END.
{ }
II.3.4.3. Giải pháp dùng Message
Với giải pháp này chương trình dùng thông điệp empty. Empty hàm ý có một chỗ
trống. Buffer. Khi khởi tạo tiến trình Consumer gởi ngay N thông điệp empty đến
tiến trình Producer. Tiến trình Producer tạo ra một dữ liệu mới và chờ đến khi nhận
được một thông điệp empty từ consumer thì gởi ngược lại cho Consumer một
thông điệp có chứa dữ liệu mà nó tạo ra. Sau khi gởi đi thông điệp Emtry, tiến trình
consumer sẽ chờ để nhận thông điệp chứa dữ liệu từ tiến trình producer. Sau khi xử
lý xong dữ liệu thì consumer gởi lại một thông điệp empty đến tiến trình producer.
Sơ đồ điều độ sẽ như sau:
Program Producer/Consumer;
Var
Buffersize: integer; {kích thước Buffer}
M, m’: Message;

e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h

Begin
For I := 0 to N Do Send(Producer ,m);
Repeat
Receive(Producer ,m);
<Lấy dữ liệu từ thông điệp>
Send (Producer,m);
<Xử lý dữ liệu >
Until .F.
End.
Parend
END.
{ }
 Bài toán 2: Trong môi trường hệ điều hành đa nhiệm, có thể tồn tại các file
chia sẻ, có thể là các file cơ sở dữ liệu. Nhiều tiến trình hoạt động đồng thời trong
hệ thống có thể được chia sẻ sử dụng một file cơ sở dữ liệu này. Tiến trình cần đọc
nội dung của file cơ sở dữ liệu được gọi là là tiến trình Reader. Tiến trình cần cập
nhật thông tin vào file cơ sở dữ liệu được gọi là là tiến trình Writer. Trong hệ thống
này, công tác điều độ tiến trình cần phải thực hiện các ràng buộc sau:
1. Có thể có nhiều tiến trình Reader đồng thời đọc file cơ sở dũ liệu.
2. Không cho phép một tiến trình Writer ghi vào cơ sở dữ liệu khi các tiến
trình Reader khác đang đọc cơ sở dữ liệu.
3. Chỉ có duy nhất một tiến trình Writer được phép ghi vào file cơ sở dữ
liệu
Hãy dùng các giải pháp Semafore, Monitor, Message để tổ chức điều độ cho
các tiến trình Reader và Writer trong bài toán ở trên.
II.3.4.4. Giải pháp dùng Semaphore (sự đánh tín hiệu bằng cờ)
Giải pháp này sử dụng một biến chung RC và hai semaphore (sự đánh tín hiệu bằng
cờ) là Mutex và DB.
 RC (readcount) dùng để ghi nhận số lượng các tiến trình Reader muốn
truy xuất file cơ sở dữ liệu, khởi gán bằng 0.

u
-
t
r
a
c
k
.
c
o
m
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r

Rc = Rc+1;
If Rc = 1 then Down(db);
Up(mutex); {chấm dứt truy xuất Rc}
<Đọc dữ liệu >;
Down(mutex)
Rc = Rc-1
If Rc = 0 then Up(db);
Up(mutex);
< Xử lý dữ liệu đọc được>
Until .F.
End;
{ }
Procedure Writer();
Begin
Repeat
<Tạo dữ liệu >;
Down(Db);
<cập nhận dữ liệu >
Up(db);
Until .F.
End;
ParEnd
Click to buy NOW!
P
D
F
-
X
C
h

P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a

If Rc = 0 Then Wait(okwrite);
End;
Procedure Beginwrite();
Begin
Rc = Rc - 1;
If (busy) or (Rc <> 0) Then Wait(okwrite);
Busy = True;
End;
Procedure FinishWrite()
Begin
Busy = False;
Click to buy NOW!
P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r


V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a
c
k
.
c
o
m
If (Okread) Then Signal(okread)
Else Signal(okwrite);
End;
Endmonitor.
{ }

P
D
F
-
X
C
h
a
n
g
e

V
i
e
w
e
r
w
w
w
.
d
o
c
u
-
t
r
a

o
c
u
-
t
r
a
c
k
.
c
o
m


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status