void BufInit(void) { int i = 0; Buf* pBuf; //init all list for( i=0; i<HASH_TBL_SIZE; i++ ) { ppHashHead[i] = NULL; ppHashTail[i] = NULL; } for( i=0; i<3; i++ ) { ppObjListHead[i] = NULL; ppObjListTail[i] = NULL; } pLruListHead = NULL; pLruListTail = NULL; //create buffers for( i=0; i<MAX_BUF_NUM; i++ ) { pBuf = (Buf*)malloc(sizeof(Buf)); pBuf->pMem = malloc(BLOCK_SIZE); pushFree(pBuf); } //init device DevCreateDisk(); DevOpenDisk(); //init semaphore semaInit(); semaLock(SEMA_IDX_MAIN); semaLock(SEMA_IDX_DAEMON); //init daemon const int stack_size = 1024; char* stack = (char*)malloc(stack_size); memset(stack, 0, stack_size); char* stack_top = stack + stack_size; clone(BufDaemon, stack_top, CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_VM, 0); }
int main (int argc, char *argv[]) { pthread_t thid; struct PFConfig *config; int i; int index = atoi (argv[1]); printf ("index = %d, sizeof(struct PFConfig) = %zd\n", index, sizeof(struct PFConfig)); if (index == 1) { semaInit(); config = (struct PFConfig *)PFConfigGet(); memset ((void *)config, 0, sizeof(*config)); PFConfigPut(config); } else { sleep(2); } config = (struct PFConfig *)PFConfigGet(); PFConfigPut(config); printf ("config = %p\n", config); pthread_create (&thid, NULL, thread_main, (void *)(&index)); pthread_detach(thid); /* 공통 사용하는 영역 */ for (i=0; i<LOOP_COUNT; i++) { config = (struct PFConfig *)PFConfigGet(); config->dummy[0] ++; PFConfigPut(config); } while (config->dummy[index] != LOOP_COUNT) usleep(1000); dump_vmconfig (index); return 0; }