#include #include #include #include #include #include #define BUF_SIZE (32*1024) int data[1024*1024]; char sym2[1024*1024] = { 10, 20, 30, 0 }; char sym3[1024*1024] = { 10, 20, 30, 0 }; char *sym1 = "aaaaaa"; char buffer[BUF_SIZE]; char *ptr1, *ptr2; char fnamebuf[1024]; int swapout(char *fname, void *buf, size_t sz, int flag) { int cc; cc = syscall(801, fname, buf, sz, flag); return cc; } int linux_mlock(const void *addr, size_t len) { int cc; cc = syscall(802, addr, len); return cc; } int main(int argc, char **argv) { int cc; int flag = 0; if (argc == 2) { flag = atoi(argv[1]); } switch (flag) { case 1: printf("skipping real paging for debugging and just calling swapout in Linux\n"); break; case 2: printf("skipping calling swapout in Linux\n"); break; } printf("&data = %p\n", data); printf("&sym1 = %p\n", &sym1); printf("&sym2 = %p\n", sym2); printf("&sym3 = %p\n", sym3); printf("&cc = %p\n", &cc); ptr1 = malloc(1024); ptr2 = malloc(1024*1024); printf("ptr1 = %p\n", ptr1); printf("ptr2 = %p\n", ptr2); sprintf((char*) data, "hello\n"); /* * testing mlock in mckernel side */ cc = mlock(data, 16*1024); printf("McKernel mlock returns: %d\n", cc); /* * testing mlock in linux side */ cc = linux_mlock(data, 16*1024); printf("linux_mlock returns: %d\n", cc); strcpy(sym2, "returns: %d\n"); strcpy(sym3, "data = %d\n"); /* buf area will be used in swapout systemcall for debugging */ strcpy(fnamebuf, "/tmp/pages"); cc = swapout(fnamebuf, buffer, BUF_SIZE, flag); printf("swapout returns: %d\n", cc); printf("data = %s", data); printf(sym2, cc); printf(sym3, data); return 0; }