Darfst Du überhaupt an der Stelle schreiben?cloidnerux hat geschrieben:Ja, da ist ja mein Problem.
Ich habe für die Speicherverwaltung von Aeris einen Pointer, der am ende vom Kernel genutzten speicher liegt.
Damit jezt aber keine fehler auftreten, weil irgendwo da wo mein pointer ist eine wert ist, muss ich alles auf 0 setzten.
Doch weder mit einer for-schleife oder malloc geht das,
ich bekomme immer nur eine Exeption und das System wird eingefroren.
Desswegen muss ich wisse, ob es überhaupt möglich ist, bei einem Pointer alles auf 0 zu setzten.
Array auf 0 setzen
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Array auf 0 setzen
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Array auf 0 setzen
Ich hoffe du willst nicht den ganzen Speicher auf 0 setzen....dann wird dein Betriebssystem sehr langsam werden^^
Dein Problem verstehe ich nicht ganz...
Wozu eigentlich ein Mehrdimensionales Array..?
Was hältst du von
Dein Problem verstehe ich nicht ganz...
Wozu eigentlich ein Mehrdimensionales Array..?
Was hältst du von
Code: Alles auswählen
int arr[1024*1024];
memset(arr,0, ((1024*1024) * sizeof(int)) );
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Array auf 0 setzen
Als Pagetable.Wozu eigentlich ein Mehrdimensionales Array..?
Ja darf ich. Der pointer ist ans ende von meinem Kernel gesetzt. Also sollte da hinten keine Variablen sein.Darfst Du überhaupt an der Stelle schreiben?
Und ich will nicht den ganzen Speicher auf 0 setzen, sondern nur den teil vom Speicher, in dem mein Bitmap ist.
Wenn in diesem bereich irgendwo ein Wert definiert wurde, würde das zu Fehlern führen.
Also muss ich den Speicher auf 0 setzten. und das nur mit einer bestimten länge, die ich weiß.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Array auf 0 setzen
Ich zitiere mich ungern, aber bei komplettem Ignorieren meiner Beiträg ist dies leider unausweichlich.Dirty Oerti hat geschrieben:Was hältst du vonCode: Alles auswählen
int arr[1024*1024]; memset(arr,0, ((1024*1024) * sizeof(int)) );
Ich wiederhole mich^^ Wozu mehrdimensionale Arrays?cloidnerux hat geschrieben:Als Pagetable.
Eine Pagetable sind 1024 Einträge. Da ist nichts mehrdimensional.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Array auf 0 setzen
Sorry, war in eile und hab sie wenig beachtet.Ich zitiere mich ungern, aber bei komplettem Ignorieren meiner Beiträg ist dies leider unausweichlich.
Ähm, eine Pagetable hat 1,irgendwas Milionen einträge. Jede Pagetable steht für 4MB Ram. Und die Page Directory hat dann 1024 einträge, da sie auf jede Pagetable Verweist. Desshalb die Mehrdimensinalität.Eine Pagetable sind 1024 Einträge. Da ist nichts mehrdimensional.
Meine Frage: Gibt es einen unterschied zwischen Mehrdimensionalen Array und eindimensionalen? und wenn ja, welchen?
Tut mir leid wenn ihc dein Ratschalg misachte, aber mir geht es momentan ums Prinzip, das ich wissen will, ob mir der Mehrdimensinal Array welche Probleme mit sich bringt. Das ist kein Böser Wille meinerseits.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Array auf 0 setzen
Ich glaube du hast das Prinzip nicht verstanden...
Du hast ein Pagedirectory, in das du 1024 Werte eintragen kannst.
Jeder dieser Werte (bzw die oberen 20 Bit davon) wird als Zeiger auf eine PageTable gesehen.
Diese Pagetable hat 1024 Einträge von denen jeder als Zeiger auf ein 4KB Frame (=phys. Speicher) gesehen werden kann.
Heißt: Du nimmst dir 4K für dein PageDirectory. Dann trägst du da, wo du es brauchst eine PageTable ein (die auch wieder 4KB groß ist, dass musst du doch über die Speicherverwaltung reservieren können.) In jede dieser Tables trägst du die entsprechenden Einträge ein.
Da ist nichts mit mehrdimensionalen Arrays. (Du kannst es so machen, dann wird dein System aber nach 3-4 Prozessen den Geist aufgeben...)
Ein Array:
0000
Das sind 4 32Bit Werte
=> int arr[4]
oder auch:
int arr[2][2]
Dein Pagedir sieht so aus:
<Zeiger1><Zeiger2><Zeiger3>...<Zeiger1023>
unsigned int *pagedir[1024];
unsigned int* pagetab_nr2 = pagedir[2];
..|||
..|||
..V
<ZeigeraufFrame1><ZeigeraufFrame2>...<ZeigeraufFrame1023>
Du hast ein Pagedirectory, in das du 1024 Werte eintragen kannst.
Jeder dieser Werte (bzw die oberen 20 Bit davon) wird als Zeiger auf eine PageTable gesehen.
Diese Pagetable hat 1024 Einträge von denen jeder als Zeiger auf ein 4KB Frame (=phys. Speicher) gesehen werden kann.
Heißt: Du nimmst dir 4K für dein PageDirectory. Dann trägst du da, wo du es brauchst eine PageTable ein (die auch wieder 4KB groß ist, dass musst du doch über die Speicherverwaltung reservieren können.) In jede dieser Tables trägst du die entsprechenden Einträge ein.
Da ist nichts mit mehrdimensionalen Arrays. (Du kannst es so machen, dann wird dein System aber nach 3-4 Prozessen den Geist aufgeben...)
Ein Array:
0000
Das sind 4 32Bit Werte
=> int arr[4]
oder auch:
int arr[2][2]
Dein Pagedir sieht so aus:
<Zeiger1><Zeiger2><Zeiger3>...<Zeiger1023>
unsigned int *pagedir[1024];
unsigned int* pagetab_nr2 = pagedir[2];
..|||
..|||
..V
<ZeigeraufFrame1><ZeigeraufFrame2>...<ZeigeraufFrame1023>
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Array auf 0 setzen
Das Prinzip von Paging habe ich verstanden (Glaube ich).
weswegen ihc diesen Thread aufgemacht habe, ist das ich beim Versuch meine Pagetable auf 0 zu Initialisieren, einen Doublefault bekomme.
Heißt, es gab irgendeinen Fehler.
Egal ob der Array so ausa: int array[1024*1024] oder so: int array[1024][1024]. Bei beiden gabs ein Doublefault.
Ich würde ja die zweite Variante bevorzugen, da ich dort einfacher ein Bezug zur PageDirectory herstellen konnte.
Diese Form Belegt halt 4 MB Ram, weil 1024*4KB;
Jezt habe ich das nicht als Pointer Initialisiert, sondern als int Array, bei den ich halt die Obren 20 Bit mit der Addresse versehen habe.
Von Prozessen bin ich sehr weit entfernt, von einer stabilen aeris-version auch.
Mein System zerschießt sich dann bei dem versuch meine Page_table mit memset auf 0 zu setzten, um bei Fehler zu vermeiden(uninitialisierte Variablen).
Ich hab leider keinen Silberschatz zu hause und habe deshalb meine PageTable und PageDirectory nach diesem Tutorial gestaltet.
Evt. falsche informationen konnte ich desshalb nihct überprüfen. Außerdem habe ihc den code etwas frei Interprtiert und auf nutzung für mihc Optimiert und keinen wie dort erwähnten Pointer.
weswegen ihc diesen Thread aufgemacht habe, ist das ich beim Versuch meine Pagetable auf 0 zu Initialisieren, einen Doublefault bekomme.
Heißt, es gab irgendeinen Fehler.
Egal ob der Array so ausa: int array[1024*1024] oder so: int array[1024][1024]. Bei beiden gabs ein Doublefault.
Ich würde ja die zweite Variante bevorzugen, da ich dort einfacher ein Bezug zur PageDirectory herstellen konnte.
Diese Form Belegt halt 4 MB Ram, weil 1024*4KB;
Jezt habe ich das nicht als Pointer Initialisiert, sondern als int Array, bei den ich halt die Obren 20 Bit mit der Addresse versehen habe.
Von Prozessen bin ich sehr weit entfernt, von einer stabilen aeris-version auch.
Mein System zerschießt sich dann bei dem versuch meine Page_table mit memset auf 0 zu setzten, um bei Fehler zu vermeiden(uninitialisierte Variablen).
Ich hab leider keinen Silberschatz zu hause und habe deshalb meine PageTable und PageDirectory nach diesem Tutorial gestaltet.
Evt. falsche informationen konnte ich desshalb nihct überprüfen. Außerdem habe ihc den code etwas frei Interprtiert und auf nutzung für mihc Optimiert und keinen wie dort erwähnten Pointer.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Array auf 0 setzen
Tut mir Leid, ich glaube das nicht.cloidnerux hat geschrieben:Das Prinzip von Paging habe ich verstanden (Glaube ich).
Es ist nicht Sinn und Zweck, dass du eine komplette PageDir füllst.
Du brauchst im Endeffekt nur das:
Ein Array (=PageDir) mit 1024 auf 0 stehenden Zeigern.
Und jeder GEBRAUCHTE (!!! DIESES WORT IST WICHTIG !!!) Zeiger wird dann auf die Startadresse eines neuen Arrays gesetzt.
Dieses neue Array besteht wieder aus 1024 auf 0 stehenden Zeigern.
Für jeden Frame/jede Page, die du brauchst musst du den entsprechenden Eintrag dort mit einer Adresse füllen. DIESE Adresse ist dann der Start eines 4KB großem Frames.
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne!
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
Ich helfe gerne!

----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Array auf 0 setzen
WARUM WILL MEIN SYSTEM KEINEN ARRAY MIT 0 INITALISIEREN?
Ich bin ja froh, wenn du mir Helfen willst, aber BIITE könn wir das nicht in einem anderen Thread machen?
Du gibts mir jezt stückweise Informationen, ist zwar nett gemeint, hilft mir aber momentan nihct weiter.
Kannst du alles was mit Paging zusammenhägt in einen anderen Thread verschieben?
Um das da zusammenhängend zu machen?
Ich bin ja froh, wenn du mir Helfen willst, aber BIITE könn wir das nicht in einem anderen Thread machen?
Du gibts mir jezt stückweise Informationen, ist zwar nett gemeint, hilft mir aber momentan nihct weiter.
Kannst du alles was mit Paging zusammenhägt in einen anderen Thread verschieben?
Um das da zusammenhängend zu machen?
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Array auf 0 setzen
Wenn's mit for geht - wieso nimmst Du es dann nicht einfach?cloidnerux hat geschrieben:WARUM WILL MEIN SYSTEM KEINEN ARRAY MIT 0 INITALISIEREN?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.