diff --git a/kern/include/lib.h b/kern/include/lib.h index 7478ce6..b010a7b 100644 --- a/kern/include/lib.h +++ b/kern/include/lib.h @@ -194,5 +194,7 @@ void kprintf_bootstrap(void); #define DIVROUNDUP(a,b) (((a)+(b)-1)/(b)) #define ROUNDUP(a,b) (DIVROUNDUP(a,b)*b) +void random_yielder(uint32_t); +void random_spinner(uint32_t); #endif /* _LIB_H_ */ diff --git a/kern/include/overwrite.h b/kern/include/overwrite.h index 4a3b220..cf58fce 100644 --- a/kern/include/overwrite.h +++ b/kern/include/overwrite.h @@ -40,6 +40,6 @@ * testing. */ -#define KERNEL_PROMPT "OS/161 kernel [? for menu]: " +#define KERNEL_PROMPT "OS/161 kernel [? for menu]: " #endif /* _OVERWRITE_H_ */ diff --git a/kern/lib/misc.c b/kern/lib/misc.c index 2388e1d..c22d88c 100644 --- a/kern/lib/misc.c +++ b/kern/lib/misc.c @@ -30,6 +30,7 @@ #include #include #include +#include /* * Like strdup, but calls kmalloc. @@ -60,3 +61,27 @@ strerror(int errcode) panic("Invalid error code %d\n", errcode); return NULL; } + +/* + * Helper functions used by testing and problem driver code + * to establish better mixtures of threads. + */ + +void +random_yielder(uint32_t max_yield_count) +{ + uint32_t i; + for (i = 0; i < random() % max_yield_count; i++) { + thread_yield(); + } +} + +void +random_spinner(uint32_t max_spin_count) +{ + uint32_t i; + volatile int spin; + for (i = 0; i < random() % max_spin_count; i++) { + spin += i; + } +}