uptime() sys call for benchmarking
increase PHYSTOP
This commit is contained in:
		
							parent
							
								
									83d2db91f7
								
							
						
					
					
						commit
						789b508d53
					
				
					 9 changed files with 47 additions and 9 deletions
				
			
		
							
								
								
									
										2
									
								
								defs.h
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								defs.h
									
										
									
									
									
								
							|  | @ -142,7 +142,7 @@ void            timerinit(void); | |||
| 
 | ||||
| // trap.c
 | ||||
| void            idtinit(void); | ||||
| extern int      ticks; | ||||
| extern uint     ticks; | ||||
| void            tvinit(void); | ||||
| extern struct spinlock tickslock; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										4
									
								
								kalloc.c
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								kalloc.c
									
										
									
									
									
								
							|  | @ -23,14 +23,10 @@ struct { | |||
| int nfreemem; | ||||
| 
 | ||||
| // Initialize free list of physical pages.
 | ||||
| // This code cheats by just considering one megabyte of
 | ||||
| // pages after end.  Real systems would determine the
 | ||||
| // amount of memory available in the system and use it all.
 | ||||
| void | ||||
| kinit(char *p, uint len) | ||||
| { | ||||
|   initlock(&kmem.lock, "kmem"); | ||||
|   cprintf("end 0x%x free = %d(0x%x)\n", p, len); | ||||
|   nfreemem = 0; | ||||
|   kfree(p, len); | ||||
| } | ||||
|  |  | |||
|  | @ -100,6 +100,7 @@ extern int sys_sleep(void); | |||
| extern int sys_unlink(void); | ||||
| extern int sys_wait(void); | ||||
| extern int sys_write(void); | ||||
| extern int sys_uptime(void); | ||||
| 
 | ||||
| static int (*syscalls[])(void) = { | ||||
| [SYS_chdir]   sys_chdir, | ||||
|  | @ -122,6 +123,7 @@ static int (*syscalls[])(void) = { | |||
| [SYS_unlink]  sys_unlink, | ||||
| [SYS_wait]    sys_wait, | ||||
| [SYS_write]   sys_write, | ||||
| [SYS_uptime]  sys_uptime, | ||||
| }; | ||||
| 
 | ||||
| void | ||||
|  |  | |||
|  | @ -19,3 +19,4 @@ | |||
| #define SYS_getpid 18 | ||||
| #define SYS_sbrk   19 | ||||
| #define SYS_sleep  20 | ||||
| #define SYS_uptime 21 | ||||
|  |  | |||
							
								
								
									
										16
									
								
								sysproc.c
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								sysproc.c
									
										
									
									
									
								
							|  | @ -57,7 +57,8 @@ sys_sbrk(void) | |||
| int | ||||
| sys_sleep(void) | ||||
| { | ||||
|   int n, ticks0; | ||||
|   int n; | ||||
|   uint ticks0; | ||||
|    | ||||
|   if(argint(0, &n) < 0) | ||||
|     return -1; | ||||
|  | @ -73,3 +74,16 @@ sys_sleep(void) | |||
|   release(&tickslock); | ||||
|   return 0; | ||||
| } | ||||
| 
 | ||||
| // return how many clock tick interrupts have occurred
 | ||||
| // since boot.
 | ||||
| int | ||||
| sys_uptime(void) | ||||
| { | ||||
|   uint xticks; | ||||
|    | ||||
|   acquire(&tickslock); | ||||
|   xticks = ticks; | ||||
|   release(&tickslock); | ||||
|   return xticks; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										2
									
								
								trap.c
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								trap.c
									
										
									
									
									
								
							|  | @ -11,7 +11,7 @@ | |||
| struct gatedesc idt[256]; | ||||
| extern uint vectors[];  // in vectors.S: array of 256 entry pointers
 | ||||
| struct spinlock tickslock; | ||||
| int ticks; | ||||
| uint ticks; | ||||
| 
 | ||||
| void | ||||
| tvinit(void) | ||||
|  |  | |||
							
								
								
									
										24
									
								
								usertests.c
									
										
									
									
									
								
							
							
						
						
									
										24
									
								
								usertests.c
									
										
									
									
									
								
							|  | @ -322,8 +322,9 @@ void | |||
| mem(void) | ||||
| { | ||||
|   void *m1, *m2; | ||||
|   int pid; | ||||
|   int pid, ppid; | ||||
| 
 | ||||
|   ppid = getpid(); | ||||
|   if((pid = fork()) == 0){ | ||||
|     m1 = 0; | ||||
|     while((m2 = malloc(10001)) != 0) { | ||||
|  | @ -338,6 +339,7 @@ mem(void) | |||
|     m1 = malloc(1024*20); | ||||
|     if(m1 == 0) { | ||||
|       printf(1, "couldn't allocate mem?!!\n"); | ||||
|       kill(ppid); | ||||
|       exit(); | ||||
|     } | ||||
|     free(m1); | ||||
|  | @ -1233,6 +1235,7 @@ void | |||
| sbrktest(void) | ||||
| { | ||||
|   int pid; | ||||
|   char *oldbrk = sbrk(0); | ||||
| 
 | ||||
|   printf(stdout, "sbrk test\n"); | ||||
| 
 | ||||
|  | @ -1313,6 +1316,25 @@ sbrktest(void) | |||
|     exit(); | ||||
|   } | ||||
| 
 | ||||
|   // can we read the kernel's memory?
 | ||||
|   for(a = (char*)(640*1024); a < (char *)2000000; a += 50000){ | ||||
|     int ppid = getpid(); | ||||
|     int pid = fork(); | ||||
|     if(pid < 0){ | ||||
|       printf(stdout, "fork failed\n"); | ||||
|       exit(); | ||||
|     } | ||||
|     if(pid == 0){ | ||||
|       printf(stdout, "oops could read %x = %x\n", a, *a); | ||||
|       kill(ppid); | ||||
|       exit(); | ||||
|     } | ||||
|     wait(); | ||||
|   } | ||||
| 
 | ||||
|   if(sbrk(0) > oldbrk) | ||||
|     sbrk(-(sbrk(0) - oldbrk)); | ||||
| 
 | ||||
|   printf(stdout, "sbrk test OK\n"); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										1
									
								
								usys.S
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								usys.S
									
										
									
									
									
								
							|  | @ -28,3 +28,4 @@ SYSCALL(dup) | |||
| SYSCALL(getpid) | ||||
| SYSCALL(sbrk) | ||||
| SYSCALL(sleep) | ||||
| SYSCALL(uptime) | ||||
|  |  | |||
							
								
								
									
										4
									
								
								vm.c
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								vm.c
									
										
									
									
									
								
							|  | @ -29,7 +29,7 @@ | |||
| // (both in physical memory and in the kernel's virtual address
 | ||||
| // space).
 | ||||
| 
 | ||||
| #define PHYSTOP  0x300000 | ||||
| #define PHYSTOP  0x1000000 | ||||
| #define USERTOP  0xA0000 | ||||
| 
 | ||||
| static uint kerntext;  // Linker starts kernel at 1MB
 | ||||
|  | @ -336,6 +336,8 @@ copyuvm(pde_t *pgdir, uint sz) | |||
| 
 | ||||
| // Gather information about physical memory layout.
 | ||||
| // Called once during boot.
 | ||||
| // Really should find out how much physical memory
 | ||||
| // there is rather than assuming PHYSTOP.
 | ||||
| void | ||||
| pminit(void) | ||||
| { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Robert Morris
						Robert Morris