20141202 Datei-Systeme II, virt. Speicher

Transcription

20141202 Datei-Systeme II, virt. Speicher
Rechnerarchitekturen
und Betriebssysteme (CS201):
Dateisysteme II
Virtual Memory
2. Dezember 2014
Prof. Dr. Christian Tschudin
Departement Mathematik und Informatik, Universität Basel
Wiederholung / Diskussion
1. Was ist die Aufgabe eines Dateisystems?
2. Welche Ebenen unterscheidet man in einem Dateisystem?
3. Ist der Dateiname
– Teil einer Datei, oder
– Element eines Verzeichniseintrags?
4. Was ist der Unterschied zwischen einem symbolischen Link und
einem Hard-Link.
5. Warum möchte man für ein hierarchisches Dateisystem einen
azyklischen Graphen?
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 2/41
Sparse file = Datei “mit Löcher” (0-Bytes)
• Einfach abzubilden mit indexierter Allokation,
von den meisten UNIX Datei-Systemen unterstützt
(aber nicht ISO9600 CD-Format)
• Beispiele:
– core dumps
– noch nicht voll gefüllte Datenbank
• Wie solche Dateien erkennen? Demo für UNIX:
- vergleiche Angabe von ’ls’ und ’du -s’, oder
- selbe Angaben mit ’stat’ finden
• Siehe spezielle Optionen bei cp, oder tar
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 3/41
Sparse Datei (Prog um zu experimentieren)
#include <stdio.h>
int main()
/* Sparse file creation */
{
FILE *fp;
fp = fopen("sparse.dat", "w");
fseek(fp,131072-4,SEEK_CUR); /* 128 KB - 4 bytes */
fprintf(fp,"text");
fclose(fp);
return 0;
}
Nur letzter Block hat Inhalt (Rest ist 0). Demo: sparse-Option von cp,
auto|always|never, und du
(Geht nicht bei verschlüsselten Dateisystemen).
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 4/41
File Descriptor Table
Kernel muss Uebersicht behalten über alle offenen Dateien
(Cache, Pufferverwaltung)
• System-weite “open-file table”
– führt alle momentan offenen Dateien, siehe auch lsof
– cached die Abbildung von Datei auf inode
• Per-Prozess “Open-file table”
prozess-spezifische Daten wie
– Zugrifssmodus (r/w)
– aktuelle Lese/Schreibe-Position in der Datei
“File handle”, “descriptor”: Integer-Wert als Index in diese Tabelle
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 5/41
Uebersicht: vom File-Descriptor zum Inode
data
blocks
.
.
.
read (4, ...)
sync
tables of
open files
(per process)
user space
c Christian Tschudin
file-structure
table
system space
in-core
inode
list
inode
list
disk space
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 6/41
Dateisystem: Mount
Bisher gesehen: 1 Harddisk-Partition mit 1 Dateisystem
• Ueblicherweise: mehrere Teil-Dateisysteme. Z.B.:
– weitere HD-Partitionen
– Dateisystem im Netzwerk
• mount:
Dateisystem in den lokalen Adressraum einklinken
Windows: von CP/M geerbter expliziter Verweis auf Device (C:, D:)
UNIX: 1 Baum
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 7/41
Dateisystem: Mount (Forts)
/
/
/mnt
/priv
/usr
/data
/mnt/cd
/usr/bin
CD
Harddisk
Ein Dateisystem wird in ein anderes eingehängt:
Zugriff auf Datei → /mnt/cd/priv/datei.name
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 8/41
Dateisystem: Virtual File System
Betriebssystem muss mehrere Dateisystem-Typen unterstützen
• Virtual File System: Schicht zwischen logischem
Dateisystem und den darunterliegenden (spezifischen)
Ebenen (Speicherblock- und Device-Ebenen)
• NTFS
FATxx
ext2, ext3
iso9660
SMB
http (!)
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 9/41
Dateisystem: Virtual File System (Forts)
root
swap
logical file system
c Christian Tschudin
file systems
logical devices
physical devices
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 10/41
Dateisystem: Loop File System, Stackable FS
Spezielles “Device”: loop
• Loop device: Datenblöcke werden nicht von einem
Device geliefert, sondern von einem Softwaremodul
• Loop-Device-SW kann eigene Speicherblöcke verwalten:
– von einer Datei lesen (!)
– Kompression
– Verschlüsselung
Beispiel: Dateisystem in einer Datei
# mount -o loop test.ext3 /mnt/tmp
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 11/41
Dateisystem: RAID
RAID = Redundant Arrays of Independent/Inexpensive Disks
• Diskblöcke mehrfach ablegen, um bei Disk-Crash Daten
restaurieren zu können
• Stripping:
Daten verteilen, z.B. 1 Disk für jede Bit-Position, 8 Disks
• RAID level 0: keine Redundanz
RAID level 1: Disk Mirroring
RAID level 2: Parity based error correction
. . . level 6: kann bis zu zwei HD-Ausfälle verkraften
• “Hot spare”: defekte Disk wird automatisch ersetzt
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 12/41
Dateisystem: /proc
Dateisystem als Organisationskonzept von UNIX, /proc in Linux
Hier: Namensraum verwenden, auch wenn keine eigentliche Dateien
• Alle Kernel-Daten:
/proc/cpuinfo
/proc/devices
/proc/..processnr..
‘‘Steckbrief’’ der Maschine
Liste
Verzeichnis für jeden Prozess
• Einträge können z.B. mit cat gelesen
oder mit echo beschrieben werden
• Windows: siehe Registry
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 13/41
Dateisystem: Named Pipes
• Pipes gehören nicht zu Dateisystemen:
Pipes = interner (zeichenbasierter) Kommunikationskanal
• Betriebssystem-Aufruf:
{
int fd[2];
pipe(fd); // erzeugt pipe inode: fd[0] lesen, fd[1] schreiben
...
erzeugt “anonyme Pipe”. z.B. auch bei ls | wc
• Pipe mit Name (FIFO):
% mkfifo /tmp/thepipename
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 14/41
Dateisystem: File Locks
Betriebssystem kann Dateizugriff schützen: file “locks”
• Dateien als “shared resource”:
gleichzeitiger Zugriff von mehreren Programmen
• Zugriff schützen/kontrollieren:
einen “Lock” anmelden kann den Prozess blockieren
• Vielzahl von “Locks”, z.B. SUN Solaris 2:
kann sogar Datei-Regionen “locken”
• Siehe z.B. man 3 lockf (Posix file lock)
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 15/41
Dateisystem: Ausblick
Es wäre noch viel zu sagen:
• read-only (CD: ISO-9660), write-once FS
• verteilte Dateisysteme: Andrew, NFS, Storage Area Network, . . .
• Google-FS, Amazon S3, Hadoop für “Big Data”
• Indexierung (Google Desktop), Datenbank im OS (Longhorn)
• Integration mit Applikation (eMail-Attachments nicht mehr mehrfach ablegen),
Deduplifikation
• Verschlüsselte Dateisysteme, integriertes Backup,
Versionierung, peer-to-peer, freenet, etc etc
In Zukunft sind bei FS weiterhin Neuentwicklungen zu erwarten.
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 16/41
Neues Kapitel: (Haupt-)Speicherverwaltung
Idealisiertes Memory Layout für Unix (Bsp Linux)
1
0
0
1
0
1
000000000000
111111111111
0
1
000000000000
111111111111
0
1
0
1
000000000000
111111111111
0
1
0
1
000000000000
111111111111
0
1
111111111111
000000000000
000000000000
111111111111
000000000000
111111111111
000000000000
111111111111
0
1
000000000000
111111111111
0
1
000000000000
111111111111
0
1
Kernel Virtual Memory
Memory invisible to user mode code
Stack
Memory-mapped region
Memory-mapped region
Memory-mapped region
the ‘brk’ pointer
Run-time data
Uninitialised data
Initialised data
111111111111
000000000000
000000000000
111111111111
000000000000
111111111111
Program text
• Linux: linearer
Adressraum
• Regionen:
code (text)
initial. var (data)
uninit. var (bss)
• Heap
Libraries
Stack
Kernel
Forbidden region
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 17/41
Hauptspeicherverwaltung: Problemstellung
• Physikalischer Speicher begrenzt, oft zu klein
• Logischer (Speicher-) Adressraum abbilden auf
physikalischen Speicher
• Wann wird einer Speicheradresse die Speicherzelle zugewiesen?
– Kompilation, Linking
– Laden des Programms
– Ausführen des Programmes
Virtueller Speicher: “Binding” erfolgt zur Laufzeit,
muss von der Hardware (bei jedem Zugriff) übersetzt werden.
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 18/41
Repetition: Swapping
Swapping = Disk-Auslagerung eines (ganzen) Prozesses
Swapping = Unix: Swap-Partition, Windows: swap-Datei
operating
system
1
2
swap out
swap in
user
space
process
P1
process
P2
backing store
main memory
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 19/41
Virtueller Speicher
Virtueller Speicher = Separierung des logischen Speichers von den
physikalischen Speichermöglichkeiten (RAM, Harddisk)
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 20/41
Virtueller Speicher (Forts.)
Prozesse ausführen, die grösser sind als der Hauptspeicher.
• Prozess-Memory-Teile können sich befinden:
– im physikalischen Hauptspeicher
– auf Harddisk (swap space)
• Transfer zwischen Harddisk und Hauptspeicher:
Swapping vs (Demand) Paging
– welches Programm/”Page” ist im Haupt-/Sekundärspeicher?
– wann welches Programm/Page transferieren?
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 21/41
Memory Management: Paging
In einem Multiprogrammiersystem:
• Mehrere Programme gleichzeitig im Speicher,
nach Ausführung eines Programms entstehen nichtzusammenhängende Zonen mit freiem Speicher:
wie zusammenführen?
• Physikalischer Speicher in “Frames” einteilen,
logischer Speicher in “Pages” (Grösse: 0.5 bis 4 KB)
• Logischer Page-Bereich abbilden auf physikalische Frames
→ Adressübersetzung
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 22/41
Paging (Forts)
Paging = Memory Mgmt für nicht-zusammenhängenden Speicher
logical
address
CPU
p
physical
address
d
f
d
physical
memory
• Abbildung von Pages
(Speicher-“Seiten”)
auf Frames (Speicher“Rahmen”):
Page Table
• Adressübersetzung
durch Hardware:
memory management
unit (MMU)
p
f
page table
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 23/41
Memory Management: Page Table (Beispiel)
frame
number
page 0
page 1
page 2
page 3
logical
memory
0
0
1
1
4
2
3
3
7
page table
1
page 0
2
3
page 2
4
page 1
5
6
7
page 3
physical
memory
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 24/41
Memory Management: Page Table Implementierung
• Page Table selbst benötigt 1 “Frame”, bleibt im Hauptspeicher
• Wird von MMU (memory management unit) bei jedem (!)
Speicherzugriff ausgelesen
• Inhalte eines Page Table-Eintrages:
– Attribute (abgebildet oder nicht, read-only, swapped) –
Frame-Nummer (oder Block-Nummer falls ausgelagert)
• Nun zweifacher Speicherzugriff!
– Cache nötig: TLB (translation look-aside buffer)
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 25/41
Valid/Accessed/Dirty –Bits
Page Table für die “Buchhaltung”
• Bisher in der Page Table: Frame-Nummer
• Zusätzliche Attribute:
– present-Bit (d.h. im Hauptspeicher, gemapped)
– sonst: invalid, oder auf Harddisk
#define
#define
#define
#define
#define
#define
#define
_PAGE_PRESENT
_PAGE_RW
_PAGE_USER
_PAGE_PWT
_PAGE_PCD
_PAGE_ACCESSED
_PAGE_DIRTY
c Christian Tschudin
0x001
0x002
0x004
0x008
0x010
0x020
0x040
#define
#define
#define
#define
#define
#define
_PAGE_PSE
_PAGE_GLOBAL
_PAGE_UNUSED1
_PAGE_UNUSED2
_PAGE_UNUSED3
_PAGE_FILE
0x080
0x100
0x200
0x400
0x800
0x040
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 26/41
Memory Management: mehrstufige Pagetables
• Bei grossem virtuellen Speicher werden die Page-Tables zu
gross:
– 2 GB mit 4 KB-Pages: 0.5 M Einträge
– jeder Prozess braucht seine Tabelle
• deshalb mehrstufige Page Tables,
erlaubt “Löcher” analog “sparse files”
(siehe nächstes Slide)
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 27/41
Memory Management: mehrstufige Pagetables
0
1
1
..
.
100
..
.
500
..
.
100
..
.
..
.
..
.
500
..
.
708
..
.
outer-page
table
929
..
.
708
900
..
.
900
page of
page table
page table
..
.
929
..
.
memory
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 28/41
Memory Management: mehrstufige Pagetables (Forts)
Beispiel:
• 4K Pages, 32-Bit-Architektur (32-Bit-Adressen)
• Aufteilung
– Page-Nummer: 20 Bits
– Page Offset: 12 Bits
• Page-Nummer in zwei Teile à je 10 Bits: addr (32 bits) =
p1 (10 bits) | p2 (10 bits) | offs (12 bits)
• p1: Index in äusserer Page Table,
p2: Index innerhalb der durch p1 referenzierten Page
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 29/41
Memory Management: Tricks mit Page Tables
• Shared Pages (shared code, shared memory):
– nur einmal im physikalischen Speicher vorhanden
– mehrfach in Adressraum von Prozessen “eingeblendet”
• Memory Protection:
– jeder Prozess hat sein eigener virtueller Speicher
– Zugriff ausserhalb der allozierten Zonen: Programmabbruch
• Dynamische Zuteilung:
– Stack und Heap: brk-Limite
• Swapping:
– einzelne Seiten auf Harddisk auslagern, Info in Page-Table
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 30/41
Memory Management: Segmente / Pages
• Segment-Konzept:
– unterschiedliche Zonen (Code, Daten), deshalb “Segmente”
– Adresse = “segment-descriptor” + Offset
• CPU führt Buch über mehrere Segment: segment table
– (physikalischer) Ort des Stack-Segments, Code, OS etc
– implizite Referenzierung: Stack-Segment, Code-Segment
• Intel x86-Architektur:
– ab x286: segments
– ab x386: paged segments
• Linux: linearer Adressraum (nur 1 Segment)
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 31/41
Page Fault
Virtueller Speicher grösser als physikalischer Speicher
• Hardware (MMU) erkennt Zugriff auf “nicht gemappte” Seiten
• page fault trap
• Betriebssystem kann Grund untersuchen:
– ungültiger Adressbereich (Zone) ?
Dies kann aufwendig sein (viele Zonen)
• Sonst “demand paging”: Seite wird vom Harddisk geholt
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 32/41
Ablauf bei Page Fault
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 33/41
Page Fault-Handling: Schwierigkeiten
“Restart” des Befehls nötig
• Einfachster Fall: Page fault wegen Operand
– zuerst Page holen, dann Instruktion ausführen
• Schwieriger: Page fault wegen Resultat
– Operation muss nochmals ausgeführt werden
– Probleme mit Seiteneffekte (z.B. Y++)
• Noch grössere Seiteneffekte denkbar:
– Kopier-Operationen ganzer Speicherbereiche
(z.B. teilweises Kopieren rückgängig machen?)
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 34/41
Paged Kernel-Speicher ?
Können Teile des OS auch “ge-paged” werden?
• ja!
• Für Daten (z.B. Daten-Puffer)
• Prinzipiell auch für Code möglich,
Performance . . .
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 35/41
Copy-On-Write (COW)
Prozess-Start unter UNIX fork():
• Erzeugt neben dem Eltern- ein Kind-Prozess
• Dabei wird nur die Speicher-Map kopiert, nicht der Inhalt:
– Page Tables beider Prozesse zeigen auf selben Speicher
• Zusätzlich:
– das RW-Flag wird weggenommen (d.h. readonly page)
• Beim nächsten Page-Fault:
– dem Kind-Prozess eine eigene Kopie anfertigen
– beim Eltern-Prozess das RW-Flag wieder setzen
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 36/41
On-Demand Paging
Seiten werden nur geladen, wenn sie benötigt werden.
• Prozess starten:
– Speicher-Map initialisieren
– Data-Bereich füllen
– nur erste (Code-) Seite laden
– Kontrolle an Prozess übergeben
• Weitere (Code-) Seiten werden “bedarfsweise”
(on demand) geholt
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 37/41
Zitat am Anfang der Veranstaltung vorgestellt
The Linux memory manager implements demand paging with a copy-on-write strategy relying on the 386’s
paging support. A process acquires its page tables
from its parent (during a fork()) with the entries marked
as read-only or swapped. Then, if the process tries to
write to that memory space, and the page is a copyon-write page, it is copied, and the page is marked
read-write. An exec() results in the reading in of a page or so from the executable. The process then faults
in any other pages it needs.
Linux Kernel Hacker’s Guide 0.5
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 38/41
On Demand Paging – Seiten-Ersetzung
Multi-Programming: Wettstreit um freie Frames
• Falls mehrere Programme aktiv sind:
– wer bekommt wieviele Frames?
– welche Pages werden auf HD ausgelagert?
• Aktivität und Alter eine Seite:
– welche Seiten wurden angetastet (ACCESSED Bit) ?
– “least recently used” (LRU)-Seite bestimmen
• Verschiedene Algorithmen, um sich LRU anzunähern
(volles LRU wäre zu aufwendig)
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 39/41
Thrashing
• Pageing funktioniert wegen der Lokalität
– ein Prozess arbeitet meistens mit wenigen Seiten
– diese Seiten verschieben sich langsam
• Falls ein Prozess zuwenig Seiten im Hauptspeicher hat:
hohe page-fault Rate → niedrige CPU-Nutzung
• Trashing:
ein Prozess ist mit Paging (in und out) beschäftigt,
tangiert auch andere Prozesse (weniger CPU und IO-Bandbreite)
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 40/41
Thrashing (Fortsetz.)
CPU utilization
thrashing
degree of multiprogramming
Dieses Verhalten kann durch simples Programm provoziert werden:
– definiere grosses Array (> physikalischer Hauptspeicher)
– randomisierter Zugriff auf einzelne Elemente des Arrays
c Christian Tschudin
CS201 – Rechnerarchitekturen und Betriebssysteme, 2014-12-02, 41/41