Пример #1
0
int MPTIntro_test1()
{
  set_pdir_base(0);
  if ((unsigned int)PDirPool[0] != rcr3()) {
    dprintf("test 1 failed.\n");
    return 1;
  }
  set_pdir_entry_identity(1, 1);
  set_pdir_entry(1, 2, 100);
  if (get_pdir_entry(1, 1) != (unsigned int)IDPTbl[1] +   7) {
    dprintf("test 1 failed.\n");
    return 1;
  }
  if (get_pdir_entry(1, 2) != 409607) {
    dprintf("test 1 failed.\n");
    return 1;
  }
  rmv_pdir_entry(1, 1);
  rmv_pdir_entry(1, 2);
  if (get_pdir_entry(1, 1) != 0 || get_pdir_entry(1, 2) != 0) {
    dprintf("test 1 failed.\n");
    return 1;
  }
  dprintf("test 1 passed.\n");
  return 0;
}
Пример #2
0
int
mon_start_user (int argc, char **argv, struct Trapframe *tf)
{
	if (CID != 0)
	{
		dprintf(
			"The process is already running. If you want to run the program again, please restart qemu.\n");
		return 0;
	}
	uint8_t * exe = _binary___obj_proc_dummy_dummy_start;

	CID = alloc_mem_quota (0, 1024 * 1024);

	elf_load (exe, CID);

	dprintf("Program 0x%08x is loaded.\n", exe);

	set_pdir_base (CID);

	entry_t entry = (entry_t) elf_entry (exe);

	entry();

	return 0;
}
Пример #3
0
void proc_start_user(void)
{
  unsigned int cur_pid = get_curid();
  static int first = TRUE;
  kstack_switch(cur_pid);
  set_pdir_base(cur_pid);

  trap_return((void *) &uctx_pool[cur_pid]);
}
void trap (tf_t *tf)
{
    unsigned int cur_pid;
    unsigned int in_kernel;

    cur_pid = get_curid ();
    set_pdir_base (0); //switch to the kernel's page table.

    trap_cb_t f;

    f = TRAP_HANDLER[get_pcpu_idx()][tf->trapno];

    if (f){
            f(tf);
    } else {
            KERN_WARN("No handler for user trap 0x%x, process %d, eip 0x%08x. \n",
                            tf->trapno, cur_pid, tf->eip);
    }

    kstack_switch(cur_pid);
    set_pdir_base(cur_pid);
	  trap_return((void *) tf);
}
Пример #5
0
/**
 * Initializes the page structures,
 * move to the page structure # 0 (kernel).
 * and turn on the paging.
 */
void paging_init(unsigned int mbi_addr)
{
	pdir_init_kern(mbi_addr);
	set_pdir_base(0);
	enable_paging();
}