Ada pakiety ogólna struktura

Podobne dokumenty
Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 2. Temat zajęć: pakiety, zadania, synchronizacja czasowa, mechanizm spotkań

Wstęp do programowania 2

Wyjątki - wprowadzenie

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix)

Wstęp do programowania 2

Ada-95. Dariusz Wawrzyniak

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

Wprowadzenie do programowania współbieżnego

Materiały do laboratorium MS ACCESS BASIC

Programowanie strukturalne

Programowanie współbieżne i rozproszone

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Podstawy programowania komputerów

Wykład 8: klasy cz. 4

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wstęp do programowania 2

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Programowanie współbieżne i rozproszone

Język UML w modelowaniu systemów informatycznych

Bloki anonimowe w PL/SQL

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Szkolenia specjalistyczne

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

Modelowanie procesów współbieżnych

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

TECHNOLOGIE OBIEKTOWE WYKŁAD 2. Anna Mroczek

Wykład 4: Klasy i Metody

Oracle11g: Programowanie w PL/SQL

Współbieżność w środowisku Java

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

4. Procesy pojęcia podstawowe

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Pakiety podprogramów Dynamiczny SQL

Programowanie współbieżne Wykład 2. Iwona Kochańska

Programowanie w Turbo Pascal

Multimedia JAVA. Historia

Podstawy programowania skrót z wykładów:

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Pojedyncze wartości zadeklarowanego typu Ustawiane przed rozpoczęciem symulacji bez moŝliwości

4. Procesy pojęcia podstawowe

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

LibreOffice Calc VBA

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Podstawy Programowania C++

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

1 Wprowadzenie do bloków nazwanych 1. 2 Parametry 2. 3 Procedury i funkcje 3. 4 Pakiety 6. 5 Podsumowanie Źródła 10

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

PODSTAWY BAZ DANYCH 13. PL/SQL

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Funkcje i instrukcje języka JavaScript

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

ZASADY PROGRAMOWANIA KOMPUTERÓW

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

Wstęp do programowania

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Zakres tematyczny dotyczący podstaw programowania Microsoft Office Excel za pomocą VBA

Aplikacje w Javie- wykład 11 Wątki-podstawy

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie obiektowe

Język PL/SQL Procedury i funkcje składowane

kiedy znowu uzyska sterowanie, to podejmuje obliczenie od miejsca, w którym poprzednio przerwała, i z dotychczasowymi wartościami zmiennych,

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Podstawy Programowania semestr drugi. Wykład czternasty

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Laboratorium 6 DIAGRAM KLAS (Class Diagram)

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Język programowania PASCAL

Klasyczne problemy współbieżności. Problem producenta i konsumenta Problem czytelników i pisarzy Problem pięciu filozofów

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

PL/SQL. Zaawansowane tematy PL/SQL

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Procedury i funkcje składowane

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Opracował: Jan Front

Zaawansowane programowanie obiektowe - wykład 5

15. Funkcje i procedury składowane PL/SQL

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Programowanie obiektowe

Szybkie prototypowanie w projektowaniu mechatronicznym

Wstęp do programowania 2

Transkrypt:

Ada pakiety ogólna struktura -- Specyfikacja pakietu: package Nazwa is [Deklaracje_Stałych] [Deklaracje_Typów] [Deklaracje_Zmiennych] [Specyfikacje_Podprogramów] [private [Deklaracje_Stałych] [Deklaracje_Typów] ] end Nazwa; -- Treść pakietu: package body Nazwa is [Wewnętrzne_Deklaracje] begin [Instrukcje_Inicjalizujące_Pakiet] end Nazwa; 1

Ada pakiety przykład -- Specyfikacja pakietu (plik stack.ads): package Stack is procedure Push(X:Integer); function Pop return Integer; end Stack; 2

Ada pakiety przykład -- Treść pakietu (plik stack.adb): package body Stack is size: constant := 100; A: array(1..size) of Integer; Top: Integer range 0..Size; procedure Push(X: Integer) is begin If Top = size then return; end if; Top:=Top + 1; A(Top):=X; end Push; function Pop return Integer is begin Top:= Top - 1; return A(Top+1); end Pop; begin top:=0; -- nadanie wartości poczatkowej end Stack; 3

Ada pakiety przykład -- Zastosowanie pakietu (plik main.adb): with Ada.Text_IO; use Ada.Text_IO; with ada.integer_text_io; use ada.integer_text_io; with Ada.Float_Text_IO; use Ada.Float_Text_IO; with Stack; use Stack; procedure main is M: Integer :=12; L: Integer :=125; begin Push(M); Push(L); Put(Pop); Put(pop); end Main; 4

Ada wskaźniki -- Typy wskaźnikowe alokowane w specjalnej puli pamięci (heap): type Item; type Item_Ptr is acces Item; -- niepełna deklaracja typu -- wskaźnik do typu type Item is record Value: Integer; Next: Item_Ptr; end record; -- element listy jednokierunkowej 5

Ada wskaźniki -- Podstawowe operacje na wskaźnikach: I1: Item_Ptr: new Item (10,null); -- powołanie i inicjalizacja -- nowego obiektu I2: Item_Ptr; I2:= new Item (5,I1); I1:=I2; I1.Value:=I2.Value; I1.Next :=I2.Next; -- dołączenie elementu listy -- kopiowanie wskaźników (oba -- pokazują na ten sam obiekt) -- kopiowanie pól I1.all :=I2.all; -- Kopiowanie wszystkich pól I1 = I2 I.all = I2.all -- Sprawdzenie czy oba -- wskaźniki pokazują na -- ten sam obiekt -- Porównanie, czy wszystkie -- pola rekordów są równe 6

Programowanie współbieżne System czasu rzeczywistego powinien mieć możliwość współbieżnej obsługi zdarzeń ponieważ zwykle jego otoczenie składa się z wielu obiektów, które działają współbieżnie i generują odpowiednie zdarzenia wymagające obsługi. Wymagania jednoczesnej obsługi narzucają współbieżną strukturę systemu. Własność współbieżności istotnie zmienia podejście do projektowania i programowania. Pojawia się tu eksplozja kombinatoryczna możliwych zachowań procesów współbieżnych uniemożliwiająca pokrycie testami wszystkich stanów systemu. Programowanie współbieżne dotyczy notacji i technik programowania umożliwiających specyfikację potencjalnej równoległości oraz rozwiązywanie zagadnień synchronizacji i komunikacji. 7

Proces, współbieżność Proces jest pewnym obiektem dynamicznym, charakteryzującym się zbiorem stanów i pewną relacją (funkcją) określającą następstwo stanów. Dowolne dwa procesy nazywamy współbieżnymi, jeśli jeden z nich może rozpocząć się przed zakończeniem drugiego 8

Uproszczony diagram stanów procesu Non-existing Created Ready Abort Running Terminated Suspended 9

Fazy zadania w programowaniu współbieżnym Non-existing Created Initializing Terminated Executable 10

Programowanie współbieżności Konstrukcje umożliwiające programowanie współbieżności: 1. Deklarowanie procesów 2. Współprogramy (corutines) 3. Mechanizm fork-join 4. Konstrukcja cobegin-coend 5. Wątki w standardzie POSIX 11

1. Deklarowanie procesów Programowanie współbieżności Istnieje możliwość zdefiniowania sekwencyjnych fragmentów programu (np. procedur/funkcji) w postaci procesów, dla których określa się, czy mogą być wykonywane współbieżnie. 12

2. Współprogramy (corutines) Programowanie współbieżności umożliwiają naprzemienne wykonywanie rożnych wątków. Podstawowa zasadą jest tu symetryczny mechanizm wywołania i powrotu miedzy współprogramami. Coroutine A Coroutine B Coroutine C 6 1 resume B 7 2 8 3 resume C 9 resume A 4 14 5 resume A 13 resume B 6 12 resume B 11 10 15 12 resume c 13

3. Mechanizm fork-join Programowanie współbieżności instrukcja fork powoduje współbieżną aktywację podprogramu. Instrukcja join umożliwia procesowi wykonującemu fork synchronizację z zakończeniem wykonywania współbieżnie wykonywanego podprogramu. wątki fork join fork join czas proces wykonywany proces zawieszony moment wykonania instrukcji 14

4. Konstrukcja cobegin-coend Programowanie współbieżności umożliwia specyfikację współbieżnie aktywowanych sekwencji instrukcji. Zakończenie następuje, gdy wszystkie zostaną wykonane. sekwencje instrukcji cobegin coend czas sekwencja wykonywana sekwencja zakończona moment wykonania instrukcji 15

5. Wątki w standardzie POSIX Programowanie współbieżności Klasyczny mechanizm systemu UNIX fork-wait, Wielowątkowe procesy powoływane i usuwane przez odpowiednie funkcje interfejsu. 16

Zadania w języku Ada Podstawowym mechanizmem programowania współbieżności w języku Ada są zadania, Zadanie jest interpretowane jako proces, który może się wykonywać współbieżnie z innymi procesami (zadaniami), Każde zadanie może zawierać inne zadania kreowane statycznie lub dynamicznie (możliwość tworzenia hierarchii zadań), Zadania są aktywizowane po zakończeniu opracowywania ich deklaracji, Usunięcie zadania jest realizowane, jeśli: Istnieją przesłanki do usunięcia (zadanie wykonało ostatnią instrukcję lub osiągnęło instrukcję terminate, lub wykonano na nim instrukcję abort), Spełnione są warunki do usunięcia zadania, bez utraty spójności programu (wszystkie zadania zależne są usunięte lub oczekują na usunięcie). 17

Zadania w języku Ada przykład wstępny procedure Example1 is -- zadanie może być definiowane -- w procedurze lub pakiecie lub zadaniu task type A_Type; -- zdefiniowanie typu zadaniowego task type B_Type; A: A_Type; -- utworzenie zadań B: B_Type; task body A is begin end A; -- lokalne deklaracje dla zadania A -- sekwencja instrukcji dla zadania A task body B is -- lokalne deklaracje dla zadania B begin -- sekwencja instrukcji dla zadania B end B; begin -- Zadania A i B rozpoczną swoje wykonywanie -- przed pierwszą instrukcją sekwencji -- instrukcji należących do procedury. -- System składa się z 3 (!) współbieżnych procesów: -- zadań A i B oraz procedury Example1 end Example1; -- procedura zakończy się dopiero -- gdy zakończą działanie oba zadania 18

Zadania w języku Ada przegląd możliwości tworzenia Zadania w języku Ada mogą być: Zgrupowane w tablice Składnikami rekordów Powoływane dynamicznie Składnikami innych zadań (można tworzyć hierarchię zadań) 19

Zadania w języku Ada fazy wykonywania Aktywacja wykonywana w trakcie tzw. Opracowywania częsci deklaracyjnej zadania; w wyniku aktywacji zadanie wraz z danymi lokalnymi zostają utowrzone oraz zadanie jest inicjowane. Wykonywanie wykonywane są poszczególne instrukcje zapisane we wnętrzu zadania. Zakończenie Osiągnięcie ostatniej instrukcji lub Zgłoszenie wyjątku, który nie może być obsłużony lub Wykonanie instrukcji terminate w rozgałęzieniu select (dalsze wykłady) lub Wykonanie na zadaniu instrukcji abort. (Usunięcie zadania jest możliwe jedynie, w warunkach, gdy nie zaburzy to spójności aplikacji, tzn. jeśli wszystkie inne zadania są usunięte, lub oczekują na usunięcie) 20

Zadania w języku Ada przykład: szkielet sterownika robota procedure main is type dimension is (os1, os2, os3); task type control(dim : dimension); -- parametr wywołania! procedure move_arm(d: dimension; P: Integer) is begin null; end; procedure new_setting(d: dimension; P: Integer) is begin null; end; task body control is position : integer; -- bezwzględna pozycja setting : integer; -- względne przemieszczenie begin position := 0; -- resetuj pozycję loop move_arm(dim, position); new_setting(dim, setting); position := position + setting; end loop; end control; C1 : control(os1); C2 : control(os2); C3 : control(os3); begin null; end main; 21

Zadania w języku Ada przykład: prosty system wbudowany Termopara ADC Przetwornik ciśnienia T Przełącznik P ADC Grzałka S Ekran DAC Pompa/Zawór Generalny cel, to utrzymanie temperatury i ciśnienia w zadanych przedziałach i przekazywanie bieżącego stanu zmieżonych wielkości na ekran. 22

Prosty system wbudowany możliwe architektury oprogramowania Można stworzyć pojedynczy program ignorując logiczną współbieżność procesów T, P i S. Nie jest wtedy wymagane wsparcie systemu operacyjnego (Można zaproponować aplikację dla mikrokontrolera jednoukładowego z podłączonymi odpowiedniki peryferiami). T, P i S mogą być sekwencyjnymi programami lub procedurami i można zastosować składniki systemu operacyjnego do stworzenia współbieżnych procesów i określenia zależności miedzy nimi. Można utworzyć pojedynczy współbieżny program zachowujący strukturę obiektów T, P i S. Nie trzeba znać wtedy funkcji systemu operacyjnego; wymagane będzie odpowiednie środowisko programowe do uruchomienia aplikacji (dołączony do systemu operacyjnego podsystem uruchomieniowy) Które podejście zastosować? 23

Prosty system wbudowany zdefiniowanie pakietów pomocniczych package Data_Types is type Temp_Reading is new Integer range 10..500; type Pressure_Reading is new Integer range 0..750; type Heater_Setting is (On, Off); type Pressure_Setting is new Integer range 0..9; end Data_Types; Potrzebne typy danych with Data_Types; use Data_Types; package IO is procedure Read(TR : out Temp_Reading); -- z ADC procedure Read(PR : out Pressure_Reading); Procedury procedure Write(HS : Heater_Setting);-- do przeł. wymiany procedure Write(PS : Pressure_Setting); -- do DAC danych z procedure Write(TR : Temp_Reading); -- do Ekranu otoczeniem procedure Write(PR : Pressure_Reading);-- do Ekranu end IO; 24

Prosty system wbudowany procedury sterujące with Data_Types; use Data_Types; package Control_Procedures is -- procedury odczytujące stan otoczenia -- i generujące odpowiednie ustawienia. procedure Temp_Convert(TR : Temp_Reading; HS : out Heater_Setting); procedure Pressure_Convert(PR : Pressure_Reading; PS : out Pressure_Setting); end Control_Procedures; 25

Prosty system wbudowany ROZWIĄZANIE SEKWENCYJNE with Data_Types; use Data_Types; with IO; use IO; with Control_Procedures; use Control_Procedures; procedure Controller is TR : Temp_Reading; PR : Pressure_Reading; HS : Heater_Setting; PS : Pressure_Setting; begin loop Read(TR); -- z ADC Temp_Convert(TR,HS); Write(HS); -- do przełącznika Write(TR); -- na ekran Read(PR); Pressure_Convert(PR,PS); Write(PS); Write(PR); end loop; -- nieskończona pętla end Controller; Nie jest wymagany system operacyjny 26

Prosty system wbudowany ROZWIĄZANIE SEKWENCYJNE - DYSKUSJA Odczyt temperatury i ciśnienia następuje z jednakową częstotliwością Zastosowanie liczników i instrukcji warunkowych może poprawić sytuację Może zaistnieć potrzeba rozdzielanie procedur konwertujących Temp_Convert i Pressure_Convert, aby umożliwić niezależne wykonywanie obliczeń i odpowiednie rozłożenie prac W czasie czekania na odczyt temperatury nie można przekazać uwagi oprogramowania na ciśnienie (i na odwrót) Uszkodzenie np. kanału odczytu temperatury powodujące zawieszenie procedury odczytującej Dead spowoduje równocześnie blokadę możliwości odczytu stanu ciśnienia. 27

Prosty system wbudowany POPRAWIONE ROZWIĄZANIE SEKWENCYJNE with Data_Types; use Data_Types; with IO; use IO; with Control_Procedures; use Control_Procedures; procedure Controller is TR : Temp_Reading; PR : Pressure_Reading; HS : Heater_Setting; PS : Pressure_Setting; Ready_Temp, Ready_Pres : Boolean; begin loop if Ready_Temp then Read(TR); Temp_Convert(TR,HS); Write(HS); Write(TR); end if; if Ready_Pres then Read(PR); Pressure_Convert(PR,PS); Write(PS); Write(PR); end if; end loop; end Controller; Jakie tu są problemy? 28

Prosty system wbudowany POPRAWIONE ROZWIĄZANIE SEKWENCYJNE - DYSKUSJA Rozwiązanie bardziej niezawodne Program spędza większość czasu na odpytywanie urządzeń wejściowych, czy są gotowe Takie aktywne oczekiwanie zdecydowanie obniża wydajność i w szeregu systemach jest nie do przyjęcia. Programy o takiej strukturze są trudne do zaprojektowania, zrozumienia i udowodnienia poprawności. Głównym zarzutem wobec podejścia sekwencyjnego jest fakt, że program nie odzwierciedla, że podsystem sterowania ciśnieniem i podsystem sterowania temperaturą są niezależne. Mając do dyspozycji środowisko do tworzenia aplikacji współbieznych można by było zaprogramować każdy z tych podsystemów jako zadanie. 29

Prosty system wbudowany ROZWIĄZANIE WSPÓŁBIEŻNE Z ZASTOSOWANIEM MECHANZMÓW SYSTEMU OPERACYJNEGO 1 package OSI is type Thread_ID is private; type Thread is access procedure; function Create_Thread(Code : Thread) return Thread_ID; -- other subprograms procedure Start(ID : Thread_ID); private type Thread_ID is...; end OSI; 30

Prosty system wbudowany ROZWIĄZANIE WSPÓŁBIEŻNE Z ZASTOSOWANIEM MECHANZMÓW SYSTEMU OPERACYJNEGO 2 package Processes is procedure Temp_C; procedure Pressure_C; end Processes; with IO; use IO; with Control_Procedures; use Control_Procedures; package body Processes is procedure Temp_C is TR : Temp_Reading; HS : Heater_Setting; begin loop Read(TR); Temp_Convert(TR,HS); Write(HS); Write(TR); end loop; end Temp_C; 31

Prosty system wbudowany ROZWIĄZANIE WSPÓŁBIEŻNE Z ZASTOSOWANIEM MECHANZMÓW SYSTEMU OPERACYJNEGO 3 procedure Pressure_C is PR : Pressure_Reading; PS : Pressure_Setting; begin loop Read(PR); Pressure_Convert(PR,PS); Write(PS); Write(PR); end loop; end Pressure_C; end Processes; 32

Prosty system wbudowany ROZWIĄZANIE WSPÓŁBIEŻNE Z ZASTOSOWANIEM MECHANZMÓW SYSTEMU OPERACYJNEGO 4 with OSI, Processes; use OSI, Processes; procedure Controller is TC, PC : Thread_ID; begin TC := Create_Thread(Temp_C'Access); PC := Create_Thread(Pressure_C'Access); Start(TC); Start(PC); end Controller; Lepsze, bardziej niezawodne rozwiązanie Dla realnych SO rozwiązanie może okazać się trudne do odczytu 33

Prosty system wbudowany ROZWIĄZANIE WSPÓŁBIEŻNE Z ZASTOSOWANIEM ZADAŃ JĘZYKA ADA with Data_Types; use Data_Types; with IO; use IO; with Control_Procedures; use Control_Procedures; procedure Controller is task Temp_Controller; task body Temp_Controller is TR : Temp_Reading; HS : Heater_Setting; begin loop Read(TR); Temp_Convert(TR,HS); Write(HS); Write(TR); end loop; end Temp_Controller; begin null; end Controller; task Pressure_Controller; task body Pressure_Controller is PR : Pressure_Reading; PS : Pressure_Setting; begin loop Read(PR); Pressure_Convert(PR,PS); Write(PS); Write(PR); end loop; end Pressure_Controller; 34

Zalety podejścia współbieżnego Zadania sterujące wykonują się współbieżnie w nieskończonych pętlach Jeśli zadanie oczekuje na odczyt danych, to inne może zostać wykonywane; jeśli oba zadania są zawieszone, to nie jest wykonywana pusta pętla Struktura logiczna aplikacji jest odzwierciedlona w kodzie programu. Naturalna współbieżność zewnętrznych procesów jest odwzorowana w strukturze współbieżnych zadań. 35

Wady zaproponowanego podejścia Oba zadania wysyłają dane do wyświetlacza, ale wyświetlacz jest zasobem, do którego tylko jeden proces powinien mieć w danej chwili prawo do zapisu Wymagane jest powołanie trzeciego elementu systemu rozwiązującego problem współbieżnego dostępu do niewspółbieżnego zasobu Powinno być również zapewnione, że dane od każdego sterownika zostaną przekazane do ekranu Ekran musi zapewnić wzajemne wykluczenie dostępu do siebie Całe podejście wymaga wsparcia od systemu uruchomieniowego. 36

Co stosować współbieżność oferowaną przez SO, czy współbieżność zaszytą w języku programowania? Argumenty za współbieżnością na poziomie języka programowania Program jest łatwiejszy do śledzenia i pielegnacji Jest wiele systemów operacyjnych i zastosowanie nadrzędnego języka jest bardziej przenośne (por. Java) W komputerach wbudowanych może nie być systemu operacyjnego, a może istnieć system uruchomieniowy dla języka Ada Argumenty przeciw współbieżności na poziomie języka programowania Prościej jest skomponować programy napisane w różnych językach,jeśli stworzono je pod dany system operacyjny Mogą pojawić się trudności w stworzeniu efektywnego współbieżnego środowiska uruchomieniowego ponad warstwą systemu operacyjnego Pojawiają się standardy dla systemów operacyjnych To co stosować? 37

PODSUMOWANIE Większość aplikacji czasu rzeczywistego jest z natury współbieżna Zawarcie procesu/zadania wewnątrz języka programowania czasu rzeczywistego znacząco zmienia podejście do tworzeia aplikacji Bez współbieżności oprogramowanie czasu rzeczywistego ma zwykle postać pojedynczej pętli sterującej Struktura takiej pętli nie oddaje realnej struktury zewnętrznego (współbieżnego) środowiska systemu. Trudno jest zweryfikować czasowe i niezawodnościowe wymagania aplikacji bez możliwości skorzystania z pojęcia procesu/zadania. 38