提交 3587c3ec 创建 作者: Frans Kaashoek's avatar Frans Kaashoek

a pseudo-random generator

make crange compile
上级 8fd6fcd7
......@@ -32,6 +32,7 @@ OBJS = \
cga.o \
condvar.o \
console.o \
crange.o \
exec.o \
file.o \
fs.o \
......@@ -50,6 +51,7 @@ OBJS = \
proc.o \
prof.o \
gc.o \
rnd.o \
sampler.o \
sched.o \
spinlock.o \
......
差异被折叠。
......@@ -97,6 +97,15 @@ int dirlink(struct inode*, char*, u32);
void dir_init(struct inode *dp);
void dir_flush(struct inode *dp);
// gc.c
void initgc(void);
void gc_begin_epoch();
void gc_end_epoch();
void gc_delayed(void*, void (*dofree)(void*));
void gc_delayed2(int, u64, void (*dofree)(int, u64));
void gc_start(void);
void gc_worker(void);
// hwvm.c
void freevm(pml4e_t*);
pml4e_t* setupkvm(void);
......@@ -215,14 +224,9 @@ extern int profenable;
void profreset(void);
void profdump(void);
// rcu.c
void initgc(void);
void gc_begin_epoch();
void gc_end_epoch();
void gc_delayed(void*, void (*dofree)(void*));
void gc_delayed2(int, u64, void (*dofree)(int, u64));
void gc_start(void);
void gc_worker(void);
// rnd.c
u64 rnd();
// sampler.c
void sampstart(void);
......
#include "param.h"
#include "types.h"
#include "kernel.h"
#include "cpu.h"
struct seed {
u64 v;
} __mapalign__;
static struct seed seeds[NCPU] __mpalign__;
u64
rnd(void)
{
if (seeds[mycpu()->id].v == 0) {
seeds[mycpu()->id].v = ticks;
}
seeds[mycpu()->id].v =
seeds[mycpu()->id].v * 6364136223846793005 + 1442695040888963407;
return seeds[mycpu()->id].v;
}
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论