/** 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; }