2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

28
2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1

Transcript of 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Page 1: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

2.2 Adressraumverwaltung

Code und Daten

Einfachster Fall:

0 length-1

Page 2: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

2.2 Adressraumverwaltung

Code und Daten

Einfachster Fall:

0 length-1

Code Daten

Besser: getrennte Segmente, schreibgeschützer Code

0 cl-1 0 dl-1

Page 3: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Unix: 3 Segmente (oder mehr) mit variable Länge

Code Keller(stack)

statische DatenHalde

Längenänderung durch brk Überlauf(und durch exec, Programm laden, 2.3)

brk(addr) , sbrk(incr)lässt das Datensegment bis Adresse addr-1 reichenbzw. verlängert das Datensegment um incr

Fehler ENOMEM beim Überschreiten der maximalenSegmentgröße

Page 4: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Achtung:

brk wird typischerweise von der Haldenverwaltung einerhöheren Programmiersprache eingesetzt, nicht vom Programmierer

Beispiel C:

malloc impliziert ein sbrk, wenn die Halde überläuft

Page 5: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Weitere Operationen bei Betriebssystemen

mit reichhaltiger strukturierten Adressräumen

mit überlappenden Adressräumen

z.B. mmap, munmap, ...

Page 6: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

2.3 Ein/Ausgabesystem

ist meist geräteunabhängig realisiert:

Prozess verfügt über Ein/Ausgabekanäle(channels, ports, open files, ...)

hinter denen sich Datenquellen/senken verbergen(Geräte, Dateien, Prozesse, ...).

Kanal = gepufferter Strom von Bytes

Kanalnummer (in Unix „file descriptor“) 0, 1, 2, ... identifiziert Kanal

Kanal kann auch über mehrere Nummern identifiziert werden.

Page 7: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Standardkanäle in Unix,

vom Befehlsinterpretierer (Shell) so eingerichtet:

0 Standard-Eingabekanal (standard input, stdin),häufig verbunden mit der Tastatur

1 Standard-Ausgabekanal (standard output, stdout)häufig verbunden mit dem Bildschirm

2 Standard-Fehlerkanal (standard error, stderr)häufig verbunden mit dem Bildschirm

! Ein Kanal kann auch gleichzeitig Ein- und Ausgabekanal sein !

Page 8: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Prozess P

Prozess Q

120

3

5

Scanner

4

Dateisystem

Page 9: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Prozesse Kanalnummern Kanäle z.B. Dateien

1

3P

5

2Q

3

Kanalnummern, Kanäle und Datenquellen/senken:

pos

pos

pos

s.u.

Page 10: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Ein/Ausgabe-Operationen:

read(channel,buffer,nbytes)liest – sobald Bytes im Kanal vorhanden – maximal nbytes Bytes von channel nach bufferund liefert die Anzahl der gelesenen Bytes(weniger gelesen wird z.B. bei Dateiende oderZeilenende [beim Lesen von der Tastatur])

Fehler: ungültige KanalnummerKanal ist nur Ausgabekanalnicht behebbarer Lesefehler

Page 11: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

write(channel,buffer,nbytes)schreibt – sobald Platz im Kanal vorhanden – maximal nbytes Bytes von buffer nach channel und liefert die Anzahl der geschriebenen Bytes

(i.d.R. = nbytes)

Fehler: ungültige KanalnummerKanal ist nur Eingabekanalnicht behebbarer Schreibfehler

Page 12: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

close(channel)macht die Kanalnummer channel ungültig;falls dies die letzte gültige Nummer für den Kanal war,wird dieser gelöscht.

Fehler EBADF falls ungültige Kanalnummer channel

dup(channel)liefert neue – zuvor ungültige – Kanalnummer, diejetzt den gleichen Kanal wie channel identifiziert;gewählt wird die kleinste der ungültigen Nummern.

Fehler EBADF falls ungültige Kanalnummer channel

Page 13: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

dup2(old,new)vereinbart, dass die Kanalnummer newden gleichen Kanal wie old identifiziert;falls die Nummer new schon vorher einen Kanal bezeichnete und falls sie die letzte Nummer für diesen Kanal war, wird der Kanal gelöscht.

Fehler EBADF falls ungültige Kanalnummer old

Page 14: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

2.4 Interprozesskommunikation(inter-process communication, IPC)

erfolgt typischerweise über Ein/Ausgabekanäle,in Unix u.a. über Pipes („Rohre“):

Pipe = Puffer für Bytes (endliche Kapazität PIPE_MAX)(Variante: Puffer-Paar für

bidirektionale Kommunikation)

Bytes senden mit write

Bytes empfangen mit read

Page 15: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Operation

pipe(channel) mit int channel[2]erzeugt Pipe und richtet einen Eingabekanalfür das Empfangen und einen Ausgabekanalfür das Senden ein;

channel[0] wird mit der Nummer des Eingabekanals belegt,

channel[1] wird mit der Nummer des Ausgabekanals belegt,

Fehler EMFILE beim Überschreiten der maximalenAnzahl von Kanälenu.a.

Page 16: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Fehler beim Benutzen von Pipes:

Kopf des Puffers ist keinem Kanal mehr zugeordnetwrite generiert Unterbrechung SIGPIPE

Ende des Puffers ist keinem Kanal mehr zugeordnetund der Puffer ist leerread erkennt „Dateiende“ (end-of-file)

Zyklisch über Pipes verbundene Prozesseund alle Puffer vollund alle Prozesse hängen in write Verklemmung, nicht gemeldet!

Page 17: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Typische Benutzung von Pipes:

pipe(channel);

if(fork()!=0) { /* parent process */ ... write(channel[1],...) ...

else { /* child process */... read(channel[0],...) ...

zuzüglich Fehlerbehandlung

Beachte: Kindprozess erbt Kanäle des Erzeugerprozesses

Page 18: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

2.5 Dateiverwaltung

Dateien werden durch Namen identifiziert:

einfacher Dateiname, z.B. sortPfadname (pathname), z.B. /usr/bin/sort

Verschiedene Dateiarten (Untertypen von „Datei“ in OO BS):

DatenProgrammVerzeichnis, Ordner (directory, folder)Pseudodatei (special file): E/A-Gerätu.a.

Page 19: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Prozess besitzt aktuelles Verzeichnis (working directory):

alle Pfadnamen, die nicht mit / beginnen,werden automatisch vorne um den Namen desaktuellen Verzeichnisses erweitert

Operation

chdir(name) mit char *namesetzt das aktuelle Verzeichnis auf name

Fehler ENOENT wenn das Verzeichnis name nicht existiert u.a.

Page 20: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Erzeugen und Öffnen von Dateien:

open(name,flags)

erzeugt und/oder öffnet die Datei name gemäßden Angaben in flags und liefert die Nummereines Kanals, über den auf die Datei zugegriffenwerden kann. Die flags sind u.a.

O_CREAT erzeugen, falls nicht vorhanden O_RDONLY nur Lesezugriff O_WRONLY nur Schreibzugriff O_RDWR Lese- und Schreibzugriff

Fehler EACCES wenn gewünschter Zugriff nicht erlaubt u.a.

Page 21: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Direktzugriff möglich mit

lseek(channel,offset,whence)setzt die Zugriffsposition in der über channelerreichbaren Datei

bei whence = 0 auf offset, bei whence = 1 auf aktuelle Position + offset,bei whence = 2 auf Dateilänge + offset.

Fehler ESPIPE wenn channel sich auf eine Pipe bezieht

u.a.

Page 22: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Laden von Programmen mit Varianten von exec , z.B.

execv(program,argv) mit char *argv[]

ersetzt das laufende Programm durch das in der

Datei program vorgefundene Programm,

springt an den Anfang von main und

übergibt dabei die Zeichenketten im Feld argv als

Parameter für main.

Routinen für die Unterbrechungsbehandlung gehen verloren !

Fehler EACCES wenn Datei nicht als Programm ladbar u.a.

Page 23: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

+ weitere Operationen für

Abfragen/Setzen von Dateieigenschaften

Maßnahmen zum Zugriffsschutz

usw.

Page 24: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

2.6 C-Bibliotheken

Dringende Leseempfehlung zu Unix:

man –s1 intro Benutzerschnittstelle (Shell)

man –s2 intro Systemschnittstelle

man –s3 intro Weitere Bibliotheken

/usr/include Help-Dateien .h/usr/lib Bibliotheken

Page 25: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

2.6.1 Weitere Bibliotheken

man –s3 intro

liefert eine Übersicht über die in Abschnitt 3 der Dokumentation beschriebenen

Bibliotheken für C

mit einer Vielzahl von Prozeduren („C library functions“)jenseits der in Abschnitt 2 beschriebenen Systemaufrufe,

z.B.

Page 26: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

malloc (2.2)

printf formatierte Ausgabe auf stdout

fopen gepufferte Datei-Ein/Ausgabefread...

sqrt, ... mathematische Funktionen

etc. etc.

Page 27: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

2.6.2 Nichtsequentielle Benutzung

Falls Threading unterstützt wird –

• Achtung bei nebenläufiger Benutzung von Bibliotheken!• Nicht jede Prozedur ist thread-safe!• Gegebenenfalls Sperrsynchronisation vornehmen!

Z.B. in Solaris ist jeder Bibliotheksprozedur zugeordnet einMT-Level (multi-threading level):

Unsafe, Safe, MT-Safe, Async-Signal-Safe

Page 28: 2.2 Adressraumverwaltung Code und Daten Einfachster Fall: 0 length-1.

Unsafe: unsicherBeispiel: rand(3)

Safe: sicherBeispiel: malloc(3)

MT-Safe: sicher, mit interner NebenläufigkeitBeispiel: sqrt(3)

Async-Signal-Safe: wie MT-Safe, sogar beim Auftretenvon (Software-)Unterbrechungen(durch Unterbrechungsunterdrückungwährend kritischer Abschnitte)Beispiel: write(2)

+ Varianten