您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ vma_create函数代码示例

51自学网 2021-06-03 09:45:52
  C++
这篇教程C++ vma_create函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中vma_create函数的典型用法代码示例。如果您正苦于以下问题:C++ vma_create函数的具体用法?C++ vma_create怎么用?C++ vma_create使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了vma_create函数的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: check_pgfault

// check_pgfault - check correctness of pgfault handlerstatic voidcheck_pgfault(void) {    size_t nr_free_pages_store = nr_free_pages();    check_mm_struct = mm_create();    assert(check_mm_struct != NULL);    struct mm_struct *mm = check_mm_struct;    pde_t *pgdir = mm->pgdir = boot_pgdir;    assert(pgdir[0] == 0);    struct vma_struct *vma = vma_create(0, PTSIZE, VM_WRITE);    assert(vma != NULL);    insert_vma_struct(mm, vma);    uintptr_t addr = 0x100;    assert(find_vma(mm, addr) == vma);    int i, sum = 0;    for (i = 0; i < 100; i ++) {        *(char *)(addr + i) = i;        sum += i;    }    for (i = 0; i < 100; i ++) {        sum -= *(char *)(addr + i);    }    assert(sum == 0);    page_remove(pgdir, ROUNDDOWN(addr, PGSIZE));    free_page(pde2page(pgdir[0]));    pgdir[0] = 0;    mm->pgdir = NULL;    mm_destroy(mm);    check_mm_struct = NULL;    assert(nr_free_pages_store == nr_free_pages());    cprintf("check_pgfault() succeeded!/n");}
开发者ID:greent2008,项目名称:os_lab,代码行数:42,


示例2: dup_mmap

intdup_mmap(struct mm_struct *to, struct mm_struct *from) {    assert(to != NULL && from != NULL);    list_entry_t *list = &(from->mmap_list), *le = list;    while ((le = list_prev(le)) != list) {        struct vma_struct *vma, *nvma;        vma = le2vma(le, list_link);        nvma = vma_create(vma->vm_start, vma->vm_end, vma->vm_flags);        if (nvma == NULL) {            return -E_NO_MEM;        }        insert_vma_struct(to, nvma);        bool share = 0;        if (copy_range(to->pgdir, from->pgdir, vma->vm_start, vma->vm_end, share) != 0) {            return -E_NO_MEM;        }    }    return 0;}
开发者ID:czy941030,项目名称:ucore_lab,代码行数:21,


示例3: mm_brk

intmm_brk(struct mm_struct *mm, uintptr_t addr, size_t len) {    uintptr_t start = ROUNDDOWN(addr, PGSIZE), end = ROUNDUP(addr + len, PGSIZE);    if (!USER_ACCESS(start, end)) {        return -E_INVAL;    }    int ret;    if ((ret = mm_unmap(mm, start, end - start)) != 0) {        return ret;    }    uint32_t vm_flags = VM_READ | VM_WRITE;    struct vma_struct *vma = find_vma(mm, start - 1);    if (vma != NULL && vma->vm_end == start && vma->vm_flags == vm_flags) {        vma->vm_end = end;        return 0;    }    if ((vma = vma_create(start, end, vm_flags)) == NULL) {        return -E_NO_MEM;    }    insert_vma_struct(mm, vma);    return 0;}
开发者ID:jefjin,项目名称:ucore,代码行数:23,


示例4: check_vma_struct

static voidcheck_vma_struct(void) {    size_t nr_free_pages_store = nr_free_pages();    struct mm_struct *mm = mm_create();    assert(mm != NULL);    int step1 = 10, step2 = step1 * 10;    int i;    for (i = step1; i >= 1; i --) {        struct vma_struct *vma = vma_create(i * 5, i * 5 + 2, 0);        assert(vma != NULL);        insert_vma_struct(mm, vma);    }    for (i = step1 + 1; i <= step2; i ++) {        struct vma_struct *vma = vma_create(i * 5, i * 5 + 2, 0);        assert(vma != NULL);        insert_vma_struct(mm, vma);    }    list_entry_t *le = list_next(&(mm->mmap_list));    for (i = 1; i <= step2; i ++) {        assert(le != &(mm->mmap_list));        struct vma_struct *mmap = le2vma(le, list_link);        assert(mmap->vm_start == i * 5 && mmap->vm_end == i * 5 + 2);        le = list_next(le);    }    for (i = 5; i <= 5 * step2; i +=5) {        struct vma_struct *vma1 = find_vma(mm, i);        assert(vma1 != NULL);        struct vma_struct *vma2 = find_vma(mm, i+1);        assert(vma2 != NULL);        struct vma_struct *vma3 = find_vma(mm, i+2);        assert(vma3 == NULL);        struct vma_struct *vma4 = find_vma(mm, i+3);        assert(vma4 == NULL);        struct vma_struct *vma5 = find_vma(mm, i+4);        assert(vma5 == NULL);        assert(vma1->vm_start == i  && vma1->vm_end == i  + 2);        assert(vma2->vm_start == i  && vma2->vm_end == i  + 2);    }    for (i =4; i>=0; i--) {        struct vma_struct *vma_below_5= find_vma(mm,i);        if (vma_below_5 != NULL ) {           cprintf("vma_below_5: i %x, start %x, end %x/n",i, vma_below_5->vm_start, vma_below_5->vm_end);         }        assert(vma_below_5 == NULL);    }    mm_destroy(mm);    assert(nr_free_pages_store == nr_free_pages());    cprintf("check_vma_struct() succeeded!/n");}
开发者ID:greent2008,项目名称:os_lab,代码行数:61,


示例5: check_swap

static void check_swap(void){	//backup mem env	int ret, count = 0, total = 0, i;	list_entry_t *le = &free_list;	while ((le = list_next(le)) != &free_list)	{		struct Page *p = le2page(le, page_link);		assert(PageProperty(p));		count++, total += p->property;	}	assert(total == nr_free_pages());	cprintf("BEGIN check_swap: count %d, total %d/n", count, total);	//now we set the phy pages env	struct mm_struct *mm = mm_create();	assert(mm != NULL);	extern struct mm_struct *check_mm_struct;	assert(check_mm_struct == NULL);	check_mm_struct = mm;	pde_t *pgdir = mm->pgdir = boot_pgdir;	assert(pgdir[0] == 0);	struct vma_struct *vma = vma_create(BEING_CHECK_VALID_VADDR,			CHECK_VALID_VADDR, VM_WRITE | VM_READ);	assert(vma != NULL);	insert_vma_struct(mm, vma);	//setup the temp Page Table vaddr 0~4MB	cprintf("setup Page Table for vaddr 0X1000, so alloc a page/n");	pte_t *temp_ptep = NULL;	temp_ptep = get_pte(mm->pgdir, BEING_CHECK_VALID_VADDR, 1);	assert(temp_ptep!= NULL);	cprintf("setup Page Table vaddr 0~4MB OVER!/n");	for (i = 0; i < CHECK_VALID_PHY_PAGE_NUM; i++)	{		check_rp[i] = alloc_page();		assert(check_rp[i] != NULL);		assert(!PageProperty(check_rp[i]));	}	list_entry_t free_list_store = free_list;	list_init(&free_list);	assert(list_empty(&free_list));	//assert(alloc_page() == NULL);	unsigned int nr_free_store = nr_free;	nr_free = 0;	for (i = 0; i < CHECK_VALID_PHY_PAGE_NUM; i++)	{		free_pages(check_rp[i], 1);	}	assert(nr_free==CHECK_VALID_PHY_PAGE_NUM);	cprintf("set up init env for check_swap begin!/n");	//setup initial vir_page<->phy_page environment for page relpacement algorithm	pgfault_num = 0;	check_content_set();	assert(nr_free == 0);	for (i = 0; i < MAX_SEQ_NO; i++)		swap_out_seq_no[i] = swap_in_seq_no[i] = -1;	for (i = 0; i < CHECK_VALID_PHY_PAGE_NUM; i++)	{		check_ptep[i] = 0;		check_ptep[i] = get_pte(pgdir, (i + 1) * 0x1000, 0);		//cprintf("i %d, check_ptep addr %x, value %x/n", i, check_ptep[i], *check_ptep[i]);		assert(check_ptep[i] != NULL);		assert(pte2page(*check_ptep[i]) == check_rp[i]);		assert((*check_ptep[i] & PTE_P));	}	cprintf("set up init env for check_swap over!/n");	// now access the virt pages to test  page relpacement algorithm	ret = check_content_access();	assert(ret == 0);	//restore kernel mem env	for (i = 0; i < CHECK_VALID_PHY_PAGE_NUM; i++)	{		free_pages(check_rp[i], 1);	}	//free_page(pte2page(*temp_ptep));	free_page(pde2page(pgdir[0]));	pgdir[0] = 0;	mm->pgdir = NULL;	mm_destroy(mm);	check_mm_struct = NULL;	nr_free = nr_free_store;	free_list = free_list_store;	le = &free_list;//.........这里部分代码省略.........
开发者ID:codeyangjun,项目名称:ucore,代码行数:101,


示例6: check_swap

// check_swap - check the correctness of swap & page replacement algorithmstatic voidcheck_swap(void) {    size_t nr_used_pages_store = nr_used_pages();    size_t slab_allocated_store = slab_allocated();    size_t offset;    for (offset = 2; offset < max_swap_offset; offset ++) {        mem_map[offset] = 1;    }    struct mm_struct *mm = mm_create();    assert(mm != NULL);    extern struct mm_struct *check_mm_struct;    assert(check_mm_struct == NULL);    check_mm_struct = mm;    pgd_t *pgdir = mm->pgdir = init_pgdir_get();    assert(pgdir[PGX(TEST_PAGE)] == 0);    struct vma_struct *vma = vma_create(TEST_PAGE, TEST_PAGE + PTSIZE, VM_WRITE | VM_READ);    assert(vma != NULL);    insert_vma_struct(mm, vma);    struct Page *rp0 = alloc_page(), *rp1 = alloc_page();    assert(rp0 != NULL && rp1 != NULL);    pte_perm_t perm;	ptep_unmap (&perm);	ptep_set_u_write(&perm);    int ret = page_insert(pgdir, rp1, TEST_PAGE, perm);    assert(ret == 0 && page_ref(rp1) == 1);    page_ref_inc(rp1);    ret = page_insert(pgdir, rp0, TEST_PAGE, perm);    assert(ret == 0 && page_ref(rp1) == 1 && page_ref(rp0) == 1);    // check try_alloc_swap_entry    swap_entry_t entry = try_alloc_swap_entry();    assert(swap_offset(entry) == 1);    mem_map[1] = 1;    assert(try_alloc_swap_entry() == 0);    // set rp1, Swap, Active, add to hash_list, active_list    swap_page_add(rp1, entry);    swap_active_list_add(rp1);    assert(PageSwap(rp1));    mem_map[1] = 0;    entry = try_alloc_swap_entry();    assert(swap_offset(entry) == 1);    assert(!PageSwap(rp1));    // check swap_remove_entry    assert(swap_hash_find(entry) == NULL);    mem_map[1] = 2;    swap_remove_entry(entry);    assert(mem_map[1] == 1);    swap_page_add(rp1, entry);    swap_inactive_list_add(rp1);    swap_remove_entry(entry);    assert(PageSwap(rp1));    assert(rp1->index == entry && mem_map[1] == 0);    // check page_launder, move page from inactive_list to active_list    assert(page_ref(rp1) == 1);    assert(nr_active_pages == 0 && nr_inactive_pages == 1);    assert(list_next(&(inactive_list.swap_list)) == &(rp1->swap_link));    page_launder();    assert(nr_active_pages == 1 && nr_inactive_pages == 0);    assert(PageSwap(rp1) && PageActive(rp1));    entry = try_alloc_swap_entry();    assert(swap_offset(entry) == 1);    assert(!PageSwap(rp1) && nr_active_pages == 0);    assert(list_empty(&(active_list.swap_list)));    // set rp1 inactive again    assert(page_ref(rp1) == 1);    swap_page_add(rp1, 0);    assert(PageSwap(rp1) && swap_offset(rp1->index) == 1);    swap_inactive_list_add(rp1);    mem_map[1] = 1;    assert(nr_inactive_pages == 1);    page_ref_dec(rp1);    size_t count = nr_used_pages();    swap_remove_entry(entry);    assert(nr_inactive_pages == 0 && nr_used_pages() == count - 1);//.........这里部分代码省略.........
开发者ID:chyyuu,项目名称:ucore-arch-arm,代码行数:101,


示例7: check_swap

// check_swap - check the correctness of swap & page replacement algorithmstatic voidcheck_swap(void) {    size_t nr_free_pages_store = nr_free_pages();    size_t slab_allocated_store = slab_allocated();    size_t offset;    for (offset = 2; offset < max_swap_offset; offset ++) {        mem_map[offset] = 1;    }    struct mm_struct *mm = mm_create();    assert(mm != NULL);    extern struct mm_struct *check_mm_struct;    assert(check_mm_struct == NULL);    check_mm_struct = mm;    pde_t *pgdir = mm->pgdir = boot_pgdir;    assert(pgdir[0] == 0);    struct vma_struct *vma = vma_create(0, PTSIZE, VM_WRITE | VM_READ);    assert(vma != NULL);    insert_vma_struct(mm, vma);    struct Page *rp0 = alloc_page(), *rp1 = alloc_page();    assert(rp0 != NULL && rp1 != NULL);    uint32_t perm = PTE_U | PTE_W;    int ret = page_insert(pgdir, rp1, 0, perm);    assert(ret == 0 && page_ref(rp1) == 1);    page_ref_inc(rp1);    ret = page_insert(pgdir, rp0, 0, perm);    assert(ret == 0 && page_ref(rp1) == 1 && page_ref(rp0) == 1);    // check try_alloc_swap_entry    swap_entry_t entry = try_alloc_swap_entry();    assert(swap_offset(entry) == 1);    mem_map[1] = 1;    assert(try_alloc_swap_entry() == 0);    // set rp1, Swap, Active, add to hash_list, active_list    swap_page_add(rp1, entry);    swap_active_list_add(rp1);    assert(PageSwap(rp1));    mem_map[1] = 0;    entry = try_alloc_swap_entry();    assert(swap_offset(entry) == 1);    assert(!PageSwap(rp1));    // check swap_remove_entry    assert(swap_hash_find(entry) == NULL);    mem_map[1] = 2;    swap_remove_entry(entry);    assert(mem_map[1] == 1);    swap_page_add(rp1, entry);    swap_inactive_list_add(rp1);    swap_remove_entry(entry);    assert(PageSwap(rp1));    assert(rp1->index == entry && mem_map[1] == 0);    // check page_launder, move page from inactive_list to active_list    assert(page_ref(rp1) == 1);    assert(nr_active_pages == 0 && nr_inactive_pages == 1);    assert(list_next(&(inactive_list.swap_list)) == &(rp1->swap_link));    page_launder();    assert(nr_active_pages == 1 && nr_inactive_pages == 0);    assert(PageSwap(rp1) && PageActive(rp1));    entry = try_alloc_swap_entry();    assert(swap_offset(entry) == 1);    assert(!PageSwap(rp1) && nr_active_pages == 0);    assert(list_empty(&(active_list.swap_list)));    // set rp1 inactive again    assert(page_ref(rp1) == 1);    swap_page_add(rp1, 0);    assert(PageSwap(rp1) && swap_offset(rp1->index) == 1);    swap_inactive_list_add(rp1);    mem_map[1] = 1;    assert(nr_inactive_pages == 1);    page_ref_dec(rp1);    size_t count = nr_free_pages();    swap_remove_entry(entry);    assert(nr_inactive_pages == 0 && nr_free_pages() == count + 1);    // check swap_out_mm//.........这里部分代码省略.........
开发者ID:jefjin,项目名称:ucore,代码行数:101,


示例8: mm_unmap

intmm_unmap(struct mm_struct *mm, uintptr_t addr, size_t len) {    uintptr_t start = ROUNDDOWN(addr, PGSIZE), end = ROUNDUP(addr + len, PGSIZE);    if (!USER_ACCESS(start, end)) {        return -E_INVAL;    }    assert(mm != NULL);    struct vma_struct *vma;    if ((vma = find_vma(mm, start)) == NULL || end <= vma->vm_start) {        return 0;    }    if (vma->vm_start < start && end < vma->vm_end) {        struct vma_struct *nvma;        if ((nvma = vma_create(vma->vm_start, start, vma->vm_flags)) == NULL) {            return -E_NO_MEM;        }        vma_resize(vma, end, vma->vm_end);        insert_vma_struct(mm, nvma);        unmap_range(mm->pgdir, start, end);        return 0;    }    list_entry_t free_list, *le;    list_init(&free_list);    while (vma->vm_start < end) {        le = list_next(&(vma->list_link));        remove_vma_struct(mm, vma);        list_add(&free_list, &(vma->list_link));        if (le == &(mm->mmap_list)) {            break;        }        vma = le2vma(le, list_link);    }    le = list_next(&free_list);    while (le != &free_list) {        vma = le2vma(le, list_link);        le = list_next(le);        uintptr_t un_start, un_end;        if (vma->vm_start < start) {            un_start = start, un_end = vma->vm_end;            vma_resize(vma, vma->vm_start, un_start);            insert_vma_struct(mm, vma);        }        else {            un_start = vma->vm_start, un_end = vma->vm_end;            if (end < un_end) {                un_end = end;                vma_resize(vma, un_end, vma->vm_end);                insert_vma_struct(mm, vma);            }            else {                vma_destroy(vma);            }        }        unmap_range(mm->pgdir, un_start, un_end);    }    return 0;}
开发者ID:jefjin,项目名称:ucore,代码行数:62,



注:本文中的vma_create函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ vma_pages函数代码示例
C++ vm_vec_scale_add2函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。