P1: while (TRUE) {

Một phần của tài liệu CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH docx (Trang 61 - 65)

a) Cm ng t: ắ

P1: while (TRUE) {

while (TRUE) { job1(); Up(s); //đánh th c P2ứ } P2: while (TRUE) { Down(s); // chờ P1 job2(); }

Hình 3.12 C u trúc chấ ương trình trong gi i pháp semaphoreả

Nh có th c hi n m t các không th phân chia, semaphore đã gi i quy t đờ ự ệ ộ ể ả ế ược v n đ tín hi u "đánh th c" b th t l c. Tuy nhiên, n u l p trình viên vô tình đ t cácấ ề ệ ứ ị ấ ạ ế ậ ặ primitive Down và Up sai v trí, th t trong chị ứ ự ương trình, thì ti n trình có th b khóaế ể ị vĩnh vi n.ễ Ví dụ : while (TRUE) { Down(s) critical-section (); Noncritical-section (); }

ti n trình trên đây quên g i Up(s), và k t qu là khi ra kh i mi n găng nó sế ọ ế ả ỏ ề ẽ không cho ti n trình khác vào mi n găng !ế ề

Vì th vi c s d ng đúng cách semaphore đ đ ng b hóa ph thu c hoànế ệ ử ụ ể ồ ộ ụ ộ toàn vào l p trình viên và đòi h i l p trình viên ph i h t s c th n tr ng.ậ ỏ ậ ả ế ứ ậ ọ

b). Monitors

Ti p c n:ế ậ Đ có th d vi t đúng các chể ể ễ ế ương trình đ ng b hóa h n,ồ ộ ơ Hoare(1974) và Brinch & Hansen (1975) đã đ ngh m t c ch cao h n đề ị ộ ơ ế ơ ược cung c p b i ngôn ng l p trình , là ấ ở ữ ậ monitor. Monitor là m t c u trúc đ c bi t bao g m cácộ ấ ặ ệ ồ th t c, các bi n và c u trúc d li u có các thu c tính sau : ủ ụ ế ấ ữ ệ ộ

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 đ nh nghĩa bên trong monitor đó. (ủ ụ ị encapsulation).

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ạ ộ m t monitor (ộ mutualexclusive).

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 Signal nh sau : g i ư ọ c là bi n đi u ki n đế ề ệ ược đ nh nghĩa trongị monitor:

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

Signal(c): n u có m t ti n trình đang b khóa trong hàng đ i c a ế ộ ế ị ợ ủ c, tái kích ho t ti n trình đó, và ti n trình g i s r i kh i monitor.ạ ế ế ọ ẽ ờ ỏ

Cài đ t :ặ 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, m t semaphore nh phân thế ữ ệ ể ự ệ ề ộ ị ường được s d ng. 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à hai thao tác trên đó được đ nh nghĩa nh sau:ị ư

Wait(c) : status(P)= blocked; enter(P,f(c)); Signal(c) : if (f(c) != NULL){ exit(Q,f(c)); //Q là ti n trình ch trên cế ờ statusQ) = ready; enter(Q,ready-list); }

S d ng: V i m i nhóm tài nguyên c n chia s , 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 đó.: ặ ả ấ ả ớ ộ ố ề ệ

monitor <tên monitor >

condition <danh sách các bi n đi u ki n>;ế ề ệ

<déclaration de variables>; procedure Action1(); { } .... procedure Actionn(); { } end monitor;

Hình 3.14 C u trúc m t monitorấ ộ

Các ti n trình mu n s d ng tài nguyên chung này ch có th thao tác thông quaế ố ử ụ ỉ ể các th t c bên trong monitor đủ ụ ược g n k t v i tài nguyên:ắ ế ớ

while (TRUE) { Noncritical-section (); <monitor>.Actioni; //critical-section(); Noncritical-section (); } Hình 3.15 C u trúc ti n trình Piấ ế trong gi iả pháp monitor

V i monitor, vi c truy xu t đ c quy n đớ ệ ấ ộ ề ược b o đ m b i trình biên d ch màả ả ở ị không do l p trình viên, do v y nguy c th c hi n đ ng b hóa sai gi m r t nhi u.ậ ậ ơ ự ệ ồ ộ ả ấ ề Tuy nhiên gi i pháp monitor đòi h i ph i có m t ngôn ng l p trình đ nh nghĩa kháiả ỏ ả ộ ữ ậ ị ni m monitor, và các ngôn ng nh th ch a có nhi u.ệ ữ ư ế ư ề

c). Trao đ i thông đi pổ

Ti p c n:ế ậ gi i pháp này d a trên c s trao đ i thông đi p v i hai primitiveả ự ơ ở ổ ệ ớ Send và Receive đ th c hi n s đ ng b hóa:ể ự ệ ự ồ ộ

Send(destination, message): g i m t thông đi p đ n m t ti n trình hay g iở ộ ệ ế ộ ế ở vào h p th . ộ ư

Receive(source,message): nh n m t thông đi p th m t ti n trình hay t b tậ ộ ệ ừ ộ ế ừ ấ kỳ m t ti n trình nào, ti n trình g i s ch n u không có thông đi p nào đ nh n.ộ ế ế ọ ẽ ờ ế ệ ể ậ

S d ng:ử ụ Có nhi u cách th c đ th c hi n vi c truy xu t đ c quy n b ng cề ứ ể ự ệ ệ ấ ộ ề ằ ơ ch trao đ i thông đi p. Đây là m t mô hình đ n gi n: m t ti n trình ki m soát vi cế ổ ệ ộ ơ ả ộ ế ể ệ s d ng tài nguyên và nhi u ti n trình khác yêu c u tài nguyên này. Ti n trình có yêuử ụ ề ế ầ ế c u tài nguyên 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.Khi s d ng xong tài nguyên , ti n trình 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. V ph n ti n trìnhệ ế ế ể ể ế ấ ề ầ ế ki m soát , khi nh n để ậ ược thông đi p yêu c u tài nguyên, nó s ch đ n khi tàiệ ầ ẽ ờ ế nguyên s n sàng đ c p phát thì g i m t thông đi p đ n ti n trình đang b khóa trênẵ ể ấ ở ộ ệ ế ế ị

while (TRUE) {

Send(process controler, request message); Receive(process controler, accept message);

critical-section ();

Send(process controler, end message); Noncritical-section (); (adsbygoogle = window.adsbygoogle || []).push({});

}

Hình 3.16 C u trúc ti n trình yêu c u tài nguyên trong gi i pháp messageấ ế ầ ả Các primitive semaphore và monitor có th gi i quy t để ả ế ược v n đ truy xu tấ ề ấ đ c quy n trên các máy tính có m t ho c nhi u b x lý chia s m t vùng nhộ ề ộ ặ ề ộ ử ẻ ộ ớ chung. Nh ng các primitive không h u d ng trong các h th ng phân tán, khi mà m iư ữ ụ ệ ố ỗ b x lý s h u m t b nh riêng bi t và liên l c thông qua m ng. Trong nh ng hộ ử ỡ ữ ộ ộ ớ ệ ạ ạ ữ ệ th ng phân tán nh th , c ch trao đ i thông đi p t ra h u hi u và đố ư ế ơ ế ổ ệ ỏ ữ ệ ược dùng để gi i quy t bài toán đ ng b hóa. ả ế ồ ộ

Một phần của tài liệu CHƯƠNG 1: TỔNG QUAN VỀ HỆ ĐIỀU HÀNH docx (Trang 61 - 65)