[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Lost] svn-diff von snake707
Um auch noch was inhaltliches zu liefern:
> void pmm_free(paddr_t start, size_t count)
> {
> - // TODO Prüfen, ob die Seiten vorher auch besetzt waren, sonst Panic
> + // TODO Pr�fen, ob die Seiten vorher auch besetzt waren, sonst Panic
> + size_t i= NUM_PAGES(start - *pmm_bitmap),j,k; //anzahl der Pages, Von
pmm_bitmap und start
Welchen Sinn genau soll der Wert von i hinterher haben? Ich gehe mal Schritt
für Schritt durch, was du berechnest:
* Ausgangspunkt ist start, die physische Startadresse des freizugebenden
Speicherbereichs.
* pmm_bitmap ist ein Array, das eine Bitmap darstellt, in der für freie Pages
eine 1 gesetzt ist. *pmm_bitmap = pmm_bitmap[0] ist ein Bitfeld, das den
Zustand der ersten 32 Pages enthält. Als Integer ist es nicht aussagekräftig.
* start - pmm_bitmap ist die Startadresse des freizugebenden Bereichs minus
irgendeiner 32-Bit-Zahl, die etwas mit dem Zustand des Speichers von 0 bis
128 KB zu tun hat. Diese Zahl wird jetzt durch 4096 geteilt und aufgerundet.
Für einen Zufallszahlengenerator wäre das möglicherweise ein interessanter
Ansatz, aber zum Speicher freigeben kann man damit wohl wenig anfangen. ;-)
Außerdem zählt dein count in 32-Page-Blöcken, nicht in einzelnen Pages.
Ein Panic geht übrigens mit panic("Fehlermeldung"); wobei die Funktion in der
kernel.h deklariert wird.