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