[Kapitel] Neue Inhalte ergänzt
This commit is contained in:
parent
d06fd420e8
commit
a957590287
9 changed files with 323 additions and 70 deletions
BIN
Bilder/Aufwand_Komparator.png
Normal file
BIN
Bilder/Aufwand_Komparator.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 66 KiB |
BIN
Bilder/Cache_Aufbau.png
Normal file
BIN
Bilder/Cache_Aufbau.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 46 KiB |
BIN
Bilder/Cache_Komparator.png
Normal file
BIN
Bilder/Cache_Komparator.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 65 KiB |
BIN
Bilder/Cache_Komparator_1.png
Normal file
BIN
Bilder/Cache_Komparator_1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
BIN
Bilder/n-bit-Komparator.png
Normal file
BIN
Bilder/n-bit-Komparator.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 68 KiB |
|
@ -1048,73 +1048,3 @@ In \autoref{tbl:risc_cisc} werden \acs{RISC} und \acs{CISC} verglichen.
|
||||||
\label{tbl:risc_cisc}
|
\label{tbl:risc_cisc}
|
||||||
\end{table}
|
\end{table}
|
||||||
|
|
||||||
|
|
||||||
\section{Speicher in Computern} \index{Speicher}
|
|
||||||
|
|
||||||
\subsection{Speicherhierarchie}
|
|
||||||
\autoref{tbl:speicherhierarchie} zeigt die Speicherhierarchie in modernen Universalrechnern
|
|
||||||
|
|
||||||
\begin{table}[ht]
|
|
||||||
\centering
|
|
||||||
\begin{tabular}{p{29mm}|p{36mm}|p{17mm}|p{34mm}|p{23mm}}
|
|
||||||
Speicher & von-Neumann-Rechner & Persistenz & Größe & Zugriffszeit \\ \midrule
|
|
||||||
\acs{CPU}-Register & Zentraleinheit (Rechen- und Steuerwerk) & flüchtig & $<1kB$ Byte & $\approx$ 200ps \\ \midrule
|
|
||||||
Cache \newline (\enquote{CPU-Cache}) & nicht vorhanden & flüchtig & \circa{4}MB \newline L1$\approx$64KB \newline L2$\approx$512KB & $\approx$ 10ns \\ \midrule
|
|
||||||
Hauptspeicher/ Primärspeicher & Speicherwerk & flüchtig & \circa{8}GB & $\approx$ 100ns \newline L1 schneller \\ \midrule
|
|
||||||
Sekundärspeicher & Peripheriegeräte an Ein- und Ausgabewerk & nicht flüchtig & HDD: 3T \newline SSD: 512GB \newline opt.~\acs{LW}: bis~100GB \newline \acs{BLW}: wenige TB & HDD~$\approx10ms$ \newline SSD~$\approx 10\mu s$\newline opt.~\acs{LW}~$\approx 1s$ \newline \acs{BLW}~$\approx 1min$
|
|
||||||
\end{tabular}
|
|
||||||
\caption{Speicherhierarchie und -Daten}
|
|
||||||
\label{tbl:speicherhierarchie}
|
|
||||||
\end{table}
|
|
||||||
|
|
||||||
\subsection{Sekundärspeicher}
|
|
||||||
Motivation für Sekundärspeicher: nicht-flüchtig, \dash der Speicherinhalt bleibt auch bei Stromausfall erhalten.
|
|
||||||
|
|
||||||
\textbf{Anwendungen:}
|
|
||||||
|
|
||||||
\begin{itemize}[noitemsep]
|
|
||||||
\item Programmcode (Betriebsystem, Anwendungsprogramme)
|
|
||||||
\item Nutzdaten
|
|
||||||
\item virtuelle Erweiterung des Speicherwerks (Swap-Datei/-Partition)
|
|
||||||
\item Hibernation (\enquote{Ruhezustand})
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\subsection{CPU-Cache}
|
|
||||||
\begin{figure}[ht]
|
|
||||||
\centering
|
|
||||||
\begin{tikzpicture}
|
|
||||||
% CPU
|
|
||||||
\draw (-3, -0.5) rectangle ++(6,1);
|
|
||||||
\node at (0, 0) (SW) {Speicherwerk};
|
|
||||||
|
|
||||||
\draw (-2.5, 1.5) rectangle ++(5,1);
|
|
||||||
\node at (0, 2) (Ca) {CPU-Cache};
|
|
||||||
|
|
||||||
\draw (-2, 3.5) rectangle ++(4,1);
|
|
||||||
\node at (0, 4) (CPU) {Zentraleinheit (CPU)};
|
|
||||||
|
|
||||||
\draw ($(CPU)+(0,-0.5)$) -- ($(Ca)+(0,0.5)$) ($(Ca)+(0,-0.5)$) -- ($(SW)+(0,0.5)$);
|
|
||||||
\end{tikzpicture}
|
|
||||||
\caption{...}
|
|
||||||
\label{fig:cpu_cache}
|
|
||||||
\end{figure}
|
|
||||||
|
|
||||||
Temporärer, flüchtiger, schneller Zwischenspeicher, um auf Informationen aus dem Hauptspeicher schneller zugreifen zu können.
|
|
||||||
|
|
||||||
Eigenschaften des Cache:
|
|
||||||
\begin{itemize}[noitemsep]
|
|
||||||
\item flüchtig
|
|
||||||
\item kleiner als das zu cachende Medium (Hauptspeicher)
|
|
||||||
\item schneller als das zu cachende Medium (Hauptspeicher)
|
|
||||||
\item transparent, \dash es wird nicht auf den Cache, sondern auf das zu cachende Medium logisch zugegriffen (die \acs{CPU} adressiert den Hauptspeicher und nicht den Cache)
|
|
||||||
\item konsistent, \dash alle Instanzen derselben \acf{HSA} haben denselben Wert
|
|
||||||
\item kohärent, \dash beim Zugriff auf eine \acs{HSA} wird immer der aktuelle Wert geliefert
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\bigskip
|
|
||||||
\begin{Hinweis}[frametitle={Anmerkung: Kohärenz und Konsistenz}]
|
|
||||||
Kohärenz ist Pflicht und Konsistenz ist Wunsch, da aus Konsistenz Kohärenz folgt. Zeitweise kann aber auf Konsistenz verzichtet werden.
|
|
||||||
\end{Hinweis}
|
|
||||||
|
|
||||||
Lokalität des Zugriffmusters \newline
|
|
||||||
$\Rightarrow$ verantwortlich dafür, dass der Cache Geschwindigkeitsvorteile bringen kann.
|
|
||||||
|
|
320
Kapitel/03_Speicher.tex
Normal file
320
Kapitel/03_Speicher.tex
Normal file
|
@ -0,0 +1,320 @@
|
||||||
|
|
||||||
|
\chapter{Speicher in Computern} \index{Speicher}
|
||||||
|
|
||||||
|
\section{Speicherhierarchie}
|
||||||
|
\autoref{tbl:speicherhierarchie} zeigt die Speicherhierarchie in modernen Universalrechnern
|
||||||
|
|
||||||
|
\begin{table}[ht]
|
||||||
|
\centering
|
||||||
|
\begin{tabular}{p{29mm}|p{36mm}|p{17mm}|p{34mm}|p{23mm}}
|
||||||
|
Speicher & von-Neumann-Rechner & Persistenz & Größe & Zugriffszeit \\ \midrule
|
||||||
|
\acs{CPU}-Register & Zentraleinheit (Rechen- und Steuerwerk) & flüchtig & $<1kB$ Byte & $\approx$ 200ps \\ \midrule
|
||||||
|
Cache \newline (\enquote{CPU-Cache}) & nicht vorhanden & flüchtig & \circa{4}MB \newline L1$\approx$64KB \newline L2$\approx$512KB & $\approx$ 10ns \\ \midrule
|
||||||
|
Hauptspeicher/ Primärspeicher & Speicherwerk & flüchtig & \circa{8}GB & $\approx$ 100ns \newline L1 schneller \\ \midrule
|
||||||
|
Sekundärspeicher & Peripheriegeräte an Ein- und Ausgabewerk & nicht flüchtig & HDD: 3T \newline SSD: 512GB \newline opt.~\acs{LW}: bis~100GB \newline \acs{BLW}: wenige TB & HDD~$\approx10ms$ \newline SSD~$\approx 10\mu s$\newline opt.~\acs{LW}~$\approx 1s$ \newline \acs{BLW}~$\approx 1min$
|
||||||
|
\end{tabular}
|
||||||
|
\caption{Speicherhierarchie und -Daten}
|
||||||
|
\label{tbl:speicherhierarchie}
|
||||||
|
\end{table}
|
||||||
|
|
||||||
|
\section{Sekundärspeicher}
|
||||||
|
Motivation für Sekundärspeicher: nicht-flüchtig, \dash der Speicherinhalt bleibt auch bei Stromausfall erhalten.
|
||||||
|
|
||||||
|
\textbf{Anwendungen:}
|
||||||
|
|
||||||
|
\begin{itemize}[noitemsep]
|
||||||
|
\item Programmcode (Betriebsystem, Anwendungsprogramme)
|
||||||
|
\item Nutzdaten
|
||||||
|
\item virtuelle Erweiterung des Speicherwerks (Swap-Datei/-Partition)
|
||||||
|
\item Hibernation (\enquote{Ruhezustand})
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\section{CPU-Cache}
|
||||||
|
|
||||||
|
Temporärer, flüchtiger, schneller Zwischenspeicher, um auf Informationen aus dem Hauptspeicher schneller zugreifen zu können.
|
||||||
|
|
||||||
|
Eigenschaften des Cache:
|
||||||
|
\begin{itemize}[noitemsep]
|
||||||
|
\item flüchtig
|
||||||
|
\item kleiner als das zu cachende Medium (Hauptspeicher)
|
||||||
|
\item schneller als das zu cachende Medium (Hauptspeicher)
|
||||||
|
\item transparent, \dash es wird nicht auf den Cache, sondern auf das zu cachende Medium logisch zugegriffen (die \acs{CPU} adressiert den Hauptspeicher und nicht den Cache)
|
||||||
|
\item konsistent, \dash alle Instanzen derselben \acf{HSA} haben denselben Wert
|
||||||
|
\item kohärent, \dash beim Zugriff auf eine \acs{HSA} wird immer der aktuelle Wert geliefert
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\bigskip
|
||||||
|
\begin{Hinweis}[frametitle={Anmerkung: Kohärenz und Konsistenz}]
|
||||||
|
Kohärenz ist Pflicht und Konsistenz ist Wunsch, da aus Konsistenz Kohärenz folgt. Zeitweise kann aber auf Konsistenz verzichtet werden.
|
||||||
|
\end{Hinweis}
|
||||||
|
|
||||||
|
\subsection{Lokalität des Zugriffmusters} \index{Lokalität}
|
||||||
|
Verantwortlich dafür, dass der Cache Geschwindigkeitsvorteile bringen kann.
|
||||||
|
\begin{description}
|
||||||
|
\item[räumliche Lokalität] Wenn auf eine Adresse zugegriffen wird, wird auch auf naheliegende Adressen zugegriffen.
|
||||||
|
\item[zeitlich Lokalität] Die Zugriffe (auf nahe beieinanderliegene Adressen) erfolgen in relativ geringem zeitlichen Aufwand
|
||||||
|
\end{description}
|
||||||
|
\medskip
|
||||||
|
\begin{Hinweis}
|
||||||
|
Hinweis: Insbesondere die räumliche Lokalität ist beim Zugriff auf Programmcode und Nutzdaten sehr unterschiedlich (Programmcode: sequentiell, Nutzdaten zufällig innterhalb von Speicherblöcken).
|
||||||
|
|
||||||
|
$\Rightarrow$ Moderne \acsp{CPU} weisen getrennte Caches für Programmcode und Nutzdaten auf!
|
||||||
|
\end{Hinweis}
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Begriffe}
|
||||||
|
\begin{description}
|
||||||
|
\item[Hit]\index{Hit-Rate} Zugriff auf \acl{HS}-Daten, welcher aus dem Cache bedient werden kann
|
||||||
|
\item[Miss]\index{Miss-Rate} Zugriff auf \acl{HS}-Daten, welcher \textit{nicht} aus dem Cache bedient werden kann und deshalb der Cache die Daten erst aus dem \acl{HS} holen muss.
|
||||||
|
\item[Hit-Rate] Anteil der \enquote{erfolgreichen} Zugriffe an allen Zugriffen. \newline
|
||||||
|
Hit-Rate=$\frac{\text{\#Hits}}{\text{\#Zugriffe}}$
|
||||||
|
\item[Miss-Rate] Anteil der \enquote{nicht erfolgreichen} Zugriffe an allen Zugriffen. \newline
|
||||||
|
Miss-Rate=$\frac{\text{\#Misses}}{\text{\#Zugriffe}}$
|
||||||
|
\item[Zugriffe] Anzahl der Misses plus der Hits
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\columnratio{0.5}
|
||||||
|
\begin{paracol}{2}
|
||||||
|
\begin{tabular}{@{}ll}
|
||||||
|
\textbf{Anwendung}: & $0\leq$ Hit-Rate $\leq 1$ \\
|
||||||
|
& $0\leq$ Miss-Rate $\leq 1$ \\
|
||||||
|
& Hit-Rate + Miss-Rate $= 1$
|
||||||
|
\end{tabular}
|
||||||
|
\switchcolumn
|
||||||
|
\begin{tabular}{ll}
|
||||||
|
\textbf{Ziel}: & Hit-Rate $\rightarrow 1$ (nicht realistisch) \\
|
||||||
|
& Hit-Rate $\rightarrow 0$ \\
|
||||||
|
& Hit-Rate $\rightarrow$ systembedingtes Maximum \\
|
||||||
|
& \qquad (realistisch)
|
||||||
|
\end{tabular}
|
||||||
|
\end{paracol}
|
||||||
|
|
||||||
|
|
||||||
|
systembedingtes Maximum hängt ab von
|
||||||
|
\begin{itemize}[noitemsep]
|
||||||
|
\item Lokalität des Zugriffsmusters
|
||||||
|
\item Größe (und Größenverhältnis) von Cache und \acl{HS}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Hinweis: $\text{Hit-Rate}_\text{erreicht} \geq \frac{\text{Größe (Cache)}}{\text{Größe HS}}$ (Wahrscheinlichkeit, das ein beliebiger Zugriff eine bereits im Cache gespeicherte Adresse betrifft)
|
||||||
|
|
||||||
|
$\Rightarrow$ sobald das Zugriffsmuster Lokalität aufweist, ergibt sich eine bessere Hit-Rate
|
||||||
|
|
||||||
|
|
||||||
|
\subsection{Betriebszustände des Cache}
|
||||||
|
\begin{description}
|
||||||
|
\item[kalter Cache]\index{Cache!kalter Cache} bei Betriebsbeginn ist der Cache leer
|
||||||
|
\item[sich erwärmender Cache]\index{Cache!erwärmender Cache} Während des Betriebs wird der Cache mit immer mehr Daten geladen und die Hit-Rate steigt.
|
||||||
|
\item[heißer Cache]\index{Cache!heißer Cache} Der Cache ist (nahezu) voll nach einer gewissen Betriebszeit. Die Hit-Rate erreicht das systembedingte Maximum.
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\subsection{Cachearchitekturen}\index{Cache!Architektur}
|
||||||
|
\begin{figure}[!htb]
|
||||||
|
\medskip
|
||||||
|
\minipage{0.5\textwidth}
|
||||||
|
\begin{tikzpicture}
|
||||||
|
% CPU
|
||||||
|
\draw (-3, -0.5) rectangle ++(6,1);
|
||||||
|
\node at (0, 0) (SW) {Speicherwerk};
|
||||||
|
|
||||||
|
\draw (-2.5, 1.5) rectangle ++(5,1);
|
||||||
|
\node at (0, 2) (Ca) {CPU-Cache};
|
||||||
|
|
||||||
|
\draw (-2, 3.5) rectangle ++(4,1);
|
||||||
|
\node at (0, 4) (CPU) {Zentraleinheit (CPU)};
|
||||||
|
|
||||||
|
\draw ($(CPU)+(0,-0.5)$) -- ($(Ca)+(0,0.5)$) ($(Ca)+(0,-0.5)$) -- ($(SW)+(0,0.5)$);
|
||||||
|
\end{tikzpicture}
|
||||||
|
\caption{Look-Through-Cache}
|
||||||
|
\label{fig:cpu_cache_look_through}
|
||||||
|
\endminipage\hfill
|
||||||
|
\minipage{0.5\textwidth}
|
||||||
|
\begin{tikzpicture}
|
||||||
|
% CPU
|
||||||
|
\draw (-2.5, -0.5) rectangle ++(5,1);
|
||||||
|
\node at (0, 0) (SW) {Speicherwerk};
|
||||||
|
|
||||||
|
\draw (1.5, 1.5) rectangle ++(3,1);
|
||||||
|
\node at (3, 2) (Ca) {CPU-Cache};
|
||||||
|
|
||||||
|
\draw (-2, 3.5) rectangle ++(4,1);
|
||||||
|
\node at (0, 4) (CPU) {Zentraleinheit (CPU)};
|
||||||
|
|
||||||
|
\draw ($(CPU)+(0,-0.5)$) -- ($(SW)+(0,0.5)$);
|
||||||
|
\draw (0, 2) -- ($(Ca)+(-1.5,0)$);
|
||||||
|
\end{tikzpicture}
|
||||||
|
\caption{Look-Aside-Cache}
|
||||||
|
\label{fig:cpu_cache_look_aside}
|
||||||
|
\endminipage
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\columnratio{0.5}
|
||||||
|
\begin{paracol}{2}
|
||||||
|
\textsf{\textbf{Look-Through-Cache}}\index{Cache!Look-Through}
|
||||||
|
|
||||||
|
Wie in \autoref{fig:cpu_cache_look_through} zu sehen, ist die CPU nur mit dem Cache und der \acl{HS} ebenfalls nur mit dem Cache verbunden.
|
||||||
|
|
||||||
|
CPU greift über den Cache auf den \acl{HS} zu:
|
||||||
|
|
||||||
|
\begin{itemize}[leftmargin=5mm]
|
||||||
|
\item[$\ominus$] $t_\text{Miss}=t_\text{Cache}+t_\text{HS}$ \newline
|
||||||
|
Zugriffszeit bei Miss größer als ohne Cache
|
||||||
|
\item[$\oplus$] optimale Konsistenz
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\switchcolumn
|
||||||
|
\textsf{\textbf{Look-Aside-Cache}}\index{Cache!Look-Aside}
|
||||||
|
|
||||||
|
In \autoref{fig:cpu_cache_look_aside} sind \acs{CPU}, Cache und \acs{HS} über einen Bus miteinander verbunden. Die Anfrage durch die CPU geht auf dem Bus an beide und ggf. antworten beide, \dash die schnellere Antwort gewinnt.
|
||||||
|
|
||||||
|
\begin{itemize}[leftmargin=5mm]
|
||||||
|
\item[$\oplus$] $t_\text{Miss} > t_\text{HS}$ \newline
|
||||||
|
Zugriffszeit bei einem Miss genauso wie ohne Cache $\Rightarrow$ immer \enquote{beste} Zugriffszeit
|
||||||
|
\item[$\ominus$] Bus braucht Zugriffsprotokoll mit Overhead $\Rightarrow$ langsamer als 1:1 Verbindung
|
||||||
|
\item[$\ominus$] Konsistenz durch zweite Antwort potentiell gefährdet
|
||||||
|
\end{itemize}
|
||||||
|
\end{paracol}
|
||||||
|
|
||||||
|
\subsection{Schreibstrategie}
|
||||||
|
\columnratio{0.5}
|
||||||
|
\begin{paracol}{2}
|
||||||
|
\textsf{\textbf{Write-Back}}
|
||||||
|
|
||||||
|
Schreibzugriff durch die \acs{CPU} findet im Cache statt und der Cache aktualisiert die Daten bei nächster Gelegenheit im \acl{HS}.
|
||||||
|
\bigskip
|
||||||
|
\medskip
|
||||||
|
\begin{itemize}[leftmargin=5mm]
|
||||||
|
\item[$\ominus$] zeitwertige Inkonsistenz der Daten
|
||||||
|
\item[$\oplus$] Schreiben in Cache-Geschwindigkeit möglich
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\switchcolumn
|
||||||
|
\textsf{\textbf{Write-Through}}
|
||||||
|
|
||||||
|
Schreibzugriffe durch die \acs{CPU} findet im \acl{HS} statt. Parallel dazu müssen die Daten im Cache invalidiert (schlecht) oder ebenfalls geschrieben werden (gut).
|
||||||
|
\begin{itemize}[leftmargin=5mm]
|
||||||
|
\item[$\oplus$] optimale Konsistenz der Daten
|
||||||
|
\item[$\ominus$] Schreiben nur in \acl{HS}-Geschwindigkeit möglich
|
||||||
|
\end{itemize}
|
||||||
|
\end{paracol}
|
||||||
|
|
||||||
|
\begin{tabular}{p{32mm}|p{62mm}|p{62mm}}
|
||||||
|
\textbf{Cachearchitektur} \newline \newline \textbf{Schreibstrategie}
|
||||||
|
& \textbf{Write-Bac}k
|
||||||
|
& \textbf{Write-Through} \\
|
||||||
|
\midrule
|
||||||
|
|
||||||
|
\textbf{Look-Through}
|
||||||
|
& $\oplus$ gute klassische Kombination, da die physische Gegebenheit vorhanden sind, um direktes Schreiben in Cache und Rückschreiben vom Cache in \acs{HS} zu ermöglichen
|
||||||
|
& $\ominus$ Kombination nicht möglich, da kein direkter Zugriff der \acs{CPU} auf \acs{HS} physisch gegeben ist.
|
||||||
|
\\ \midrule
|
||||||
|
|
||||||
|
\textbf{Look-Aside}
|
||||||
|
& $\ominus$ schlechte Kombination, da bei jedem Schreibzugriff der Bus zweimal belastet wird
|
||||||
|
& $\oplus$ gute klassische Kombination, da Schreibzugriffe parallel im \acs{HS} und Cache physisch gut machbar
|
||||||
|
\end{tabular}
|
||||||
|
|
||||||
|
\subsection{Cache-Aufbau}
|
||||||
|
|
||||||
|
\begin{figure}[ht]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=\textwidth]{./Bilder/Cache_Aufbau.png}
|
||||||
|
\caption{Aufbau des Caches}
|
||||||
|
\label{fig:cache_aufbau}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\begin{description}
|
||||||
|
\item[\acf{HSS}] gleich große Speicheranteile des Hauptspeichers. Eine \acs{HSS} sollte $2^m$ \acs{HSA} beinhalten, um eine einfache Umrechung von \acs{HSS}-Nummern und \acs{HSA} zu ermöglichen.
|
||||||
|
\item[\acf{CL}] Kopie einer \acl{HSS} im Cache
|
||||||
|
\item[Tag] Die um $m$ niederwertigsten Bit gekürzte \acs{HSA}, welche der \acs{HSS}-Nummer entspricht.
|
||||||
|
\item[Status] Zustandsinfo zur Cache-Line, \zB Valid-Flag und weiter Zustandsinfos abhängig von Verdrängungsstrategie
|
||||||
|
\item[Valid-Flag] Die Daten werden im Cache geändert und müssen noch in den \acs{HS} zurückgeschrieben werden (nur bei Write-Back-Schreibstrategie)
|
||||||
|
\end{description}
|
||||||
|
|
||||||
|
\subsection{vollassoziativer Cache}
|
||||||
|
Jede \acl{HSS} kann in jeder \acl{CL} eingelagert werden (nicht gleichzeitig!)
|
||||||
|
\begin{itemize}[noitemsep]
|
||||||
|
\item[$\Rightarrow$] bei jedem Zugriff auf eine \acf{HSA} muss überprüft werden, ob die gekürzte \acs{HSA} einem der Tags von validen \acl{CL} entspricht!
|
||||||
|
\item[$\Rightarrow$] Vergleichen der gekkürzten \acs{HSA} mit allen Tags (von validen \acs{CL})
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
Wie kann verglichen werden? Welche Möglichkeiten des Vergleichs gibt es?
|
||||||
|
|
||||||
|
\begin{itemize}[noitemsep]
|
||||||
|
\item sequentiell $\Rightarrow$ Nachteil: erhöhte Zugriffszeit
|
||||||
|
\item Parallel $\Rightarrow$ gleichzeitiges Vergleichen der angelegten (gekürzten) \acs{HSA} mit allen Tags über jeweils einen eigenen Komparator in jeder \acs{CL}. \newline
|
||||||
|
Nachteil: \acl{HW}-Aufwand für Komparator in jeder \acs{CL}.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
|
\textsf{\textbf{Einschub: Schaltungssynthese Komparator}} \newline
|
||||||
|
Hier: Schaltnetz, welches zwei Zahlen auf Gleichheit, Größer und Kleiner vergleicht.
|
||||||
|
|
||||||
|
\begin{figure}[!ht]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=6cm]{./Bilder/Cache_Komparator_1.png}
|
||||||
|
\caption{$n$-Bit-Komparator}
|
||||||
|
\label{fig:cache_komparator_1}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Möchte man eine Wertetabelle für einen $n$-Bit-Komparator erstellen, sieht man, dass zu viele Zeilen in der Wertetabelle ($2^{2n}$\ldots) sind $\Rightarrow$ besser mit kaskadierbaren 1-Bit-Komparatoren
|
||||||
|
|
||||||
|
\textsf{\textbf{Komparator für Gleichheit}} \newline
|
||||||
|
\textit{Hinweis}: im Cache reicht der Vergleich auf Gleichheit. \autoref{fig:cache_komparator_3} zeigt 1-Bit-Komparatoren für einen Gleichheits-Komparator.
|
||||||
|
\begin{figure}[!ht]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=9cm]{./Bilder/Aufwand_Komparator.png}
|
||||||
|
\caption{Aufbau des Gleichheits-Komparators im Cache}
|
||||||
|
\label{fig:cache_komparator_3}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\subsubsection{Komparator}
|
||||||
|
|
||||||
|
\begin{figure}[!h]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=\textwidth]{./Bilder/Cache_Komparator.png}
|
||||||
|
\caption{Aufbau des $n$-Bit-Komparator aus kaskadierbaren 1-Bit-Komparatoren}
|
||||||
|
\label{fig:cache_komparator_2}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
Aus \autoref{fig:cache_komparator_2} ergibt sich folgende Tabelle:
|
||||||
|
\begin{center}
|
||||||
|
\ttfamily
|
||||||
|
\begin{tabular}{ccccc|ccc}
|
||||||
|
$b_n$ & $a_n$ & $a>b_{in}$ & $a=b_{in}$ & $a<b_{in}$ & $a>b_{out}$ & $a=b_{out}$ & $a<b_{out}$ \\ \midrule
|
||||||
|
0 & 0 & 0 & 0 & 1 & 0 & 0 & 1 \\
|
||||||
|
0 & 0 & 0 & 1 & 0 & 0 & 1 & 0 \\
|
||||||
|
0 & 0 & 1 & 0 & 0 & 1 & 0 & 0 \\
|
||||||
|
0 & 1 & x & x & x & 1 & 0 & 0 \\
|
||||||
|
1 & 0 & x & x & x & 0 & 0 & 1 \\
|
||||||
|
1 & 1 & 0 & 0 & 1 & 0 & 0 & 1 \\
|
||||||
|
1 & 1 & 0 & 1 & 0 & 0 & 1 & 0 \\
|
||||||
|
1 & 1 & 1 & 0 & 0 & 1 & 0 & 1
|
||||||
|
\end{tabular}
|
||||||
|
\end{center}
|
||||||
|
|
||||||
|
Somit ergibt sich als Schaltnetz für einen 4-Bit-Komparator die \autoref{fig:n_komparator}
|
||||||
|
|
||||||
|
\begin{figure}[!ht]
|
||||||
|
\centering
|
||||||
|
\includegraphics[width=8cm]{./Bilder/n-bit-Komparator.png}
|
||||||
|
\caption{kaskadierbarer 4-Bit-Komparator}
|
||||||
|
\label{fig:n_komparator}
|
||||||
|
\end{figure}
|
||||||
|
|
||||||
|
\acs{HW}-Aufwand für einen kaskadierbaren 1-Bit-Komparator
|
||||||
|
\begin{itemize}[noitemsep]
|
||||||
|
\item[] HW: 42 Transistoren
|
||||||
|
\item[] Zeit: 2\acs{GLZ}
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
|
Im Cache reicht der Vergleich auf Gleichheit aller Ziffern parallel:
|
||||||
|
|
||||||
|
\begin{itemize}[noitemsep]
|
||||||
|
\item 2 $n$-Bit-Zahlen: $n$ Äquivalenzgatter und 1 \code{UND} mit $n$ Eingängen. (vergleiche \autoref{fig:cache_komparator_3})
|
||||||
|
|
||||||
|
$\Rightarrow$ 7n Transistoren HW-Aufwand
|
||||||
|
|
||||||
|
$\Rightarrow$ 3\acs{GLZ} Zeitaufwand
|
||||||
|
\end{itemize}\todo{Formatieren, etc}
|
Binary file not shown.
|
@ -34,6 +34,7 @@
|
||||||
\input{Kapitel/00_Vorwort.tex}
|
\input{Kapitel/00_Vorwort.tex}
|
||||||
\input{Kapitel/01_Einstieg.tex}
|
\input{Kapitel/01_Einstieg.tex}
|
||||||
\input{Kapitel/02_Rechner.tex}
|
\input{Kapitel/02_Rechner.tex}
|
||||||
|
\input{Kapitel/03_Speicher.tex}
|
||||||
|
|
||||||
%------- Sonstiges ---------------------------------------------------
|
%------- Sonstiges ---------------------------------------------------
|
||||||
|
|
||||||
|
@ -41,6 +42,7 @@
|
||||||
\begin{acronym}[xxxxxxxx]
|
\begin{acronym}[xxxxxxxx]
|
||||||
\acro{BLW}{Bandlaufwerk}
|
\acro{BLW}{Bandlaufwerk}
|
||||||
\acro{CISC}{Complex Instruction Set Computer}
|
\acro{CISC}{Complex Instruction Set Computer}
|
||||||
|
\acro{CL}{Cache Line}
|
||||||
\acro{CLA-PA}{Carry-Look-Ahead-Paralleladdierer}
|
\acro{CLA-PA}{Carry-Look-Ahead-Paralleladdierer}
|
||||||
\acro{CPU}{Central Processing Unit}
|
\acro{CPU}{Central Processing Unit}
|
||||||
\acro{D-FF}{D-Flip-Flop}
|
\acro{D-FF}{D-Flip-Flop}
|
||||||
|
@ -53,6 +55,7 @@
|
||||||
\acro{HA}{Halbaddierer}
|
\acro{HA}{Halbaddierer}
|
||||||
\acro{HS}{Hauptspeicher}
|
\acro{HS}{Hauptspeicher}
|
||||||
\acro{HSA}{Hauptspeicheradresse}
|
\acro{HSA}{Hauptspeicheradresse}
|
||||||
|
\acro{HSS}{Hauptspeicherseite}
|
||||||
\acro{HW}{Hardware}
|
\acro{HW}{Hardware}
|
||||||
\acro{LW}{Laufwerk}
|
\acro{LW}{Laufwerk}
|
||||||
\acro{PC}{Personal Computer}
|
\acro{PC}{Personal Computer}
|
||||||
|
|
Loading…
Reference in a new issue