diff --git a/Advanced Operating Systems - Cheatsheet.pdf b/Advanced Operating Systems - Cheatsheet.pdf index d40e93b..373415a 100644 --- a/Advanced Operating Systems - Cheatsheet.pdf +++ b/Advanced Operating Systems - Cheatsheet.pdf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:878d4c51d9611ebbfe7ab9626cad8c85e891217b80a0752a79182436d5e2b429 -size 375827 +oid sha256:84551192fead13d1e65d0498c223f88d8533823fc6557b08c495513f0096566c +size 373481 diff --git a/Advanced Operating Systems - Cheatsheet.tex b/Advanced Operating Systems - Cheatsheet.tex index 779cb72..ade9b21 100644 --- a/Advanced Operating Systems - Cheatsheet.tex +++ b/Advanced Operating Systems - Cheatsheet.tex @@ -128,8 +128,8 @@ \item Requirements: (nicht-)Funktionale Eigenschaften entstehen durch Erfüllung von (nicht-)funktionalen Anforderungen \item funktionale Eigenschaft: was ein Produkt tun soll \item nichtfunktionale Eigenschaft (NFE): wie ein Produkt dies tun soll - \item andere Bezeichnungen NFE: Qualitäten, Quality of Service - \end{itemize*} + \item andere Bezeichnungen NFE: Qualitäten, Quality of Service + \end{itemize*} \subsubsection{Hardwarebasis} \begin{itemize*} @@ -210,149 +210,108 @@ Beispiele: \begin{itemize*} \item mobile Geräte: Sparsamkeit mit Energie - \item Sparsamkeit mit weiteren Ressourcen, z.B. Speicherplatz - \item Betriebssystem (Kernel + User Space): geringer Speicherbedarf - \item optimale Speicherverwaltung durch Betriebssystem zur Laufzeit - \item Baugrößenoptimierung(Platinen-und Peripheriegerätegröße) - \item Kostenoptimierung(kleine Caches, keine MMU, ...) - \item massiv reduzierte HW-Schnittstellen (E/A-Geräte, Peripherie) - \end{itemize*} + \item Sparsamkeit mit weiteren Ressourcen, z.B. Speicherplatz + \item Betriebssystem (Kernel + User Space): geringer Speicherbedarf + \item optimale Speicherverwaltung durch Betriebssystem zur Laufzeit + \item Baugrößenoptimierung(Platinen-und Peripheriegerätegröße) + \item Kostenoptimierung(kleine Caches, keine MMU, ...) + \item massiv reduzierte HW-Schnittstellen (E/A-Geräte, Peripherie) + \end{itemize*} Mobile und eingebettete Systeme (kleine Auswahl) \begin{itemize*} - \item mobile Rechner-Endgeräte - \item Weltraumfahrt und -erkundung - \item Automobile - \item verteilte Sensornetze (WSN) - \item Chipkarten - \item Multimedia-und Unterhaltungselektronik + \item mobile Rechner-Endgeräte + \item Weltraumfahrt und -erkundung + \item Automobile + \item verteilte Sensornetze (WSN) + \item Chipkarten + \item Multimedia-und Unterhaltungselektronik \end{itemize*} \subsection{Energieeffizienz} - Hardwaremaßnahmen: zeitweiliges Abschalten/Herunterschalten momentan nicht benötigter Ressourcen + zeitweiliges Abschalten momentan nicht benötigter Ressourcen Betriebssystemmechanismen \begin{enumerate*} - \item Dateisystem-E/A:energieeffizientes Festplatten-Prefetching(2.2.1) - \item CPU-Scheduling: energieeffizientes Scheduling(2.2.2) - \item Speicherverwaltung:minimale Leistungsaufnahme durch Speicherzugriffe mittels Lokalitätsoptimierung {[}DGMB07{]} - \item Netzwerk:energiebewusstes Routing - \item Verteiltes Rechnen auf Multicore-Prozessoren: temperaturabhängige Lastverteilung + \item Dateisystem-E/A: energieeffizientes Festplatten-Prefetching + \item CPU-Scheduling: energieeffizientes Scheduling + \item Speicherverwaltung: Lokalitätsoptimierung + \item Netzwerk: energiebewusstes Routing + \item Verteiltes Rechnen: temperaturabhängige Lastverteilung \end{enumerate*} \subsubsection{Energieeffiziente Dateizugriffe} - Hardwarebedingungen: HDD, Netzwerkgeräte, ... sparen nur bei relativ langen Inaktivitätsintervallen Energie. - + HDD/Netzwerkgeräte/... sparen nur bei relativ langer Inaktivität Energie \begin{itemize*} - \item Aufgabe: Erzeugen kurzer, intensiver Zugriffsmuster $\rightarrow$ lange Inaktivitätsintervalle (für alle Geräte mit geringem Energieverbrauch im Ruhezustand) - \item Beobachtung bei HDD-Geräten: i.A. vier Zustände mit absteigendem Energieverbrauch: + \item Aufgabe: kurze, intensive Zugriffsmuster $\rightarrow$ lange Inaktivität + \item HDD-Geräten: Zustände mit absteigendem Energieverbrauch: \begin{enumerate*} \item Aktiv: einziger Arbeitszustand - \item Idle (Leerlauf): Platte rotiert, aber Plattenelektronik teilweise abgeschaltet + \item Idle: Platte rotiert, Elektronik teilweise abgeschaltet \item Standby: Rotation abgeschaltet \item Sleep: gesamte restliche Elektronik abgeschaltet \end{enumerate*} - \item ähnliche, noch stärker differenzierte Zustände bei DRAM + \item ähnliche, noch stärker differenzierte Zustände bei DRAM + %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-energiezustände-festplatte.png} + \item durch geringe Verlängerungen des idle - Intervalls kann signifikant der Energieverbrauch reduziert werden \end{itemize*} - Energiezustände beim Betrieb von Festplatten: + \subsubsection{Prefetching-Mechanismus} \begin{itemize*} - \item %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-energiezustände-festplatte.png} - \item Schlussfolgerung: durch geringe Verlängerungen des idle - Intervalls kann signifikant der Energieverbrauch reduziert werden. - \end{itemize*} - - \paragraph{Prefetching-Mechanismus} - - \begin{itemize*} - \item Prefetching (,,Speichervorgriff'', vorausschauendes Lesen) \& Caching + \item Prefetching (,,Speichervorgriff'', vorausschauend) \& Caching \begin{itemize*} \item Standard-Praxis bei moderner Datei-E/A - \item Voraussetzung: Vorwissen über benötigte Folge von zukünftigen Datenblockreferenzen (z.B. Blockadressen für bestimmte Dateien, gewonnen durch Aufzeichnung früherer Zugriffsmuster beim Start von Anwendungen -Linux: readahead syscall) - \item Ziel: Performanzverbesserungdurch Durchsatzerhöhung u. Latenzzeit-Verringerung - \item Idee: Vorziehen möglichst vieler E/A-Anforderungen an Festplatte + zeitlich gleichmäßige Verteilung der verbleibenden - \item Umsetzung: Caching (Zwischenspeichern) dieser vorausschauend gelesenen Blöcke in ungenutzten Hauptspeicherseitenrahmen ( pagecache ) + \item Voraussetzung: Vorwissen über benötigte Folge von zukünftigen Datenblockreferenzen + \item Ziel: Performanzverbesserung durch Durchsatzerhöhung und Latenzzeit-Verringerung + \item Idee: Vorziehen möglichst vieler E/A-Anforderungen an Festplatte + zeitlich gleichmäßige Verteilung verbleibender + \item Umsetzung: Caching dieser vorausschauend gelesenen Blöcke in ungenutzten PageCache \end{itemize*} - \item Folge: Inaktivitätsintervalle überwiegend sehr kurz $\rightarrow$ Energieeffizienz ...? - \item Zugriffsoperation: (durch Anwendung) - \begin{itemize*} - \item access(x) ... greife (lesend/schreibend) auf den Inhalt von Festplattenblock x im Page Cache zu - \end{itemize*} - \item Festplattenoperationen: + \item Folge: Inaktivität überwiegend sehr kurz $\rightarrow$ Energieeffizienz ...? + \item Zugriffs-/Festplattenoperationen \begin{itemize*} + \item access(x) ... greife auf Inhalt von Festplattenblock x im PageCache zu \item fetch(x) ... hole Block x nach einem access(x) von Festplatte \item prefetch(x) ... hole Block x ohne access(x) von Festplatte - \item beide Operationen schreiben x in einen freien Platz des Festplattencaches; falls dieser voll ist ersetzen sie einen der Einträge gemäß fester Regeln $\rightarrow$ Teil der (Pre-) Fetching-Strategie \end{itemize*} - \item Beispiel für solche Strategien: Anwendung ... + \item Fetch-on-Demand-Strategie bisher (kein vorausschauendes Lesen) + \item Traditionelles Prefetching \begin{itemize*} - \item mit Datenblock-Referenzstrom A, B, C, D, E, F, G, ... - \item mit konstanter Zugriffsdauer: 10 Zeiteinheiten je Blockzugriff - \item Cache-Kapazität: 3 Datenblöcke - \item Zeit zum Holen eines Blocks bei Cache-Miss: 1 Zeiteinheit - \end{itemize*} - \item Beispiel: Traditionelles Prefetching - \begin{itemize*} - \item Fetch-on-demand-Strategie (kein vorausschauendes Lesen) - \item Strategie entsprechend Prefetching- Regeln nach Cao et al. {[}CFKL95{]} (= traditionelle Disk-Prefetching- Strategie) - \item traditionelle Prefetching-Strategie: bestimmt - \begin{itemize*} - \item wann ein Datenblock von der Platte zu holen ist (HW-Zustand aktiv ) - \item welcher Block zu holen ist - \item welcher Block zu ersetzen ist + \item traditionelle Prefetching-Strategie: bestimmt + \begin{itemize*} + \item wann Block von der Platte holen (HW aktiv) + \item welcher Block zu holen ist + \item welcher Block zu ersetzen ist \end{itemize*} - \item Regeln für diese Strategie: - \begin{enumerate*} - \item Optimales Prefetching: Jedes \emph{prefetch} sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist. - \item Optimales Ersetzen: Bei jedem ersetzenden \emph{prefetch} sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird. - \item ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird. - \item Erste Möglichkeit: Führe nie ein ersetzendes \emph{prefetch} aus, wenn dieses schon vorher hätte ausgeführt werden können. + \end{itemize*} + \begin{enumerate*} + \item Optimales Prefetching: Jedes \emph{prefetch} sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist + \item Optimales Ersetzen: Bei jedem ersetzenden \emph{prefetch} sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird + \item ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird + \item Erste Möglichkeit: Führe nie ein ersetzendes \emph{prefetch} aus, wenn dieses schon vorher hätte ausgeführt werden können \end{enumerate*} - \end{itemize*} - \item - Energieeffizientes Prefetching + \item Energieeffizientes Prefetching \begin{itemize*} - \item Optimale Ersetzungsstrategie und 3 unterschiedliche Prefetching-Strategien: - \item Fetch-on-demand-Strategie: - \begin{itemize*} - \item Laufzeit: 66 ZE für access(A) ... access(F) , 7 Cache-Misses - \item Disk-Idle-Zeit: 6 Intervalle zu je 10 ZE - \end{itemize*} - \item Strategie entsprechend Prefetching-Regeln {[}CFKL95{]} (traditionelle Disk-Prefetching-Strategie): - \begin{itemize*} - \item Laufzeit: 61 ZE für access(A) ... access(F) , 1 Cache-Miss - \item Disk-Idle-Zeit: 5 Intervalle zu je 9 ZE und 1 Intervall zu 8 ZE (= 53 ZE) - \end{itemize*} - \item Energieeffiziente Prefetching-Strategie, die versucht Länge der Disk-Idle-Intervalle zu maximieren: - \begin{itemize*} - \item gleiche Laufzeit und gleiche Anzahl Cache-Misses wie traditionelles Prefetching - \item Disk-Idle-Zeit: 2 Intervalle zu 27 bzw. 28 ZE (= 55 ZE) - \end{itemize*} + \item versucht Länge der Disk-Idle-Intervalle zu maximieren \end{itemize*} - \item Auswertung: Regeln für energieeffiziente Prefetching-Strategie nach Papathanasiou elal.: {[}PaSc04{]} - \begin{enumerate*} - \item Optimales Prefetching: Jedes \emph{prefetch} sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist. - \item Optimales Ersetzen: Bei jedem ersetzenden \emph{prefetch} sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird. - \item ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird. - \item Maximiere Zugriffsfolgen: Führe immer dann nach einem \emph{fetch} oder \emph{prefetch} ein weiteres \emph{prefetch} aus, wenn Blöcke für eine Ersetzung geeignet sind. (i.S.v. Regel 3) - \item Beachte Idle-Zeiten: Unterbrich nur dann eine Inaktivitätsperiode durch ein \emph{prefetch} , falls dieses sofort ausgeführt werden muss, um einen Cache-Miss zu vermeiden. - \end{enumerate*} + \begin{enumerate*} + \item Optimales Prefetching: Jedes \emph{prefetch} sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist + \item Optimales Ersetzen: Bei jedem ersetzenden \emph{prefetch} sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird + \item ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird + \item Maximiere Zugriffsfolgen: Führe immer dann nach einem \emph{fetch}/\emph{prefetch} ein weiteres \emph{prefetch} aus, wenn Blöcke für eine Ersetzung geeignet sind + \item Beachte Idle-Zeiten: Unterbrich nur dann eine Inaktivitätsperiode durch ein \emph{prefetch}, falls dieses sofort ausgeführt werden muss, um Cache-Miss zu vermeiden + \end{enumerate*} \end{itemize*} - Allgemeine Schlussfolgerungen - \begin{enumerate*} \item Hardware-Spezifikation nutzen: Modi, in denen wenig Energie verbraucht wird - \item Entwicklung von Strategien, die langen Aufenthalt in energiesparenden Modi ermöglichen , und dabei Leistungsparameter in vertretbarem Umfang reduzieren + \item Entwicklung von Strategien, die langen Aufenthalt in energiesparenden Modi ermöglichen und dabei Leistungsparameter in vertretbarem Umfang reduzieren \item Implementieren dieser Strategien in Betriebssystemmechanismen zur Ressourcenverwaltung \end{enumerate*} \subsubsection{Energieeffizientes Prozessormanagement} - Hardware-Gegebenheiten - \begin{itemize*} - \item - z.Zt. meistgenutzte Halbleitertechnologie für Prozessor-Hardware: CMOS + \item z.Zt. meistgenutzte Halbleitertechnologie für Prozessor-Hardware: CMOS ( Complementary Metal Oxide Semiconductor) \item Komponenten für Energieverbrauch: \$P = P\_\{switching\} + @@ -495,7 +454,7 @@ \item Beschränkung des Energieverbrauchs (durch Qualitätseinbußen, schlimmstenfalls Ausfall)ab einem oberen Schwellwert \$E\_\{max\}\$ \item Problem: energieintensive Threads behindern alle nachfolgenden Threads trotz gleicher Priorität $\rightarrow$ Fairnessmaß von RR (gleiche Zeitscheibenlänge T ) untergraben %\begin{itemize*} - \item %\includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-round-robin-unfair.png} \end{itemize*} + %\item \includegraphics[width=\linewidth]{Assets/AdvancedOperatingSystems-round-robin-unfair.png} \end{itemize*} %\end{itemize*} \item Problem 2: energieintensive Threads niedrigerer Priorität behindern später ankommende Threads höherer Priorität