PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Virtueller Speicher + Auslagerungsdatei?


Aqualon
2005-02-07, 00:13:09
H!

Ich habe mal eine Frage zum virtuellen Speicher. Bisher dachte ich, dass sich der virtuelle Speicher aus dem physisch vorhandenen Speicher und dem swapping file zusammensetzt. Wenn der physisch vorhandene RAM voll wird, werden Teile in das swapfile ausgelagert und wenn sie gebraucht werden, wieder in den RAM zurückkopiert. Bei einem 32 Bit OS könnte der virtuelle Speicher maximal 4 GB betragen, nach meinen Überlegungen kann das swapfile maximal 4 GB - physisch vorhandener RAM groß sein.

Auf http://support.microsoft.com/default.aspx?scid=kb;EN-US;q294418 steht nun aber, dass das swapfile bis zu 16 TB groß sein kann. Wie funktioniert das praktisch? Wie spricht Windows die Sachen im swapfile an, die ausserhalb der 4 GB-Grenze des virtuellen Speichers liegen?

Aqua

klutob
2005-02-07, 00:32:38
Hi,

Diese Einschränkung gilt IMHO nur für den einzelnen Prozeß, nicht für die Gesamtspeichermenge aller laufenden Threads, die das OS verwalten kann.

/edit
Die 16TB stellen eher das "file size limit" (Swapfile) von NTFS dar, als eine Beschränkung der Speicherverwaltung an sich.

http://de.wikipedia.org/wiki/NTFS

Coda
2005-02-07, 00:42:37
Ja richtig. Jeder Prozess kann nur 4GB RAM benutzen, aber alle zusammen natürlich mehr.

ast
2005-02-07, 01:01:49
Auf http://support.microsoft.com/default.aspx?scid=kb;EN-US;q294418 steht nun aber, dass das swapfile bis zu 16 TB groß sein kann. Wie funktioniert das praktisch? Wie spricht Windows die Sachen im swapfile an, die ausserhalb der 4 GB-Grenze des virtuellen Speichers liegen?
Geraten: Es spricht ihn gar nicht an.


@klubob
IIRC gilt beides. Jeder Prozess besitzt 2GB Platz und alle Prozesse zusammen müssen im 2GB Userspace auskommen.

Aqualon
2005-02-07, 01:14:02
Ja richtig. Jeder Prozess kann nur 4GB RAM benutzen, aber alle zusammen natürlich mehr.
Wie schaut es dann bei Prozessen aus, die zusammen mehr als 4GB brauchen würden. Können die dann nicht zusammen ablaufen? Oder können die zusammen ablaufen, wenn genügend große Teile von ihnen im swapfile liegen? Braucht ein Prozess nicht Zugriff auf seinen kompletten Speicherbereich, wenn er laufen soll? Oder kann Windows die Teile, die ausserhalb der 4 GB im swapfile liegen bei Bedarf nachladen?

Mir fehlt da glaub ich noch das grundlegende Verständnis zum Zusammenhang zwischen virtuellen Speicher und Auslagerungsdatei. Gibt es da vielleicht empfehlenswerte Artikel zu dem Thema?

Aqua

Grestorn
2005-02-07, 10:13:12
Geraten: Es spricht ihn gar nicht an.


@klubob
IIRC gilt beides. Jeder Prozess besitzt 2GB Platz und alle Prozesse zusammen müssen im 2GB Userspace auskommen.
Letzteres gilt für Win98, aber nicht für XP. XP kann in der Tat für jeden Prozess max. 2 GB verwalten, aber für alle Prozesse zusammen deutlich mehr (eben 16 TB, wobei mir diese Grenze bisher nicht bekannt war).

Es gibt keinen Grund für eine 2 oder 4 GB Grenze für alle Prozesse zusammen auf Grund der Prozessorarchitektur, da jeder Prozess seinen eigenen virtuellen Adressbereich zugeordnet bekommt, der immer die vollen 32 Bit umfasst. Wie dieser virtuelle Adressbereich auf die physischen Speicherpages gemappt wird (egal ob physisch oder ausgelagert) hat nichts mit der Prozessorarchitektur zu tun.

Grestorn
2005-02-07, 10:19:17
Wie schaut es dann bei Prozessen aus, die zusammen mehr als 4GB brauchen würden. Können die dann nicht zusammen ablaufen? Oder können die zusammen ablaufen, wenn genügend große Teile von ihnen im swapfile liegen? Braucht ein Prozess nicht Zugriff auf seinen kompletten Speicherbereich, wenn er laufen soll? Oder kann Windows die Teile, die ausserhalb der 4 GB im swapfile liegen bei Bedarf nachladen?Die Prozesse können natürlich nebenher laufen, sie können den Speicher des jeweilig anderen Prozesses aber nicht sehen. Wie gesagt, jeder Prozess hat seinen eigenen, virtuellen, 32bit breiten Adressbereich.

Wenn ein Prozess läuft, muss natürlich nicht sein gesamter Adressbereich im physischen Speicher vorhanden sein. Der Speicher wird in Pages aufgeteilt, und es gibt eine Zuordnung von Speicherseiten innerhalb eines Prozesses auf Speicherseiten innerhalb des virtuellen Speichers.

Je nachdem, welche Seiten des virtuellen Speichers gerade tatsächlich benötigt werden (also Seiten, auf die gerade zugegriffen wird), werden in den physischen Speicher geladen, der Rest bleibt im Pagefile ausgelagert. Wobei hier natürlich eine "Least-recently-used" Strategie verfolgt wird, d.h. die Pages, die am längsten nicht mehr benötigt wurden, werden als erstes ausgelagert, wenn der physische Speicher ausgeht.

del_4901
2005-02-07, 11:29:35
Je nachdem, welche Seiten des virtuellen Speichers gerade tatsächlich benötigt werden (also Seiten, auf die gerade zugegriffen wird), werden in den physischen Speicher geladen, der Rest bleibt im Pagefile ausgelagert. Wobei hier natürlich eine "Least-recently-used" Strategie verfolgt wird, d.h. die Pages, die am längsten nicht mehr benötigt wurden, werden als erstes ausgelagert, wenn der physische Speicher ausgeht.

Naja LRU wird zwar gern verwendet, aber ich denke Aging ist weiter verbeitet.
Die haben halt alle ihre Berechtigung selbst 2H-Clock, NRU, LFU oder solch exotische Sachen wie MFU.

Grestorn
2005-02-07, 11:43:07
Naja LRU wird zwar gern verwendet, aber ich denke Aging ist weiter verbeitet.
Die haben halt alle ihre Berechtigung selbst 2H-Clock, NRU, LFU oder solch exotische Sachen wie MFU.
Ok, ich hätte vielleicht nicht "natürlich" schreiben sollen... zum Thema welche Strategien es hier gibt und welche vor und Nachteile sie haben, bin ich definitiv kein Spezialist :)

del_4901
2005-02-07, 11:54:47
Ok, ich hätte vielleicht nicht "natürlich" schreiben sollen... zum Thema welche Strategien es hier gibt und welche vor und Nachteile sie haben, bin ich definitiv kein Spezialist :)

Naja das kann man auch blos durch probieren und vergleichen mit der Optimalen Strategie (In Future Last Used) vergleichen. Jedes Programm verhält sich da anders, die eine Strategie ist für die einen gut für die anderen schlecht. Den Mittelweg zu finden ist da nicht ganz so einfach.

GloomY
2005-02-07, 12:50:50
Mal eine grundsätzliche Anmerkung: "Virtueller Speicher" ist imho ein Windows-Ausdruck. Unter Linux heisst das Ding ganz einfach "Swap" und meidet damit sämtliche ähnlichklingenden Wörter :up:. Das verwirrende an "virtuellem Speicher" ist nämlich, dass dieser Speicher nur in dem Sinne virtuell ist, dass er nicht aus DRAM Speicherzellen besteht. Dieser "virtuelle Speicher" ist aber trotzdem physisch (was auch allein der Name "Speicher" und nicht "Adressraum" ausdrückt), auch wenn das jetzt wie ein Widerspruch klingt.

Jeder Prozess hat einen eigenen Adressraum und dieser ist - nach der eigentlichen Bedeutung von virtuell - nicht real existent. Dieser virtuelle Adressraum wird auf physischen Speicher abgebildet, welcher entweder aus RAM oder aus Magnetspeicher-Platten besteht. Ich sage das so deutlich, weil ich eben klar machen will, dass der Speicher real vorhanden ist.

"Virtueller Speicher" ist nichts anderes als die Swap und die ist physisch. Ein Adressraum hingegen ist etwas nicht real existentes. Man kann ihn nicht anfassen.

Obige Bezeichnungs-Problematik war schon so oft Ursache von Missverständnissen, die insbesondere die Diskussionen um die Notwendigkeit von 64 Bit immer wieder in eine Sackgasse haben laufen lassen. Imho haben bis heute nicht viele Leute die Notwendigkeit dafür verstanden, aber das wird jetzt zu OT.
H!

Ich habe mal eine Frage zum virtuellen Speicher. Bisher dachte ich, dass sich der virtuelle Speicher aus dem physisch vorhandenen Speicher und dem swapping file zusammensetzt."Virtueller Speicher" ist nur die Auslagerungsdatei (Swap). Du kannst unter Windows den "virtuellen Speicher" auch komplett deaktivieren, dann geht deinen RAM aber immer noch ;)

Coda
2005-02-07, 13:03:49
Naja irgendwie ist er schon virtuell, weil er eben nicht im RAM vorhanden ist.
Bei einem Zugriff auf die entsprechende virtuelle Speicheraddresse wird ja ein Interrupt ausgelöst, woraufhin das OS im Speicher etwas mit der Festplatte austauschen muss.

del_4901
2005-02-07, 15:49:38
Mal eine grundsätzliche Anmerkung: "Virtueller Speicher" ist imho ein Windows-Ausdruck. Unter Linux heisst das Ding ganz einfach "Swap"

Uhh werft nicht so mit eurem gefährlichen Halbwissen umher.
Swapping = wenn der phys Speicher knapp wird, dann schmeiß ich den kompletten Prozess auf die Platte (wird heute nur noch gemacht wenn Das Sys an die Thrashing-Grenze kommt)
Pageing = Ich schmeiße nur Teile des Prozesses auf die Pladde (nämlich einzelne Speicherseiten)


"Virtueller Speicher" ist nur die Auslagerungsdatei (Swap). Du kannst unter Windows den "virtuellen Speicher" auch komplett deaktivieren, dann geht deinen RAM aber immer noch ;)

Virtueller Speicher ist alles ... dein phys RAM, deine Auslagerungsdatei und evtl. noch andere Speichersorten ... Caches, GraficRAM etc. Sowie Speicher den es "offizell" noch nicht gibt (sprich der keinen PageDirectory und PageTable Eintrag hat)
Jeder Prozess wird in seinen eigenen virtuellen Adressraum eingesperrt, und daher kommt auch der Begriff virtueller Speicher, Speicher der nicht real existiert. Da gibt es ettliche Adressen die zwar beim starten eines Prozesses "anwählbar" sind, aber die wenigsten davon verweisen auch auf echte phys. Seiten.

del_4901
2005-02-07, 15:54:07
Naja irgendwie ist er schon virtuell, weil er eben nicht im RAM vorhanden ist.
Bei einem Zugriff auf die entsprechende virtuelle Speicheraddresse wird ja ein Interrupt ausgelöst, woraufhin das OS im Speicher etwas mit der Festplatte austauschen muss.

Kein Interrupt! Es wird ein Trap ausgelöst.
... Wechsel in den Sys Mode
Sys(OS) tauscht die Page von der HDD ein.
Danach wird der Befehl neu aufgesetzt
... Wechsel in den UserMode
und der Prozess läuft weiter.

Das ganze nennt sich übrigens on Demand Pageing.

Coda
2005-02-07, 16:16:10
Nein, es ist ein Fault, kein Trap. Traps sichern die nächste Instruction in EIP, nicht die derzeitige. Aber ein Interrupt ist es trotzdem.

aths
2005-02-07, 16:18:41
Kein Interrupt! Es wird ein Trap ausgelöst. Was ist da der Unterschied?

del_4901
2005-02-07, 16:34:04
Was ist da der Unterschied?
Traps sind syncron und werden vom Programm selbst ausgelöst.
Interrupts sind asyncron und werden von Geräten ausgelöst.


Wenn du es genau wissen willst:
http://www-bs.informatik.tu-cottbus.de/fileadmin/user_upload/pdf/bs1/bs-unterbrechungen.pdf

Demirug
2005-02-07, 16:39:53
Traps sind syncron und werden vom Programm selbst ausgelöst.
Interrupts sind asyncron und werden von Geräten ausgelöst.


Wenn du es genau wissen willst:
http://www-bs.informatik.tu-cottbus.de/fileadmin/user_upload/pdf/bs1/bs-unterbrechungen.pdf

Ist aber alles eine Definitionsfrage.

Es gibt genauso die Unterscheidung zwischen Software und Hardwareinterrupt. Aus Sicht des x86 Assemblers macht diese sogar mehr Sinn.

aths
2005-02-07, 16:41:52
Traps sind syncron und werden vom Programm selbst ausgelöst.Ich kann doch auch Software-Interrupts auslösen.

del_4901
2005-02-07, 16:49:42
Möglich ist das schon, aber im Falle einer Speicherzugriffsverletzung handelt es sich um einen Trap und um keinen Interrupt! Das gleiche gilt für eine Integer Division durch Null etc.

Traps kann ich auch nicht Schachteln im gegensatz zu Interrupts.

Coda
2005-02-07, 16:53:55
Uhm eigentlich unterscheiden sich Traps und Faults nur dadurch wie EIP gesichert wird.
Sind beides CPU Exceptions.

int 3 ist z.B. ein Trap, während das "Page not found" eben nen Fault ist.

Dann gibt es da auch noch "Abort", aber das ist äußerst unschön :D

GloomY
2005-02-07, 17:15:46
Uhh werft nicht so mit eurem gefährlichen Halbwissen umher.Sorry, aber imho kann ich das genauso an dich zurückgeben. Du vermischst da einige Sachen...
Swapping = wenn der phys Speicher knapp wird, dann schmeiß ich den kompletten Prozess auf die Platte (wird heute nur noch gemacht wenn Das Sys an die Thrashing-Grenze kommt)
Pageing = Ich schmeiße nur Teile des Prozesses auf die Pladde (nämlich einzelne Speicherseiten)Der Mechanismus ist genau der gleiche. Das macht keinen Unterschied ob ich einen kompletten Prozess (alle Kacheln) auf die Platte verlagere oder nur einige davon.

btw: Warum meinst du denn, dass es "swap" unter Linux heißt? (und nicht "paging-Partition")

btw2: So wie ich die Bezeichnungsweise kenne, spricht man von "Speicherseite", wenn man virtuelle Adressbereiche meint und von "Speicherkachel" oder "Speicherrahmen", wenn man physikalische Speicherbereiche im RAM meint.
Nicht dass ich die Bezeichnungen umbedingt gut finden würde, ich hab' sie mir auch nur deswegen angewöhnt, weil ein Großteil der Leute diese genau so verwenden.
Virtueller Speicher ist alles ... dein phys RAM, deine Auslagerungsdatei und evtl. noch andere Speichersorten ... Caches,Caches sind vollkommen transparent und dazu noch nicht mal direkt adressierbar (Innerhalb eines Ways kannst du nicht bestimmen, was in welcher Line gespeichert wird)
GraficRAM etc.Wenn ich den "virtuellen Speicher" unter Windows ausschalte und deiner Meinung nach dazu auch der Graka-Speicher gehört, warum sehe ich dann noch was auf meinem Bildschirm? Schliesslich ist der Graka-Speicher dann doch ausgeschaltet, oder?
Jeder Prozess wird in seinen eigenen virtuellen Adressraum eingesperrt, und daher kommt auch der Begriff virtueller Speicher, Speicher der nicht real existiert.Wenn Speicher real nicht existiert, dann gibt es ihn auch nicht. D.h. es ist unsinnig, sich dafür einen Namen auszudenken.

Ich weiss, das klingt jetzt wie ein trotziges Kleinkind, aber imho ist deine Argumentation im höchsten Maße in sich unlogisch.
Da gibt es ettliche Adressen die zwar beim starten eines Prozesses "anwählbar" sind, aber die wenigsten davon verweisen auch auf echte phys. Seiten.Ack. Um genau zu sein gibt es bei einem Program mit moderatem Speicherverbrauch (soll heissen: Keine GigaBytes) verdammt viel Adressen, die nicht gemappt sind.

Xmas
2005-02-07, 17:46:41
Wie dieser virtuelle Adressbereich auf die physischen Speicherpages gemappt wird (egal ob physisch oder ausgelagert) hat nichts mit der Prozessorarchitektur zu tun.
Natürlich ist es von der Prozessorarchitektur abhängig, wie aus einer virtuellen Adresse eine physische Adresse wird und wie die Page Directories bzw. Page Tables aufgebaut sind. Nur sind das natürlich Details, mit denen sich nur das OS herumschlagen muss.

Aqualon
2005-02-07, 18:31:12
Zumindest in Windows XP wird der Begriff Auslagerungsdatei vom Begriff des virtuellen Speicher getrennt. Ich kann die Auslagerungsdatei zwar deaktivieren, aber nicht die virtuelle Speicherverwaltung (was auch keinen Sinn machen würde, da afaik XP selbsttätig die Auslagerungsdatei erstellt, wenn der Speicher knapp wird). In früheren Windows-Versionen wurde die Auslagerungsdatei aber glaub ich noch als virtueller Speicher bezeichnet, was meinem Begriffverständnis nach falsch war.

Als virtuellen Speicher würde ich jenen Speicher sehen, der sich aus dem normalen RAM und dem swapfile zusammensetzt, in das Teile des RAMs ausgelagert werden können.

Von Programmen werden nur die Adressen im virtuellen Speicherraum angesprochen und das OS sorgt dafür, dass diese virtuellen Adressen auf reale Adressen im RAM umgeleitet werden (wozu natürlich der Teil, auf den ich Zugriff haben möchte, im RAM vorhanden sein muss).

Ist der Teil, den ich ansprechen möchte nicht im RAM vorhanden, muss er aus dem swapfile in das RAM kopiert werden, um angesprochen werden zu können. Ist dort kein Platz, müssen erst momentan nicht mehr benötigte Teile in das swapfile ausgelagert werden, um die benötigten Daten ins RAM kopieren zu können.

Aqua

del_4901
2005-02-07, 19:04:20
Der Mechanismus ist genau der gleiche. Das macht keinen Unterschied ob ich einen kompletten Prozess (alle Kacheln) auf die Platte verlagere oder nur einige davon.

Das ist sehr wohl was anderes: Ob ich nun swappe oder page. Beim Pageing kann der Prozess weiterlaufen beim Swappen NICHT!


btw: Warum meinst du denn, dass es "swap" unter Linux heißt? (und nicht "paging-Partition")

Beim Paging heißt der Teil der Auf der Platte liegt "Swap-Space"

btw2: So wie ich die Bezeichnungsweise kenne, spricht man von "Speicherseite", wenn man virtuelle Adressbereiche meint und von "Speicherkachel" oder "Speicherrahmen", wenn man physikalische Speicherbereiche im RAM meint.
Nicht dass ich die Bezeichnungen umbedingt gut finden würde, ich hab' sie mir auch nur deswegen angewöhnt, weil ein Großteil der Leute diese genau so verwenden.

virtuell = Pages
physikalisch = Frames

Caches sind vollkommen transparent und dazu noch nicht mal direkt adressierbar (Innerhalb eines Ways kannst du nicht bestimmen, was in welcher Line gespeichert wird)

Da magst du gewissermaßen (aus heutiger Sicht) Recht haben, es gibt aber ganz strange Architekturen aus Dinosaurier Zeiten die noch mit Trommelspeicher und Overlays arbeiten.

Und zur Adressierbarkeit hab ich ein ganz einfaches Gegenbeispiel. So liegt der Plattencache von Windoof auch nur im Hauptspeicher und ist somit voll adressierbar.

Wenn ich den "virtuellen Speicher" unter Windows ausschalte und deiner Meinung nach dazu auch der Graka-Speicher gehört, warum sehe ich dann noch was auf meinem Bildschirm? Schliesslich ist der Graka-Speicher dann doch ausgeschaltet, oder?


Der Name für die Option virtueller Speicher ist einfach nur ungünstig gewählt im Win. Sprich es müsste Swap-Space heißen und nicht virtueller Speicher

Wenn Speicher real nicht existiert, dann gibt es ihn auch nicht. D.h. es ist unsinnig, sich dafür einen Namen auszudenken.

Brockhaus:

virtuelles Bild = Spiegel;
(vom frz. über mittellat. virtualis zu lat. virtus "Tüchtigkeit, Mannhaftigkeit"),
fachsprachl. für: nicht wirklich, scheinbar, der Anlage nach als
Möglichkeit vorhanden

del_4901
2005-02-07, 19:05:39
Natürlich ist es von der Prozessorarchitektur abhängig, wie aus einer virtuellen Adresse eine physische Adresse wird und wie die Page Directories bzw. Page Tables aufgebaut sind. Nur sind das natürlich Details, mit denen sich nur das OS herumschlagen muss.

Wie recht du hast ... es gibt sogar embeded CPUs die haben keine MMU ... da darf man alles selber Coden .... viel Spaß ... und schnell wird's auch nicht

del_4901
2005-02-07, 19:10:04
Uhm eigentlich unterscheiden sich Traps und Faults nur dadurch wie EIP gesichert wird.
Sind beides CPU Exceptions.

int 3 ist z.B. ein Trap, während das "Page not found" eben nen Fault ist.

Dann gibt es da auch noch "Abort", aber das ist äußerst unschön :D


Wir haben das eher allgemeingültig gelernt, und etwas genauer in Bezug auf x86 CPUs, aber mein Prof meint PageFaults werden beim x86 als Traps behandelt ... vllt wollte er uns nicht zusehr mit Infos überschütten, also erklär das bitte nochmal etwas genauer. z.B was ist EIP?

Coda
2005-02-07, 19:21:18
EIP ist das Instruction Counter Register. Bei nem Trap wird EIP auf die nächste Instruction gesetzt, bei nem Fault auf die derzeitige.
Bei ner "page not found" Exception soll die Ausführung ja wieder bei der Instruction beginnen die sie verursacht hat, deshalb ist es ein Fault.

Jesus
2005-02-07, 19:35:09
Uhh werft nicht so mit eurem gefährlichen Halbwissen umher.
Swapping = wenn der phys Speicher knapp wird, dann schmeiß ich den kompletten Prozess auf die Platte (wird heute nur noch gemacht wenn Das Sys an die Thrashing-Grenze kommt)
Pageing = Ich schmeiße nur Teile des Prozesses auf die Pladde (nämlich einzelne Speicherseiten)


Oh ein Allwissender :rolleyes:

Aber ist "paging" nicht der Vorgang bei dem der physikalische Speicher in "Pages" aufgeteilt wird weil der Prozessor nicht den gesamten Speicher direkt addressieren kann/will ? Zumindest wars das zu C64 Zeiten mal (4kb oder so). Bei Windoof sinds glaub ich 256MB/Page...

del_4901
2005-02-07, 19:54:24
Oh ein Allwissender :rolleyes:

Aber ist "paging" nicht der Vorgang bei dem der physikalische Speicher in "Pages" aufgeteilt wird weil der Prozessor nicht den gesamten Speicher direkt addressieren kann/will ? Zumindest wars das zu C64 Zeiten mal (4kb oder so). Bei Windoof sinds glaub ich 256MB/Page...


physikalisch == Frames!
Dazu sag ich mal nichts mehr ..... Sei am besten Still wenn du keinen Plan von hast.
Nur ein kleiner Tipp ne Page bei nem x86er ist 4kb groß. ohne PAE Mode

del_4901
2005-02-07, 20:06:47
EIP ist das Instruction Counter Register. Bei nem Trap wird EIP auf die nächste Instruction gesetzt, bei nem Fault auf die derzeitige.
Bei ner "page not found" Exception soll die Ausführung ja wieder bei der Instruction beginnen die sie verursacht hat, deshalb ist es ein Fault.

Ich werde mal morgen mit meinem Prof Rücksprache halten.

Jesus
2005-02-07, 20:16:05
physikalisch == Frames!
Dazu sag ich mal nichts mehr ..... Sei am besten Still wenn du keinen Plan von hast.
Nur ein kleiner Tipp ne Page bei nem x86er ist 4kb groß. ohne PAE Mode

Sorry wenn ich dich in deinem Ehrgefühl gekrängt habe, hast du das etwa heute in der Vorlesung gelernt oder per Google rausgesucht? :biggrin:

Leute gibts...

Edit:

Ich werde mal morgen mit meinem Prof Rücksprache halten.

lol, danke das beantwortet meine Frage :rolleyes:


Edit2:

Ich möchte Sie nochmals um entschuldigung bitten, ich habe mich geirrt. Die 256MB die ich im Kopf hatte waren der nonpaged pool von Win2k. Ich hab leider in letzter Zeit etwas viel mit x64 rumgemacht, von daher diese temporäre Verwirrung meinerseits. :massa:

del_4901
2005-02-07, 20:28:20
@Jesus: Ich habe wenigstens was gelernt ...

Xmas
2005-02-07, 20:56:44
Das ist sehr wohl was anderes: Ob ich nun swappe oder page. Beim Pageing kann der Prozess weiterlaufen beim Swappen NICHT!
Swapping ist englisch für auslagern/austauschen. Auslagern kann man sowohl Prozesse als auch Pages (und auch Segmente).

Aber ist "paging" nicht der Vorgang bei dem der physikalische Speicher in "Pages" aufgeteilt wird weil der Prozessor nicht den gesamten Speicher direkt addressieren kann/will ? Zumindest wars das zu C64 Zeiten mal (4kb oder so). Bei Windoof sinds glaub ich 256MB/Page...
Es gibt AFAIK auch die Wortverwendung dass Paging generell die Einteilung des Speichers in Blöcke fester Länge bedeutet, während Segmentierung die Einteilung in Bereiche unterschiedlicher Größe meint. Was bei den x86-Real-Mode-Segmenten natürlich nicht gilt.



Übrigens, es heißt physischer Speicher, nicht physikalischer.

Coda
2005-02-07, 20:58:36
Die 4kiB Pages sind schon richtig. x86_64 unterstützt auch 2MiB.

del_4901
2005-02-07, 21:01:32
Swapping ist englisch für auslagern/austauschen. Auslagern kann man sowohl Prozesse als auch Pages (und auch Segmente).


Ähm, ja sicher. Paging ist nur ein erweitertes Swapping, aber wenn man die Verfahren schon beim Namen nennt, dann muss man die auch unterscheiden, denn wenn man alles über einen Kamm schert kommt schnell das gefährliche Halbwissen bei raus.

Xmas
2005-02-07, 21:24:36
Ähm, ja sicher. Paging ist nur ein erweitertes Swapping, aber wenn man die Verfahren schon beim Namen nennt, dann muss man die auch unterscheiden, denn wenn man alles über einen Kamm schert kommt schnell das gefährliche Halbwissen bei raus.
Schon, nur sind abweichende Begriffsdefinitionen nicht zwangsläufig Halbwissen.
Paging ist erst mal das Aufteilen des Speichers in Pages, was gar nicht zwangsläufig ein Auslagern voraussetzt. Auslagern wiederum setzt nicht zwangsläufig Pages voraus. Protected-Mode-Segmente haben auch ein Present Flag.
Ich würde hier also zwischen Page- und Prozess-Swapping unterscheiden.

del_4901
2005-02-08, 00:08:41
Schon, nur sind abweichende Begriffsdefinitionen nicht zwangsläufig Halbwissen.
Paging ist erst mal das Aufteilen des Speichers in Pages, was gar nicht zwangsläufig ein Auslagern voraussetzt.


Wir haben das unter dem Namen Kachelung kennengelernt.
Naja die Namensgebung ist insgesammt nicht so doll ... Pages / Paging ... das verbindet man schon miteinander, das eine hat was mit Kaskadierten Abbildungen (Kachelung) zu tun und das Andere mit Auslagern.

Auslagern wiederum setzt nicht zwangsläufig Pages voraus. Protected-Mode-Segmente haben auch ein Present Flag.
Ich würde hier also zwischen Page- und Prozess-Swapping unterscheiden.

Die Unterscheidung ist gar nicht mal so Dumm (und erst Recht nicht falsch) ... Aber du weißt doch: "Was der Bauer nicht kennt, frisst er nicht"

Coda
2005-02-08, 01:26:46
Uhm Pages haben nix mit Segmentierung zu tun.

del_4901
2005-02-08, 08:03:19
Uhm Pages haben nix mit Segmentierung zu tun.
Uhm, ja du hast Recht, gestern gg 12:00 war ich schon ziehml. fett angetrunken :P. Das mit der Segmentierung habe ich gestrichen, aber das mit der Kachelung stimmt soweit.

Jesus
2005-02-08, 11:41:03
Schon, nur sind abweichende Begriffsdefinitionen nicht zwangsläufig Halbwissen.
Paging ist erst mal das Aufteilen des Speichers in Pages, was gar nicht zwangsläufig ein Auslagern voraussetzt. Auslagern wiederum setzt nicht zwangsläufig Pages voraus. Protected-Mode-Segmente haben auch ein Present Flag.
Ich würde hier also zwischen Page- und Prozess-Swapping unterscheiden.

:up:

del_4901
2005-02-09, 14:21:47
EIP ist das Instruction Counter Register. Bei nem Trap wird EIP auf die nächste Instruction gesetzt, bei nem Fault auf die derzeitige.
Bei ner "page not found" Exception soll die Ausführung ja wieder bei der Instruction beginnen die sie verursacht hat, deshalb ist es ein Fault.

So wie's Aussieht haben wir beide Recht, ich im Allgemeinen und du bezogen auf die x86er Welt.

<<Moin moin Arne,

die Unterscheidung zwischen Traps und Faults gibt es scheinbar nur in
beim intel x86. Deren Deutung der Begriffe ist im Intel Manual auf
unseren Webseiten in Abschnitt 5.5 nachzulesen.(
http://www-bs.informatik.tu-cottbus.de/fileadmin/user_upload/pdf/bs2/intelx86_3.pdf) Die Definitionen im Netz
dazu waren meistens mehr oder weniger Mißverstandene abwandlungen davon.

Meiner Meinung nach unterscheidet Intel zwischen Traps welche nach einer
Instruktion ausgeführt werden (Traps) und Traps welche während der
Bearbeitung eines Befehls ausgelöst werden (Fault). Woraus sich auch
ergibt, das die Instruktion die einen Fault ausgelöst hat nochmals
ausgeführt wird und eine die einen Trap ausgelöst hat nicht.

In der Lehre definiert z.B. Stallings einen Trap wie folgt:

"Ein Trap ist ein nicht programmierter bedingter Sprung auf eine
bestimmte Adresse, welcher automatisch durch die Hardware aktiviert
wird. Der Ort, von dem aus der Sprung erfolgte, wird gespeichert."

Wie gesagt diese Begriffsunterscheidung ist ein Kind der x86 Welt. Ich
denke man sollte lieber bei der Beschreibung des einzelnen Traps sagen,
ob die Instruktion wieder mit aufgesetzt wird. Es gibt ja eh nur 2(3)
Traps nach ihrer Definition (Breakpoint, Overflow und einen für den
Prozessortest).

Gruß
Karsten>>

Coda
2005-02-09, 15:09:16
Sowas hatte ich schon vermutet :)

aths
2005-02-09, 15:48:26
So wie's Aussieht haben wir beide Recht, ich im Allgemeinen und du bezogen auf die x86er Welt.

<<Moin moin Arne,

die Unterscheidung zwischen Traps und Faults gibt es scheinbar nur in
beim intel x86. Das weiß ich nicht. Wir hatten in der Vorlesung "System- und Netzwerkschnittstellen" (im großen und ganzen Unix-basiert) auch Traps, aber mir kam das vor als seien dies eigentlich nur SW-Interrupts.

GloomY
2005-02-09, 15:48:46
Es ergibt keinen Sinn, sich an solchen Begriffen festzubeissen. Diese werden je nach Architektur anders verwendet:

Bei x86 heissen fast alle Unterbrechungen, die auftreten können, Interrupts. Bei Motorolas 680x0 Familie ist die Namensgebung "Exceptions". Und die VAX unterscheided zwischen beiden, je nach Art der Unterbrechung, wobei die Exceptions in "faults", "traps" und "aborts" unterteilt sind, während die Interrupts die Attribute "device", "software" und "urgent" haben.

Es hat also keinen Sinn jetzt zu streiten, ob ein Syscall oder ein Page Fault nun den Namen "Interrupt" oder "Exception" oder sonstwie haben soll. Wichtig ist letztlich der Mechanismus der Unterbrechung und die Eigenschaften selbiger (synchron vs. asynchron; user requested vs. coered; maskable vs. non-maskable; resume vs. terminate; within vs. between instructions usw.)

del_4901
2005-02-09, 15:59:49
Das weiß ich nicht. Wir hatten in der Vorlesung "System- und Netzwerkschnittstellen" (im großen und ganzen Unix-basiert) auch Traps, aber mir kam das vor als seien dies eigentlich nur SW-Interrupts.

Naja so ganz unrecht hast du da nicht ... eine Div/0 .. Page Fault etc. wird ja durch SW (bzw. einen "fehlerhaften" Befehl oder auch z.B breakpoints) ausgeführt. Was die Hardware dann macht ist von Architektur zu Architektur verschieden. Wichtig ist nur das es syncron ist! Interrupts sind im gegenteil dazu asyncron.