Busy waiting là kĩ thuật như thế nào

Ha hủ ục SLEEP và WAKEUP hường được sử ụng để phục vụ mục đích kểm soá ến rình vào mền găng là của:

A - B - C - D - 

Trong gả pháp "slp – wakup", ến rình sẽ ứng xử như hế nào kh chưa đủ đều kện vào mền găng?

A - 

cố gắng làm ngủ ến rình khác để nó được vào

B - 

chuyển sang ình rạng block, ừ bỏ CPU

C - 

ự đánh hức nó để nhận CPU và làm đủ đều kện vào mền găng

D - 

đánh hức ến rình khác để đẩy nó ra khỏ mền găng

Ha hàm hệ hống SLEEP và WAKEUP hoạ động ho ạng:

A - 

SLEEP được gọ bở ến rình chưa đủ đều kện vào mền găng

B - 

WAKEUP được gọ bở ến rình rong mền găng đ ra để đánh hức ến rình block

C - 

Ha ý kến a và b đều đúng

D - 

Ha ý kến a và b đều sa

Đánh gá gả huậ cho nhóm "SLEEP WAKEUP" ngườ a cho rằng:

A - B - C - 

không nên áp ụng rong kỹ huậ đồng bộ

D - 

mộ và rường hợp đặc bệ còn mâu huẫn ruy xuấ

Smaphor được Djksra đề xuấ vào 1965, mộ smaphor là mộ

A - B - C - D - 

Chỉ ra ý nào sau đây nó lên huộc ính của smaphor?

A - 

các ến rình đang bị khoá rên smaphor s luôn chờ smaphor khác

B - 

mỗ ến rình có mộ hàng đợ ham chếu đến smaphor s

C - 

các ến rình đang bị khóa rên smaphor s nằm rong hàng đợ f(s)

D - 

các smaphor luôn kểm soá hàng đợ của mộ ến rình

Đặc đểm của mộ bến smaphor s:

A - B - 

chỉ làm được up(s) và own(s)

C - 

s luôn được khở gán bằng 0

D - 

có 2 hao ác wa(s) và sgnal(s)

Dù cho phần cà đặ 2 hao ác up và own smaphor s vẫn còn lỗ làm s ến về âm nhưng ngườ a vẫn hấy được ưu đểm của nó là:

Mục êu của chương: Gớ hệu các gả pháp cụ hể để xử lý bà oán đồng bộ hoá. lGả pháp « busy wang ». lGả pháp « slp an wakup ». Kến hức snh vên phả nắm ược sau chương này: Nhệm vụ của vệc đồng bộ hóa ến rình. Hểu và áp ụng được các gả pháp đồng bộ, đặc bệ vớ các gả pháp “slp an wakup”.

26-11-2010 841 68

Downloa

Gấy phép Mạng Xã Hộ số: 670/GP-BTTTT cấp ngày 30/11/2015 Copyrgh © 2009-2019 TaLu.VN. All rghs rsrv.

TÌM HIỂU CÁC PHƯƠNG PHÁP ĐỒNG BỘ HOÁ TIẾN TRÌNH - VIẾT ỨNG DỤNG MINH HOẠ BÀI TOÁN BỮA ĂN TỐI CỦA CÁC TRIẾT GIA, SỬ DỤNG PHƯƠNG PHÁP SEMAPHORE

Bà oán “Bữa ăn ố của các rế ga” được đưa ra bở Djksra là mộ bà oán knh đển về đồng bộ hoá rong mô rường đa luồng và mnh hoạ các kỹ huậ để gả quyế chúng.

    Phả đặ ra huậ oán sao cho kh mộ rế ga bị đó hì ông a sẽ được ăn và đảm bảo không có rế ga nào bị chế đó.

    Bà học này sẽ gớ hệu các gả pháp cụ hể để xử l� bà oán đồng bộ ho�. C� nhều gả ph�p để hực hện vệc ruy xuấ mền găng, c�c gả ph�p này được phân bệ hành ha lớp ùy ho cách ếp cận rong xử lý của ến rình bị khóa :các gả pháp � busy wang � và các gả pháp � slp an wakup �.

    I. Gả pháp � busy wang �

    I.1. Các gả pháp phần mềm

    I.1.1. Sử ụng các bến cờ hệu:

    Tếp cân

    : các ến rình cha sẻ mộ bến chung đ�ng va rò � chố cửa � (lock) , bến này được khở động là 0. Mộ ến rình muốn vào mền găng rước ên phả kểm ra gá rị của bến lock. Nếu lock = 0, ến rình đặ lạ g� rị cho lock = 1 và đ vào mền găng. Nếu lock đang nhận g� rị 1, ến rình phả chờ bên ngoà mền găng cho đến kh lock c� g� rị 0. Như vậy gá rị 0 của lock mang ý nghĩa là không có ến rình nào đang ở rong mền găng, và lock=1 kh có mộ ến rình đang ở rong mền găng.

    whl (TRUE) {

    whl (lock == 1); // wa
    lock = 1;
    crcal-scon ();
    lock = 0;
    Noncrcal-scon ();

    }

    Hình 3.5

    Cấu rúc mộ chương rình sử ụng bến khóa để đồng bộ

    Thảo luận :

    Gả pháp này có hể v phạm đều kện hứ nhấ: ha ến rình có hể cùng ở rong mền găng ạ mộ hờ đểm. Gả sử mộ ến rình nhận hấy lock = 0 và chuẩn bị vào mền găng, nhưng rước kh nó có hể đặ lạ g� rị cho lock là 1, nó bị ạm ừng để mộ ến rình khác hoạ động. Tến rình hứ ha này hấy lock vẫn là 0 hì vào mền găng và đặ lạ lock = 1. Sau đ� ến rình hứ nhấ được á kích hoạ, nó gán lock = 1 lần nữa rồ vaò mền găng. Như vậy ạ hờ đểm đ� cả ha ến rình đều ở rong mền găng.

    I.1.2. Sử ụng vệc kểm ra luân phên :

    Tếp cận

    : Đ�y là mộ gả pháp đề nghị cho ha ến rình. Ha ến rình này sử ụng chung bến urn (phản ánh phên ến rình nào được vào mền găng), được khở động vớ g� rị 0. Nếu urn = 0, ến rình A được vào mền găng. Nếu urn = 1, ến rình A đ vào mộ vòng lặp chờ đến kh urn nhận gá rị 0. Kh ến rình A rờ khỏ mền găng, n� đặ g� rị urn về 1 để cho ph�p ến rình B đ vào mền găng.

    whl (TRUE) {

    whl (urn != 0); // wa
    crcal-scon ();
    urn = 1;
    Noncrcal-scon ();

    }

    (a)

    Cấu rúc ến rình A

    whl (TRUE) {

    whl (urn != 1); // wa
    crcal-scon ();
    urn = 0;
    Noncrcal-scon ();

    }

    (b)

    Cấu rúc ến rình B

    Hình 3.6

    Cấu rúc các ến rình rong gả pháp kểm ra luân phên

    Thảo luận:

    Gả pháp này ựa rên vệc hực hện sự kểm ra nghêm nhặ đến lượ ến rình nào được vào mền găng. Do đ� n� c� hể ngăn chặn được ình rạng ha ến rình cùng vào mền găng, nhưng lạ có hể v phạm đều kện hứ ba: mộ ến rình có hể bị ngăn chặn vào mền găng bở mộ ến rình khác không ở rong mền găng. Gả sử ến rình B ra khỏ mền găng rấ nhanh ch�ng. Cả ha ến rình đều ở ngoà mền găng, và urn = 0. Tến rình A vào mền găng và ra khỏ nhanh chóng, đặ lạ g� rị của urn là1, rồ lạ xử lý đoạn lệnh ngoà mền găng lần nữa. Sau đ�, ến rình A lạ kế húc nhanh chóng đoạn lệnh ngoà mền găng của n� và muốn vào mền găng mộ lần nữa. Tuy nhên lúc này B vẫn còn mã xử lý đoạn lệnh ngoà mền găng của mình, và urn lạ mang gá rị 1 ! Như vậy, gả pháp này không có gá rị kh có sự khác bệ lớn về ốc độ hực hện của ha ến rình, nó v phạm cả đều kện hứ ha.

    I.1.3. Gả pháp của Prson

    Tếp cận

    : Pson đưa ra mộ gả pháp kế hợp ý ưởng của cả ha gả pháp kể rên. Các ến rình cha sẻ ha bến chung :

    n urn; //

    đến phên a

    n nrss[2]; //

    khở động là FALSE

    Nếu nrss[] = TRUE có nghĩa là ến rình P muốn vào mền găng. Khở đầu, nrss[0]=nrss[1]=FALSE và gá rị của s được khở động là 0 hay 1. Để c� hể vào được mền găng, rước ên ến rình P đặ g� rị nrss[]=TRUE ( xác định rằng ến rình muốn vào mền găng), sau đ� đặ urn=j (đề nghị hử ến rình khác vào mền găng). Nếu ến rình Pj không quan âm đến vệc vào mền găng (nrss[j]=FALSE), hì P có hể vào mền găng, nếu kh�ng, P phả chờ đến kh nrss[j]=FALSE. Kh ến rình P rờ khỏ mền găng, n� đặ lạ g� rị cho nrss[]= FALSE.

    whl (TRUE) {

    n j = 1-;

    // j là ến rình còn lạ
    nrss[]= TRUE;
    urn = j;
    whl (urn == j && nrss[j]==TRUE);
    crcal-scon ();
    nrss[] = FALSE;
    Noncrcal-scon ();

    }

    Hình 3.7

    Cấu rúc ến rình P rong gả pháp Prson

    Thảo luận: gả pháp này ngăn chặn được ình rạng mâu huẫn ruy xuấ : mỗ ến rình P chỉ có hể vào mền găng kh nrss[j]=FALSE hoặc urn = . Nếu cả ha ến rình đều muốn vào mền găng hì nrss[] = nrss[j] =TRUE nhưng gá rị của urn chỉ có hể hoặc là 0 hoặc là 1, o vậy chỉ có mộ ến rình được vào mền găng.

    I.2. Các gả pháp phần cứng

    I.2.1. Cấm ngắ:

    Tếp cân

    : cho phép ến rình cấm ấ cả các ngắ rước kh vào mền găng, và phục hồ ngắ kh ra khỏ mền găng. Kh đ�, ngắ đồng hồ cũng kh�ng xảy ra, o vậy hệ hống kh�ng hể ạm ừng hoạ động của ến rình đang xử l� để cấp ph� CPU cho ến rình khác, nhờ đ� ến rình hện hành yên âm hao ác rên mền găng mà không sợ bị ến rình nào khác ranh chấp.

    Thảo luận:

    gả pháp này không được ưa chuộng vì rấ hếu hận rọng kh cho phép ến rình ngườ ùng được phép hực hện lệnh cấm ngắ. Hơn nữa, nếu hệ hống có nhều bộ xử lý, lệnh cấm ngắ chỉ có ác ụng rên bộ xử lý đang xử l� ến rình, còn các ến rình hoạ động rên các bộ xử lý khác vẫn có hể ruy xuấ đến mền găng !

    I.2.2.

    Chỉ hị TSL (Ts-an-S):

    Tếp cận

    : đ�y là mộ gả pháp đò hỏ sự rợ gúp của cơ chế phần cứng. Nhều máy ính cung cấp mộ chỉ hị đặc bệ cho ph�p kểm ra và cập nhậ nộ ung mộ vùng nhớ rong mộ hao ác không hể phân cha, gọ là chỉ hị Ts-an-S Lock (TSL) và được định nghĩa như sau:

    Ts-an-Slock

    (boolan arg)
    {

    Ts-an-Slock = arg;
    arg = TRUE;

    }

    Nếu có ha chỉ hị TSL xử lý đồng hờ (rên ha bộ xử lý khác nhau), chúng sẽ được xử lý uần ự . Có hể cà đặ gả ph�p ruy xuấ độc quyền vớ TSL bằng c�ch sử ụng hêm mộ bến lock, được khở gán là FALSE. Tến rình phả kểm ra gá rị của bến lock rước kh vào mền găng, nếu lock = FALSE, ến rình có hể vào mền găng.

    whl (TRUE) {

    whl (Ts-an-Slock(lock));
    crcal-scon ();
    lock = FALSE;
    Noncrcal-scon ();

    }

    Hình 3.8

    Cấu rúc mộ chương rình rong gả pháp TSL

    Thảo luận :

    cũng gống như các gả pháp phần cứng khác, chỉ hị TSL gảm nhẹ công vệc lập rình để gả quyế vấn để, nhưng lạ không ễ àng để cà đặ chỉ hị TSL sao cho được xử lý mộ cách không hể phân cha, nhấ là rên máy vớ cấu hình nhều bộ xử lý.

        Tấ cả các gả pháp rên đ�y đều phả hực hện mộ vòng lặp để kểm ra lệu n� c� được phép vào mền găng, nếu đều kện chưa cho phép, ến rình phả chờ ếp ục rong vòng lặp kểm ra này. Các gả pháp buộc ến rình phả lên ục kểm ra đều kện để ph� hện hờ đểm h�ch hợp được vào mền găng như hế được gọ các gả pháp � busy wang �. Lưu ý rằng vệc kểm ra như hế êu hụ rấ nhều hờ gan sử ụng CPU, o vậy ến rình đang chờ vẫn chếm ụng CPU. Xu hướng gả quyế vấn đề đồng bộ ho� là nên ránh các gả pháp � busy wang �.

    II. Các gả pháp � SLEEP an WAKEUP �

    Để loạ bỏ c�c bấ ện của gả ph�p � busy wang �, ch�ng a c� hể ếp cận ho h

    ướng cho mộ ến rình chưa đủ đều kện vào mền găng chuyển sang rạng h� block, ừ bỏ quyền sử ụng CPU. Để hực hện đều này, cần phả sử ụng các hủ ục o hệ đều hành cung cấp để hay đổ rạng h� ến rình. Ha hủ ục cơ bản SLEEP và WAKEUP hường được sử ụng để phục vụ mục đ�ch này.

    SLEEP

    là mộ lờ gọ hệ hống có ác ụng ạm ừng hoạ động của ến rình (block) gọ nó và chờ đến kh được mộ ến rình khác � đ�nh hức �. Lờ gọ hệ hống WAKEUP nhận mộ ham số uy nhấ : ến rình sẽ được á kích hoạ (đặ về rạng h� ray).

    Ý ưởng sử ụng SLEEP và WAKEUP như sau : kh mộ ến rình chưa đủ đều kện vào mền găng, n� gọ SLEEP để ự kh�a đến kh c� mộ ến rình khác gọ WAKEUP để gả ph�ng cho n�. Mộ ến rình gọ WAKEUP kh ra khỏ mền găng để đ�nh hức mộ ến rình đang chờ, ạo cơ hộ cho ến rình này vào mền găng :

    n busy; // 1 nếu mền găng đang bị chếm, nếu kh�ng l� 0 n block; // đếm số lượng ến r�nh đang bị kh�a whl (TRUE) {

    f (busy){
        block = block + 1;
        slp();
    }
    ls busy = 1;

    crcal-scon ();

    busy = 0;
    f(block){
        wakup(procss);
        block = block - 1;
    }

    Noncrcal-scon ();

    }

    Hình 3.9

    Cấu rúc chương rình rong gả pháp SLEEP an WAKEUP

    Kh sử ụng SLEEP và WAKEUP cần hế sức cẩn hận, nếu không muốn xảy ra ình rạng mâu huẫn ruy xuấ rong mộ và ình huống đặc bệ như sau : gả sử ến rình A vào mền găng, và rước kh nó rờ khỏ mền găng hì ến rình B được kích hoạ. Tến rình B hử vào mền găng nhưng nó nhận hấy A đang ở rong đ�, o vậy B ăng g� rị bến block và chuẩn bị gọ SLEEP để ự kho�. Tuy nhên rước kh B có hể hực hện SLEEP, ến rình A lạ được á kích hoạ và ra khỏ mền găng. Kh ra khỏ mền găng A nhận hấy c� mộ ến rình đang chờ (block=1) nên gọ WAKEUP và gảm gá rị của block. Kh đ� �n hệu WAKEUP sẽ lạc mấ o ến rình B chưa hậ sự � ngủ � để nhận �n hệu đ�nh hức !Kh ến rình B được ếp ục xử lý, nó mớ go SLEEP và ự khó vĩnh vễn !

    Vấn đề gh nhận được là ình rạng lỗ này xảy ra o vệc kểm ra ư cách vào mền găng và vệc gọ SLEEP hay WAKEUP là những hành động �ch bệ, c� hể bị ngắ nửa chừng rong qu� rình xử lý, o đ� c� kh �n hệu WAKEUP gở đến mộ ến rình chưa bị khóa sẽ lạc mấ.

    Để r�nh những

    ình huống ương ự, hệ đều hành cung cấp những cơ chế đồng bộ h�a ựa rên ý ưởng của chến lược � SLEEP an WAKEUP � nhưng được xây ựng bao hàm cả phương ện kểm ra đều kện vào mền găng g�p sử ụng an oàn.

    II.1. Smaphor

    Tếp cận:

    Được Djksra đề xuấ vào 1965, mộ smaphor s là mộ bến có các huộc ính sau:

    Mộ gá rị nguyên ương (s)

    Mộ hàng đợ f(s) lưu anh sách các ến rình đang bị kh�a (chờ) rên smaphor s

    Chỉ có ha hao ác được định nghĩa rên smaphor

    Down(s)

    : gảm gá rị của smaphor s đ 1 đơn vị nếu smaphor có rị (s) &g; 0, và ếp ục xử lý. Ngược lạ, nếu (s) £ 0, ến rình phả chờ đến kh (s) &g;0.

    Up(s)

    : ăng g� rị của smaphor s lên 1 đơn vị. Nếu có mộ hoặc nhều ến rình đang chờ rên smaphor s, bị khóa bở hao ác Down, hì hệ hống sẽ chọn mộ rong các ến rình này để kế h�c hao �c Down và cho ếp ục xử lý.

    Hình 3.10

    Smaphor s

    Cà đặ: Gọ p là ến rình hực hện hao ác Down(s) hay Up(s).

    Down(s):

    (s) = (s) - 1;

    f (s) &l; 0 {

    saus(P)= block;

    nr(P,f(s));

    }

    Up(s):

    (s) = (s) + 1;

    f s £ 0 {

    x(Q,f(s)); //Q là ến rình đang chờ rên s

    saus (Q) = ray;

    nr(Q,ray-ls);

    }

    Lưu ý cà đặ này có hể đưa đến mộ g� rị �m cho smaphor, kh đ� rị uyệ đố của smaphor cho bế số ến rình đang chờ rên smaphor.

    Đều quan rọng l

    à các hao ác này cần hực hện mộ cách không bị phân cha, không bị ngắ nữa chừng, có nghĩa là không mộ ến rình nào được phép ruy xuấ đến smaphor nếu ến rình đang hao �c rên smaphor này chưa kế húc xử lý hay chuyển sang rạng há block.

    Sử ụng:

    có hể ùng smaphor để gả quyế vấn đề ruy xuấ độc quyền hay ổ chức phố hợp gữa c�c ến rình.

    Tổ chức ruy xuấ độc quyền vớ Smaphors

    : khá nệm smaphor cho phép bảo đảm nhều ến rình cùng ruy xuấ đến mền găng mà không có sự mâu huẫn ruy xuấ. n ến rình cùng sử ụng mộ smaphor s, (s) được khở gán là 1. Để hực hện đồng bộ h�a, ấ cả c�c ến rình cần phả áp ụng cùng cấu rúc chương rình sau đ�y:

    whl (TRUE) {

    Down(s)

    crcal-scon ();

    Up(s)

    Noncrcal-scon ();

    }

    Hình 3.11

    Cấu rúc mộ chương rình rong gả pháp smaphor

    Tổ chức đồng bộ h�a vớ Smaphors

    : vớ smaphor có hể đồng bộ h�a hoạ động của ha ến rình rong ình huống mộ ến rình phả đợ mộ ến rình khác hoàn ấ hao ác nào đ� mớ c� hể bắ đầu hay ếp ục xử l�. Ha ến rình cha sẻ mộ smaphor s, khở gán (s) là 0. Cả ha ến rình có cấu rúc như sau:

    P1:

    whl (TRUE) {

    job1();
    Up(s); //đ�nh hức P2

    }

    P2:

    whl (TRUE) {

    Down(s); // chờ P1
    job2();

    }

    Hình 3.12

    Cấu rúc chương rình rong gả pháp smaphor

    Thảo luận : Nhờ có hực hện mộ các không hể phân cha, smaphor đã gả quyế được vấn đề �n hệu "đ�nh hức" bị hấ lạc. Tuy nhên, nếu lập rình vên vô ình đặ c�c prmv Down và Up sa vị rí, hứ ự rong chương rình, hì ến rình có hể bị khóa vĩnh vễn.

    Ví ụ

     : whl (TRUE) {

    Down(s)
    crcal-scon ();
    Noncrcal-scon ();

    }

    ến rình rên đ�y quên gọ Up(s), và kế quả là kh ra khỏ mền găng n� sẽ kh�ng cho ến rình khác vào mền găng !

    Vì hế vệc sử ụng đ�ng c�ch smaphor để đồng bộ h�a phụ huộc hoàn oàn vào lập rình vên và đò hỏ lập rình vên phả hế sức hận rọng.

    II.2. Monors

    Tếp cận:

    Để c� hể ễ vế đ�ng c�c chương rình đồng bộ h�a hơn, Hoar(1974) và Brnch & Hansn (1975) đã đề nghị mộ cơ chế cao hơn được cung cấp bở ngôn ngữ lập rình , là monor. Monor là mộ cấu rúc đặc bệ bao gồm c�c hủ ục, c�c bến và cấu rúc ữ lệu có các huộc ính sau :

    Các bến và cấu rúc ữ lệu bên rong monor chỉ có hể được hao ác bở các hủ ục định nghĩa bên rong monor đ�. (ncapsulaon).

    Tạ mộ hờ đểm, chỉ c� mộ ến rình uy nhấ được hoạ động bên rong mộ monor (muual xclusv).

    Trong mộ monor, có hể định nghĩa c�c bến đều kện và ha hao ác kèm ho là Wa và Sgnal như sau : gọ c là bến đều kện được định nghĩa rong monor:

    Wa(c)

    : chuyển rạng há ến rình gọ sang block , và đặ ến rình này vào hàng đợ rên bến đều kện c.

    Sgnal(c)

    : nếu có mộ ến rình đang bị kh�a rong hàng đợ của c, á kích hoạ ến rình đ�, và ến rình gọ sẽ rờ khỏ monor.

    Hình 3.13

    Monor v� c�c bến đều kện

    Cà đặ : rình bên ịch chịu rách nhệm hực hện vệc ruy xuấ độc quyền đến ữ lệu rong monor. Để hực hện đều này, mộ smaphor nhị phân hường được sử ụng. Mỗ monor có mộ hàng đợ oàn cục lưu các ến rình đang chờ được vào monor, ngoà ra, mỗ bến đều kện c cũng gắn vớ mộ hàng đợ f(c) và ha hao ác rên đ� được định nghĩa như sau:

    Wa(c) :

     

    saus(P)= block;
    nr(P,f(c));

    Sgnal(c)

    f (f(c) != NULL){

    x(Q,f(c)); //Q là ến rình chờ rên c
    sausQ) = ray;
    nr(Q,ray-ls);

    }

    Sử ụng:

    Vớ mỗ nhóm à nguyên cần cha sẻ, có hể định nghĩa mộ monor rong đ� đặc ả ấ cả c�c hao �c rên à nguyên này vớ mộ số đều kện nào đ�.:

    monorconon; ; procur Acon1(); { } .... procur Aconn(); { } n monor;

    Hình 3.14

    Cấu rúc mộ monor

    Các ến rình muốn sử ụng à nguyên chung này chỉ có hể hao ác hông qua các hủ ục bên rong monor được gắn kế vớ à nguyên: