Model ZADANIE AKTYWNE :<:2ΰ8- &( Ada Randki (spotkania) w Adzie ZHM FLHΓ ZHM FLHΓ ZADANIE BIERNE 35=<-08- &( U Ady Zasady ZHM FLHΓ =DGDQLHVNαDGDVL ]HVSHF\ILNDFMLRUD]WUH FL 6SHF\ILNDFMDPR H]DZLHUDόW\ONRGHNODUDFMHZHM όdqjentries) task Buffer is entry Append (I: in integer); entry Take (I: out integer); end Buffer; =DGDQLHF]\QQHPR HZ\ZRαDόZHM FLHBuffer.Append(15) :WUH FL]DGDQLDELHUQHJRV RSLVDQHF]\QQR FLGRNRQ\ZDQHZ WUDNFLHUDQGNLSRSU]H]GDQHZHM FLH task body Buffer is {... } accept Append (I: in integer) do ^RSLVF]\QQR FL` end Append; {... } end Buffer; Ada str. 1
6\QFKURQL]DFMDPL G]\]DGDQLHPDNW\ZQ\PZ\ZRαXM F\P ZHM FLHD]DGDQLHPELHUQ\PV\PHWU\F]QHF]HNDQLH Wzajemne wykluczanie.rohmnl]zl ]DQH]LQVWUXNFMDPLaccept V UHDOL]RZDQHMDNR kolejki proste Semantyka randki 1. =DGDQLHF]\QQHZ\ZRαXM FHZHM FLHSU]HND]XMHSDUDPHWU\ aktualne in i inoutgr]dgdqldelhuqhjrl]dzlhv]dvl Z RF]HNLZDQLXQD]DNR F]HQLHUDQGNL 2. =DGDQLHELHUQHZ\NRQXMHLQVWUXNFMHZWUH FLRGSRZLHGQLHJR ZHM FLD 3. Parametry out i inoutv SU]HND]\ZDQHGR]DGDQLDF]\QQHJR 4. 5DQGNDNR F]\VL NRQW\QXDFMD]DGD Charakterystyka randki jako operacji pierwotnej Synchroniczna komunikacja bez bufowania $V\PHWU\F]QDLGHQW\ILNDFMD]DGD 'ZXNLHUXQNRZ\SU]HSα\ZGDQ\FK :\NRQ\ZDQLHFL JXLQVWUXNFML 6NαDGQLD Instrukcja when w1 DFFHSWZHM FLHGR,HQGZHM FLH instrukcje-poza-rejonem-krytycznym-1; when w2 DFFHSWZHM FLHGR,HQGZHM FLH instrukcje-poza-rejonem-krytycznym-2;... else I-inne; {terminate; lub delay T; I-inne;} end ; Ada str. 2
Semantyka 1. 6]XNDQLHRWZDUW\FKJDα ]LW\FK]SUDZG]LZ\PLGR]RUDPL-H OL ich nie ma az brak frazy elsewreα G 2. -H OLV ]DGDQLDF]\QQHRF]HNXM FHZNROHMNDFKSU]\ZHM FLDFK RWZDUW\FKJDα ]LWRUR]SRF]\QDVL UDQGND]pierwszym zadaniem w niedeterministyczniez\eudqhmjdα ]LRWZDUWHM 3. -H OLZV]\VWNLHNROHMNLZRWZDUW\FKJDα ]LDFKV SXVWHRUD]QLH ma else, delay ani terminate, to zadanie bierne zostaje ]DZLHV]RQH*G\W\ONRMDNLH ]DGDQLHF]\QQH]JαRVLFK όzhm FLD GRRWZDUWHMJDα ]LWRUR]SRF]\QDVL ]QLPUDQGNDXZDJD GR]RU\QLHV MX ZDUWR FLRZDQHF]\OL]ELyURWZDUW\FKJDα ]LQLH ]PLHQLDVL 4. Randka przebiega standardowo 5. 3R]DNR F]HQLXUDQGNL]DGDQLHELHUQHZ\NRQXMHinstrukcje-pozarejonem-krytycznym 6. Mamy else-h OLQLHPDRWZDUW\FKJDα ]LDOERNROHMNLZ RWZDUW\FKV SXVWHWRMHVWZ\NRQ\ZDQ\FL JLQVWUXNFMLI-inne 7. Mamy delay-h OLNROHMNLZRWZDUW\FKJDα ]LDFKV SXVWHWR zadanie bierne czeka, ale tylko T jednostek, a potem wykonuje I- inne 8. Mamy terminate:vnuyflhsrzrgxmh]dnr F]HQLH]ELRUX ]DGD MH OLLQVWUXNFMD jest zawieszona i wszystkie HZHQWXDOQH]DGDQLDDNW\ZQH]DNR F]\α\VL OXEWH F]HNDM Z ]JDα ]L terminate 3URJUDPRZDQLH]X \FLHP =Z\NαDUDQGNDLPSOHPHQWXMHPHFKDQL]P53&Remote Procedure Call). Fraza uogσlnia RPC Fraza delay implementuje ograniczony czas oczekiwania Ada str. 3
task body T is accept czujnik-1 do... ; accept czujnik-2 do... ; delay 0.1; -- 100 milisekund Alarm; end ; end T; Fraza else MHVWUyZQRZD QDdelay z zerem. Implementuje rodzaj przepytywania (ang. pollingvsudzg F]\QLHPDNRPXQLNDWyZ GRSU]HWZRU]HQLDLMH OLQLHWRZ\NRQXMQRUPDOQHF]\QQR FL Kilkakrotne accept GODWHJRVDPHJRZHM FLD DFFHSW(GRHQG(QLHSDU]\VWHZ\ZRαDQLD DFFHSW(GRHQG(SDU]\VWHZ\ZRαDQLD Instrukcje po acceptprj E\όSXVWH7DNDIRUPDVαX \GR synchronizacji, np. kzystania z zasobu task body zasσb is accept Chce; accept Zwalnia; end zasσb;,qvwuxnfmhudqgnlprj ]DZLHUDόZHZQ WU]LQQHUDQGNLDOER Z\ZRαDQLDZHM όnrqvwuxnfmhwdnlhpdm ]QDF]Q VLα Z\UD]X Ada str. 4
6\QFKURQL]DFMDWU]HFK]DGD task body T1 is... DFFHSW6\QFKUGR7Z\ZRαXMHWRZHM FLH DFFHSW6\QFKU7Z\ZRαXMHWRZHM FLH end Synchr-2;... end T1; =DGDQLH7E G]LH]DZLHV]RQHGRSyW\GRSyNLQLHQDVW SLUDQGND ]7-H OL7]JαRVLVL SLHUZV]HGR7WRE G]LHRF]HNLZDαRZ NROHMFHZHM FLRZHMD SRMDZLVL 7RFRQDPFKRG]L Select w zadaniu czynnym =DGDQLHF]\QQHPR H]DZLHVLόVL MHG\QLHF]HNDM FQDMHGQR ZHM FLHQLHPDZ\ZRαD ZLHOXZHM όqdud] 3U]\NαDGQDZ\NRU]\VWDQLHRJUDQLF]RQHJRF]DVXRF]HNLZDQLDZ ]DGDQLXF]\QQ\P-H OLZRNUH ORQ\PF]DVLHVHNF]XMQLNQLH zareaguje, to zostanie poinfmowany operat task body T is Sens.sample (...); delay 1.0; -- w sekundach Notify-operat; end ; end T; $QNLHWRZDQLHNLONX]DGD REVαXJXM F\FKVHUZHUyZ]DGDQLH F]\QQHDQJD XMHVL ZUDQGN W\ONRZWHG\JG\VHUZHUMHVW Ada str. 5
QDW\FKPLDVWGRVW SQ\:W\PXM FLXMH OLMHVWNLONXF]HNDM F\FK VHUZHUyZWRUDQGNDRGE G]LHVL ]ND G\P task body T is Server-1.E (...); else null; end ; Server-2.E (...); else null; end ;... end T; 6SRWNDQLH]MHGQ\P]RF]HNXM F\FKVHUZHUyZ task body T is Server-1.E (...); else Server-2.E (...); else... end ; end ; end T; Priytety type Priities is (Low, Medium, High); task Server is entry Request (Priities) (...); Ada str. 6
end Server; task body Server is accept Request (High) (...)...; when Request (High) Count = 0 accept Request (Medium) (...)...; when Request (High) Count = 0 and Request (Medium) Count = 0 accept Request (Low) (...)...; end ; end Server; 6HUYHU5HTXHVW+LJKZ\ZRαDQLH Semaf package Mutex-Package; task type Simple-Mutex is entry Wait; entry Signal; end Simple-Mutex; task type Mutex is entry Init (N: in Integer); entry Wait; entry Signal; end Mutex; end Mutex-Package; package body Mutex-Package is task body Simple-Mutex is Ada str. 7
accept Wait; accept Signal; terminate; end ; end Simple-Mutex; task body Mutex is Count: Integer; accept Init (N: in Integer) do Count := N; end Init; when Count > 0 accept Wait do Count := Count - 1; end Wait; accept Signal do Count := Count + 1; end Signal; terminate; end ; end Mutex; end Mutex-Package; 6NαDGQLD$G\ Predefiniowane typy: Integer, Float, Character, Boolean, String Typy wyliczeniowe: type States is (Off, Run, Start); Ada str. 8
Tablice type Arr is array (1..100) of Integer; Rekdy type Rec is recd field1: Integer; field2: Boolean; end recd; :VND QLNL type Rec_Pointer is access Rec; Instrukcje if A > B then & $WHQ UHGQLNMHVWZD Q\ elsif A < B then C := B; else C := 0; end if; f I in 1..10 A(I) := 0; while X > 0 X := X/2; X := X/2; exit when X <= 0; PakietWR]ELyUGHNODUDFMLGDQ\FKLSURFHGXUNWyU\PR QD RGG]LHOQLHNRPSLORZDόXPLHV]F]DόZELEOLRWHFHLXGRVW SQLDό LQQ\PSDNLHWRPE G SURJUDPRZLJαyZQHPX AtrybutWRIXQNFMDSU]HND]XM FDZDUWR όsuhghilqlrzdqhm ZLHONR FL]ZL ]DQHM]RELHNWHP S: String (1..80); Ada str. 9
if S Length < 50 then PQLHMQL HOHPZ6 S(S Last) := S(S First); -- wstaw na koniec, to co end if; QDSRF] WNX f I in S Range -- dla wszystkich elementσw w S S(I) := * ; Typ zadaniowy (task type): dla zadeklarowania kilku LGHQW\F]Q\FK]DGD GHNODUXMHVL W\S]DGDQLRZ\DQDVW SQLH ZLHOHZFLHOH WHJRW\SX Ada str. 10