kolos z wykładów

SYSTEMY CZASU RZECZYWISTEGO

KOLOKWIUM Z WYKŁADÓW

  1. Wątki, procesy, synchronizacja

Grupa 17:

  1. Definicja wątku

Wątek to pojedyncza ścieżka przebiegu sterowania wykonywana w ramach procesu.

  1. Czy watek może mieć wiele procesów ? NIE

3. Funkcja która pozwala na przełączania miedzy procesami

Procedura szeregująca (scheduler) – część systemu operacyjnego, wykonująca funkcję wybierania ze zbioru wątków gotowych wątku, który ma być teraz wykonywany.

4. Co się wykona szybciej - utworzenie procesu czy wątku ? Wątku

5. Co robi funkcja wait()?

Składnia: pid_t wait(int * status)

status– status kończonego procesu

Działanie: oczekiwanie na zakończenie procesu potomnego

Funkcja zwraca:

– >0 PID zakończonego procesu

– -1, gdy brak jest procesów potomnych

Działanie funkcji wait()jest następujące:

1. Gdy żaden proces potomny się nie zakończył, funkcja wait()powoduje zablokowanie procesu macierzystego aż do zakończenia się jakiegoś procesu potomnego. Jeśli ten się zakończy, zwracany jest jego PID oraz status.

2. Gdy jakiś proces potomny zakończył się, zanim wykonano funkcję wait(), nie występuje blokada procesu macierzystego. Funkcja zwraca PID zakończonego procesu oraz jego status.

3. Gdy brak jakichkolwiek procesów potomnych, funkcja wait()zwraca -1.

6. Typ trzeciej zmiennej w funkcji pthread_create

Działanie: utworzenie wątku

Składnia: int pthread_create( pthread_t *thread, pthread_attr_t *attr,void (* func)(void *), *arg)

thread – identyfikator wątku – wartość jest nadawana przez system operacyjny i służy do identyfikacji wątku

attr – atrybuty wątku, gdy NULL, przyjęte są wartości domyślne; struktura ta podaje różne szczegóły określające wykonanie wątku

func – wskaźnik do funkcji zawierającej kod wątku; jest to funkcja typu void*(*)(void*).

arg – argument przekazywany jako parametr do wątku; jest on typu void*

Funkcja zwraca 0, gdy sukces, a -1, w razie wystąpienia błędu.

Gdy wątek zostanie utworzony, zaczyna się wykonywać kod zawarty w funkcji func(). Gdy funkcja ta się kończy, także i wątek ulega zakończeniu. Do wątku można przekazywać parametry jako argument typu void*będący parametrem funkcji.

7. Co to jest zakleszczenie ?

Zbiór wątków jest w stanie zakleszczenia, jeżeli każdy wątek z tego zbioru czeka na zasób, który może być zwolniony tylko przez inny wątek tego samego zbioru.
1. Producent czeka na zmniejszenie zmiennej licznik, które może być wykonane

tylko przez konsumenta.

2. Konsument czeka na zwolnienie muteksu, co może być wykonane przez producenta.

Tak więc producent czeka na konsumenta, konsument na producenta, a aplikacja ulega

zablokowaniu. Sytuację taką nazywamy zakleszczeniem.

Grupa 20:

1.Jak jednordzeniowy procesor obsługuje wiele wątków?

Gdy wątki wykonywane są wykonywane współbieżnie na maszynie jednoprocesorowej, to wykonywane są one w trybie podziału czasu procesora nazywanego też przeplotem. Polega on na przełączaniu procesora pomiędzy wątkami i inicjowany jest przerwaniami.

  1. Czy wątki dziedziczą zmienne lokalne? NIE

„Jednak wątki mają też swoje prywatne atrybuty i zasoby, zwłaszcza zmienne lokalne utrzymywane

na prywatnym stosie wątku.”

  1. Jak działa spawn*() ?

Tworzy proces potomny z możliwością przekazania do procesu potomnego deskryptorów otwartych plików. Jest to połączenie funkcji fork() i exec(). Fork() tworzy kontekst nowego procesu, a exec() wypełnia go nową treścią.

spawn() - Utworzenie procesu potomnego z możliwością przekazania do procesu potomnego deskryptorów

otwartych plików

  1. Czy proces jest dynamiczny czy statyczny ? Dynamiczny

  2. Co to są wyścigi ?

Wyścigi – konstrukcje występujące w aplikacji współbieżnej powodujące, że wynik aplikacji w sposób przypadkowy zależy od czasu wykonania pewnych ciągów instrukcji.

Sytuację, gdy wyniki obliczeń w sposób przypadkowy zależą od czasu wykonania pewnych ciągów instrukcji, nazywamy wyścigami.

6. co określa priorytet wątku
W praktyce procedura szeregująca nie podaje statycznego wyliczenia, kiedy który wątek ma być wykonywany. Decyzje szeregujące są podejmowane na bieżąco na skutek określonych zdarzeń i uwzględniają atrybuty wszystkich gotowych do wykonania wątków. Atrybuty te to: priorytet wątku, stan wątku i przydzielona mu strategia szeregowania.
Priorytet wątku jest miarą pilności danego wątku względem innych wątków wykonywanych na tym samym komputerze.

7. co to jest program
Można powiedzieć, że program jest zapisem

algorytmu wraz ze strukturami danych, na których algorytm ten operuje. Algorytm zwykle bywa zapisany w jednym z wielu języków programowania, ale ostatecznie wykonywany jest kod maszynowy. Mówiąc o programie, możemy mieć na myśli wydruk kodu źródłowego, kod źródłowy programu umieszczony w pliku w pamięci dyskowej, skompilowany kod wynikowy w pamięci dyskowej czy też w pamięci operacyjnej. Pojęcie programu nie jest więc jednoznaczne. Program jest zapisem algorytmu operującego na pewnych strukturach danych.

Program = algorytm + struktury danych.

Grupa 18:

  1. Definicja procesu

Proces jest wykonującym się programem. Jest to aktywna struktura dynamiczna istniejąca tylko w środowisku działającego komputera. Aby proces mógł się wykonywać, potrzebne są co najmniej takie zasoby sprzętowe jak: procesor, pamięć operacyjna i urządzenia wejścia-wyjścia. Proces można rozpatrywać jako zbiór wątków i zestaw zasobów.

  1. Czy program jest dynamiczny czy statyczny ? Statyczny

  2. Jak działa funkcja fork() ?

Tworzy proces potomny będący kopią procesu bieżącego. Jego atrybuty, jak i większość zasobów, jest dziedziczona z procesu macierzystego.

Składnia: pid_t fork(void)

Działanie: utworzenie kopii procesu bieżącego

Funkcja tworzy kopię procesu bieżącego. Funkcja zwraca:

– 0 w procesie potomnym,

– >0 w procesie macierzystym jest zwracany PID procesu potomnego,

– -1gdy wystąpił błąd.

  1. Czy wątek dziedziczy zmienne globalne TAK

  2. Co to jest kontekst procesu ?

Kontekst procesu to wszystkie informacje potrzebne do wznowienia zawieszonego wcześniej procesu.

Możemy powiedzieć, że kontekst zawiera wszystkie informacje, które trzeba zapamiętać, aby zawieszony proces dało się potem wznowić. W szczególności należy zachować takie informacje, które nowy proces zamazuje. W skład kontekstu wchodzą rejestry procesora, w tym licznik rozkazów

  1. Co robi pthread_create ?

Działanie: utworzenie wątku

Każdy wątek może utworzyć inny wątek w ramach tego samego procesu. Robi to za pomocą funkcji pthread_create(). Funkcja ta tworzy wątek, którego kod znajduje się w funkcji podanej jako argument func(). Wątek jest uruchamiany z parametrem arg, a informacja o wątku jest umieszczana w strukturze thread.

7. czy jeśli fork zwraca 0, to jest potomny czy macierzysty

potomny

  1. Komunikacja między procesami

Przesłanie komunikatu(ang. message passing)pomiędzy procesami jest przesłaniem pomiędzy nimi pewnej liczby bajtów według ustalonego protokołu. Przesłanie komunikatu jest operacją atomową.

W systemie QNX6 Neutrino mechanizm przesyłania komunikatów pełni fundamentalną rolę. Przesyłanie komunikatów jest zaimplementowane na poziomie mikrojądra. Proces wysyłający komunikat jest nazywany klientem, a proces odbierający komunikaty serwerem.

Przesłanie komunikatu składa się z trzech faz:

  1. Wysłania komunikatu od procesu klienta do serwera. Proces klienta ulega zablokowaniu, a komunikat odblokowuje proces serwera (o ile był zablokowany).

2. Serwer przetwarza komunikat i przesyła odpowiedź do klienta.

3. Proces klienta po otrzymaniu odpowiedzi ulega odblokowaniu.

Mikrojądro Neutrino implementuje pewien elementarny zestaw mechanizmów.

Mechanizmy te są następujące:

1. Komunikaty i impulsy – (ang. messages, pulses)

2. Sygnały – (ang. signals)

3. Zegary – (ang. clocks)

4. Czasomierze – (ang. timers)

5. Procedury obsługi przerwań – (ang. interrupt handlers)

6. Semafory – (ang. semaphores)

7. Blokady wzajemnego wykluczania – muteksy (ang. mutual exclusion lock)

8. Zmienne warunkowe (ang. conditional variables)

9. Bariery (ang. barriers)

Oprócz mechanizmów komunikacji międzyprocesowej implementowanych przez mikrojądro Neutrino, mechanizmy komunikacji międzyprocesowej typowe dla standardu POSIX 1003 zaimplementowano jako zewnętrzne względem mikrojądra administratory. Są to:

1. Łącza nienazwane – (ang. pipes).

2. Łącza nazwane – (ang. named pipes).

3. Wspólna pamięć – (ang. shared memory).

4. Kolejki komunikatów – (ang. message queues).

Za pomocą łączy procesy mogą wymieniać pomiędzy sobą dane i synchronizować wzajemnie szybkość swojego działania. Łącza wykorzystują standardowe funkcje dostępu do plików niskiego poziomu.

Łącza nienazwane

Łącze nienazwane (ang. pipe) można wyobrazić sobie jako rodzaj „rury bajtowej” łączącej dwa procesy. Łącze nienazwane implementowane jest jako bufor cykliczny. Jeden z procesów pisze do łącza, a drugi z niego czyta. Łącze tworzy się poprzez wykonanie funkcji pipe().

Podstawowe własności łączy nienazwanych:

Łącza nazwane

Łącza nienazwane mogą być wykorzystane tylko w przypadku, gdy komunikujące się procesy pozostają w relacji macierzysty–potomny. Zastosowanie łączy nazwanych zwanych też plikami FIFO pozwala na uniknięcie tego ograniczenia. Pliki fifo tworzone są w pamięci operacyjnej, widziane są jednak w przestrzeni nazw plików i mają zwykłe atrybuty pliku, w tym prawa dostępu. Plik FIFO tworzy się za pomocą funkcji mkfifo().

Plik utworzony funkcją mkfifo() należy następnie otworzyć, używając funkcji open(). Należy w tym miejscu podkreślić, że otwierane pliku FIFO może doprowadzić do zablokowania procesu bieżącego. Proces otwierający plik FIFO do odczytu będzie blokowany do czasu, gdy inny proces nie otworzy pliku do zapisu. Podobnie proces otwierający plik FIFO do zapisu będzie blokowany do momentu, aż inny proces nie otworzy pliku do odczytu.

Komunikaty

W systemie QNX6 Neutrino podstawową metodą komunikacji międzyprocesowej są komunikaty. Komunikaty przesyłane są pomiędzy procesem klienta a serwera za pośrednictwem połączeń i kanałów. Serwer tworzy kanały i oczekuje w nich komunikatów od klienta. Z kolei klient tworzy połączenie do kanału i wysyła do połączenia komunikaty. Zaimplementowane w systemie komunikaty dzielą się na:

Komunikaty wieloczęściowe mają zastosowanie w administratorach systemów plików, a te na ogół są już zaimplementowane. Wysyłanie komunikatu blokuje wątek wysyłający, co nie zawsze jest do zaakceptowania.

Tworzenie połączenia do serwera za pomocą funkcji ConnectAttach()wymaga znajomości:

Tworzenie kanałów i połączeń

W systemie QNX6 Neutrino komunikaty nie są przesyłane bezpośrednio pomiędzy procesami, ale korzystają z obiektów pośrednich nazywanych kanałami. Kanał jest miejscem, z którego proces serwera może obierać komunikaty. Proces klienta może tworzyć połączenia do tych kanałów i poprzez takie połączenia wysyłać do serwera komunikaty.

Pierwszą czynnością, którą należy wykonać przy implementacji serwera, jest utworzenie kanału, do którego może się włączyć wielu klientów. Kanał jest własnością procesu, w którym tworzący go wątek jest zawarty. Wątki, które chcą się skomunikować z danym kanałem:

W każdym z przypadków powinny one utworzyć połączenie z kanałem docelowym za pomocą funkcji ConnectAttach(). Kanał tworzy się funkcjią ChannelCreate()

Komunikaty wysyłane są do kanału za pomocą funkcji MsgSend(), MsgSendPulse() i innych. Są one umieszczane w kolejce do kanału zgodnie z priorytetami. Komunikat może być odebrany z kanału funkcją MsgReceive(). Gdy jakiś wątek odbierze komunikat, zyskuje on priorytet wątku wysyłającego, co nazywa się dziedziczeniem priorytetów (priority inheritance). Dziedziczenie priorytetów zapobiega omówionemu już mechanizmowi inwersji priorytetów. Jeżeli wątek klienta ma wysoki priorytet, to obsługujący go wątek serwera powinien mieć taki sam priorytet, aby obsługiwać go właściwie. Pierwotny priorytet wątku może być przywrócony za pomocą wykonania funkcji MsgReceive() odbierającej komunikat z kanału –1. Dziedziczenie priorytetów można też zablokować, używając flagi _NTO_CHF_FIXED_PRIORITY w funkcji tworzącej kanał.

Usunięcie kanału

Gdy kanał nie będzie już używany, powinien być zamknięty. Zamknięcia kanału dokonuje się za pomocą funkcji ChannelDestroy().

Gdy kanał jest kasowany, wszystkie wątki zablokowane na kanale z powodu wykonania funkcji MsgSend() i MsgReceive()będą odblokowane.

Tworzenie połączenia

Gdy wątek chce wysłać komunikat do jakiegoś kanału, musi utworzyć z kanałem tym połączenie. Połączenie jest tworzone przez funkcję ConnectAttach(). Jako argument należy podać identyfikator węzła NID (Node Descriptor), z którym się komunikujemy (0, gdy jest to ten sam węzeł), PID procesu, do którego należy kanał i identyfikator kanału CHID.

Zamykanie połączenia

Gdy połączenie nie jest już potrzebne, powinno być zamknięte. Zamknięcie połączenia następuje poprzez wykonanie funkcji ConnectDetach()

Wszystkie wątki zablokowane na tym połączeniu zostaną odblokowane, a funkcje MsgSend()zwrócą kod błędu.

Funkcje wysyłania, odbioru i potwierdzania komunikatów

Komunikacja w systemie QNX6 Neutrino odbywa się pomiędzy procesem wysyłającym komunikat (klientem) a procesem go odbierającym i przesyłającym odpowiedź (serwerem).

Pojedyncza transakcja komunikacyjna składa się z trzech faz:

1. Wysłanie komunikatu przez klienta do serwera.

2. Odbiór komunikatu przez serwer.

3. Przesłanie przez serwer odpowiedzi do klienta.

Komunikat wysyła się za pomocą funkcji MsgSend(). Po wykonaniu tej funkcji proces P1 odblokowuje proces serwera P2 wykonujący funkcję MsgReceive(), a sam ulega zablokowaniu. Będzie on odblokowany, gdy serwer prześle odpowiedź. Jeśli nie ma klientów oczekujących na danym kanale, serwer P2 blokuje się przy wykonaniu funkcji MsgReceive(). Odblokuje się, jeśli klient prześle do kanału komunikat. Gdy w kanale są jakieś komunikaty, proces serwera nie ulega zablokowaniu.

W systemie QNX6 Neutrino występuje znaczna liczba funkcji operujących na komunikatach. Jednak większość aplikacji nie wymaga użycia aż tak wielu funkcji. Zwykle wystarcza minimalny zestaw funkcji operujących na komunikatach, który obejmuje funkcje: MsgSend(), MsgReceive(), MsgReply() oraz omówione wcześniej funkcje ChannelCreate() i ConnectAttach().

Należy zauważyć, że funkcja ta służy zarówno do wysłania komunikatu, jak i do odbioru odpowiedzi. Działanie funkcji zależy od tego, czy jakiś wątek oczekuje na dane na danym kanale. Gdy nie oczekuje, proces wysyłający blokuje się (jest w stanie SEND_BLOCKED). W momencie pojawienia się procesu odbierającego, następuje przesłanie danych i przejście do stanu REPLY_BLOCKED. Dopiero gdy proces serwera przyśle odpowiedź, nastąpi odblokowanie procesu wysyłającego. Jeśli jakiś wątek oczekuje na dane, to przesłanie komunikatu ma miejsce natychmiast i proces przechodzi do stanu REPLY_BLOCKED.

Odbiór komunikatu

Komunikat może być odebrany z kanału poprzez wykonanie funkcji MsgReceive().

Działanie funkcji zależy od tego, czy w danym kanale czeka jakiś komunikat. Jeśli tak jest, wątek bieżący nie blokuje się i komunikat zostaje skopiowany do bufora msg. Gdy w kanale brak komunikatu, wątek bieżący blokuje się w oczekiwaniu na przyjście takiego komunikatu. Jeżeli długość komunikatu jest większa od długości bufora, zostaje on przycięty do długości bufora. Kiedy w kanale czeka więcej komunikatów, są one kolejkowane zgodnie z priorytetami wątków wysyłających. Odbiór komunikatu powoduje zmianę stanu wątku wysyłającego na stan REPLY_BLOCKED.

Przesłanie odpowiedzi na komunikat

Po odebraniu komunikatu należy na niego odpowiedzieć, aby przekazać do klienta komunikat zwrotny i odblokować wątek klienta. Na komunikat odpowiada się, używając funkcji MsgReply().

Wykonanie funkcji spowoduje przesłanie do wątku identyfikowanego przez rcvidkomunikatu z bufora msg. Wątek ten musi być w stanie REPLY_BLOCKED, a po otrzymaniu odpowiedzi nastąpi jego odblokowanie. Zawarta w nim funkcja wysyłająca zwróci informację zawartą w parametrze status.

Pisanie aplikacji klient–serwer wymaga przestrzegania różnorodnych reguł zabezpieczających poprawność tworzonej aplikacji. Jedną z ważniejszych jest zachowanie zasady, aby nie mieszać w jednym procesie wysyłania komunikatów funkcją MsgSend() i ich odbierania za pomocą funkcji MsgReceive(). Rozwiązanie takie jest błędne, gdyż może prowadzić do zakleszczenia się procesów. Zakleszczenie się zbioru procesów jest zjawiskiem, z którym należy się liczyć przy konstruowaniu aplikacji współbieżnych i mu przeciwdziałać.

Sygnalizacja zdarzeń poprzez impulsy

Wysyłanie komunikatów blokuje proces wysyłający. Taki stan zablokowania nie zawsze jest pożądany. W aplikacjach często występuje potrzeba powiadomienia procesu o wystąpieniu pewnego zdarzenia, ale proces wysyłający taką sygnalizację nie może ryzykować blokady bądź nie potrzebuje informacji zwrotnej. Potrzeba taka występuje na przykład w procedurach obsługi przerwań. Narzędziem umożliwiają-cym taką sygnalizację są impulsy (pulses). Tak więc impulsy stosuje się w następujących przypadkach:

Impuls jest 40-bitowym komunikatem zawierającym 8-bitowy kod (pole code) i 32-bitową wartość (pole value). Pole codejest identyfikatorem impulsu i wskazuje na jego rodzaj. Może być ono zawarte w zakresie od 0 do 127, gdyż pozostałe kody zarezerwowane są dla systemu operacyjnego. Pole value jest uzupełnieniem pola code i może być przez programistę dowolnie wykorzystane. Impulsy wysyła się do kanału, gdzie są one kolejkowane.

Impuls odbiera się tak jak zwykły komunikat, a więc na przykład za pomocą funkcji MsgReceive()

Impulsy wysyłać można za pomocą funkcji MsgSendPulse() i MsgDeliverEvent().Pierwsza funkcja jest używana, gdy klient sygnalizuje pewne zdarzenie serwerowi, a druga w sytuacji odwrotnej.

W normalnej sytuacji impulsy odbierane są przy użyciu funkcji MsgReceive(), która odbiera zwykle komunikaty i impulsy. Gdyby zaistniała potrzeba odbioru tylko impulsów, a zignorowania zwykłych komunikatów, można użyć funkcji MsgReceivePulse().

  1. Pierwsze wykłady

Czynnik czasu jest obecny w działaniu każdego systemu komputerowego. W przypadku edytora tekstu zwłoka w reakcji na polecenie wpisania znaku może być najwyżej denerwująca (na przykład system nie odpowiada, bo zapisuje właśnie kopię bezpieczeństwa). Gdy komputer pokładowy sterujący pojazdem nie wykryje na czas poślizgu kół i zareaguje z nadmiernym opóźnieniem, skutki mogą być znacznie poważniejsze. Tak więc widzimy, że czynnik czasu w pewnych systemach może być mało istotny, a w innych może mieć zasadnicze znaczenie. Systemy, w których czynnik czasu ma istotne znaczenie, nazywamy systemami czasu rzeczywistego, w skrócie RTS.

System czasu rzeczywistego współdziała z otoczeniem. Jego zachowanie zależy od stanu otoczenia, czasu oraz zdarzeń generowanych przez otoczenie. Zwykle systemy wbudowane są systemami czasu rzeczywistego, ale spotyka się też systemy niebędące wbudowanymi, w których czas odpowiedzi ma istotne znaczenie. Najprostszą formą uwarunkowania czasowego jest model, w którym system ma reagować na zdarzenia zachodzące w otoczeniu. Znaczenie ma nie tylko prawidłowość odpowiedzi na zdarzenie, ale także czas otrzymania tej odpowiedzi.

System czasu rzeczywistego musi gwarantować, że czas odpowiedzi t na zaistniałe zdarzenie będzie mniejszy od ograniczenia czasowego (ang. deadline) Tmax. Systemy RTS mogą znacznie różnić się od siebie pod względem konsekwencji niespełnienia ograniczeń czasowych. Przykładem urządzeń, w których niespełnienie ograniczeń ma całkowicie odmienne konsekwencje, są odtwarzacz multimedialny i system sterowania silnikiem samolotowym.

W związku z różnymi skutkami niespełnienia ograniczeń wyróżnia się dwa rodzaje ograniczeń czasowych:

Rygorystyczne ograniczenie czasowe to takie ograniczenie, które zawsze musi być spełnione. Jeśli choć raz zostało przekroczone, to uważa się, że nie zostało spełnione.

Łagodne ograniczenie czasowe to takie ograniczenie czasowe, które czasami może być przekroczone.

W zależności od typu ograniczeń czasowych definiuje się dwa rodzaje systemów RTS:

Rygorystyczny system czasu rzeczywistego to system, w którym wymaga się spełnienia rygorystycznych ograniczeń czasowych. Do rygorystycznych systemów czasu rzeczywistego można zaliczyć system sterowania elektrownią atomową, samolotem czy zapłonem samochodowym.

Łagodny system czasu rzeczywistego to system, w którym wymaga się spełnienia łagodnych ograniczeń czasowych. Przykłady łagodnych systemów czasu rzeczywistego to systemy multimedialne, system sterowania telefonem komórkowym czy centrala telefoniczna.

Atrybuty wiarygodności pozwalają określić właściwości oczekiwane od systemu i oszacować jakość systemu. Należą do nich dostępność (ang. availability), niezawodność (ang. reliability), bezpieczeństwo (ang. safety), naprawialność (ang. maintainability), integralność (ang. integrity) i ochrona (ang. confidentiality). Dostępność oznacza, że system jest w stanie nieprzerwanie świadczyć usługi. Miarą dostępności jest stosunek czasu, w którym system jest sprawny, do czasu, w którym powinien być sprawny. Niezawodność jest zdolnością do nieprzerwanej bezbłędnej pracy. System wysoce niezawodny pracuje długo bez wystąpienia defektu. Pomiędzy dostępnością a niezawodnością występuje subtelna różnica. Jeżeli system jest niesprawny przez 1 milisekundę w ciągu godziny, to jego dostępność jest wysoka (większa od 0,999999), ale niezawodność jest niezadowalająca, gdyż system wykazuje defekt co godzinę. Bezpieczeństwo jest zapewniane wtedy, gdy defekt systemu nie powoduje katastrofalnych skutków. Z kolei integralność oznacza brak niedozwolonych zmian stanu systemu. Istnieją różne środki zapewnienia wiarygodności. Wymienić tu można zapobieganie defektom (ang. fault prevention), tolerowanie defektów (ang. fault tolerance), usuwanie defektów (ang. fault removal) i przewidywanie defektów (ang. fault forecasting).

Systemom RTS stawia się różnorodne wymagania, które można podsumować następująco:

1. Terminowość – reakcja na zdarzenia powinna następować zgodnie z wymaganiami czasowymi.

2. Przewidywalność – zdarzenia generowane przez otoczenie pojawiają się w przypadkowych momentach i może dojść do ich spiętrzenia. Mimo to system musi reagować zgodnie z wymaganiami (deterministycznie).

3. Wysoka wiarygodność świadczenia usług – składają się na nią dostępność, niezawodność, bezpieczeństwo, naprawialność, integralność i ochrona.

4. Zależność od otoczenia – system musi reagować na zdarzenia powstające w otoczeniu.


Wyszukiwarka

Podobne podstrony:
hodowla kolos - wyklady, sem. 4, Hodowla roślin
Instalacje kolos z wykładu, gotowiec
nakolosa Kolos wyklad opracowanie pytan z zeszlego ro
kolos wyklad
kolos wykład rk
Statystyka kolos wykłady, Pedagogika - studia, II semestr - ogólna, Statystyka
KSOP - II kolos z wykladu, Administracja, I ROK, Konstytucja
pytania kosmol - mini, Automatyka i Robotyka, Semestr 5, ZMiSW, kolos wykład
kolos wykłady styczeń 2013, I semestr, matematyka
kolos wykłady (moje odpowiedzi)
ściąga kolos wykłady obrazki
Projekt TMM 1A, AGH, Semestr 4, TMM, TMM, kolos wykłądy
pytania kosmol, Automatyka i Robotyka, Semestr 5, ZMiSW, kolos wykład
kolos wyklady
kolos wykłady grudzień 2012, I semestr, matematyka
pytania i odpowiedzi, gik VI sem, GiK VI, SIP, przodki SIP, SIP 3, kolos wykłady, SIP, pierdukinako
Odpowiedzi mechanika płynów kolos wykład

więcej podobnych podstron