Also zum Thema malloc() kann ich dir sagen, dass es einen Ziemlich guten Algorithmus in der glibc gibt.
Er hat eigentlich keinen Namen, wird allerdings "Doug Lea's malloc()" genannt: http://g.oswego.edu/dl/html/malloc.html
Er funktioniert mithilfe von "Bins", die Zeiger auf Listen von Speicherblöcken halten, die die passende Größe haben. Hier kannst du dir wirklich die Tatsache ausnutzen, dass die glibc Open Source ist: Lade dir eine Kopie herunter, und sieh mal im source in die datei malloc/malloc.c. Dort ist nicht nur der Quellcode, sondern eine recht detaillierte beschreibung des Algorithmus.
Empfehlen würde ich allerdings nicht die neueste Version, die ist nämlich mit 64 bit Code, Multithreading Sicherheit und zusätzlichen validierungschecks vollgestopft. Am besten bei google.com/codesearch nach "mALLOc" suchen, und dann eine Ältere Version ( <= 2.1 ) anschaun.
Speicherzugriffe & Zeigerspielchen...
- fat-lobyte
- Beiträge: 1398
- Registriert: Sa Jul 05, 2008 12:23 pm
- Wohnort: ::1
- Kontaktdaten:
Re: Speicherzugriffe & Zeigerspielchen...
Haters gonna hate, potatoes gonna potate.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Speicherzugriffe & Zeigerspielchen...
Tag!
(Von 0 bis 640 KB). Diesen Teil sperre ich dann komplett gegen Zugriffe (ich lass ihn einfach nicht vom MemoryManager verwalten).
Wie ich das mit der Bitmap meine:
Bitmap: (angezeigt werden einzelne Bits)
0001010111011110111
1101011111100000001
1111111111111111011
1100000000000000000
0000000001110000000
usw.
0 bedeutet frei, 1 bedeutet belegt.
Ganz simpel und relativ schnell (bei kleinen Bitmaps)
Und der soll so schnell sein?
Das ist gut zu wissen...
Danke!
Die GDT und die IDT sowie ein paar grundlegende Funktionen möchte ich im unteren Bereich des Speichers legen.Xin hat geschrieben:Wo willst Du es denn haben?
(Von 0 bis 640 KB). Diesen Teil sperre ich dann komplett gegen Zugriffe (ich lass ihn einfach nicht vom MemoryManager verwalten).
Eine FAT? Könnte mich erinnern, dass das anders funktioniert.Xin hat geschrieben:Das wäre quasi eine FAT, die das Dateisystem.
Wie ich das mit der Bitmap meine:
Bitmap: (angezeigt werden einzelne Bits)
0001010111011110111
1101011111100000001
1111111111111111011
1100000000000000000
0000000001110000000
usw.
0 bedeutet frei, 1 bedeutet belegt.
Ganz simpel und relativ schnell (bei kleinen Bitmaps)
Ja, den kenn ich. Bzw ich hab schon was davon gehört.fat-lobyte hat geschrieben:"Doug Lea's malloc()"
Und der soll so schnell sein?
Das ist gut zu wissen...
Danke!
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.
- fat-lobyte
- Beiträge: 1398
- Registriert: Sa Jul 05, 2008 12:23 pm
- Wohnort: ::1
- Kontaktdaten:
Re: Speicherzugriffe & Zeigerspielchen...
Nein, der ist eigentlich alles andere als schnellDirty Oerti hat geschrieben:Ja, den kenn ich. Bzw ich hab schon was davon gehört.fat-lobyte hat geschrieben:"Doug Lea's malloc()"
Und der soll so schnell sein?
Das ist gut zu wissen...
Danke!
Aber er ist ziemlich Speichersparend und verhindert Fragmentierung, ist also recht robust. Andererseits, so langsam ist er auch nicht (Spezialfälle werden gut ausgenutzt).
Haters gonna hate, potatoes gonna potate.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Speicherzugriffe & Zeigerspielchen...
Schnell für das, was er kann
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.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Speicherzugriffe & Zeigerspielchen...
So..ich bin dabei es zu versuchen.
Aber irgendwie will das nicht so recht.
Kann sein, dass ich irgendwie aufm Schlauch stehe oder so, aber es will einfach nicht funktionieren.
Die Struktur muss im Speicher folgendermaßen aussehen:
http://wiki.osdev.org/images/5/53/Gdt_entry.png
Hier mein Code:
Fehlerbeschreibung ist kurz: Er startet neu (normales Verhalten bei einem Fehler in diesem Bereich).
Wenn ihr zusätzliche Infos braucht...nur raus damit.
MfG
Daniel
Aber irgendwie will das nicht so recht.
Kann sein, dass ich irgendwie aufm Schlauch stehe oder so, aber es will einfach nicht funktionieren.
Die Struktur muss im Speicher folgendermaßen aussehen:
http://wiki.osdev.org/images/5/53/Gdt_entry.png
Hier mein Code:
Code: Alles auswählen
void _gdt_set_gate(int num, unsigned long base, unsigned long limit, unsigned char access, unsigned char gran)
{
char *C_entry =&Zgdt + num*8 -1;
short size_uchar = sizeof(unsigned char);//1
short size_ushort = sizeof(unsigned short);//2
//Limit low
memcpy(C_entry,(limit & 0xFFFF),size_ushort);
C_entry ++;
//base low
memcpy(C_entry,(base & 0xFFFF),size_ushort);
C_entry ++;
//base middle
memcpy(C_entry,((base >> 16) & 0xFF),size_uchar);
C_entry ++;
//access
memcpy(C_entry,(access),size_uchar);
C_entry ++;
//granularity
memcpy(C_entry,(((limit >> 16) & 0x0F)|(gran & 0xF0)),size_uchar);
C_entry ++;
//base high
memcpy(C_entry,((base >> 24) & 0xFF),size_uchar);
C_entry ++;
}
Wenn ihr zusätzliche Infos braucht...nur raus damit.
MfG
Daniel
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.
- Dirty Oerti
- Beiträge: 2229
- Registriert: Di Jul 08, 2008 5:05 pm
- Wohnort: Thurndorf / Würzburg
Re: Speicherzugriffe & Zeigerspielchen...
Um nicht an der Stelle stecken zu bleiben, wird momentan folgendes in Kernel (dort, wo ich all das brauch) getan:
Es wird eine GDT erstellt.
Diese wird per "memcpy" an die Stelle 0 geschrieben.
Nachteil: Es wird doppelter Speicher für die GDT benötigt (Einmal die GDT, die zusammengebastelt wird und dann noch ihre Kopie, die auch wirklich dann verwendet wird).
Außerdem muss eine Änderung der GDT immer in die Kopie übertragen werden.
Heißt: Mehr zu tun => längere Zeit
Es wird eine GDT erstellt.
Diese wird per "memcpy" an die Stelle 0 geschrieben.
Nachteil: Es wird doppelter Speicher für die GDT benötigt (Einmal die GDT, die zusammengebastelt wird und dann noch ihre Kopie, die auch wirklich dann verwendet wird).
Außerdem muss eine Änderung der GDT immer in die Kopie übertragen werden.
Heißt: Mehr zu tun => längere Zeit
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.