Paging bei Speicherverwaltung
Geizhals » Forum » Hardware-Allgemein » Paging bei Speicherverwaltung (14 Beiträge, 152 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
...
Re(3): Paging bei Speicherverwaltung
01.03.2010, 17:52:29
Naja jein. Um es nochmal klar dazulegen:
Eine Page ist ein Block des virtuellen Speichers. Bei x86 Systemen sind das z.B. 4KB. Soll heissen deine 4GB virtueller Adressraum besteht aus 1048576 (= 4GB / 4KB) Pages.
Eine Page hat somit zwangsweise immer eine virtuelle Adresse, aber KANN eine physikalische Adresse zugewiesen haben. Wenn das Programm nun auf eine virtuelle Adresse zugreift, zu der keine physikalische zugeordnet ist, dann meldet die MMU an das Betriebsystem einen page fault. Das OS entscheidet dann, ob der Speicher eventuell ausgelagert wurde und lagert ihn wieder ein und stellt die "Verknüpfung" zwischen virtueller und physikalischer Adresse wieder her, oder antwortet mit einer kernel panic, falls schlicht ein Fehler vorliegt und die virtuelle Adresse nicht ausgelagert wurde (weil z.B. nicht verwendet oder nicht ausgelagert).

Es kann nichts "vom virtuellen Speicher nachladen", weil der virtuelle _Adressraum_ kein Speicher als solcher ist. Der virtuelle Adressraum ist lediglich eine Zwischenschicht, damit normale usermode Programme (also alles was nicht Betriebsystem oder Treiber ist) den Unterschied zwischen RAM und Swap nicht mitbekommen... Von ein paar weiteren, plattformspezifischen Features mal abgesehen.

Alles klar? |-D
(Hab' selber mal Linux kernel-Module mit pagetable-herumgeeiere gecoded ;-))
-----
The day Microsoft makes something that doesn't suck is probably the day that they start making vacuum cleaners.
-----
Intel C2D E8500 | Kingston Hyper-X 4GB PC2-6400U CL4 | ASUS P5Q | Sapphire Radeon 4870 Toxic | Tagan TG430-U15 | Corsair X128 | 3TB SATA-HDDs | Creative Labs Audigy 2 ZS | Logitech Z-5300 | Logitech G7

Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
.....
Re(5): Paging bei Speicherverwaltung
02.03.2010, 08:24:31
Naja nein. So wie es Wikipedia auch im Kapitel "Geschichte" hier sagt, wird Segmentierung nur noch sehr wenig eingesetzt. Ich kenn's aus dem Linux- und Windows-Bereich auch nur mehr, um usermode-Speicherbereiche von kernelmode-Speichbereichen zu unterscheiden.
Dort gibt es im Prinzip zwei Segmente (üblicherweise in 32bit-Architekturen jeweils 2GB groß iirc), wovon das erste nur vom Kernel verwendet werden kann/darf (= virtuelle Speicheradresse 0x0 bis 0xKEINEAHNUNG). Innerhalb der Segmente wird dann "ganz normal" mit Paging gearbeitet.

Exkurs: Hier setzt übrigens der populäre "/3GB" Switch bei Windows XP/Vista an. Er verschiebt die Segmentgrenze auf 1GB Kernel-/3GB User-Memory (virtuell!), funktioniert aber auch nur mit Programmen die für diesen "Betriebsmodus" compiliert wurden. Für "normale" Software bleibt's bei 2GB/2GB.

Ist jetzt natürlich alles sehr vereinfacht dargestellt. Also: Ja, es ist ziemlich kompliziert sowas selbst zu coden und man muss sehr gut wissen was man tut ... denn schließlich muss das alles im Betriebsystem-Kern ablaufen, wo es niemanden gibt der einem bei einem Fehler auf die Finger klopft. ;-)
-----
The day Microsoft makes something that doesn't suck is probably the day that they start making vacuum cleaners.
-----
Intel C2D E8500 | Kingston Hyper-X 4GB PC2-6400U CL4 | ASUS P5Q | Sapphire Radeon 4870 Toxic | Tagan TG430-U15 | Corsair X128 | 3TB SATA-HDDs | Creative Labs Audigy 2 ZS | Logitech Z-5300 | Logitech G7

02.03.2010, 08:27 Uhr - Editiert von [DUCK]Butcher, alte Version: hier
Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung