예제 #1
0
파일: tlb.c 프로젝트: Cybuster/cpu
int add_tlb_entry (uint32 va, uint32 pa, uint8 perms)
{
	uint32 h;
	tlb_entry *t;

	h = hash (va);
	
	if (size_of_hash_list (h) < 8) {
		t = malloc (sizeof (tlb_entry));
		if (t == NULL) {
			return (-1);
		}
		t->va = va & 0xFFFFF000;
		t->pa = pa;
		t->perms = perms;
		add_to_hash_list (&tlb[h], t);
		return 0;
	}
	else {
		/*Right now, just replacing the first one*/
		/*TODO:decide which entry to replace*/
		tlb_entry *entry_to_modify = tlb[h];
		entry_to_modify->va = va;
		entry_to_modify->pa = pa;
		entry_to_modify->perms = perms;
		return 0;
	}
}
예제 #2
0
main()
{
	FILE *fp; 
	int i,rc;
	DB_PTR entry;
	char name_to_search [16];

	fp = fopen ("file.in", "r");
	if (fp == NULL) {
		printf ("failed to open file.in\n");
		exit (-1);
	}

	for (i = 0; i  < MAX_HASH_BUCKETS; i++) {
		hashtable[i] = NULL;
	}

	while (1) {
		entry = malloc (sizeof (struct database));
		if (entry == NULL) {
			printf ("malloc failed\n");
			exit (-2);
		}
		rc = read_entry (fp, entry);
		if (rc == -1) {
			free (entry);
			break;
		}
		int index = hash (entry->name); 
		add_to_hash_list (&hashtable[index], entry); 
	}

	
	printf("%s\n", hashtable[0]->name); 

	while (1) {
		printf ("entry name to search: ");
		scanf ("%s", name_to_search);
		printf ("\n");
		if (strcmp (name_to_search, "exit") == 0) {
			printf ("bye\n");
			exit (0);
		}
		entry = search_hash_list (hashtable, name_to_search);
		if (entry) {
			printf ("weight = %d height = %d\n", entry->weight, entry->height);
		}
		else {
			printf ("Name not found\n"); 
		}
	}
}