Seite 1 von 1

Frage zur Auslagerungsdatei

Verfasst: 11. Dez 2007 13:08
von Mspringer
Wir stehen grad ein wenig auf dem Schlauch was die Auslagerungsdatei angeht. Wir wissen zwar, wann wir etwas reinschreiben müssen, nur worin is der genaue Sinn? Wenn wir das richtig sehen, wird die Datei ja niemals wieder ausgelesen.

Verfasst: 11. Dez 2007 15:34
von banshee
Ergänzend dazu noch eine andere Frage:

So wie sich das in der Aufgabenstellung anhört, sollen wir die Datei ja mit einer festen Größe initialisieren ("-1 Nicht genug physikalischer Speicher vorhanden. Dies kann auftreten, wenn die Auslagerungsdatei
vergrößert werden muss.")

Aber wenn ich das mit einem FILE-Objekt mache, kann ich doch gar keine Maximalgröße angeben. Ist das in Ordnung, wenn man sich einfach ein FILE-Objekt anlegt und alle auszulagernden Seiten da reinschreibt?

Eine andere Möglichkeit wäre noch einen buffer anzulegen und den immer in die Datei zu übertragen, was aber sinnlos ist, weil die Daten ja dann trotzdem im Speicher stehen...

Ich stehe auf dem Schlauch

Verfasst: 11. Dez 2007 15:58
von arke
Ich merke mir einfach was in der datei wo drin steht. Per fseek() kann man sich dann vor und zurueck bewegen zum lesen bzw. schreiben.

Verfasst: 11. Dez 2007 17:13
von Mspringer
Ja, das fseek() löst allerdings keins der beiden Probleme ^^

Verfasst: 11. Dez 2007 17:22
von Sascha
"-1 Nicht genug physikalischer Speicher vorhanden. Dies kann auftreten, wenn die Auslagerungsdatei
vergrößert werden muss."
Gemeint ist natürlich nicht, dass ein Vergrößern der Auslagerungsdatei immer ein Fehler ist, sondern dass dabei ein Fehler auftreten kann. (Wenn bspw. kein Speicher mehr auf der Partition frei ist.)

Re: Frage zur Auslagerungsdatei

Verfasst: 11. Dez 2007 17:52
von chrschn
Mspringer hat geschrieben:Wir stehen grad ein wenig auf dem Schlauch was die Auslagerungsdatei angeht. Wir wissen zwar, wann wir etwas reinschreiben müssen, nur worin is der genaue Sinn? Wenn wir das richtig sehen, wird die Datei ja niemals wieder ausgelesen.
Die Auslagerungsdatei soll analog verwendet werden, wie sie z. B. auch unter Windows zum Einsatz kommt: Wenn ein Programm mehr virtuellen Speicher anfordert als physikalischer vorhanden ist, dann wird ein Teil dieses Speichers in der Auslagerungsdatei gehalten. Und wenn auf eine ausgelagerte Speicherseite wieder zugegriffen wird, dann müssen Sie diese zuerst wieder aus der Datei einlesen und in den physikalischen Speicher legen.

Wenn Ihnen dieses Konzept neu erscheint, dann sehen Sie sich bitte nochmal das 4. Kapitel der Folien an, S. 52 bis 63, und das Bild auf S. 61.

Verfasst: 11. Dez 2007 18:19
von banshee
Sascha hat geschrieben:Gemeint ist natürlich nicht, dass ein Vergrößern der Auslagerungsdatei immer ein Fehler ist, sondern dass dabei ein Fehler auftreten kann. (Wenn bspw. kein Speicher mehr auf der Partition frei ist.)
okay das macht Sinn. Wird mein file dann auf null gesetzt, wenn ich mehr reinschreibe, als Speicher zur Verfügung steht oder worin macht sich das bemerkbar?

Verfasst: 11. Dez 2007 19:36
von marlic
Warum steht das nicht gleich explizit in der aufgabenstellung?!

Man kann das "kann" auf zwei Arten lesen ... " es kann auftreten, und tritt immer dann auf, wenn die Datei vergrößert wird" und "es tritt evtl dann auf, wenn die datei vergrößert wird"

Verfasst: 11. Dez 2007 19:42
von Red*Star
banshee hat geschrieben:Wird mein file dann auf null gesetzt, wenn ich mehr reinschreibe, als Speicher zur Verfügung steht oder worin macht sich das bemerkbar?
"fwrite [...] Return Value

The total number of elements successfully written is returned as a size_t object, which is an integral data type.
If this number differs from the count parameter, it indicates an error."

Von:
http://www.cplusplus.com/reference/clib ... write.html


marlic hat geschrieben:Warum steht das nicht gleich explizit in der aufgabenstellung?!
Ich weiß das hilft euch jetzt nicht viel, aber ich weiß gar nicht, wie man /das/ falsch verstehen kann ^^. Es gibt doch eigentlich nur eine /sinnvolle/ Deutung.

Verfasst: 11. Dez 2007 21:36
von citta
Nein, die Frage habe ich mir auch gestellt. Zumal man den gleichen Errorcode zurückgeben muss wie beim Überschreiten des RAMs. Das ist afaik auch die einzige Stelle, wo mit "physikalischer Speicher" die Platte gemeint ist.