[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Lost] svn-diff von snake707



Hallo,

also 1. habe ich änderungen unternommen (in meiner wc):

svn diff im Anhang

leider wurde ich ausm irc gebannt, wegen openvpn über packman.links2linux -.- 
schaade, warn wohl zuviele online

mfg
Index: src/kernel2/src/mm/phys.c
===================================================================
--- src/kernel2/src/mm/phys.c	(Revision 725)
+++ src/kernel2/src/mm/phys.c	(Arbeitskopie)
@@ -47,7 +47,7 @@
 extern void kernel_phys_start();
 extern void kernel_phys_end();
 
-/** Bitmap aller physischen Seiten. Gesetztes Bit steht für freie Seite */
+/** Bitmap aller physischen Seiten. Gesetztes Bit steht f�r freie Seite */
 #define PMM_BITS_PER_ELEMENT (8 * sizeof(uint_fast32_t))
 #define PMM_NUM_DMA_ELEMENTS ((16 * 1024 * 1024) / sizeof(uint_fast32_t))
 
@@ -57,7 +57,7 @@
 static lock_t pmm_lock = 0;
 
 /** 
- * Größe von pmm_bitmap in Elementen (= 1/8*sizeof(uint_fast32_t) der Anzahl
+ * Gr��e von pmm_bitmap in Elementen (= 1/8*sizeof(uint_fast32_t) der Anzahl
  * der physischen Seiten)
  *
  * @see pmm_bitmap
@@ -65,14 +65,14 @@
 static size_t pmm_bitmap_length;
 
 /**
- * Anzahl der nutzbaren Seiten. Entspricht pmm_bitmap_size * 32 abzüglich
+ * Anzahl der nutzbaren Seiten. Entspricht pmm_bitmap_size * 32 abz�glich
  * der von der BIOS-Memory-Map als reserviert gekennzeichneten Bereiche.
  */
 static size_t pmm_bitmap_usable_pages;
 
 
 /**
- * Gibt die Startadresse der Bitmap zurück
+ * Gibt die Startadresse der Bitmap zur�ck
  */
 void* pmm_get_bitmap_start()
 {
@@ -81,8 +81,8 @@
 
 /**
  * Setzt die Startadresse der Bitmap. Diese Funktion ist einzig und allein dazu
- * bestimmt, den Übergang von physischen zu virtuellen Adressen beim
- * Einschalten von Paging bewerkstelligen zu können.
+ * bestimmt, den �bergang von physischen zu virtuellen Adressen beim
+ * Einschalten von Paging bewerkstelligen zu k�nnen.
  */
 void pmm_set_bitmap_start(void* bitmap_start)
 {
@@ -90,7 +90,7 @@
 }
 
 /**
- * Gibt die Göße der Bitmap in Bytes zurück
+ * Gibt die G��e der Bitmap in Bytes zur�ck
  */
 size_t pmm_get_bitmap_size()
 {
@@ -193,16 +193,16 @@
 
 /**
  * Sucht num freie Pages und gibt einen Zeiger auf den Anfang der ersten Page 
- * zurück.
+ * zur�ck.
  *
  * @param lower_index Index der niedrigsten erlaubten Page
- * @param upper_index Index der höchsten erlaubten Page
+ * @param upper_index Index der h�chsten erlaubten Page
  * @param num Anzahl der Pages.
  *
  * @return Zeiger auf den Anfang der ersten Page.
  * @return Im Erfolgsfall wird ein Zeiger auf den Anfang der ersten 
- *      Page zurückgegeben (Bei Erfolg ist der Rückgabewert immer
- *      durch PAGE_SIZE teilbar). Im Fehlerfall wird 1 zurückgegeben.
+ *      Page zur�ckgegeben (Bei Erfolg ist der R�ckgabewert immer
+ *      durch PAGE_SIZE teilbar). Im Fehlerfall wird 1 zur�ckgegeben.
  */
 
 /* TODO: unbedingt testen */
@@ -263,10 +263,10 @@
 /**
  * Reserviert num Pages.
  *
- * @param lower_limit Niedrigste erlaubte Adresse (Muß auf 32-Bit-Systemen
+ * @param lower_limit Niedrigste erlaubte Adresse (Mu� auf 32-Bit-Systemen
  * auf einer 128K-Grenze liegen. Wenn nicht, wird gerundet)
  *
- * @param upper_limit Höchste erlaubte Adresse (Muß auf 32-Bit-Systemen
+ * @param upper_limit H�chste erlaubte Adresse (Mu� auf 32-Bit-Systemen
  * auf einer 128K-Grenze liegen. Wenn nicht, wird gerundet)
  *
  * @param num Anzahl der zu reservierenden Seiten
@@ -313,7 +313,7 @@
 }
 
 /**
- * Reserviert num Pages, die beliebig im physischen Speicher liegen können.
+ * Reserviert num Pages, die beliebig im physischen Speicher liegen k�nnen.
  *
  * @see pmm_alloc_limits
  */
@@ -330,27 +330,36 @@
 
 
 /**
- * Gibt physisch zusammenhängende Speicherseiten frei
+ * Gibt physisch zusammenh�ngende Speicherseiten frei
  *
  * @param start Zeiger auf das erste Byte der ersten freizugebenden Seite
  * @param count Anzahl der freizugebenden Seiten
  */
 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
+    for(j=0;j<count;j++){
+      for(k=0;k<PMM_BITS_PER_ELEMENT;k++) {
+	if(pmm_bitmap[i+j] & (1 << k)) { //Wenn die Warte wahr ist, dann ist ja eine page nicht besetzt
+	  //Panic
+	}
+      }
+    }
     phys_mark_page_range_as_free(start, count);
 }
 
 
+
 struct reserved_block {
     paddr_t start;
     paddr_t end;
 };
 
 /**
- * @return Beschreibung des reservierten Blocks. Wenn i größer als die
+ * @return Beschreibung des reservierten Blocks. Wenn i gr��er als die
  * Anzahl der reservierten Blocks ist, wird ein Block mit start > end
- * zurückgegeben.
+ * zur�ckgegeben.
  */
 static struct reserved_block get_reserved_block
     (struct multiboot_info* multiboot_info, size_t i)
@@ -358,7 +367,7 @@
     struct reserved_block result;
     
     
-    // Überprüfung der BIOS-Memory-Map
+    // �berpr�fung der BIOS-Memory-Map
     struct multiboot_mmap* mmap;
     uintptr_t mmap_addr = multiboot_info->mi_mmap_addr;
     uintptr_t mmap_end = mmap_addr + multiboot_info->mi_mmap_length;
@@ -367,7 +376,7 @@
         mmap < (struct multiboot_mmap*) (mmap_end);
         mmap++)
     {
-        // Typ 1 steht für freien Speicher
+        // Typ 1 steht f�r freien Speicher
         if (mmap->mm_type != 1) {
             if (i-- == 0) {
                 result.start    = (paddr_t)((uintptr_t) mmap->mm_base_addr);
@@ -431,7 +440,7 @@
 }
 
 /**
- * Suche einen Platz für die Bitmap
+ * Suche einen Platz f�r die Bitmap
  */
 static paddr_t find_bitmap_mem
     (struct multiboot_info* multiboot_info, size_t size)
@@ -459,11 +468,11 @@
 }
 
 /**
- * Bestimmt die benötigte Größe der Bitmap in Bytes
+ * Bestimmt die ben�tigte Gr��e der Bitmap in Bytes
  */
 static size_t required_bitmap_size(struct multiboot_info* multiboot_info)
 {
-    // Suche die höchste Adresse
+    // Suche die h�chste Adresse
     paddr_t upper_end = 0;
     if (multiboot_info->mi_flags & MULTIBOOT_INFO_HAS_MMAP) 
     {
@@ -488,7 +497,7 @@
             multiboot_info->mi_mem_upper));
     }
 
-    // Umrechnen auf benötigte Bytes für die Bitmap
+    // Umrechnen auf ben�tigte Bytes f�r die Bitmap
     return (size_t) upper_end / PAGE_SIZE / 8;
 }
 
@@ -496,13 +505,13 @@
  * Initialisiert den physischen Speicher.
  *
  * @param mmap_addr Adresse der Memorymap.
- * @param mmap_length Länge der Memorymap in Bytes.
- * @param upper_mem Größe des upper_mem in Kilobyte, wie in der Multboot-Info
- *      übergeben.
+ * @param mmap_length L�nge der Memorymap in Bytes.
+ * @param upper_mem Gr��e des upper_mem in Kilobyte, wie in der Multboot-Info
+ *      �bergeben.
  */
 void pmm_init(struct multiboot_info* multiboot_info)
 {
-    // Finde einen Platz für die Bitmap
+    // Finde einen Platz f�r die Bitmap
     size_t bitmap_size = required_bitmap_size(multiboot_info);
     pmm_bitmap = find_bitmap_mem(multiboot_info, bitmap_size);
     pmm_bitmap_length = 8 * bitmap_size / PMM_BITS_PER_ELEMENT;
@@ -510,16 +519,16 @@
     // Am Anfang ist alles frei
     memset(pmm_bitmap, ~0x0, bitmap_size);
     
-    // Zunächst die Bitmap selbst als besetzt markieren...
+    // Zun�chst die Bitmap selbst als besetzt markieren...
     phys_mark_page_range_as_used(pmm_bitmap, NUM_PAGES(bitmap_size));
 
-    // ...anschließend die BIOS-Memory-Map abarbeiten
+    // ...anschlie�end die BIOS-Memory-Map abarbeiten
     size_t i = 0;
     do
     {
         struct reserved_block block = get_reserved_block(multiboot_info, i++);
             
-        // Wenn der Start nach dem Ende liegt, ist der Block ungültig
+        // Wenn der Start nach dem Ende liegt, ist der Block ung�ltig
         // und wir sind fertig
         if (block.start > block.end) {
             break;
@@ -531,4 +540,5 @@
             (block.start, NUM_PAGES(block.end - block.start));
     }
     while(TRUE);
+    pmm_bitmap_usable_pages=bitmap_size-NUM_PAGES(block.end-block.start);
 }
Index: src/kernel2/src/syscalls/mem.c
===================================================================
--- src/kernel2/src/syscalls/mem.c	(Revision 725)
+++ src/kernel2/src/syscalls/mem.c	(Arbeitskopie)
@@ -40,7 +40,7 @@
 #include "mm.h"
 
 /**
- * Einen Speicherblock allozieren.
+ * Einen Speicherblock allokieren.
  *
  * @param bytes Groesse des Speicherblocks
  * @param flags Flags
@@ -62,7 +62,17 @@
     return address;
 }
 
+//TODO: Test ob das hier funktioniert.
+
+/**
+ * Einen Speicherblock freen.
+ * @param bytes Groesse das Speicherblocks
+ * @param start Addresse des ersten Speicherblocks
+ */
+
 void syscall_mem_free(vaddr_t start, size_t bytes)
 {
+  size_t page_count = NUM_PAGES(PAGE_ALIGN_ROUND_UP(bytes));
+  pmm_free(start, page_count);
 }