Jak działają systemy operacyjne czasu rzeczywistego?

Chodzi mi o to, jak i dlaczego systemy operacyjne w czasie rzeczywistym są w stanie dotrzymać terminów, nie tracąc ich nigdy? A może to tylko mit(że nie przegapią terminów)? Czym różnią się od zwykłego systemu operacyjnego i co uniemożliwia zwykły system operacyjny od bycia RTO?

Author: Sandeep Datta, 2009-02-11

12 answers

Dotrzymywanie terminów jest funkcją aplikacji, którą piszesz. RTO po prostu zapewnia udogodnienia, które pomagają w dotrzymywaniu terminów. Możesz również programować na "bare metal" (bez RTOS) w dużej pętli głównej i spotkać się z terminami.

Należy również pamiętać, że w przeciwieństwie do bardziej ogólnego systemu operacyjnego, RTO ma bardzo ograniczony zestaw zadań i uruchomionych procesów.

Niektóre z udogodnień, jakie zapewnia RTO:

  • harmonogram oparty na priorytetach
  • przerwanie zegara systemowego rutyna
  • deterministyczne zachowanie

Harmonogram oparty na priorytetach

Większość RTO ma od 32 do 256 możliwych priorytetów dla poszczególnych zadań/procesów. Harmonogram uruchomi zadanie z najwyższym priorytetem. Gdy uruchomione zadanie rezygnuje z procesora, uruchamia się następne zadanie o najwyższym priorytecie i tak dalej...

Zadanie o najwyższym priorytecie w systemie będzie miało procesor do:

  • biegnie do końca (tzn. dobrowolnie rezygnuje z CPU)
  • zadanie o wyższym priorytecie jest gotowe, w którym to przypadku pierwotne zadanie jest poprzedzone Nowym (o wyższym priorytecie) zadaniem.

Jako programista, Twoim zadaniem jest przypisanie priorytetów zadań, tak aby terminy zostały spełnione.

Procedury przerwania zegara systemowego

RTO zazwyczaj zapewnia jakiś rodzaj zegara systemowego (od 500 uS do 100ms), który pozwala na wykonywanie operacji wrażliwych na czas. Jeśli masz zegar systemowy 1ms i musisz wykonać zadanie co 50ms, zwykle istnieje API, które pozwala powiedzieć"w 50ms, Obudź mnie". W tym momencie zadanie będzie spało, dopóki RTOS go nie obudzi.

Zauważ, że samo obudzenie się nie gwarantuje, że będziesz biegać dokładnie w tym czasie. To zależy od priorytetu. Jeśli zadanie o wyższym priorytecie jest aktualnie uruchomione, możesz zostać opóźniony.

Deterministyczne Zachowanie

RTO idzie bardzo długo, aby upewnić się, czy masz 10 zadania, czyli 100 zadań, nie trzeba już zmieniać kontekstu, określać jakie jest następne zadanie o najwyższym priorytecie itp...

Ogólnie rzecz biorąc, operacja RTO stara się być O (1).

Jednym z głównych obszarów deterministycznego zachowania w RTO jest obsługa przerwań. Po sygnalizacji linii przerwania, RTO natychmiast przełącza się na właściwą procedurę obsługi przerwań i obsługuje przerwanie bez opóźnienia (niezależnie od priorytetu dowolnego zadania bieganie).

Zauważ, że większość ISR specyficznych dla sprzętu zostanie napisana przez programistów w projekcie. RTO może już zapewnić ISRs dla portów szeregowych, zegara systemowego, może sprzętu sieciowego, ale wszystko specjalistyczne (sygnały rozrusznika, siłowniki itp...) nie byłby częścią RTO.

Jest to rażące uogólnienie i jak Wszystko inne, istnieje duża różnorodność implementacji RTO. Niektóre RTO działają inaczej, ale Powyższy opis powinien być ma zastosowanie do dużej części istniejących RTOSes.

 27
Author: Benoit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 14:18:07

W RTOSes najważniejszymi parametrami, o które należy zadbać, są mniejsze opóźnienia i determinizm czasowy. Co przyjemnie robi, postępując zgodnie z określonymi zasadami i sztuczkami.

Podczas gdy w GPOs, wraz z akceptowalnymi opóźnieniami, parametrami krytycznymi jest wysoka przepustowość. nie można liczyć na determinizm czasu.

RTOSes mają zadania, które są znacznie lżejsze niż procesy / wątki w GPOS.

 3
Author: Rupinderjit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-15 06:02:43

Nie chodzi o to, że są w stanie dotrzymać terminów, chodzi raczej o to, że mają ustalone terminy, podczas gdy w zwykłym systemie operacyjnym nie ma takiego terminu.

W zwykłym systemie operacyjnym Harmonogram zadań nie jest zbyt rygorystyczny. Oznacza to, że procesor wykonuje tak wiele instrukcji na sekundę, ale czasami może tego nie robić. Na przykład zadanie może być poprzedzone, aby umożliwić wykonanie zadania o wyższym priorytecie (i może trwać dłużej). W RTO procesor zawsze wykona taką samą liczbę zadania.

DODATKOWO zazwyczaj istnieje limit czasu do wykonania zadań, po którym zgłaszana jest awaria. Nie dzieje się to w zwykłym systemie operacyjnym.

Oczywiście jest o wiele więcej szczegółów do wyjaśnienia, ale powyższe są dwoma ważnymi aspektami projektowania, które są używane w RTO.

 2
Author: Sesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 12:21:19

Twój RTO jest zaprojektowany w taki sposób, że może zagwarantować czas ważnych wydarzeń, takich jak obsługa przerw sprzętowych i budzenie procesów uśpienia dokładnie wtedy, gdy muszą być.

Ten dokładny czas pozwala programiście mieć pewność, że jego (powiedzmy) rozrusznik wypuści impuls dokładnie wtedy, gdy będzie musiał, a nie kilkadziesiąt milisekund później, ponieważ system operacyjny był zajęty innym nieefektywnym zadaniem.

Jest to zwykle dużo prostszy OS niż pełnoprawny Linux lub Windows, po prostu dlatego, że łatwiej jest analizować i przewidywać zachowanie prostego kodu. Nic nie stoi na przeszkodzie, aby pełnoprawny system operacyjny, taki jak Linux, był używany w środowisku RTOS i ma rozszerzenia RTOS. Ze względu na złożoność bazy kodu nie będzie w stanie zagwarantować tak małej skali, jak mniejszy SYSTEM OPERACYJNY.

Harmonogram RTOS jest również bardziej rygorystyczny niż harmonogram ogólnego przeznaczenia. Ważne jest, aby wiedzieć, że harmonogram nie zmieni Twojego zadania priorytet, ponieważ działasz od dawna i nie masz żadnych interaktywnych użytkowników. Większość systemów operacyjnych zmniejszyłaby wewnętrzny priorytet tego typu procesu, aby faworyzować krótkoterminowe interaktywne programy, w których interfejs nie powinien być postrzegany jako opóźniony.

 2
Author: Adam Hawes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 12:51:25

Pomocne może okazać się odczytanie źródła typowego RTO. Istnieje kilka przykładów open-source, a następujące linki przyniosły trochę szybkiego wyszukiwania:

Komercyjny RTO, który jest dobrze udokumentowany, dostępny w postaci kodu źródłowego i łatwy w obsłudze to µC/OS-II . Ma bardzo liberalną licencję do użytku edukacyjnego, a (lekko Nieaktualna wersja) jego źródłem może być związał się z książką opisującą swoją teorię działania z wykorzystaniem rzeczywistej implementacji jako przykładowego kodu. Książka jest MicroC OS II: jądro czasu rzeczywistego autor: Jean Labrosse

Używałem µC / OS-II w kilku projektach na przestrzeni lat i mogę go polecić.

 2
Author: RBerteig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-28 07:39:59

Nie używałem RTOS, ale myślę, że tak to działa.

Jest różnica między "twardym czasem rzeczywistym" a "miękkim czasem rzeczywistym". Możesz pisać aplikacje w czasie rzeczywistym na nie-RTO, takich jak Windows, ale są one "miękkie" w czasie rzeczywistym: {]}
  • Jako aplikacja mogę mieć wątek lub timer, który PROSZĘ O/S, aby działał 10 razy na sekundę ... i może O / S zrobi to, przez większość czasu, ale nie ma gwarancji, że zawsze będzie w stanie ... ten brak gwarancji jest dlaczego nazywa się to "miękkim". Powodem, dla którego O / S może nie być w stanie jest to, że inny wątek może być utrzymanie system zajęty robi coś innego. Jako aplikacja, mogę zwiększyć mój priorytet wątku na przykład HIGH_PRIORITY_CLASS, ale nawet jeśli to zrobię, O / S nadal nie ma API, którego mogę użyć do żądania gwarancji , że będę uruchamiany w określonych godzinach.

  • "twardy" O/S w czasie rzeczywistym ma (wyobrażam sobie) interfejsy API, które pozwalają mi żądać gwarantowanych plastrów wykonania. Powód, dla którego RTO może dać takie gwarancje, że jest gotów abendować wątki, które zajmują więcej czasu niż oczekiwano / niż są dozwolone.

 0
Author: ChrisW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 12:41:44

Ważne są aplikacje w czasie rzeczywistym, a nie SYSTEM OPERACYJNY w czasie rzeczywistym. Zazwyczaj aplikacje w czasie rzeczywistym są przewidywalne: wiele testów, inspekcji, analiza WCET, dowody,... zostały wykonane, które pokazują, że terminy są przestrzegane w określonych sytuacjach.

Zdarza się, że RTOSes pomaga w tej pracy (budowanie aplikacji i weryfikowanie jej ograniczeń RT). Ale widziałem aplikacje działające w czasie rzeczywistym na standardowym Linuksie, polegające bardziej na sprzęcie niż na projektowaniu systemu operacyjnego.

 0
Author: mouviciel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 13:03:46

... cóż ...

System operacyjny czasu rzeczywistego stara się być deterministyczny i dotrzymywać terminów, ale wszystko zależy od sposobu pisania aplikacji. Możesz zrobić RTO bardzo Nie w czasie rzeczywistym, jeśli nie wiesz, jak napisać "właściwy" kod.

Nawet jeśli wiesz jak napisać właściwy kod: Chodzi bardziej o bycie deterministycznym niż szybkim.

Kiedy mówimy o determinizmie to

1) determinizm zdarzeń

Dla każdego zestawu wejść kolejne stany i wyjścia systemu są znane

2) determinizm czasowy

... znany jest również czas reakcji dla każdego zestawu wyjść

Oznacza to, że jeśli masz zdarzenia asynchroniczne, takie jak przerwania, Twój system nie jest ściśle mówiąc deterministyczny. (i większość systemów używa przerwań)

Jeśli naprawdę chcesz być deterministyczny przepytaj wszystko.

... ale może nie trzeba być w 100% deterministycznym

 0
Author: robert.berger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-18 11:58:44

Odpowiedź podręcznika / wywiadu brzmi "deterministyczne uprzedzenie". System ma gwarancję przeniesienia kontroli w ograniczonym okresie czasu, jeśli proces o wyższym priorytecie jest gotowy do uruchomienia (w kolejce gotowości) lub zostanie stwierdzone przerwanie (zazwyczaj wejście zewnętrzne do CPU/MCU).

 0
Author: terry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-13 02:59:52

W rzeczywistości nie gwarantują dotrzymania terminów; to, co robią, to zapewnienie środków do rozpoznawania przekroczeń terminów i radzenia sobie z nimi. "Twarde" systemy RT to zazwyczaj te, w których brak terminu jest katastrofalny i wymagane jest pewne wyłączenie, podczas gdy "miękkie" systemy RT to takie, w których kontynuowanie pogorszonej funkcjonalności ma sens. Tak czy inaczej RTO pozwala zdefiniować odpowiedzi na takie przekroczenia. Systemy Non RT nie wykrywają nawet przekroczeń.

 0
Author: JustJeff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-13 03:34:04

"zasadniczo musisz zakodować każde" zadanie " w RTO tak, aby zakończyło się w skończonym czasie."

To jest rzeczywiście poprawne. RTO będzie miało zaznaczenie systemowe zdefiniowane przez architekturę, powiedzmy 10 milisekund., ze wszystkimi zadaniami (wątkami) zaprojektowanymi i zmierzonymi do wykonania w określonym czasie. Na przykład w przetwarzaniu danych audio w czasie rzeczywistym, gdzie częstotliwość próbkowania dźwięku wynosi 48 kHz, istnieje znana ilość czasu (w milisekundach), w którym prebuffer stanie się pusty dla każde kolejne zadanie, którym jest przetwarzanie danych. Dlatego korzystanie z RTO wymaga poprawnego doboru buforów, oszacowania i pomiaru czasu, a także pomiaru opóźnień między wszystkimi warstwami oprogramowania w systemie. Wtedy terminy mogą być spełnione. W przeciwnym razie wnioski nie dotrzymają terminów. Wymaga to analizy najgorszego przypadku przetwarzania danych w całym stosie, a gdy najgorszy przypadek jest znany, system może być zaprojektowany na powiedzmy 95% czasu przetwarzania przy 5% bezczynności (przetwarzanie To może nigdy nie wystąpić w jakimkolwiek rzeczywistym użyciu, ponieważ w najgorszym przypadku przetwarzanie danych może nie być dozwolonym stanem we wszystkich warstwach w dowolnym momencie).

Przykładowe diagramy czasowe do projektowania aplikacji sieciowej systemu operacyjnego w czasie rzeczywistym są w tym artykule w EE Times, instrukcje dotyczące produktu: poprawa jakości głosu w czasie rzeczywistym w telefonii VoIP design http://www.eetimes.com/design/embedded/4007619/PRODUCT-HOW-TO-Improving-real-time-voice-quality-in-a-VoIP-based-telephony-design

 0
Author: Jonathan Cline IEEE,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-14 15:58:04

Zasadniczo musisz zakodować każde" zadanie " w RTO tak, aby zakończyło się w skończonym czasie.

DODATKOWO twoje jądro przeznaczyłoby określone ilości czasu na każde zadanie, próbując zagwarantować, że pewne rzeczy wydarzyły się w określonym czasie.

Zauważ, że nie jest to jednak łatwe zadanie. Wyobraź sobie takie rzeczy jak wirtualne wywołania funkcji, w OO bardzo trudno jest określić te rzeczy. Również RTO muszą być starannie zakodowane w odniesieniu do priorytetu, to może wymagać, aby zadanie o wysokim priorytecie zostało przydzielone procesorowi w ciągu milisekund x, co może być trudne do wykonania w zależności od sposobu działania harmonogramu.

 -1
Author: Spence,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-11 12:17:00