more grind
This commit is contained in:
parent
16b3b63f06
commit
20f1dd9409
2
Makefile
2
Makefile
|
@ -41,7 +41,7 @@ TOOLPREFIX := $(shell if riscv64-unknown-elf-objdump -i 2>&1 | grep 'elf64-big'
|
||||||
elif riscv64-linux-gnu-objdump -i 2>&1 | grep 'elf64-big' >/dev/null 2>&1; \
|
elif riscv64-linux-gnu-objdump -i 2>&1 | grep 'elf64-big' >/dev/null 2>&1; \
|
||||||
then echo 'riscv64-linux-gnu-'; \
|
then echo 'riscv64-linux-gnu-'; \
|
||||||
else echo "***" 1>&2; \
|
else echo "***" 1>&2; \
|
||||||
echo "*** Error: Couldn't find an riscv64 version of GCC/binutils." 1>&2; \
|
echo "*** Error: Couldn't find a riscv64 version of GCC/binutils." 1>&2; \
|
||||||
echo "*** To turn off this error, run 'gmake TOOLPREFIX= ...'." 1>&2; \
|
echo "*** To turn off this error, run 'gmake TOOLPREFIX= ...'." 1>&2; \
|
||||||
echo "***" 1>&2; exit 1; fi)
|
echo "***" 1>&2; exit 1; fi)
|
||||||
endif
|
endif
|
||||||
|
|
52
user/grind.c
52
user/grind.c
|
@ -48,13 +48,17 @@ rand(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
go()
|
go(int which_child)
|
||||||
{
|
{
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
static char buf[999];
|
static char buf[999];
|
||||||
char *break0 = sbrk(0);
|
char *break0 = sbrk(0);
|
||||||
|
uint64 iters = 0;
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
|
iters++;
|
||||||
|
if((iters % 500) == 0)
|
||||||
|
write(1, which_child?"B":"A", 1);
|
||||||
int what = rand() % 20;
|
int what = rand() % 20;
|
||||||
if(what == 1){
|
if(what == 1){
|
||||||
close(open("a", O_CREATE|O_RDWR));
|
close(open("a", O_CREATE|O_RDWR));
|
||||||
|
@ -76,8 +80,12 @@ go()
|
||||||
read(fd, buf, sizeof(buf));
|
read(fd, buf, sizeof(buf));
|
||||||
} else if(what == 9){
|
} else if(what == 9){
|
||||||
mkdir("a");
|
mkdir("a");
|
||||||
|
close(open("a/a", O_CREATE|O_RDWR));
|
||||||
|
unlink("a/a");
|
||||||
} else if(what == 10){
|
} else if(what == 10){
|
||||||
mkdir("b");
|
mkdir("b");
|
||||||
|
close(open("b/b", O_CREATE|O_RDWR));
|
||||||
|
unlink("b/b");
|
||||||
} else if(what == 11){
|
} else if(what == 11){
|
||||||
unlink("b");
|
unlink("b");
|
||||||
link("a", "b");
|
link("a", "b");
|
||||||
|
@ -88,6 +96,9 @@ go()
|
||||||
int pid = fork();
|
int pid = fork();
|
||||||
if(pid == 0){
|
if(pid == 0){
|
||||||
exit(0);
|
exit(0);
|
||||||
|
} else if(pid < 0){
|
||||||
|
printf("grind: fork failed\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
wait(0);
|
wait(0);
|
||||||
} else if(what == 14){
|
} else if(what == 14){
|
||||||
|
@ -96,6 +107,9 @@ go()
|
||||||
fork();
|
fork();
|
||||||
fork();
|
fork();
|
||||||
exit(0);
|
exit(0);
|
||||||
|
} else if(pid < 0){
|
||||||
|
printf("grind: fork failed\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
wait(0);
|
wait(0);
|
||||||
} else if(what == 15){
|
} else if(what == 15){
|
||||||
|
@ -108,6 +122,9 @@ go()
|
||||||
if(pid == 0){
|
if(pid == 0){
|
||||||
close(open("a", O_CREATE|O_RDWR));
|
close(open("a", O_CREATE|O_RDWR));
|
||||||
exit(0);
|
exit(0);
|
||||||
|
} else if(pid < 0){
|
||||||
|
printf("grind: fork failed\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
kill(pid);
|
kill(pid);
|
||||||
wait(0);
|
wait(0);
|
||||||
|
@ -116,8 +133,34 @@ go()
|
||||||
if(pid == 0){
|
if(pid == 0){
|
||||||
kill(getpid());
|
kill(getpid());
|
||||||
exit(0);
|
exit(0);
|
||||||
|
} else if(pid < 0){
|
||||||
|
printf("grind: fork failed\n");
|
||||||
|
exit(1);
|
||||||
}
|
}
|
||||||
wait(0);
|
wait(0);
|
||||||
|
} else if(what == 19){
|
||||||
|
int fds[2];
|
||||||
|
if(pipe(fds) < 0){
|
||||||
|
printf("grind: pipe failed\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
int pid = fork();
|
||||||
|
if(pid == 0){
|
||||||
|
fork();
|
||||||
|
fork();
|
||||||
|
if(write(fds[1], "x", 1) != 1)
|
||||||
|
printf("grind: pipe write failed\n");
|
||||||
|
char c;
|
||||||
|
if(read(fds[0], &c, 1) != 1)
|
||||||
|
printf("grind: pipe read failed\n");
|
||||||
|
exit(0);
|
||||||
|
} else if(pid < 0){
|
||||||
|
printf("grind: fork failed\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
close(fds[0]);
|
||||||
|
close(fds[1]);
|
||||||
|
wait(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -125,6 +168,9 @@ go()
|
||||||
int
|
int
|
||||||
main()
|
main()
|
||||||
{
|
{
|
||||||
|
unlink("a");
|
||||||
|
unlink("b");
|
||||||
|
|
||||||
int pid1 = fork();
|
int pid1 = fork();
|
||||||
if(pid1 < 0){
|
if(pid1 < 0){
|
||||||
printf("grind: fork failed\n");
|
printf("grind: fork failed\n");
|
||||||
|
@ -132,7 +178,7 @@ main()
|
||||||
}
|
}
|
||||||
if(pid1 == 0){
|
if(pid1 == 0){
|
||||||
rand_next = 31;
|
rand_next = 31;
|
||||||
go();
|
go(0);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,7 +189,7 @@ main()
|
||||||
}
|
}
|
||||||
if(pid2 == 0){
|
if(pid2 == 0){
|
||||||
rand_next = 7177;
|
rand_next = 7177;
|
||||||
go();
|
go(1);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue