Exemplo n.º 1
0
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);
}
Exemplo n.º 2
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;
}