Thực hiện Down/Up S Trạng thái của 1/

Một phần của tài liệu Tiến trình và các loại tiến trình doc (Trang 27 - 32)

11. P1 Down(S) 0 P1 hoạt động 1. P1 Down(S) 0 P1 hoạt động 2. P2 Down(S) -1 P2 chờ 3. P1 Up(S) 0 P2 hoạt động 4. P1 Down(S) -1 P1 chờ 5. P2 Down(S) 0 P1 hoạt động

Ví dụ 2: Nếu trong hệ thống có 6 tiến trình hoạt động đồng thời, cùng sử dụng tài nguyên găng, tài nguyên găng này chỉ cho phép một tiến trình truy xuất đến nó tại một thời điểm. Tức là hệ điều hành phải tổ chức truy xuất độc quyền trên tài nguyên găng này. Thứ tự yêu cầu sử dụng tài nguyên găng của các tiến trình, cùng với thời gian mà tiến trình cần processor khi nó ở trong đoạn găng (cần tài nguyên găng) và độ ưu tiên của các tiến trình, được mô tả như sau:

• Có 6 tiến trình yêu cầu sử dụng tài nguyên găng tương ứng với S

lần lượt là: A B C D E F

• Độ ưu tiên của các tiến trình là (5 là độ ưu tiên cao nhất): 1 1 2 4 2 5

• Thời gian các tiến trình cần sử dụng tài nguyên găng là: 4 2 2 2 1 1

Nếu dùng sơ đồ điều độ semaphore ở trên để tổ chức điều độ cho 6 tiến trình này thì ta có được bảng mô tả sự thực hiện của các tiến trình A, B, C, D, E, F như sau:

T Down/

Up Tiến trình thực hiện S Tiến trình hoạt động trong hàng đợiCác tiến trình

0 - - 1 - - 1 Down A 0 A - 2 Down B -1 A B 3 Down C -2 A C B 4 Down D -3 A D C B 5 Up A -2 D C B 6 Down E -3 D C E B 7 Up D -2 C E B 8 Down F -3 C F E B 9 Up C -2 F E B 10 Up F -1 E B 11 Up E 0 B - 12 Up B 1 - -

Bảng trên lưu ý với chúng ta hai điều. Thứ nhất, trị tuyệt đối của S cho biết số lượng các tiến trình trong hành đợi F(S). Thứ hai, tiến trình chưa được vào đoạn găng thì được đưa vào hàng đợi và tiến trình ra khỏi đoạn găng sẽ đánh thức tiến trình có độ ưu tiên cao nhất trong hành đợi để đưa nó vào đoạn găng. Tiến trình được đưa vào hàng đợi sau nhưng có độ ưu tiên cao hơn sẽ được đưa vào đoạn găng trước các tiến trình được đưa vào hàng đợi trước nó.

II.3.3.b. Giải pháp dùng Monitors

Giải pháp này được Hoar đề xuất năm 1974 sau đó vào năm 1975 được Brinch & Hansnen đề xuất lại. Monitor là cấu trúc phần mềm đặc biệt được cung cấp bởi ngôn ngữ lập trình, nó bao gồm các thủ tục, các biến và các cấu trúc dữ liệu được định nghĩa bởi Monitor. Monitor được định nghĩa trong các ngôn ngữ lập trình như pascal+, Modula–2, Modula-3. Monitor của Hoar có các tính chất sau đây:

1. Các biến và cấu trúc dữ liệu bên trong monitor chỉ có thể được thao tác bởi các thủ tục được định nghĩa bên trong monitor đó.

2. Một tiến trình muốn vào monitor phải gọi một thủ tục của monitor đó. 3. Tại một thời điểm, chỉ có một tiến trình duy nhất được hoạt động bên trong monitor. Các tiến trình khác đã gọi monitor phải hoãn lại để chờ monitor rảnh.

Hai tính chất 1 và 2 tương tự như các tính chất của các đối tượng trong lập trình hướng đối tượng. Như vậy một hệ điều hành hoặc một ngôn ngữ lập trình hướng đối tượng có thể cài đặt monitor như là một đối tượng có các tính chất đặc biệt.

Với tính chất thứ 3 monitor có khả năng thực hiện các cơ chế độc quyền, các biến trong monitor có thể được truy xuất chỉ bởi một tiến trình tại một thời điểm. Như vậy các cấu trúc dữ liệu dùng chung bởi các tiến trình có thể được bảo vệ bằng cách đặt chúng bên trong monitor. Nếu dữ liệu bên trong monitor là tài nguyên găng thì monitor cung cấp sự độc quyền trong việc truy xuất đến tài nguyên găng đó.

Monitor cung cấp các công cụ đồng bộ hoá để người lập trình sử dụng trong các sơ đồ điều độ. Công cụ đồng bộ hoá được định nghĩa để sử dụng trong các sơ đồ điều độ như sau: Trong một monitor, có thể định nghĩa các biến điều kiện và hai thao tác kèm theo là Wait và Signal, chỉ có wait và signal được tác động đến các biến điều kiện.

• Giả sử C là biến điều kiện được định nghĩa trong monitor.

Wait(c): khi một tiến trình gọi wait, thì wait sẽ chuyển tiến trình gọi sang trạng thái blocked, và đặt tiến trình này vào hàng đợi trên biến điều kiện c. Wait được cài đặt như sau:

Procedure Wait(c); Begin

Status(p) = blocked; Enter(p,f(c)); End;

Signal(c): khi một tiến trình gọi signal, thì signal sẽ kiểm tra trong hàng đợi của c có tiến trình nào hay không, nếu có thì tái kích hoạt tiến trình đó, và tiến trình gọi signal sẽ rời khỏi monitor. Signal được cài đặt như sau:

Procedure Signal(c); Begin

If f(c) <> Null Then Begin

Exit(Q,f(c)); {Q là tiến trình chờ trên C} Status(Q) = ready;

Enter(Q,ready-lits); end;

End,

Trình biên dịch chịu trách nhiệm thực hiện việc truy xuất độc quyền đến dữ liệu trong monitor. Để thực hiện điều này, hệ điều hành dùng một semaphore nhị phân. Mỗi monitor có một hàng đợi toàn cục lưu các tiến trình đang chờ được vào monitor, ngoài ra mỗi biến điều kiện c cũng gắn với một hàng đợi F(c).

Với mỗi nhóm tài nguyên găng, có thể định nghĩa một monitor trong đó đặc tả tất cả các thao tác trên tài nguyên này với một số điều kiện nào đó. Sau đây là cấu trúc một Monitor. Sau đây là cấu trúc của monitor:

Monitor <Tên monitor>

{---} Procdure Action1(); {thao tác i} Begin

... End;

{---}

Procedure Actionn(); {thao tác n} Begin

... End;

{---} End monitor;

Mỗi tiến trình muốn sử dụng tài nguyên găng chỉ có thể thao tác thông qua các thủ tục bên trong monitor.

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>.Actioni; {Đ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>.Actionj ; {Đ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 cấp cả hai chức năng đó là sự truyền thông điệp (message passing). Truyền thông điệp có ưu điểm là có thể thực hiện được trên cả hai hệ thống uniprocessor và multiprocessor, khi các hệ thống này hoạt động trên mô hình bộ nhớ chia sẻ

Các hệ thống truyền thông điệp có thể có nhiều dạng. Trong phần này chúng tôi giới thiệu một dạng chung nhất mà trong đó đề cập đến các đặc trưng có trong nhiều hệ thống khác nhau. Các hàm của truyền thông điệp trên thực tế có dạng tương tự như hai hàm sau:

• Send(destination, message): gởi thông điệp đến tiến trình

đích.

• Receive(source, message): nhận thông điệp từ tiến trình

nguồn.

Một tiến trình gởi thông tin dưới dạng một thông điệp (message) đến một tiến trình khác, bằng hàm Send, được nhận biết bởi tham số destination. Một tiến trình nhận thông điệp (message), bằng hàm Receive, từ một tiến trình được nhận biết bởi tham số source. Tiến trình gọi Receive phải chờ cho đến khi nhận được message từ tiến trình source thì mới có thể tiếp tục được.

Việc sử dụng Send và Receive để tổ chức điều độ được thực hiện như sau:

• Có một tiến trình kiểm soát việc sử dụng tài nguyên găng.

• 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.

{---}

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 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 blocked để tiếp tục được. Điều này cũng có nghĩa là công tác điều độ có thể không thành công mặc dù sơ đồ điều độ đã được tổ chức rất tốt. Sau đây chúng ta sẽ xem xét về sự đồng bộ giữ tiến trình send và tiến trình receiver trong trường hợp này.

Một phần của tài liệu Tiến trình và các loại tiến trình doc (Trang 27 - 32)

Tải bản đầy đủ (DOC)

(52 trang)
w