systemy_czasu_rzeczywistego:roznice [mgr Wiki]

[[systemy_czasu_rzeczywistego:roznice]]
mgr Wiki

Podstawową cechą systemów czasu rzeczywistego jest ich deterministyczność. Stąd wynikają różnice pomiędzy systemami czasu rzeczywistego a systemami operacyjnymi przeznaczonymi do obsługi zadań bez silnych uwarunkowań czasowych.

Zasadniczymi różnicami pomiędzy systemami operacyjnymi czasu rzeczywistego, a systemami operacyjnymi przeznaczonymi do obsługi zadań bez silnych uwarunkowań czasowych są sposób szeregowania zadań oraz reakcja na priorytety. W systemach czasu rzeczywistego sposób szeregowania zadań oraz przydzielanie priorytetów przenosi się z systemu operacyjnego na projektanta systemu oraz aplikacji czasu rzeczywistego.

Innymi różnicami są: nieistnienie pamięci wirtualnej, brak optymalizacji wykorzystania zasobów, niemożność wyłączania obsługi przerwań, inna rozdzielczość zegara.

Sposób szeregowania zadań w systemach czasu rzeczywistego: Najpowszechniejsze systemy takie jak Linux oraz Windows stosują bardzo sprawiedliwa politykę podziału zasobów. Procesy czasu rzeczywistego nie są specjalnie uprzywilejowane. Zazwyczaj informacja o priorytetach jest gubiona, kiedy usługi systemowe są wykonywane w kontekście wątków użytkownika. Doprowadza to do opóźnień. Dodatkowo utrudnia to przewidzenie kolejności wykonania czy zakończenia poszczególnych zadań. Poza tym program szeregujący często oddaje czas procesora zadaniom o niskim priorytecie, co sprawia, że wykonanie dowolnego programu jest uzależnione od obciążenia całego systemu oraz zachowania innych procesów. Istotnym jest również fakt, żę procesy wykonujące się w trybie systemowym nie mogą zostać wywłaszczone.

Systemy czasu rzeczywistego, są pod tymi względami o wiele bardziej restrykcyjne. Priorytety są przypisane do określonych zadań i w oparciu o nie przydzielane są zasoby. Oparte są o rozwiązania, które eliminują opóźnienia oraz niedeterministyczny przebieg wykonania.

W systemach czasu rzeczywistego spotyka się najczęściej dwa sposoby szeregowania zadań:

- pierwszy (RMS = Priority-based Rate Monotonic Scheduling) opiera się tylko o zestaw priorytetów, określających poziom ważności. Jeśli w danej chwili jest jednocześnie kilka zadań gotowych do uruchomienia, to wybierane jest to o najwyższym priorytecie. Zakłada się, że procesy realtime same oddadzą procesor po wykonaniu się. Jeśli natomiast w czasie obliczeń pojawi się zadanie o wyższym priorytecie od aktualnie wykonywanego to wówczas zadanie jest przerywane i procesor oddawany jest zdaniu ważniejszemu. Zdania o tym samym priorytecie wykonują się na zasadzie kolejki FIFO pierwszy przyszedł, pierwszy zostanie wykonany.

- drugi oprócz priorytetów, stosuje również technikę przydzielania procesora na określony okres czasu (round robin). Oczywista jest płynąca systemach tego faktu bezpośrednia korzyść. Jeśli w systemie będzie wiele zadań systemach identycznym poziomie ważności, to wówczas nie będą one wykonywane sekwencyjnie, tylko okresowo przerywane systemach wznawiane. Pozwala to uniknąć opóźnień. Idea tego algorytmu polega na tym iż, każdemu zadaniu przydzielony został określony przedział czasowy. Zadanie , po przejęciu procesora, wykonuje się przez określony czas, po czym oddaje procesor kolejnemu. Oczywiście, jeśli w dowolnej chwili pojawi się zadanie o wyższym priorytecie od aktualnego, to wówczas ono staje się bieżącym. Jeśli jest ono przez cały czas swoich obliczeń zadaniem najważniejszym, to wykonuje się aż do zakończenia i dopiero oddaje procesor, aby inne zadania mogły się dokończyć. Wartym uwagi jest również fakt, że wywłaszczone zadanie, po przywróceniu jego stanu nie otrzymuje dodatkowego czasu. Jest ono wykonywane dalej tak, jakby przełączenie kontekstu w ogóle nie miało miejsca.

Priorytety w systemach czasu rzeczywistego: Wyróżnione są trzy zakresy priorytetów systemach systemach czasu rzeczywistego: procesy użytkownika, procesy systemowe oraz priorytety realtime. W systemach czasu rzeczywistego, inaczej niż systemach systemach operacyjnych bez silnych ograniczeń czasowych wywołanie systemowe może być wywłaszczone przez proces o wyższym priorytecie czyli proces realtime.

W systemach czasu rzeczywistego praktycznie rezygnuje się z pamięci wirtualnej: Pomimo wszelkich dobrodziejstw, jakie ona oferuje, jak np. możliwość uruchomienia programów, których sumaryczna ilość wymaganej pamięci przekracza ilość dostępnej fizycznie w systemie, niesie ona niebezpieczeństwo: Jeśli dany proces kilkakrotnie nie trafi w odpowiednią jej stronę zostanie wygenerowane opóźnienie.

Jądro systemu operacyjnego bez silnych ograniczeń czasowych optymalizuje proces dostępu do zasobów sprzętowych. Dobrym przykładem jest szeregowanie żądań operacji dyskowych. Może się bowiem zdarzyć, że proces o niższym priorytecie będzie obsłużony szybciej, ponieważ do zrealizowania jego żądania wymagane będzie mniejsze przesunięcie głowic. W ten sposób powstają nieprzewidywalne opóźnienia.

Bardzo często w systemach operacyjnych bez silnych ograniczeń czasowych w trakcie wykonywania sekcji krytycznych wyłączana jest obsługa przerwań sprzętowych. Takie wyłączenie sprawia, żę nie jesteśmy w stanie natychmiast reagować na zdarzenia zewnętrzne, co wprowadza niepożądane opóźnienia w ich obsłudze.

Dla sprawnego funkcjonowania systemu RT konieczny jest odpowiednio dokładny zegar - na przykład do uruchamiania schedulera, lub do mierzenia bardzo niewielkich odstępów czasu. W większości systemów operacyjnych, na przykład w Linuksie, zegar ‘tyka’ co jakiś ustalony czas (w Linuksie około 100 razy na sekundę). To zdecydowanie za mało do zastosowań RT. O ile zegar tyka często, dużo czasu procesora zostaje zmarnowane na być może niepotrzebną obsługę przerwań zegarowych; o ile tyka zbyt rzadko, zegar ma niewielką rozdzielczość i dokładne odczekanie ustalonego czasu przez proces może być niemożliwe. RTLinux radzi sobie z tym problemem poprzez całkowite zlikwidowanie okresowych przerwań zegarowych: kiedy zegar ‘tyka’, określa się, kiedy powinno nastąpić następne tyknięcie, po czym następuje odpowiednie przeprogramowanie zegara. Pozwala to na precyzyjne odmierzanie czasu, z dokładnością do 1 mikrosekundy - przy zachowaniu niskiego narzutu na operacje związane z zegarem.

systemy_czasu_rzeczywistego/roznice.txt · Last modified: 2006/04/20 20:08 by 149.156.157.66