RC Algorithmus

This commit is contained in:
WieErWill 2022-02-28 16:45:52 +01:00
parent fa94bcac5d
commit 439e99da82
2 changed files with 73 additions and 138 deletions

Binary file not shown.

View File

@ -2055,7 +2055,7 @@
\paragraph{Vergleich: EDF vs. RM} \paragraph{Vergleich: EDF vs. RM}
\begin{center} \begin{center}
\includegraphics[width=.8\linewidth]{Assets/AdvancedOperatingSystems-echtzeit-edf-vs-rm.png} \includegraphics[width=.8\linewidth]{Assets/AdvancedOperatingSystems-echtzeit-edf-vs-rm.png}
\end{center} \end{center}
\begin{itemize*} \begin{itemize*}
\item RM \item RM
@ -2069,7 +2069,7 @@
\item EDF \item EDF
\begin{itemize*} \begin{itemize*}
\item Prozessorwechsel: 12 \item Prozessorwechsel: 12
%\item Ursache: dynamische Prioritätenvergabe führt dazu, dass Instanz II von $t_2$ die gleiche Priorität wie Instanz A von $t_1$ hat $\rightarrow$ keine unnötige Verdrängung %\item Ursache: dynamische Prioritätenvergabe führt dazu, dass Instanz II von $t_2$ die gleiche Priorität wie Instanz A von $t_1$ hat $\rightarrow$ keine unnötige Verdrängung
\item erzeugt auch bei Prozessorauslastung bis 100\% (immer) korrekte Schedules \item erzeugt auch bei Prozessorauslastung bis 100\% (immer) korrekte Schedules
\item dynamisch Implementiert: balancierter Binärbaum zur Sortierung nach Prioritäten \item dynamisch Implementiert: balancierter Binärbaum zur Sortierung nach Prioritäten
\item Einfügen und Entfernen von Tasks: $O(log\ n)$ \item Einfügen und Entfernen von Tasks: $O(log\ n)$
@ -2093,54 +2093,43 @@
\end{enumerate*} \end{enumerate*}
\subsubsection{RC Algorithmus} \subsubsection{RC Algorithmus}
\begin{itemize*} \begin{itemize*}
\item Ziel \item Ziel: spezifikationstreue Prozesse nicht bestrafen durch Fristüberschreitung aufgrund abweichender Prozesse
\begin{itemize*}
\item spezifikationstreue Prozesse nicht bestrafen durch Fristüberschreitung aufgrund abweichender Prozesse
\end{itemize*}
\item Idee \item Idee
\begin{itemize*} \begin{itemize*}
\item grundsätzlich: Schedulingnach frühester Fristaufsteigend (= EDF) $\rightarrow$ für eine vollständig spezifikationstreue Prozessmenge verhält sich RC wie reines EDF \item grundsätzlich: Scheduling nach frühester Frist aufsteigend
\item Frist einer Instanz wird dynamisch angepasst:basierend auf derjenigen Periode, in der sie eigentlich sein sollte lt. Spezifikation der Prozessornutzung ($U_i$, hier: ,,Rate''): $U_i=\frac{C_i}{T_i}$ \item[$\rightarrow$] für vollständig spezifikationstreue Prozessmenge wie EDF
\item Bsp.: $U_i =\frac{20}{40}=\frac{1}{2}$ ($t_B$ hat spezifizierte Aktivitätsrate von $0,5$ pro Periode) \item Frist einer Instanz wird dynamisch angepasst: basierend auf derjenigen Periode, in der sie eigentlich sein sollte% lt. Spezifikation der Prozessornutzung: $U_i=\frac{C_i}{T_i}$
\item Bsp.: $U_i =\frac{20}{40}=\frac{1}{2}$ (spez. Aktivitätsrate $0,5$/Periode)
\end{itemize*} \end{itemize*}
\end{itemize*}
\paragraph{RC Algorithmus: Strategie}
\begin{itemize*}
\item Variablen \item Variablen
\begin{itemize*} \begin{itemize*}
\item $a_i$: Ankunftszeit der zuletzt bereitgewordenen Instanz von $t_i$ \item $a_i$: Ankunftszeit der zuletzt bereitgewordenen Instanz
\item $t_i^{virt}$: virtuelle Zeit in aktueller Periode, die $t_i$ bereits verbraucht hat \item $t_i^{virt}$: virtuelle verbrauchte Zeit in aktueller Periode
\item $c_i^{virt}$: Netto-Rechenzeit, die $t_i$ in aktueller Periode bereits verbraucht hat \item $c_i^{virt}$: verbrauchte Netto-Rechenzeit
\item $d_i$: dynamische Frist von $t_i$, nach der sich dessen Priorität berechnet (EDF) \item $d_i$: dynamische Frist von $t_i$ für Priorität (EDF)
\end{itemize*} \end{itemize*}
\item Strategie \item Strategie
\begin{itemize*} \begin{itemize*}
\item für eine bereite (lauffähige) Instanz von $t_i$: adaptiere dynamisch $d_i$ basierend auf $t_i^{virt}$ \item für eine bereite (lauffähige) Instanz von $t_i$: adaptiere dynamisch $d_i$ basierend auf $t_i^{virt}$
\item für eine bereit gewordene (neu angekommene oder zuvor blockierte) Instanzvon $t_i$: aktualisiere $t_i^{virt}$ auf akt. Systemzeit $(t)\rightarrow$ etwaiger ''Zeitkredit'' verfällt \item für eine bereit gewordene Instanz von $t_i$: aktualisiere $t_i^{virt}$ auf akt. Systemzeit $(t)\rightarrow$ etwaiger ,,Zeitkredit'' verfällt
\end{itemize*}
\item Zeitpunkte, zu denen der Scheduler aktiv wird
\begin{itemize*}
\item aktuell laufender Prozess $t_i$ blockiert: $RC(t_i)$
\item Prozesse $t_i..._j$ werden bereit: $for\ x\in[i,j]: RC(t_x)$
\item periodischer ,,clock tick'' (Scheduling Interrupt) $RC(t_i)$
\end{itemize*} \end{itemize*}
\end{itemize*} \end{itemize*}
%\paragraph{RC Algorithmus: Berechnung von $t_i^{virt}$}
\paragraph{RC Algorithmus: Berechnung von $t_i^{virt}$} %Beispiel: Situation bei $t=20ms$
Beispiel: Situation bei $t=20ms$
%\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-rc-ti-berechnen-1.png} %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-rc-ti-berechnen-1.png}
%Da $t_B$ aber noch weiteren Rechenbedarf hat: Situation bei $t=30ms$
Da $t_B$ aber noch weiteren Rechenbedarf hat: Situation bei $t=30
ms$
%\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-rc-ti-berechnen-2.png} %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-rc-ti-berechnen-2.png}
%\paragraph{RC Algorithmus: Adaptionsfunktion}
\paragraph{RC Algorithmus: %Für Prozess ti zu jedem Scheduling-Zeitpunkt:
Adaptionsfunktion}
Für Prozess ti zu jedem Scheduling-Zeitpunkt:
%\begin{Shaded} %\begin{Shaded}
%\begin{Highlighting}[] %\begin{Highlighting}[]
%\NormalTok{RC (t_i) \{} %\NormalTok{RC (t_i) \{}
@ -2160,28 +2149,7 @@
%\end{Shaded} %\end{Shaded}
\paragraph{RC Algorithmus: Scheduling} %anschließendes Scheduling (präemptiv) = EDF
Zeitpunkte, zu denen der Scheduler aktiv wird:
\begin{enumerate*}
\item aktuell laufender Prozess $t_i$ blockiert:
\begin{itemize*}
\item $RC(t_i)$
\end{itemize*}
\item Prozesse $t_i..._j$ werden bereit:
\begin{itemize*}
\item $for\ x\in[i,j]: RC(t_x)$
\end{itemize*}
\item periodischer ,,clock tick'' (SchedulingInterrupt):
\begin{itemize*}
\item $t_i$ := aktuell ausgeführter Prozess
\item $RC(t_i)$
\end{itemize*}
\end{enumerate*}
anschließendes Scheduling (präemptiv) = EDF:
%\begin{Shaded} %\begin{Shaded}
%\begin{Highlighting}[] %\begin{Highlighting}[]
%\NormalTok{SCHED := \{t_i |t_i.status == BEREIT ⋀ d_i minimal \}; }\CommentTok{// bereite(r) Prozess(e) mit nächster Frist} %\NormalTok{SCHED := \{t_i |t_i.status == BEREIT ⋀ d_i minimal \}; }\CommentTok{// bereite(r) Prozess(e) mit nächster Frist}
@ -2193,108 +2161,75 @@
%\end{Shaded} %\end{Shaded}
\paragraph{Umgang mit abweichenden Prozessen unter \paragraph{Umgang mit abweichenden Prozessen unter RC}
RC}
%\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-rc-abweichende-prozesse.png} %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-rc-abweichende-prozesse.png}
%Prozesse, die sich entsprechend ihrer Spezifikation verhalten, erhalten bis zum Ende jeder spezifizierten Periode ihren spezifizierten Anteil an Prozessorzeit.
Auswirkung auf verschiedene Prozesstypen
\begin{description*}
\item[pünktlich] Einhaltung der Frist in jeder Periode garantiert
\item[verspätet] nur aktuelle Periode betrachtet, Nachholen ,,ausgelassener Perioden'' nicht möglich
\item[gierig] Prozessorentzug, sobald andere lauffähige Prozesse frühere Fristen aufweisen
\item[nicht-periodische Hintergrundprozesse] pro ,,Periode'' wird spezifizierte Prozessorrate garantiert
\end{description*}
\paragraph{Resultat} \subsubsection{Umgang mit gemischten Prozessmengen}
%Hintergrund-Scheduling
\begin{quote} \begin{center}
Garantie: Prozesse, die sich entsprechend ihrer Spezifikation verhalten, \includegraphics[width=.5\linewidth]{Assets/AdvancedOperatingSystems-gemischte-prozessmenge.png}
erhalten bis zum Ende jeder spezifizierten Periode ihren spezifizierten \end{center}
Anteil an Prozessorzeit.
\end{quote}
Auswirkung auf verschiedene Prozesstypen:
\begin{itemize*} \begin{itemize*}
\item ,,pünktliche'' Prozesse: Einhaltung der Frist in jeder Periode \item rechenbereite Prozesse auf 2 Warteschlangen aufgeteilt (einfache Variante eines Mehr-Ebenen-Scheduling )
garantiert (unabhängig von Verhalten anderer Prozesse) \item Warteschlange 1
\item ,,verspätete'' Prozesse: nur aktuelle Periode betrachtet, Nachholen
,,ausgelassener Perioden'' nicht möglich
\item ,,gierige'' Prozesse: Prozessorentzug, sobald andere lauffähige
Prozesse frühere Fristen aufweisen
\item nicht-periodische Hintergrundprozesse: pro ,,Periode'' wird
spezifizierte Prozessorrate garantiert (z.B. kleine Raten bei großen
,,Periodendauern'' wählen.)
\end{itemize*}
\subsubsection{Umgang mit gemischten
Prozessmengen}
\begin{itemize*}
\item Hintergrund-Scheduling:
\begin{itemize*} \begin{itemize*}
\item Prinzip: %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-gemischte-prozessmenge.png} \item alle periodischen Prozesse
\item rechenbereite Prozesse auf 2 Warteschlangen aufgeteilt (einfache Variante eines Mehr-Ebenen-Scheduling ) \item mit höchster Priorität mittels RM oder EDF bedient
\item Warteschlange 1: \begin{itemize*} \item alle periodischen Prozesse \item mit höchster Priorität mittels RM oder EDF bedient \end{itemize*} \end{itemize*}
\item Warteschlange 2: \begin{itemize*} \item alle aperiodischen Prozesse \item nur bedient, wenn keine wartenden Prozesse in Warteschlange 1 \end{itemize*} \item Warteschlange 2
\begin{itemize*}
\item alle aperiodischen Prozesse
\item nur bedient, wenn keine wartenden Prozesse in W1
\end{itemize*} \end{itemize*}
\end{itemize*} \end{itemize*}
\paragraph{Hintergrund-Scheduling: Vor- und \paragraph{Hintergrund-Scheduling: Vor- und Nachteile}
Nachteile}
\begin{itemize*} \begin{itemize*}
\item Hauptvorteil: \item Hauptvorteil einfache Implementierung
\item Nachteile
\begin{itemize*} \begin{itemize*}
\item einfache Implementierung \item Antwortzeit \textbf{aperiodischer Prozesse} kann zu lang werden
\item[$\rightarrow$] Verhungern möglich
\item nur für relativ zeitunkritische aperiodische Prozesse
\end{itemize*} \end{itemize*}
\item Nachteile: %\item Beispiel: Hintergrund-Scheduling mit RM
\begin{itemize*}
\item Antwortzeit \textbf{aperiodischer Prozesse} kann zu lang werden (insbesondere bei hoher aperiodischer Last) $\rightarrow$ Verhungern möglich!
\item geeignet nur für relativ zeitunkritische aperiodische Prozesse
\end{itemize*}
\item Beispiel: Hintergrund-Scheduling mit RM
%\begin{itemize*}
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-hintergrund-scheduling.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-hintergrund-scheduling.png}
%\end{itemize*}
\end{itemize*} \end{itemize*}
\paragraph{Optimierung: Server-Prozess}
\paragraph{Optimierung:
Server-Prozess}
\begin{itemize*} \begin{itemize*}
\item Scheduling mit Server-Prozessen: \item Prinzip: periodisch aktivierter Prozess benutzt zur Ausführung aperiodischer Prozessoranforderungen
\begin{itemize*} \item Beschreibung Server-Prozess: durch Parameter äquivalent zu wirklichem periodischen Prozess
\item Prinzip: periodisch aktivierter Prozess benutzt zur Ausführung aperiodischer Prozessoranforderungen \item Arbeitsweise Server-Prozess folgend
\item Beschreibung Server-Prozess: durch Parameter äquivalent zu wirklichem periodischen Prozess: \begin{itemize*} \item Periodendauer $T_S$ \item ,,Prozessorzeitbedarf'' $C_S$; jetzt Kapazitätdes Server-Prozesses \end{itemize*} \item geplant mit gleichem S-Algorithmus wie periodische Prozesse
\item Arbeitsweise Server-Prozess: \begin{itemize*} \item geplant mit gleichem Scheduling-Algorithmus wie periodische Prozesse \item zum Aktivierungszeitpunkt vorliegende aperiodische Anforderungen bedient bis zur Kapazität des Servers \item keine aperiodischen Anforderungen: Server suspendiert sich bis Beginn der nächsten Periode (Schedule wird ohne ihn weitergeführt $\rightarrow$ Prozessorzeit für periodische Prozesse) \item Kapazitätin jeder Server-Periode neu ''aufgeladen'' \end{itemize*} \item zum Aktivierungszeitpunkt vorliegende aperiodische Anforderungen bedient bis zur Kapazität des Servers
\end{itemize*} \item keine aperiodischen Anforderungen: Server suspendiert sich bis Beginn der nächsten Periode %(Schedule wird ohne ihn weitergeführt $\rightarrow$ Prozessorzeit für periodische Prozesse)
\item Kapazität in jeder Server-Periode neu ''aufgeladen''
\end{itemize*} \end{itemize*}
%Beispiel: Server-Prozess mit RM
\paragraph{Beispiel: Server-Prozess mit
RM}
%\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-rm-server-prozess.png} %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-rm-server-prozess.png}
\paragraph{Optimierung: Slack-Stealing}
\paragraph{Optimierung:
Slack-Stealing}
\begin{itemize*} \begin{itemize*}
\item Prinzip: Es existiert passiver Prozess ,,slack stealer'' (kein \item Prinzip: passiver Prozess ,,slack stealer'' (kein periodischer Server)
periodischer Server) \item so viel Zeit wie möglich für aperiodische Anforderungen sammeln
\item versucht so viel Zeit wie möglich für aperiodische Anforderungen zu \item realisiert durch ,,slackstealing'' bei periodischen Prozessen
sammeln \item letztere auf Zeit-Achse so weit nach hinten geschoben, dass Frist und Beendigungszeitpunkt zusammenfallen
\item realisiert durch ,,slackstealing''(= Spielraum-Stehlen) bei \item Sinnvoll, da Beenden vor Frist keine Vorteile bringt
periodischen Prozessen \item[$\rightarrow$] Verbesserung der Antwortzeiten für aperiodische Anforderungen
\item letztere auf Zeit-Achse so weit nach hinten geschoben, dass Frist und
Beendigungszeitpunkt zusammenfallen
\item Sinnvoll, da normalerweise Beenden periodischer Prozesse vor ihrer
Frist keinerlei Vorteile bringt
\item Resultat: Verbesserung der Antwortzeiten für aperiodische
Anforderungen
%\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-slack-stealing.png} %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-slack-stealing.png}
\end{itemize*} \end{itemize*}
\subsubsection{Prioritätsumkehr} \subsubsection{Prioritätsumkehr}
\begin{quote} \begin{quote}