uptime() sys call for benchmarking
increase PHYSTOP
This commit is contained in:
parent
83d2db91f7
commit
789b508d53
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…
Reference in a new issue