001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019 #include <libc.h>
020 #include <stdarg.h>
021 #include <debug.h>
022
023
024
025
026
027
028
029
030 int main()
031 {
032 int i;
033 char *zoup;
034 int fd;
035
036 fd = open("/dev/zero", O_RDWR);
037 zoup = mmap((void*)4096, 8*1024*1024,
038 PROT_READ | PROT_WRITE,
039 MAP_SHARED,
040 fd, 0x123456789012345ULL);
041 close(fd);
042
043 bochs_printf("mapped @%x\n", (unsigned)zoup);
044
045 switch (fork())
046 {
047 case 0:
048 bochs_printf("CHILD 1: %d %d\n", zoup[42], zoup[43]);
049 for (i = 0 ; i < 1000000 ; i++)
050 zoup[43] = i / 19;
051 bochs_printf("CHILD 2: %d %d\n", zoup[42], zoup[43]);
052 for (i = 0 ; i < 1000000 ; i++)
053 zoup[43] = i / 19;
054 bochs_printf("CHILD 3: %d %d\n", zoup[42], zoup[43]);
055 break;
056
057 default:
058 bochs_printf("FATHER 1: %d %d\n", zoup[42], zoup[43]);
059 for (i = 0 ; i < 1000000 ; i++)
060 zoup[42] = i / 17;
061 bochs_printf("FATHER 2: %d %d\n", zoup[42], zoup[43]);
062 break;
063 }
064
065 return 0;
066 }