Ejemplo n.º 1
0
void main()
{
	init_frame_database();
	init_page_table();
	startup_paging_mode();

	VM_CONTEXT*  vm = (VM_CONTEXT*)VM_CONTEXT_VIRTUAL_ADDR;
	UINT32 OS_entry_point = vm->os_entry_point;
	__asm jmp OS_entry_point
}
Ejemplo n.º 2
0
/* sizes are in words, not bytes */
int pagemem_init(unsigned int pg_size, double history_weight)
{
	if (pg_size > MEMSIZE) {
		fprintf(stderr, "pagemem_init: page size is larger than available memory\n");
		return -1;
	}
	if (MEMSIZE % pg_size != 0) {
		fprintf(stderr, "pagemem_init: page size must evenly divide physical memory\n");
		return -1;
	}
	page_faults = 0;
	sys_pager.pg_size = pg_size;
	sys_pager.pg_count = VADDR_SIZE/pg_size;
	/* setup the virtual address space */
	freemem(0, VADDR_SIZE);
	page_mem = malloc(VADDR_SIZE*4);
	memset(page_mem, '0', VADDR_SIZE*4);
	if (page_mem == NULL) {
		fprintf(stderr, "pagemem_init: failed to allocate secondary storage\n");
		goto ERR_RET;
	}
	if (init_page_table() == -1)
		goto ERR_PMEM;
	if (init_frequency_table(history_weight) == -1)
		goto ERR_PG_TABLE;
	if (init_free_frames() == -1)
		goto ERR_FREQ_TABLE;
	return 0;
ERR_FREQ_TABLE:
	free(freq_table.pg_period);
ERR_PG_TABLE:
	free(pg_table);
ERR_PMEM:
	free(page_mem);
ERR_RET:
	return -1;
}