bs-6.5

 Documents

 39 views
of 17
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Description
6.5 Dateien als Segmente Idee: Datei = persistentes Segment Konsequenzen:  Datei kann in virtuellen Adressraum eingeblendet werden (memory-mapped file) …
Share
Transcript
6.5 Dateien als Segmente Idee: Datei = persistentes Segment Konsequenzen:  Datei kann in virtuellen Adressraum eingeblendet werden (memory-mapped file)  keine spezielle Ein/Ausgabe für Dateien, kein Blockpuffer Geschichte: reicht zurück bis MULTICS (M.I.T. 1965-70) bs-6.5 1 6.5.1 Programmladen über Seitenfehler (demand-paged program loading) Code-Teil der Programmdatei wird wie Code-Segment im Sekundärspeicher behandelt: exec richtet Segmentstruktur des Prozesses ein (wie üblich), überträgt aber keinen Code in den Primär- oder Sekundärspeicher. In Unix erstmalig mit Version System V, heute bei den meisten Betriebssystemen üblich. bs-6.5 2 Ablauf: 1. exec: Segmente des Prozesses einrichten (gemäß Beschreibung in Programmdatei) : • Datei aktivieren: reqDesc liefert dno • dno im Deskriptor des Code-Segments notieren (für Nicht-Code-Segmente ist dieses Feld 0) • Seitendeskriptoren einrichten: - spezielle Markierung „von Datei einlagern“ - Blocknummer innerhalb der Datei 2. Ausgezeichnete Startseite einlagern und starten 3. Bei Bedarf – gesteuert durch Seitenfehler – Rahmen für einzelne Seite finden und Codeseite einlagern 4. Verdrängen erfolgt ohne physisches Kopieren bs-6.5 3 6.5.2 Dynamisches Binden (dynamic link libraries, DLLs, shared libraries) Varianten für das Einbinden von vorübersetzten Prozeduren, Modulen, Klassen etc. aus Bibliotheken:  statisch: nach der Übersetzung, vor dem Laden;  zur Ladezeit gemäß Angaben in Programmdatei: entsprechende Segmente einrichten bzw. mitbenutzen;  zur Laufzeit bei Bedarf – „dynamisch“. bs-6.5 4  Binder (linker, linkage editor) entnimmt Code aus Bibliothek und fügt ihn mit dem anderen Code zusammen (mit Adressverschiebung und Auflösung externer Bezugnahmen); kein Sharing!  Bindender Lader (linking loader) bindet beim Laden und berücksichtigt dabei Codesegmente, die bereits von anderen Prozessen benutzt werden (Sharing); Achtung: Adressierungsproblem, wenn nicht jeder Code einem bestimmten (virtuellen) Segment zugeordnet ist! Das tatsächliche Laden der Codesegmente erfolgt seitenweise bedarfsgesteuert, wie in 6.5.1 skizziert, also nicht durch den Lader. bs-6.5 5  Vertreterroutinen (stubs) für externe Prozeduren werden statisch eingebunden; sie veranlassen beim jeweils ersten Aufruf Segmenterzeugung bzw. -anbindung sowie entsprechende Aufrufumlenkung; die Bereitstellung des Codesegments erfolgt durch einen speziellen Systemaufruf (6.5.3). bs-6.5 6 6.5.3 Einblenden beliebiger Dateien (memory-mapped files)  mittels geeigneter Systemaufrufe  erübrigt Blockpuffer (und damit Kopiervorgang!)  erübrigt Systemaufrufe read, write, seek  erübrigt eigenen Mechanismus für dynamisches Binden  erübrigt eigenen Mechanismus für Sharing (5.4.3) bs-6.5 7 6.5.3.1 ... ohne Capabilities addr = open(name,mode) (Segment/Datei einblenden) etabliert die Datei als Segment (falls nicht schon geschehen), d.h. richtet Segmentdeskriptor und Seitentabelle ein; blendet das Segment an geeigneter Stelle in den Adressraum ein und liefert die Adresse der ersten Zelle. Danach z.B. x = addr[0]; Zugriff auf erste Zelle ... x = addr[37]; ... close(addr); Segment wird ausgeblendet, ggfls. in Datei zurückkopiert bs-6.5 8 Beispiel Kopieren einer Datei: cp src dst ... from = open(src, READING); stat(src,attr); length1 = attr.st_size; to = open(dst,WRITING); stat(dst,attr); length2 = attr.st_size; if(length2 == 0) for(int i=0; i
Related Search
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks