%-----------
%Robin
%-----------

\subsectionauthor[R.A.J. Wacanno]{Virtueel Geheugen}

Nu de bovenste lagen van de geheugenhiërarchie uitvoering behandeld zijn, is het ook van belang om te bespreken hoe de onderste lagen van deze piramide geoptimaliseerd kunnen worden om zo tot de gewenste prestaties van een architectuur te komen. 

Een principe welke een cruciale rol speelt bij het \textit{RAM (Random Access Memory)} en de secundaire opslag, in de vorm van een \textit{SSD}- (\textit{Solid State Drive}) of harde schijf, is die van het \textbf{virtuele geheugen}. Dit virtuele geheugen is in de loop der tijd tot stand gekomen ter oplossing van de volgende problematiek:

\begin{itemize}
\item \textbf{Het veilig delen van het geheugen tussen verschillende processen}

Tijdens het schrijven en compileren van een programma kan niet voorspeld worden met welke programma's het bij het uitvoeren het geheugen zal moeten delen. Sterker nog, zelfs tijdens het draaien van het programma kunnen deze omstandigheden sterk veranderen. 

Om dit soort situaties te voorkomen stelt het virtuele geheugen de individuele programma's in staat een eigen \textbf{adresseringsruimte} te benutten. Het virtuele geheugen draagt zorg voor het omzetten van locaties binnen deze adresseringsruimte naar \textbf{fysieke geheugenadressen}.

\item \textbf{Het oplossen van problematiek als gevolg van een gelimiteerde hoeveelheid geheugen}

Dikwijls komt het voor dat een programma meer geheugen nodig heeft --- zij het voor data, zij het voor instructies --- dan dat er binnen het systeem beschikbaar is. Ook hiervoor biedt het virtuele geheugen een oplossing. Het eerdergenoemde omzetten van geheugenadressen geldt namelijk niet alleen tussen virtuele en fysieke adressen, maar ook tussen \textbf{virtuele adressen} en adressen van secundaire opslagapparaten. Zo kan een draaiend programma dus niet alleen gebruikmaken van het RAM, maar ook van een naar alle waarschijnlijkheid aanwezige secundaire opslageenheid. 

\end{itemize}

\noindent Om het virtuele geheugen beter te kunnen begrijpen is het verstandig een aantal termen en hun bijbehorende definities te belichten. Allereerst is er de \textbf{pagina} (\textit{page}). Dit is een blok geheugen dat in het virtuele geheugen aanwezig is. Wanneer een pagina die is opgevraagd met behulp van een virtueel adres niet in het \textit{RAM} aanwezig is ontstaat er een \textbf{pagina-fout} (\textit{page fault}).\\

\noindent Een voorbeeld van het verbinden van een virtueel en een fysiek adres is in het onderstaande plaatje schematisch uitgebeeld:

\begin{center}
\includegraphics[width=0.5\textwidth]{figr5}
\end{center}

\noindent In het nu volgende plaatje is de opbouw van zowel virtuele als fysieke adressen en de tussenliggende omzetting geïllustreerd:

\begin{center}
\includegraphics[width=0.5\textwidth]{figr6}
\end{center}

\noindent Zoals te zien is, is het virtuele adres opgebouwd uit een \textbf{virtueel paginanummer} en een \textbf{pagina-afstand}. Het fysieke adres is opgebouwd uit een \textbf{fysiek paginanummer} en dezelfde pagina-afstand. 

Het is van belang het een en ander in beschouwing te nemen wanneer men kijkt naar dit figuur. Allereerst is aan de lengte van de paginanummers te zien dat het virtuele adres een groter pagina-adresseringsbereik heeft dan het fysieke adres. Dit spreekt voorzich, aangezien --- zoals eerder gezegd --- de adresseringsruimte groter kan zijn dan het geheugen dat in een systeem aanwezig is. Wanneer er een virtueel adres opgevraagd wordt die niet aan een locatie in het geheugen is gekoppeld zal deze dus uit de secundaire opslag geladen moeten worden (een pagina-fout). 

Dan is er ook te zien dat dat de pagina-afstand in beide adresvormen met elkaar correspondeert; hetgeen logisch is omdat pagina's in het virtuele en het fysieke geheugen dezelfde grootte hebben. Het is daarom dat deze nummers niet omgezet hoeven te worden en een locatie binnen een pagina in het virtuele en het fysieke geheugen met het zelfde pagina-afstnndsnummer opgevraagd kan worden.

Bij het ontwerpen van een virtueel geheugensysteem zijn er een aantal zaken die in acht genoemen moeten worden, aangezien het geheugen in sommige gevallen wel 100.000 maal sneller kan zijn dan de secundaire opslag en een pagina-fout dus zeer kostbaar kan zijn. 

\begin{itemize}

    \item %TODO

    \item Veelal worden pagina's volledig associatief geordend om de frequentie van pagina-fouten te verminderen.

    \item Pagina-fouten kunnen door de \textit{software} worden afgehandeld omdat de tijd die dit kost niet significant is vergeleken met de tijd die het kost om de betreffende pagina uit de secundaire opslag te laden. Ook is \textit{software} in staat om pagina's dusdanig te ordenen om zo de kans op pagina-fouten te verminderen.

    \item %TODO

\end{itemize}


\subsubsection{Het Plaatsen en Vinden van Pagina's}




\subsectionauthor[R.A.J. Wacanno]{Geheugenhiërarchie Binnen een Gemeenschappelijk Kader}


