コード例 #1
0
ファイル: task.cpp プロジェクト: tanerguven/MakarnaX
/** task için sanal bellek oluşturur */
static int task_setup_vm(Task *t, PageDirInfo *parent_pgdir) {
	ASSERT_int_disable();

	int err;
	uint32_t va;
	Page *p;

	memset(&t->pgdir, 0, sizeof(t->pgdir));

	/* page directory yapisi icin bellek al */
	if ((err = tmp_page_alloc_map(&p, &va, PTE_P | PTE_W)) < 0)
		return err;
	t->pgdir.pgdir_pa = p->addr();
	t->pgdir.pgdir = (PageDirectory*)va2kaddr(va);
	memset(t->pgdir.pgdir, 0, 0x1000);
	t->pgdir.count_kernel++;

	/* page table listesi icin bellek al */
	if ((err = tmp_page_alloc_map(&p, &va, PTE_P | PTE_W)) < 0)
		return err;
	t->pgdir.pgtables = (PageTable**)va2kaddr(va);
	memset(t->pgdir.pgtables, 0, 0x1000);
	t->pgdir.count_kernel++;

	/* Kernel adres uzayini dogrudan task adres uzayina bagla */
	err = t->pgdir.link_pgtables(parent_pgdir, MMAP_KERNEL_BASE, MMAP_KERNEL_STACK_BASE);
	ASSERT(err == 0);

	return 0;
}