Übung 4 - Betriebssysteme I



Ähnliche Dokumente
RO-Tutorien 15 und 16

(Cache-Schreibstrategien)

Tutorium Rechnerorganisation

Betriebssysteme. Wintersemester Kapitel 3 Speicherverwaltung. Patrick Kendzo

Besprechung des 9. Übungsblattes Virtuelle Speicherverwaltung Aufgaben

Betriebssysteme BS-S SS Hans-Georg Eßer. Foliensatz S: Speicherverwaltung. Dipl.-Math., Dipl.-Inform. v1.0, 2015/04/14

Lösung von Übungsblatt 2

Übung 1 - Betriebssysteme I

Betriebssysteme Studiengang Informatik / SAT

Mapra: C++ Teil 6. Felix Gruber, Sven Groß. IGPM, RWTH Aachen. 13. Juni 2017

Lösungsvorschlag für Übung September 2009

Lösung von Übungsblatt 2

Zwei Möglichkeiten die TLB zu aktualisieren

Leichtgewichtsprozesse

Leichtgewichtsprozesse

Speicherverwaltung (Swapping und Paging)

Virtueller Speicher und Memory Management

Konzepte von Betriebssystemkomponenten Referat am Thema: Adressräume, Page Faults, Demand Paging, Copy on Write Referent: Johannes Werner

Vorlesung: Rechnerstrukturen, Teil 2 (Modul IP7)

Teil 2: Speicherstrukturen

Algorithmen und Datenstrukturen

Echtzeitbetriebssysteme

Übung Praktische Informatik II

Klausur Betriebssysteme I

Speicher- und Cacheverwaltung unter Linux. Ralf Petring & Guido Schaumann

Paging. Einfaches Paging. Paging mit virtuellem Speicher

Klausur Betriebssysteme

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Technische Informatik 1 - HS 2017

Polymorphismus 44. Function.hpp. #include <string>

RO-Tutorien 17 und 18

Lösung von Übungsblatt 5

Grundlagen der Informatik 2. Typen

Betriebssysteme Teil 10 B: Fragen rund um Seitenfehler

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Klausur Betriebssysteme I

Definitionen zum Verschnitt

Übung zu Betriebssystemtechnik

Linker: Adreßräume verknüpfen. Informationen über einen Prozeß. Prozeß-Erzeugung: Verwandtschaft

Wunschvorstellung der Entwickler vom Speicher

7. Speicherverwaltung

Fachbericht Thema: Virtuelle Speicherverwaltung

Technische Realisierung (1)

Polymorphismus 179. Function.h. #include <string>

DOSEMU. Vortrag im Hauptseminar Konzepte und Techniken virtueller Maschinen und Emulatoren. Matthias Felix FAU. 13.

(Prof. Dr. J. Schlichter, WS 2011 / 2012) Übungsleitung: Dr. Wolfgang Wörndl

(Prof. Dr. J. Schlichter, WS 2011 / 2012) Übungsleitung: Dr. Wolfgang Wörndl

C++ Teil 6. Sven Groß. 23. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 15

Objektorientierte Programmierung mit C++ SS 2007

Echtzeit-Multitasking

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Echtzeit-Multitasking

Grundlagen der Informatik 11. Zeiger

Testen nebenläufiger Objekte

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Abschlussklausur. Betriebssysteme. 30. Januar Legen Sie bitte Ihren Lichtbildausweis und Ihren Studentenausweis bereit.

Abschlussklausur. Betriebssysteme und Rechnernetze. 12. Juli Legen Sie bitte Ihren Lichtbildausweis und Ihren Studentenausweis bereit.

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Proseminar Konzepte von Betriebssystem- Komponenten (KVBK) Vortrag zum Thema: Speicheraddressierung, Segmentierung, Paging

Freispeicherverwaltung Martin Wahl,

Naiver Ansatz. Blöcke und Seiten. Betriebssysteme I Sommersemester 2009 Kapitel 6: Speicherverwaltung und Dateisysteme

Einführung in die Programmiersprache C

Betriebssysteme. Speicherverwaltung - Grundlegende Konzepte. Sommersemester 2014 Prof. Dr. Peter Mandl. Prof. Dr. Peter Mandl Seite 1.

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Speicherverwaltung und Cache Erläuterungen

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Wie groß ist die Page Table?

5.5 Virtueller Speicher

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Programmieren in Java -Eingangstest-

5.5.5 Der Speicherverwalter

Technische Informatik II Wintersemester 2002/03 Sommersemester Heiko Holtkamp

8. Referenzen und Zeiger

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Rechnergrundlagen SS Vorlesung

Betriebssysteme I WS 2017/18. Prof. Dr. Dirk Müller. 05a 64-/32-Bit-Architekturen

Einführung in die Programmiersprache C

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Proseminar Konzepte von Betriebssystem-Komponenten (KVBK) Vortrag zum Thema: Speicheraddressierung, Segmentierung, Paging Von Christian Hubert

Die abgeleiteten Klassen Kreis und Viereck erben die Elemente des Basisklasse und verfügen über zusätzliche Eigenschaften (Seitenlänge,

RO-Tutorien 15 und 16

Betriebssysteme Kap J, Teil C: Paging, Pagereplacement

Repetitorium Programmieren I + II

Anbindung zum Betriebssystem (BS)

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

Lösung der OOP-Prüfung WS12/13

Grundkurs C++ IDE Klassenhierarchien

3 Schnittstelle zum Betriebssystem 3.1 Einleitung

::Zweck. Sicherstellung, dass nur eine Instanz einer bestimmten Klasse existiert

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

virtual Wertpapier& operator=(const Wertpapier&); // VIRTUELLE ZUWEISUNG protected: static enum {wortfeldlaenge = 20}; char* name_z; double kurs; };

Einleitung. Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Kurzeinführung in C/C++

1. Speicher. Typische Nutzung eines Adreßraums. Systemsoftware. Textbereich relativ klein. Sehr großer Abstand zwischen Heap und Stack

Grundkurs C++ IDE Klassenhierarchien

Transkript:

Prof. Dr. Th. Letschert FB MNI 9. Juni 2002 Übung 4 - Betriebssysteme I Aufgabe 1 1. Erläutern Sie die Begriffe der transparent und der virtuell mit ihrer in der Informatik üblichen Bedeutung. 2. Wie werden in der Informatik die Größen, und üblicherweise bezeichnet? 3. Welche Speicherstellen können von der CPU direkt über den Adressbus angesprochen werden? Erläutern Sie kurz aus welchen Komponenten der reale Speicher besteht. 4. Erläutern Sie kurz folgende Begriffe: physische Adresse logische Adresse physischer Adressraum logischer Adressraum virtuelle Adresse virtueller Speicher 5. Von wem werden wann absolute, relozierbare und virtuelle Adressen erzeugt und von wem werden diese dann wann (falls notwendig) in reale Speicheradressen umgesetzt? 6. Ist ein System mit virtuellen Adressen automatisch auch eins mit virtuellem Speicher? 7. Wie ist es umgekehrt: Ist ein System mit virtuellem Speicher auch automatisch eins mit virtuellen Adressen? 8. In welcher Beziehung stehen statische/dynamische Bindung und virtuelle Adressen: Kann/muss ein statisch gebundenes Programm virtuelle Adressen enthalten? Kann/muss ein dynamisch gebundenes Programm virtuelle Adressen enthalten? 9. Was bestimmt die Größe des logischen, physischen und virtuellen Adressraums. Erläutern Sie am Bespiel eines PCs mit Pentium Prozessor und 64 MB RAM. 10. Was ist ein virtueller Adressraum und was ist ein physischer Adressraum? Welche der folgenden Einheiten hat falls überhaupt welche Art von Adressraum: ein Thread, ein Prozess, eine Anwendung, eine Rechnerarchitektur, ein bestimmter Rechner,...

11. Was ist ein virtueller Speicher und was ist ein physischer Speicher? Welche der folgenden Einheiten hat falls überhaupt welche Art von Speicher: ein Thread, ein Prozess, eine Anwendung, eine Rechnerarchitektur, ein bestimmter Rechner,... 12. Was passiert, wenn der logische Adressraum eines Prozesses voll ist? Kann es dazu überhaupt kommen? 13. Was passiert, wenn der virtuelle Speicher voll ist? Ist das möglich? Was bedeutet überhaupt die Aussage der virtuelle Speicher ist voll, was ist der virtuelle Speicher? 14. Machen virtuelle Adressen/virtueller Speicher die Implementierung von gemeinsamen Bibliotheken eher schwieriger oder eher leichter? Aufgabe 2 1. In welchem Adressraum agieren die C++ Operatoren new und delete? 2. Müssen new und delete Thread save sein, d.h. müssen sie mit Synchronisationsmitteln auf gleichzeitigen Aufruf durch Threads vorbereitet sein? Erläutern Sie die möglichen (Synchronisations ) Probleme und entweder deren Lösung oder den Grund warum sie nicht auftreten können. Wo werden die Synchronisationsprobleme falls notwendig gelöst: in der C++ Bibliothek, an anderer Stelle? 3. Müssen new und delete Process save sein, d.h. müssen sie mit Synchronisationsmitteln auf gleichzeitigen Aufruf durch Prozesse vorbereitet sein? 4. Die C++ Operatoren new und delete sind freie Funktionen, die sich an eine Heap Verwaltung richten. Konzeptionell kann man sie also etwa wie folgt darstellen: void * operator new () { heap.allocate(); void operator delete (void *p) { heap.terminate(p); Wobei heap eine Instanz einer Klasse Heap ist, die den Heapspeicher und seine Verwaltung umfasst. Wieviele Instanzen von Heap gbt es: Eine pro Thread, pro Prozess, pro System,...? 5. Was passiert bei einem new und einem delete bei moderen System mit virtuellem Speicher und Seitenverfahren. Erläutern Sie kurz die durch diese Aufrufe ausgelösten Aktionen. Aufgabe 3 1. Betrachten Sie folgendes Programm: 2

#include <iostream> typedef unsigned int uint; int main () { char *a = new char; cout << " a = " << hex << uint(a) << endl; char * d = new char[0x1000]; cout << " d = " << hex << uint(d) << "..." << uint(d)+0x1000 <<endl; int i = 0; while ( true ) { *a = 0; cout << dec << i << ". belegt Adresse " << hex << uint(a) <<endl; ++a; ++i; 2. Welche Art von Adressen gibt das Programm aus: logische, virtuelle, physische, reale, abstrakte,...? 3. Bei welchem Wert von a wird das Programm abstürzen: Nach der ersten Erhöhung, bei der Zuweisung nach der ersten Erhöhung, wenn a den Wert von d erreicht hat, wenn a den Wert d + 0x1000 erreicht hat, wenn der physische Speicher voll ist, wenn der virtuelle Speicher voll ist, wenn der Adressraum des Prozesses voll ist,...? 4. Schreiben Sie ein kleines Testprogramm um festzustellen in welche Richtung Stack und Heap wachsen. 5. Unter Der virtuelle Speicher ist voll! kann man verstehen, dass weitere Speicheranforderungen der Prozesse nicht mehr befriedigt werden können, weil der Swap Bereich voll ist. Ist dies ein so seltenes Ereignis, dass das Betriebssystem in dem Fall guten Gewissens abstürzen kann? 6. Folgendes Programm versucht den Speicher zu füllen. Welchen Speicher? Was passiert wenn er voll ist? Kommt es dazu? #include <iostream> typedef unsigned long uint; struct A { char a[0x1000]; (Einheiten von 4 kb) ; void fstack (uint &i) { A a; cout << i << ". im Stack an Pos: " << &a << endl; fstack( ++i ); int main () { uint stackframes = 0; fstack(stackframes); Experimentieren Sie! 3

Aufgabe 4 1. In welchem Maß führen Segmentierung und Paging zu interner und/oder externer Fragmentierung? Was ist das überhaupt? 2. Was ist eine Seite und was ein Seitenrahmen? 3. Was ist eine Seitentabelle, welche Informationen enthält sie, wer benutzt sie wozu, wann wird sie verändert bzw. gewechselt? 4. Was ist eine Rahmentabelle, welche Informationen enthält sie, wer benutzt sie wozu, wann wird sie verändert bzw. gewechselt? 5. Was ist eine Seitendeskriptor, welche Informationen enthält er, wer benutzt ihn wozu, wann wird er verändert bzw. gewechselt? 6. Was ist ein Seitenfehler (page fault)? Wann tritt er auf, wie wird er behandelt, ist es ein Hardware oder ein reines Software Ereignis? 7. Der TLB wird mit assoziativen Registern implementiert. Was ist der TLB, was ist ein Register und was ist ein assoziatives Register? 8. Bei einen Seitenfehler wird eine Seite in den Hauptspeicher gebracht und die Seitentabelle modifiziert. Wie wird die Seitentabelle modifiziert? Was ist mit dem TLB, muss er gelöscht werden? 9. Windows NT und Linux arbeiten mit einer Seitengröße von 4K Byte. Ist das Zufall, ist es ein Fall von einem Plagiat (wer klaute wem die Idee), oder liegt es an der gemeinsamen Hardware? Überlegen Sie: Gibt es eine Hardware Eigenschaft die mit einer Seitengröße von 4KByte gekoppelt ist? 10. Traditionell ist der logische Adressraum in Segmente (Text, Daten, Stack, Heap,...) eingeteilt. Kann man die Segmente auf Seiten abbilden, oder ist eine Segmentierung des logischen Adressraums mit Paging nicht vereinbar? 11. Welcher Systemaufruf führt bei einem Unix System zur Erzeugung eines logischen Adressraums. Was bedeutet die Erzeugung eines neuen Adressraums konkret? Aufgabe 5, Bonusaufgabe 5, Termin 2. Juli 2002 Nehmen Sie an, Sie sind Mitglied in einer Entwicklergruppe, die Software für einfache eingebettete Systeme entwickelt. Die Zielplattform verfügt über ein Betriebssystem ohne virtuellen Speicher. Auf dem System kann nur ein Anwendungsprozess aktiviert werden, dieser kann jedoch beliebig viele Threads starten. Nehmen Sie an, dass für eine bestimmte Klasse von Anwendungen (Threads) viel Speicher in nicht vorhersehbarer Menge benötigt wird (z.b. ein Webserver) wesentlich mehr als auf dem System zur Verfügung steht. Bei diesen Anwendungen kommt es nicht so sehr auf Geschwindigkeit an. Es ist also möglich Daten auszulagern. Konzipieren Sie eine eine dazu geeignete Software Infrastruktur, die Threads mit einem jeweils eigenen virtuellen Adressraum ausstattet und diese Adressräume nach dem Konzept des virtuellen Speichers mit Hilfe einer Swap Datei realisiert. Jeder Thread bekommt seinen eigenen virtuellen Adressraum mit 16 Bit (Wort ) großen Adressen. In diesem Adressraum kann er ohne Beschränkungen agieren. Programmtechnisch definieren Sie dazu eine Basisklasse VMThread. Jede Ableitung dieser Klasse hat einen eigenen virtuellen Adressraum von der Größe. Damit werden Programme folgender Art möglich: 4

#include "VMThread.h" #include <iostream> class MyThread : public VMThread { virtual void run () { gesamten eigenen Adressraum mit! fuellen i ist eine logische Adress im Adressraum von this for ( LogicalAddress i(this,0x0000); i < 0xffff; ++i ) *i =! ; ; Zugriff auf eine logische Adresse 0xef1a LogicalAddress adr(this); adr = 0xef1a; cout << *adr << endl; int main() { MyThread t[50]; 50 Threads mit je 0x10000 Bytes privatem Speicher... Ein erster Entwurf für die Klasse VMThread ist: typedef... Byte; ein Byte typedef... Word; zwei Bytes Schnittstellen zur Implementierung des logischen Adressraums class AddressSpaceInt { virtual Byte & getbyteat ( Word address ) = 0; ; Basisklasse fuer Threads mit eigenem Adressraum class VMThread : public PThreadNS::PThread { VMThread (); virtual VMThread () { protected: class LogicalAddress { LogicalAddress (VMThread *); LogicalAddress (VMThread *, Word); bool operator< (const LogicalAddress &) const; bool operator> (const LogicalAddress &) const; bool operator< (Word) const; bool operator> (Word) const; LogicalAddress & operator++(); logische Adresse adressiert ein Byte logische Adressen haben Wortgroesse (= 2 Bytes) LogicalAddress & operator= (Word); Byte & operator* (); Zugriff auf den eigenen Adressraum 5

private: Word w; mein Wert VMThread & mythread; Zu welchem Thread gehoere ich ; friend class VMThread::LogicalAddress; private: AddressSpaceInt & as; Implementierung des eigenen Adressraums ; (die Page-Table, Ableitung von AddressSpaceInt) Mit einem ersten Ansatz für die Implementierung: VMThread::VMThread() : as(..???..) { <-------------- VMThread::LogicalAddress::LogicalAddress(VMThread *vmt) : w(0), mythread(*vmt) { VMThread::LogicalAddress::LogicalAddress(VMThread *vmt, Word pw) : w(pw), mythread(*vmt) { bool VMThread::LogicalAddress::operator< (const LogicalAddress &pla) const { return w < pla.w; VMThread::LogicalAddress & VMThread::LogicalAddress::operator= (Word adr) { w=adr; return *this;... etc.... Byte & VMThread::LogicalAddress::operator* () { return mythread.as.getbyteat (w); <---------------- Die logischen Adressräume werden in Seiten eingeteilt und im Pagingverfahren bei Bedarf ein und ausgelagert. Dazu muss eine Implementierung des logischen Adressraums AddressSpace als Ableitung von AddressSpaceInt definiert und VMThread::as mit einer Instanz eines solchen Adressraum initialisiert werden. Ein erster Entwurf für die Klasse AddressSpace und des virtuellen Speichers könnte dabei etwa wie folgt aussehen: class VirtualMemory {...????... PageDescriptor * aquire(); void release(pagedescriptor * pagetable);...????... private: static PageDescriptor pagetables[...]; Deskriptoren aller Seitentabellen ; class AddressSpace : public AddresSpaceInt { AddressSpace() : pagetable(vm.aquire()) { Seitentabelle erzeugen AddressSpace () { vm.release( pagetable ); 6

Byte & getbyteat( Word adr ) { adr zerlegen in SeitenNummer und Offset: Byte pagenr =... Byte pageoffset =...??... Seite bei Bedarf einlagern...?? return..?? Adresse pageoffset in der Seite Nr. pagenr??... private: PageDescriptor * pagetable; Zeiger auf Anfang der Seitentabelle fuer dies static VirtualMemory & vm; Virtueller Speicher in dem ; der Adressraum realisiert ist VirtualMemory virtualmemorymanager; der virtuelle Speicher VirtualMemory & AddressSpace::vm = virtualmemorymanager; Definieren Sie einen geeigneten virtuellen Speicher mit FRAME COUNT Seitenrahmen (z.b. 32) im Hauptspeicher und einer Swap Datei zur Aufnahme der ausgelagerten Seiten. Eine Seite soll mit einem Byte adressierbar sein und ein Byte adressiert jedes Byte innerhalb einer Seite. Ihr Paging Verfahren soll einen Second Chance Algorithmus und einem Paging Dämon einsetzen, der bei einem bestimmten Füllgrad des Hauptspeichers Seiten auslagert. Der Hauptspeicher ist ein statischer Datenbereich im Prozess zu dem die VMThreads gehören. Ebenso gibt es pro Prozess mit VMThreads eine Swap Datei. Die Seitentabellen werden permanent im Speicher gehalten. Dazu wird ebenfalls wieder im statischen Datenbereich des Prozesses Platz für die Tabellen von MAX VMTHREADS bereit gehalten. Der Prozess, zu dem VMThreads gehören, übernimmt also für diese die Speicherverwaltung und damit Aktivitäten, die normalerweise dem Betriebssystem zugeordnet werden. 7