Documentation
This commit is contained in:
		
							parent
							
								
									59d36a7c8e
								
							
						
					
					
						commit
						d6dd26c67e
					
				
					 4 changed files with 49 additions and 17 deletions
				
			
		|  | @ -64,9 +64,33 @@ void ramdiskinit(void); | |||
| void ramdiskintr(void); | ||||
| void ramdiskrw(struct buf *); | ||||
| 
 | ||||
| // kalloc.c
 | ||||
| /**
 | ||||
|  * Kernel memory allocator | ||||
|  * | ||||
|  * Allocate one 4096-byte page of physical memory. | ||||
|  * Returns a pointer that the kernel can use. | ||||
|  * Returns 0 if the memory cannot be allocated. | ||||
|  * See: kalloc.c | ||||
|  */ | ||||
| void *kalloc(void); | ||||
| 
 | ||||
| /**
 | ||||
|  * Kernel memory allocator | ||||
|  * | ||||
|  * Free the page of physical memory pointed at by pa, | ||||
|  * which normally should have been returned by a | ||||
|  * call to kalloc().  (The exception is when | ||||
|  * initializing the allocator; see kinit above.) | ||||
|  * See: kalloc.c | ||||
|  */ | ||||
| void kfree(void *); | ||||
| 
 | ||||
| /**
 | ||||
|  * Initialize kernel memory allocator | ||||
|  * | ||||
|  * Called by main() on the way to the kernel's main loop. | ||||
|  * See: kalloc.c | ||||
|  */ | ||||
| void kinit(void); | ||||
| 
 | ||||
| // log.c
 | ||||
|  |  | |||
|  | @ -3,21 +3,23 @@ | |||
| // and pipe buffers. Allocates whole 4096-byte pages.
 | ||||
| 
 | ||||
| #include "types.h" | ||||
| #include "param.h" | ||||
| #include "memlayout.h" | ||||
| #include "spinlock.h" | ||||
| #include "riscv.h" | ||||
| #include "defs.h" | ||||
| 
 | ||||
| /** Free list of physical pages. */ | ||||
| void freerange(void *pa_start, void *pa_end); | ||||
| 
 | ||||
| extern char end[]; // first address after kernel.
 | ||||
|                    // defined by kernel.ld.
 | ||||
| /** first address after kernel. defined by kernel.ld. */ | ||||
| extern char end[]; | ||||
| 
 | ||||
| /** A run is a node in the free list. */ | ||||
| struct run { | ||||
|   struct run *next; | ||||
| }; | ||||
| 
 | ||||
| /** Kernel memory allocator. */ | ||||
| struct { | ||||
|   struct spinlock lock; | ||||
|   struct run     *freelist; | ||||
|  | @ -39,10 +41,6 @@ freerange(void *pa_start, void *pa_end) | |||
|     kfree(p); | ||||
| } | ||||
| 
 | ||||
| // Free the page of physical memory pointed at by pa,
 | ||||
| // which normally should have been returned by a
 | ||||
| // call to kalloc().  (The exception is when
 | ||||
| // initializing the allocator; see kinit above.)
 | ||||
| void | ||||
| kfree(void *pa) | ||||
| { | ||||
|  | @ -62,9 +60,6 @@ kfree(void *pa) | |||
|   release(&kmem.lock); | ||||
| } | ||||
| 
 | ||||
| // Allocate one 4096-byte page of physical memory.
 | ||||
| // Returns a pointer that the kernel can use.
 | ||||
| // Returns 0 if the memory cannot be allocated.
 | ||||
| void * | ||||
| kalloc(void) | ||||
| { | ||||
|  |  | |||
|  | @ -15,12 +15,25 @@ SECTIONS | |||
|    * that reference the functions in your object file. | ||||
|    */ | ||||
|   .text : { | ||||
|     /* Match any section that starts with .text. */ | ||||
|     *(.text .text.*) | ||||
| 
 | ||||
|     /* Align the next section to a 4KB (page) boundary. */ | ||||
|     . = ALIGN(0x1000); | ||||
| 
 | ||||
|     /* Put the trampoline code here. */ | ||||
|     _trampoline = .; | ||||
| 
 | ||||
|     /* Match any section that starts with .trampsec. */ | ||||
|     *(trampsec) | ||||
| 
 | ||||
|     /* Align the next section to a 4KB (page) boundary. */ | ||||
|     . = ALIGN(0x1000); | ||||
| 
 | ||||
|     /* Assert that the trampoline code is exactly 4KB (page) in size. */ | ||||
|     ASSERT(. - _trampoline == 0x1000, "error: trampoline larger than one page"); | ||||
| 
 | ||||
|     /* Define symbol etext to be the current location. */ | ||||
|     PROVIDE(etext = .); | ||||
|   } | ||||
| 
 | ||||
|  | @ -29,6 +42,7 @@ SECTIONS | |||
|    * It is not unusual to find this data interleaved with the text section. | ||||
|    */ | ||||
|   .rodata : { | ||||
|     /* Align on quadword boundary. */ | ||||
|     . = ALIGN(16); | ||||
|     *(.srodata .srodata.*) /* do not need to distinguish this from .rodata */ | ||||
|     . = ALIGN(16); | ||||
|  | @ -59,6 +73,6 @@ SECTIONS | |||
|     *(.bss .bss.*) | ||||
|   } | ||||
| 
 | ||||
|   /* PROVIDE, see vm.c */ | ||||
|   /* Define symbol end as current location, note that this is not aligned, see vm.c */ | ||||
|   PROVIDE(end = .); | ||||
| } | ||||
|  |  | |||
|  | @ -650,9 +650,8 @@ either_copyin(void *dst, int user_src, u64 src, u64 len) | |||
| void | ||||
| procdump(void) | ||||
| { | ||||
|   static char *states[] = { | ||||
|     [UNUSED] "unused", [USED] "used", [SLEEPING] "sleep ", [RUNNABLE] "runble", [RUNNING] "run   ", [ZOMBIE] "zombie" | ||||
|   }; | ||||
|   static char *states[] = { [UNUSED] = "unused",   [USED] = "used",      [SLEEPING] = "sleep ", | ||||
|                             [RUNNABLE] = "runble", [RUNNING] = "run   ", [ZOMBIE] = "zombie" }; | ||||
|   struct proc *p; | ||||
|   char        *state; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Imbus
						Imbus