[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.