Betriebssysteme I: Speicherverwaltung (Teil A: Adress-Bindung)

Ähnliche Dokumente
Computeranwendung in der Chemie Informatik für Chemiker(innen) 3. Software

Konzepte von Betriebssystem-Komponenten. Programmstart & dynamische Bibliotheken SS 05. Wladislaw Eckhardt.

Hello World! Eine Einführung in das Programmieren Das erste Programm

Echtzeitbetriebssysteme

Systeme I: Betriebssysteme Kapitel 8 Speicherverwaltung

Programmierkurs C++ Kapitel 6 Module Seite 1

Einführung. Übungen zur Vorlesung Virtuelle Maschinen. Stefan Potyra. SoSe 2009

- dynamisches Laden -

2Binden 3. und Bibliotheken

Maschinencode Dateiformat und Stackframes

Einführung in die Systemprogrammierung

Übung 1 - Betriebssysteme I

Systemprogrammierung

Verteilte Systeme. Verteilte Systeme. 5 Prozeß-Management SS 2016

Kapitel VI. Speicherverwaltung. Speicherverwaltung

Software-Engineering für langlebige Systeme

Konzepte von Betriebssystemkomponenten

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

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

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Einführung in die Systemprogrammierung

Betriebssysteme KU - Einführungstutorium

Technische Informatik 2 Software

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Dynamisches Binden in Multics

Übung Rechnerstrukturen. Aufgabenblatt 10 Ausgabe: , Abgabe: :00. Aufgabe 10.1 (Punkte 25) Gruppe Matrikelnummer(n)

7 Laufzeit-Speicherverwaltung

Echtzeit-Multitasking

Echtzeit-Multitasking

Der Computer von Neumann

Bibliotheks-basierte Virtualisierung

Systeme I: Betriebssysteme Kapitel 8 Speicherverwaltung

1. Einführung. Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Leseprobe. Norbert Heiderich, Wolfgang Meyer. Technische Probleme lösen mit C/C++ Von der Analyse bis zur Dokumentation ISBN:

Was ist ein Profiler?

A ProgrAmmer s Guide to KIM Programming

Name : Klasse : Punkte : Note :

Betriebssysteme Teil 10 B: Fragen rund um Seitenfehler

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

Praktikum Mikrocomputertechnik. Anleitung

Praktische Informatik 1

Betriebssysteme Teil 4: Übersetzung von C-Programmen

SRC Modula-3 Kommandos und Dateien Ein einfaches Beispiel Importieren von Modulen Hinweise zu den Übungsprogrammen Probleme - Mögliche Ursachen

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester

Grundlagen der Programmentwicklung

Sicheres C Programmieren in Embedded Systemen ARM I (ARM7TMDI [1] ) Wintersemester

Grundlagen der OO- Programmierung in C#

KR-mega32-16 rev. 2.3 Thomas Krause, Krause Robotik

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

05. Assembler-Programmierung. Datenstrukturen des ATMega32. Literatur

DieÜbersetzung funktionaler Programmiersprachen

Namespaces und Assemblies

Installation & Usage. Version 1.0. estickflashtool

Einführung ins Programmieren

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Grundlagen der Informatik 11. Zeiger

Systeme I: Betriebssysteme Kapitel 8 Speicherverwaltung

Hauptspeicherverwaltung - Memory Management

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

DHBW Stuttgart Mikrocomputertechnik Labor KEIL Entwicklungsumgebung. Projektstruktur

Liste Programmieren Java Überblick

Assembler - Adressierungsarten

Lösung von Übungsblatt 2

Offenbar hängt das Ergebnis nur von der Summe der beiden Argumente ab...

Von Assembler zu Java

Dynamische Speicherverwaltung

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Betriebssysteme Vorstellung

Übersicht. Übersetzungsprozess gcc(i) als Steuerprogramm Assembler Binder Hauptprogramme in C

Early first draft Höllische Programmiersprachen Seminar im WS 2014/15 Speichermanagement

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

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

Assembler Programmierung Motivation. Informatik II SS 2004 Teil 4: Assembler Programmierung. Assembler vs. Maschinensprache

Informatik II SS Der Kompilationsprozess (-phasen) Schreiben des Programms. Die Organisation eines typischen Compilers

ARM-Cortex-M4 / Thumb-2-Befehlssatz Adressierungsarten und arithmetische Operationen

Übersicht zur Programmentwicklung unter UNIX

Einführung in die Programmiersprache C

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

Einführung in die Programmiersprache C

Technische Informatik I - HS 18

Speicherverwaltung. Kapitel VI. Adressbindung (2) Adressbindung (1) Speicherverwaltung

Programmübersetzung & modulare Programme INE2 M. Thaler, Office TG208

Technische Informatik 1 - Übung 3 3. & 4. November Philipp Miedl

CIS - Info CIS - Info CIS - Info

9. Die Adressierungsarten des MSP 430

Prof. Dr. Sharam Gharaei. Inhaltsverzeichnis. 1 Einleitung 1. 2 Grundlage der Realisierung 2. 3 Die Realisierung 3. Literaturverzeichnis 7

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Prozesse and Threads WS 09/10 IAIK 1

RO-Tutorien 15 und 16

Vorsemesterkurs Informatik

10. Die Adressierungsarten des MSP 430

Kapitel 1: Einführung

Kapitel VI. Speicherverwaltung. Vorlesung Betriebssysteme

Einführung in die Programmiersprache C

Zwischencode-Erzeugung. 2. Juni 2009

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Transkript:

Betriebssysteme I: Speicherverwaltung (Teil A: Adress-Bindung) Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 1

Ausgangssituation Programm ist auf einem Massenspeicher als binary executable file gespeichert. Das Programm muss zur Ausführung in den Hauptspeicher geladen werden Code eines Prozesses kann während der Laufzeit - zwischen externem Speicher und Hauptspeicher verschoben werden, - im physischen Hauptspeicher selbst verschoben werden Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 2

Absolute Adressen Fixe ( absolute) Adresszuweisung findet man nur mehr in kleinen Mikroprozessor- Systemen, es wird a priori festgelegt - Wo eine Instruktion gespeichert wird - Wo (Adresse) die Operanden einer Instruktion gespeichert sind Diese Art der Adresszuweisung ist typisch für Programmieren in Maschinencode - Beispiel serielle Schnittstelle: Ist immer (PC!) an Adresse 0x000003F8-3FF (Nr 1; IO, nicht Speicher) Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 3

Absolute Adressen Adresse Opcodess 0110 db 00 a:=p[0] 0112 e6 01 a:=a&1; f.z:=(a==0) 0114 ca 0110 if(f.z) pc:=110 0117 db 01 a:=p[1] 0119 32 0168 m[168]:=a 0168?? Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 4

Absolute Adressen Ein Compiler oder Assembler kann absolute Adressen erzeugen - Normalerweise eine Option (switch) zur Übersetzungs-/Assemblierungszeit - Daher kann man Assemblercode oder sogar Hochsprachen zur Erstellung von ausführbaren Dateien (executables) für Micro-Systeme verwenden Aber: Übersetzer und Assembler erzeugen normalerweise Code mit relativen Adressen Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 5

Relative Adressen Relative Adressen beziehen sich auf einen vorgegebenen Ladepunkt (Ursprung, starting point, origin) - Die Entfernung zu diesem Ursprung heißt offset Folgerung: - Durch relative Adressen kann man den Zeitpunkt der Adressbindung solange verzögern, bis die absolute Adresse des Ladepunktes definitiv bekannt ist, - und dann die offsets entsprechend anpassen Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 6

Relative Adressen Achtung:... 0000r..... Unterschied... zu ca -7!...r........ 0010r db 00 label: a:=p[0] 0012r e6 01 a:=a&1; f.z:=(a==0) 0014r ca 0010r if(f.z) pc:=label 0017r db 01 a:=p[1] 0019r 32 0068r m[adrval]:=a...r.........r 0068r 00 adrval:... Legende: r symbolisiert eine relative Adress Startpunkt 0000 ist fiktiv Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 7

Zuweisung von Adressen (engl.: address binding) Die meisten Systeme erlauben, dass Prozesse in jedem Bereich des physischen Speichers ablaufen können - Daher muss die erste Adresse eines Prozesses nicht unbedingt 0000h sein Man benötigt eine Abbildung von den symbolischen Adressen des Quellprogramms auf die tatsächlichen Adressen im Speicher - Diesen Vorgang nennt man Adresszuweisung (address binding) Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 8

Zuweisung von Adressen Grundsätzlich kann die Zuweisung erfolgen zur - Übersetzungszeit (engl.: compile time) - Ladezeit (engl.: load time) - Laufzeit (engl.: execution time) Wir werden uns auf die Adresszuweisung zur Ladezeit konzentrieren Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 9

Zuweisung zur Ladezeit (load time binding) Assembler / Compiler übersetzt den symbolischen Code mit Bezug auf eine symbolische Startadresse, normalerweise 000 0... 0000r...........r........ 0010r db 00 label: a:=p[0] 0012r e6 01 a:=a&1; f.z:=(a==0) 0014r ca 0010r if(f.z) pc:=label 0017r db 01 a:=p[1] 0019r 32 0068r m[adrval]:=a...r.........r 0068r 00 adrval:... Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 10

Zuweisung zur Ladezeit Später (zur Ladezeit) werden die relativen Adressen in absolute Adressen umgewandelt starting_point:= 1200... 1210 db 00 label: a:=p[0] 1212 e6 01 a:=a&1; f.z:=(a==0) 1214 ca 1210 if(f.z) pc:=label 1217 db 01 a:=p[1] 1219 32 1268 m[adrval]:=a 12xx........... 1268 00 adrval:... Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 11

Zusammenfassung: Adressbindung zur Ladezeit Zur Übersetzungszeit sind die endgültigen Speicheradressen meist noch unbekannt. Der Compiler erzeugt verschiebbaren (engl.: relocatable) Code. Der Programmlader (siehe später) des BS fügt die korrekten Adressen beim Laden des Programms in den Hauptspeicher ein. Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 12

Lader (Loader) Lädt das Programm (z.b. von der Festplatte in den Hauptspeicher) Macht (falls notwendig) Adressenanpassungen - Im Falle von absoluten Adressen: Nichts Veranlasst das Starten des Programms - Einfach: Weist Adresse der ersten Anweisung dem Programmzähler (Instruktionszähler) zu - Komplizierter: Führt vorab Initialisierungen aus und dann Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 13

Lader und Adressbindung (i) Binden zur Übersetzungszeit: - Lader kümmert sich nicht um Adressen, er lädt einfach das Programm-Image 1:1 ab einer fixen Speicheradresse (Ladepunkt) (ii) Binden zur Ladezeit: - Der Lader (relocating loader) bildet die relativen Adressen auf absolute ab Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 14

Weg vom Quellcode zur Ausführung Vereinfachte Annahme: Nur 1 Hauptprogramm, d.h.: nur ein Modul gegeben Program source *.cpp, *.c, *.asm Compiler / Assembler Object-File *.obj Linker (Binder) Executable (Lademodul) Loader (Lader) Memory- Image Library *.LIB Dynamic Link Libary *.dll Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 15

Nächste Schritte Normalerweise besteht ein Programm aus mehr als einem Objektmodul Jedes *.obj Modul ist das Ergebnis einer getrennten Übersetzung eines Quellcodes Spezielle Komponente der System- Software: - Linkage Editor (kurz: Linker) - Kombiniert all diese Module zu einem einzigen Modul, welches geladen und ausgeführt werden kann Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 16

Linkage Editor = LINKER Aufgabe des Linker Funktion: - Es gibt genau ein Hauptmodul - Bindet mehrere verschiebbare Objektmodule in ein Lade-Modul M zusammen - Adressen werden relativ zur Startadresse des Hauptmoduls gesetzt. Vor allem kann es Prozeduraufrufe zwischen den einzelnen Modulen geben - Damit ist Situation auf nur 1 Modul zurückgeführt Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 17

Linker Aufgabe Program source *.cpp, *.c, *.asm Compiler / Assembler Object-File Object-File *.obj *.obj *.obj Linker (Binder) Executable (Lademodul) Loader (Lader) Memory- Image Library *.LIB Dynamic Link Libary *.dll Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 18

Output des Linker ist ein Lade-Modul M Dieses Lade-Modul M enthält dann entweder nur mehr absolute Adressen Modul kann daher vom Lader einfach 1:1 geladen werden oder alle Adressen sind relativ zum Ladepunkt des Lade-Moduls M wird von einem Relokationslader (relocating loader) geladen, der die relativen Adressen auf absolute Adressen umsetzt Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 19

Weg vom Quellcode zur Ausführung: Gesamtbild Program source *.cpp, *.c, *.asm Compiler / Assembler Object-File *.obj Linker (Binder) Executable *.exe Loader (Lader) Memory- Image Library *.LIB Dynamic Link Libary *.dll Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 20

Statisches versus dynamisches Linken Zwei grundlegende Techniken - Statisches Linken (engl.: static linking). Noch in Verwendung für kleine Systeme (zb.) ohne Multiprogramming. Trotzdem: Veraltet! - Dynamisches Linken (engl.: dynamic linking). Siehe dynamic link library (DLL). Auch wichtig, um Komponenten des Betriebssystems einzubinden Wir werden das Linken zur Laufzeit (runtime linking) hier nicht besprechen Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 21

Statisches Linken ZZZ.LIB P1.OBJ P2.OBJ P3.OBJ YYY.ASM Assembler YYY.OBJ Linker XXX.C Compiler XXX.OBJ Speicher Lader XXX.EXE XXX.OBJ YYY.OBJ P2.OBJ P3.OBJ Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 22

Statisches Linken: Konsequenz, Nachteile Mehrfach verwendete OBJ-Module finden sich mehrfach im Hauptspeicher EEE.EXE EEE.OBJ FFF.OBJ P1.OBJ P3.OBJ XXX.EXE XXX.OBJ YYY.OBJ P2.OBJ P3.OBJ JJJ.EXE JJJ.OBJ P1.OBJ P2.OBJ Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 23

Dynamisches Linken Ähnliches Konzept wie dynamisches Laden Linken wird zeitlich hinausgeschoben - Entweder zur Ladezeit (Normalfall) - oder Linken zur Laufzeit - Falls ein DLL-Modul zur Link-/Laufzeit benötigt wird, prüft man, ob es sich nicht schon im Hauptspeicher befindet. DLL könnte schon von einem anderem Prozess geladen worden sein Linkage Editor bindet nur kleine Tabellen/Verweise ein (engl.: stubs), mit denen man die DLL finden kann Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 24

Dynamisches Linken "Stub" Ein Stub ist ein kleines Stück Code, welches dem Verweis auf ein Bibliotheks-Programm (Modul) hinzugefügt wird Der Stub wird benutzt, um ein referenziertes, speicher-residentes Bibliotheks-Modul zu lokalisieren Der Stub wird zum Laden eines Bibliotheks- Moduls verwendet, falls es nicht vorhanden ist Vor allem wichtig für das Betriebssystem und seine eigenen Bibliotheken Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 25

Dynamisches Linken ZZZ.LIB ZZZ.DLL P1.OBJ P2.OBJ P3.OBJ YYY.ASM YYY.OBJ Linker Assembler XXX.EXE XXX.OBJ YYY.OBJ XXX.C Compiler XXX.OBJ Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 26

Dynamisches Linken: Vorteile EEE.EXE EEE.OBJ FFF.OBJ ZZZ.DLL P1.OBJ P2.OBJ P3.OBJ JJJ.EXE JJJ.OBJ XXX.EXE XXX.OBJ YYY.OBJ Mehrfach verwendete Bibliotheksmodule stehen nur einmal im Speicher Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 27

Gesamtbild Dynamisches Linken c1.cpp c2.cpp Source Compiler Compiler Compile- Time c1.obj d.lib (d1, d2) c2.obj Libary/ Object Linker c1.exe Stub d.dll d1 d2 Linker c2.exe Stub Link- Time Executeable Loader Loader Load- Time c1 d1 d2 c2 Memory Memory Image Run-Time Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 28

ASLR: Adress Space Layout Randomization Sicherheitsfeature: Programmcode ist bei jeder Ausführung an einer anderen Speicheradresse zu finden - Voraussetz.: Adresse wird frühestens zur Ladezeit bestimmt! - Welche Adresse genau: Zufallsgenerator. Praxis: Niedrige Bits der Zeit werden verwendet. Entropie hängt von Implementierung ab (und: 32/64 Bit!). Beispiel Windows Vista: Offset wird bei Boot bestimmt (255 mögliche Werte; 8 Bit Entropie) ASLR: Randomisierung auch von anderen Elementen: Stack und Heap - Beispiel Vista: Stack wird zufällig platziert, Anfangswert von SP ebenso; Aber: Keine Gleichverteilung! http://www.blackhat.com/presentations/bh-dc-07/whitehouse/presentation/bh-dc-07-whitehouse.pdf Mühlbacher BS: Speicherverwaltung TeilA Adressbindung,Loader, Linker 29