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
|
// trap.c
|
||||||
void idtinit(void);
|
void idtinit(void);
|
||||||
extern int ticks;
|
extern uint ticks;
|
||||||
void tvinit(void);
|
void tvinit(void);
|
||||||
extern struct spinlock tickslock;
|
extern struct spinlock tickslock;
|
||||||
|
|
||||||
|
|
4
kalloc.c
4
kalloc.c
|
@ -23,14 +23,10 @@ struct {
|
||||||
int nfreemem;
|
int nfreemem;
|
||||||
|
|
||||||
// Initialize free list of physical pages.
|
// 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
|
void
|
||||||
kinit(char *p, uint len)
|
kinit(char *p, uint len)
|
||||||
{
|
{
|
||||||
initlock(&kmem.lock, "kmem");
|
initlock(&kmem.lock, "kmem");
|
||||||
cprintf("end 0x%x free = %d(0x%x)\n", p, len);
|
|
||||||
nfreemem = 0;
|
nfreemem = 0;
|
||||||
kfree(p, len);
|
kfree(p, len);
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,6 +100,7 @@ extern int sys_sleep(void);
|
||||||
extern int sys_unlink(void);
|
extern int sys_unlink(void);
|
||||||
extern int sys_wait(void);
|
extern int sys_wait(void);
|
||||||
extern int sys_write(void);
|
extern int sys_write(void);
|
||||||
|
extern int sys_uptime(void);
|
||||||
|
|
||||||
static int (*syscalls[])(void) = {
|
static int (*syscalls[])(void) = {
|
||||||
[SYS_chdir] sys_chdir,
|
[SYS_chdir] sys_chdir,
|
||||||
|
@ -122,6 +123,7 @@ static int (*syscalls[])(void) = {
|
||||||
[SYS_unlink] sys_unlink,
|
[SYS_unlink] sys_unlink,
|
||||||
[SYS_wait] sys_wait,
|
[SYS_wait] sys_wait,
|
||||||
[SYS_write] sys_write,
|
[SYS_write] sys_write,
|
||||||
|
[SYS_uptime] sys_uptime,
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -19,3 +19,4 @@
|
||||||
#define SYS_getpid 18
|
#define SYS_getpid 18
|
||||||
#define SYS_sbrk 19
|
#define SYS_sbrk 19
|
||||||
#define SYS_sleep 20
|
#define SYS_sleep 20
|
||||||
|
#define SYS_uptime 21
|
||||||
|
|
16
sysproc.c
16
sysproc.c
|
@ -57,7 +57,8 @@ sys_sbrk(void)
|
||||||
int
|
int
|
||||||
sys_sleep(void)
|
sys_sleep(void)
|
||||||
{
|
{
|
||||||
int n, ticks0;
|
int n;
|
||||||
|
uint ticks0;
|
||||||
|
|
||||||
if(argint(0, &n) < 0)
|
if(argint(0, &n) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -73,3 +74,16 @@ sys_sleep(void)
|
||||||
release(&tickslock);
|
release(&tickslock);
|
||||||
return 0;
|
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];
|
struct gatedesc idt[256];
|
||||||
extern uint vectors[]; // in vectors.S: array of 256 entry pointers
|
extern uint vectors[]; // in vectors.S: array of 256 entry pointers
|
||||||
struct spinlock tickslock;
|
struct spinlock tickslock;
|
||||||
int ticks;
|
uint ticks;
|
||||||
|
|
||||||
void
|
void
|
||||||
tvinit(void)
|
tvinit(void)
|
||||||
|
|
24
usertests.c
24
usertests.c
|
@ -322,8 +322,9 @@ void
|
||||||
mem(void)
|
mem(void)
|
||||||
{
|
{
|
||||||
void *m1, *m2;
|
void *m1, *m2;
|
||||||
int pid;
|
int pid, ppid;
|
||||||
|
|
||||||
|
ppid = getpid();
|
||||||
if((pid = fork()) == 0){
|
if((pid = fork()) == 0){
|
||||||
m1 = 0;
|
m1 = 0;
|
||||||
while((m2 = malloc(10001)) != 0) {
|
while((m2 = malloc(10001)) != 0) {
|
||||||
|
@ -338,6 +339,7 @@ mem(void)
|
||||||
m1 = malloc(1024*20);
|
m1 = malloc(1024*20);
|
||||||
if(m1 == 0) {
|
if(m1 == 0) {
|
||||||
printf(1, "couldn't allocate mem?!!\n");
|
printf(1, "couldn't allocate mem?!!\n");
|
||||||
|
kill(ppid);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
free(m1);
|
free(m1);
|
||||||
|
@ -1233,6 +1235,7 @@ void
|
||||||
sbrktest(void)
|
sbrktest(void)
|
||||||
{
|
{
|
||||||
int pid;
|
int pid;
|
||||||
|
char *oldbrk = sbrk(0);
|
||||||
|
|
||||||
printf(stdout, "sbrk test\n");
|
printf(stdout, "sbrk test\n");
|
||||||
|
|
||||||
|
@ -1313,6 +1316,25 @@ sbrktest(void)
|
||||||
exit();
|
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");
|
printf(stdout, "sbrk test OK\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
1
usys.S
1
usys.S
|
@ -28,3 +28,4 @@ SYSCALL(dup)
|
||||||
SYSCALL(getpid)
|
SYSCALL(getpid)
|
||||||
SYSCALL(sbrk)
|
SYSCALL(sbrk)
|
||||||
SYSCALL(sleep)
|
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
|
// (both in physical memory and in the kernel's virtual address
|
||||||
// space).
|
// space).
|
||||||
|
|
||||||
#define PHYSTOP 0x300000
|
#define PHYSTOP 0x1000000
|
||||||
#define USERTOP 0xA0000
|
#define USERTOP 0xA0000
|
||||||
|
|
||||||
static uint kerntext; // Linker starts kernel at 1MB
|
static uint kerntext; // Linker starts kernel at 1MB
|
||||||
|
@ -336,6 +336,8 @@ copyuvm(pde_t *pgdir, uint sz)
|
||||||
|
|
||||||
// Gather information about physical memory layout.
|
// Gather information about physical memory layout.
|
||||||
// Called once during boot.
|
// Called once during boot.
|
||||||
|
// Really should find out how much physical memory
|
||||||
|
// there is rather than assuming PHYSTOP.
|
||||||
void
|
void
|
||||||
pminit(void)
|
pminit(void)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue