Echtzeitbetriebssystem

Ein Echtzeitbetriebssystem (RTOS) ist ein Betriebssystem (OS), das beabsichtigt ist, um Echtzeitanwendungsbitten zu dienen.

Eine Schlüsseleigenschaft eines RTOS ist das Niveau seiner Konsistenz bezüglich der Zeitdauer, die es nimmt, um eine Aufgabe einer Anwendung zu akzeptieren und zu vollenden; die Veränderlichkeit ist Bammel. Ein hartes Echtzeitbetriebssystem hat weniger Bammel als ein weiches Echtzeitbetriebssystem. Die Hauptdesignabsicht ist nicht hoher Durchfluss, aber eher eine Garantie einer weichen oder harten Leistungskategorie. Ein RTOS, der gewöhnlich allgemein einen Termin oder einhalten kann, ist ein weicher schritthaltender OS, aber wenn er einen Termin deterministisch einhalten kann, ist es ein harter schritthaltender OS.

Ein RTOS hat einen fortgeschrittenen Algorithmus für die Terminplanung. Planer-Flexibilität ermöglicht eine breitere, Computersystem-Orchesterbearbeitung von Prozess-Prioritäten, aber ein schritthaltender OS wird öfter einem schmalen Satz von Anwendungen gewidmet. Schlüsselfaktoren in einem schritthaltenden OS sind minimale Unterbrechungslatenz und minimale Faden-Schaltungslatenz; ein schritthaltender OS wird mehr wegen geschätzt, wie schnell, oder wie wie vorherzusehen war er antworten kann als für den Betrag der Arbeit, die er in einer gegebenen Zeitspanne durchführen kann.

Designphilosophien

Die allgemeinsten Designs sind:

  • Ereignis-gesteuert der Schalter-Aufgaben nur, wenn ein Ereignis vom höheren Vorrang Wartung, genannt Vorkaufsvorrang oder Vorzugsterminplanung braucht.
  • Time-Sharing-Designs schalten Aufgaben auf einer regelmäßigen Uhr-Unterbrechung, und auf Ereignissen, genannt gemeinsamen Antrag.

Time-Sharing-Designs schalten Aufgaben öfter als ausschließlich erforderlich, aber geben das glattere Mehrbeschäftigen, das Trugbild gebend, dass ein Prozess oder Benutzer alleinigen Nutzen einer Maschine haben.

Frühe Zentraleinheitsdesigns haben viele Zyklen gebraucht, um Aufgaben zu schalten, während deren die Zentraleinheit nichts anderes Nützliches tun konnte. Zum Beispiel, mit 20 MHz 68000 Verarbeiter (typisch für das Ende der 1980er Jahre), sind Aufgabe-Schalter-Zeiten ungefähr 20 Mikrosekunden. (Im Gegensatz schaltet eine 100-MHz-ARM-Zentraleinheit (von 2008) in weniger als 3 Mikrosekunden um.) Wegen dessen hat früher OSes versucht, Vergeuden-Zentraleinheitszeit durch das Vermeiden unnötiger Aufgabenumschaltung zu minimieren.

Terminplanung

In typischen Designs hat eine Aufgabe drei Staaten:

  1. Das Laufen (auf der Zentraleinheit durchführend);
  2. Bereit (bereit, durchgeführt zu werden);
  3. Blockiert (auf ein Ereignis, Eingabe/Ausgabe zum Beispiel wartend).

Die meisten Aufgaben werden blockiert oder den größten Teil der Zeit bereit, weil allgemein nur eine Aufgabe auf einmal pro Zentraleinheit laufen kann. Die Zahl von Sachen in der bereiten Warteschlange kann sich außerordentlich ändern, abhängig von der Zahl von Aufgaben muss das System leisten und der Typ des Planers, den das System verwendet. Auf dem einfacheren Nichtvorkaufs-, aber noch stark mehrbeanspruchende Systeme muss eine Aufgabe seine Zeit auf der Zentraleinheit zu anderen Aufgaben aufgeben, die die bereite Warteschlange veranlassen können, eine größere Zahl von gesamten Aufgaben im bereiten zu haben, das Staat (Quellenverhungern) durchzuführen ist.

Gewöhnlich wird die Datenstruktur der bereiten Liste im Planer entworfen, um die Grenzfall-Zeitdauer zu minimieren, die in der kritischen Abteilung des Planers ausgegeben ist, während deren Vorkaufsrecht, und in einigen Fällen gehemmt wird, sind alle Unterbrechungen arbeitsunfähig. Aber die Wahl der Datenstruktur hängt auch von der maximalen Zahl von Aufgaben ab, die auf der bereiten Liste sein können.

Wenn es nie wieder gibt als einige Aufgaben auf der bereiten Liste, dann ist eine doppelt verbundene Liste von bereiten Aufgaben wahrscheinlich optimal. Wenn die bereite Liste gewöhnlich nur einige Aufgaben enthält, aber gelegentlich mehr enthält, dann sollte die Liste durch den Vorrang sortiert werden. Dieser Weg, die höchste Vorzugsaufgabe findend, zu laufen verlangt das Wiederholen durch die komplette Liste nicht. Das Einfügen einer Aufgabe verlangt dann das Wandern der bereiten Liste bis zum Erreichen entweder das Ende der Liste oder eine Aufgabe vom niedrigeren Vorrang als diese der Aufgabe, die wird einfügt.

Sorge muss gebracht werden, um Vorkaufsrecht während dieser Suche nicht zu hemmen. Längere kritische Abteilungen sollten in kleine Stücke geteilt werden. Wenn eine Unterbrechung vorkommt, der eine hohe Vorzugsaufgabe bereit während der Einfügung einer niedrigen Vorzugsaufgabe macht, kann diese hohe Vorzugsaufgabe eingefügt und sofort geführt werden, bevor die niedrige Vorzugsaufgabe eingefügt wird.

Die kritische Ansprechzeit, manchmal genannt die flyback Zeit, ist die Zeit, die es bringt, um eine neue bereite Aufgabe Schlange zu stehen und den Staat der höchsten Vorzugsaufgabe zum Laufen wieder herzustellen. In einem gut bestimmten RTOS, eine neue Aufgabe bereitmachend, wird 3 bis 20 Instruktionen pro Zugang der bereiten Warteschlange und Wiederherstellung vom höchsten Vorrang nehmen bereite Aufgabe wird 5 bis 30 Instruktionen nehmen.

In fortgeschritteneren Systemen Echtzeitaufgabe-Anteil können Rechenmittel mit vielen Nichtechtzeitaufgaben und die bereite Liste willkürlich lang sein. In solchen Systemen ein Planer bereite durchgeführte Liste weil würde eine verbundene Liste unzulänglich sein.

Algorithmen

Einige haben allgemein RTOS verwendet, der Terminplanung von Algorithmen ist:

  • Konsumverein, planend
  • Vorkaufsterminplanung
  • Rate-Monostärkungsmittel, planend
  • Gemeinsamer Antrag, planend
  • Fester Vorrang Vorkaufsterminplanung, eine Durchführung des Vorkaufszeitscheibenverfahrens
  • Terminplanung des festen Vorrangs mit dem aufgeschobenen Vorkaufsrecht
  • Fester Vorrang Nichtvorkaufsterminplanung
  • Kritische Abteilung Vorkaufsterminplanung
  • Statische Zeit, planend
  • Frühster Termin nähert sich Zuerst
  • Stochastische Digraphe mit dem Mehrgewindegraph-Traversal

Zwischenaufgabe-Kommunikation und gemeinsame Betriebsmittelnutzung

Das Mehrbeschäftigen von Systemen muss das Teilen von Daten und Hardware-Mitteln unter vielfachen Aufgaben führen. Es ist gewöhnlich für zwei Aufgaben "unsicher", auf dieselben spezifischen Daten oder Hardware-Quelle gleichzeitig zuzugreifen. "Unsicher" bedeutet, dass die Ergebnisse inkonsequent oder unvorhersehbar sind. Es gibt drei einheitliche Methoden, um dieses Problem aufzulösen:

Provisorisch Unterbrechungen maskieren/unbrauchbar machen

Mehrzweckbetriebssysteme erlauben gewöhnlich Benutzerprogramme der Maske nicht (machen) Unterbrechungen (unbrauchbar), weil das Benutzerprogramm die Zentraleinheit für kontrollieren konnte, so lange es wünscht. Moderne Zentraleinheiten erlauben Benutzerweise-Code nicht, Unterbrechungen unbrauchbar zu machen, weil solche Kontrolle als ein Schlüssel als Betriebssystemquelle betrachtet wird. Viele eingebettete Systeme und RTOSs erlauben jedoch der Anwendung selbst, in der Kernweise für die größere Systemanruf-Leistungsfähigkeit zu laufen und auch der Anwendung zu erlauben, größere Kontrolle der Betriebsumgebung zu haben, ohne OS Eingreifen zu verlangen.

Auf Systemen des einzelnen Verarbeiters, wenn die Anwendungsläufe in der Kernweise und Unterbrechungen häufig maskieren kann, ist Unterbrechungsuntauglichkeit (am niedrigsten oberirdisch) Lösung am besten, Parallelzugriff zu einer geteilten Quelle zu verhindern. Während Unterbrechungen maskiert werden, hat die aktuelle Aufgabe exklusiven Nutzen der Zentraleinheit seit keiner anderen Aufgabe, oder Unterbrechung kann Kontrolle nehmen, so wird die kritische Abteilung geschützt. Wenn die Aufgabe über seine kritische Abteilung herrscht, muss sie Unterbrechungen demaskieren; während Unterbrechungen wird dann falls etwa, durchführen. Provisorisch maskierende Unterbrechungen sollten nur getan werden, wenn der längste Pfad durch die kritische Abteilung kürzer ist als die gewünschte maximale Unterbrechungslatenz, oder diese Methode die maximale Unterbrechungslatenz des Systems vergrößert. Normalerweise wird diese Methode des Schutzes nur verwendet, wenn die kritische Abteilung gerade einige Instruktionen ist und keine Schleifen enthält. Diese Methode ist ideal, um Hardware Rasterregister zu schützen, wenn die Bit von verschiedenen Aufgaben kontrolliert werden.

Binäre Semaphore

Wenn die kritische Abteilung länger ist als einige Quellcodelinien oder das lange Schlingen einschließt, muss ein eingebettete/Echtzeit Algorithmus das Verwenden von Mechanismen aufsuchen, die identisch oder denjenigen ähnlich sind, die auf Mehrzweckbetriebssystemen, wie Semaphore und OS-Supervised-Zwischenprozess-Nachrichtenübermittlung verfügbar sind. Solche Mechanismen schließen Systemanrufe ein, und rufen gewöhnlich den Fahrdienstleiter-Code des OS auf dem Ausgang an, so nehmen sie normalerweise Hunderte von Zentraleinheitsinstruktionen durchzuführen, während die Maskierung von Unterbrechungen nur eine Instruktion auf einigen Verarbeitern nehmen kann. Aber für längere kritische Abteilungen kann es keine Wahl geben; Unterbrechungen können seit langen Zeiträumen nicht maskiert werden, ohne die Unterbrechungslatenz des Systems zu vergrößern.

Ein binäres Semaphor wird entweder geschlossen oder aufgeschlossen. Wenn es geschlossen wird, müssen Aufgaben auf das Semaphor warten, um aufzuschließen. Ein binäres Semaphor ist deshalb zu einem mutex gleichwertig. Normalerweise wird eine Aufgabe eine Pause auf seinem setzen, warte auf ein Semaphor. Es gibt mehrere wohl bekannte Probleme mit gestützten Designs des Semaphors wie Vorzugsinversion und tote Punkte.

In der Vorzugsinversion wartet eine hohe Vorzugsaufgabe, weil eine niedrige Vorzugsaufgabe ein Semaphor hat. Eine typische Lösung ist, die Aufgabe zu haben, die sich bekennt, ein Semaphor, das daran geführt ist (erben) den Vorrang der höchsten wartenden Aufgabe. Aber diese vereinfachte Annäherung scheitert, wenn es vielfache Niveaus des Wartens gibt: Aufgabe A wartet auf ein binäres Semaphor, das durch die Aufgabe B geschlossen ist, der auf ein binäres Semaphor wartet, das durch die Aufgabe C geschlossen ist. Das Berühren vielfacher Niveaus des Erbes, ohne Instabilität in Zyklen einzuführen, ist kompliziert und problematisch.

In einem toten Punkt schließen zwei oder mehr Aufgaben Semaphore ohne Pausen und warten dann für immer auf das Semaphor der anderen Aufgabe, eine zyklische Abhängigkeit schaffend. Das einfachste Drehbuch des toten Punktes kommt vor, wenn zwei Aufgaben abwechselnd zwei Semaphore, aber in der entgegengesetzten Ordnung schließen. Toter Punkt wird durch das sorgfältige Design oder dadurch verhindert, in Semaphoren einen Boden gelegt zu haben, die Kontrolle eines Semaphors zur höheren Vorzugsaufgabe auf definierten Bedingungen passieren.

Nachrichtenübergang

Die andere Annäherung an die gemeinsame Betriebsmittelnutzung ist für Aufgaben, Nachrichten in einer organisierten Nachricht vorübergehendes Schema zu senden. In diesem Paradigma wird die Quelle direkt durch nur eine Aufgabe geführt. Wenn eine andere Aufgabe befragen oder die Quelle manipulieren will, sendet sie eine Nachricht an die Betriebsaufgabe. Obwohl ihr Echtzeitverhalten weniger knusprig ist als Semaphor-Systeme, vermeiden einfache nachrichtenbasierte Systeme die meisten Protokoll-Gefahren des toten Punktes, und sind allgemein besser erzogen als Semaphor-Systeme. Jedoch sind Probleme wie diejenigen von Semaphoren möglich. Vorzugsinversion kann vorkommen, wenn eine Aufgabe an einer Nachricht des niedrigen Vorrangs arbeitet und eine Nachricht des höheren Vorrangs (oder eine Nachricht ignoriert, die indirekt aus einer hohen Vorzugsaufgabe entsteht) in seiner ankommenden Nachrichtenwarteschlange. Tote Protokoll-Punkte können vorkommen, wenn zwei oder mehr Aufgaben auf einander warten, um Antwortmeldungen zu senden.

Unterbrechen Sie Dressierer und den Planer

Da ein Unterbrechungsdressierer die höchste Vorzugsaufgabe vom Laufen blockiert, und seit der Echtzeit Betriebssysteme entworfen werden, um Faden-Latenz zu einem Minimum zu behalten, Dressierer zu unterbrechen, werden normalerweise so kurz behalten wie möglich. Der Unterbrechungsdressierer schiebt die ganze Wechselwirkung mit der Hardware so lange wie möglich auf; normalerweise soll alles, was notwendig ist, anerkennen oder die Unterbrechung unbrauchbar machen (so dass es wieder nicht vorkommen wird, wenn der Unterbrechungsdressierer zurückkehrt). Der Unterbrechungsdressierer dann Warteschlangen arbeitet, um an einem niedrigeren Vorzugsniveau, wie Entblockung einer Fahrer-Aufgabe durch die Ausgabe eines Semaphors oder das Senden einer Nachricht getan zu werden. Ein Planer stellt häufig die Fähigkeit zur Verfügung, eine Aufgabe vom Unterbrechungsdressierer-Zusammenhang frei zu machen.

Ein OS erhält Kataloge von Gegenständen aufrecht, die er wie Fäden, mutexes, Gedächtnis und so weiter führt. Aktualisierungen zu diesem Katalog müssen ausschließlich kontrolliert werden. Aus diesem Grund kann es problematisch sein, wenn ein Unterbrechungsdressierer eine OS-Funktion nennt, während die Anwendung in der Tat auch des Tuns so ist. Die von einem Unterbrechungsdressierer genannte OS-Funktion konnte finden, dass die Gegenstand-Datenbank in einem inkonsequenten Staat wegen der Aktualisierung der Anwendung war. Es gibt zwei Hauptannäherungen, um sich mit diesem Problem zu befassen: die vereinigte Architektur und die segmentierte Architektur. Das RTOSs Einführen der vereinigten Architektur behebt das Problem, indem es einfach Unterbrechungen unbrauchbar gemacht wird, während der innere Katalog aktualisiert wird. Die Kehrseite davon ist, dass Unterbrechungslatenz zunimmt, potenziell Unterbrechungen verlierend. Die segmentierte Architektur macht direkte OS-Anrufe nicht, aber delegiert den OS verwandte Arbeit an einen getrennten Dressierer. Dieser Dressierer läuft an einem höheren Vorrang als jeder Faden, aber tiefer als die Unterbrechungsdressierer. Der Vorteil dieser Architektur besteht darin, dass sie sehr wenige Zyklen hinzufügt, um Latenz zu unterbrechen. Infolgedessen sind OSes, die die segmentierte Architektur durchführen, voraussagbarer und können sich mit höheren Unterbrechungsraten im Vergleich zur vereinigten Architektur befassen.

Speicherzuteilung

Speicherzuteilung ist in einem RTOS kritischer als in anderen Betriebssystemen.

Erstens ist die Geschwindigkeit der Zuteilung wichtig. Ein Standardspeicherzuteilungsplan scannt eine verbundene Liste der unbestimmten Länge, um einen passenden freien Speicherblock zu finden. Das ist in einem RTOS unannehmbar, da Speicherzuteilung innerhalb einer bestimmten Zeitdauer vorkommen muss.

Der einfache Algorithmus der festen Größe-Blöcke arbeitet ganz gut für einfache eingebettete Systeme wegen seines niedrigen oben.

Sieh Speicherzuteilung für mehr Details.

Beispiele

Ein frühes Beispiel eines groß angelegten Echtzeitbetriebssystems war die Transaktionsverarbeitungsmöglichkeit, die von amerikanischen Luftfahrtgesellschaften und IBM für das Säbel-Luftfahrtgesellschaft-Bedenken-System entwickelt ist.

Zurzeit sind die am besten bekannten, am weitesten aufmarschierten, schritthaltenden Betriebssysteme

  • LynxOS
  • OSE
  • QNX
  • RTLinux
  • VxWorks
  • Windows CE

Sieh die Liste von Echtzeitbetriebssystemen für eine umfassende Liste. Sieh außerdem die Liste von Betriebssystemen für alle Typen von Betriebssystemen.

Siehe auch

  • Anpassungsfähiger Teilungsplaner
  • TUN SIE - 178B
  • Frühster Termin, zuerst planend
  • Unterbrechbares Betriebssystem
  • Am wenigsten lockere Zeit, planend
  • Liste von Echtzeitbetriebssystemen
  • Betriebssystem
  • POSIX
  • Rate-Monostärkungsmittel, planend
  • SCADA
  • Gleichzeitige Programmiersprache

Robben Island / Die rechtschaffenen Brüder
Impressum & Datenschutz