zoukankan      html  css  js  c++  java
  • mit 6.828学习笔记不知道几---lab4 parta

    Exercise 1:

    // Where to start the next region.  Initially, this is the
        // beginning of the MMIO region.  Because this is static, its
        // value will be preserved between calls to mmio_map_region
        // (just like nextfree in boot_alloc).
        static uintptr_t base = MMIOBASE;
    
        // Reserve size bytes of virtual memory starting at base and
        // map physical pages [pa,pa+size) to virtual addresses
        // [base,base+size).  Since this is device memory and not
        // regular DRAM, you'll have to tell the CPU that it isn't
        // safe to cache access to this memory.  Luckily, the page
        // tables provide bits for this purpose; simply create the
        // mapping with PTE_PCD|PTE_PWT (cache-disable and
        // write-through) in addition to PTE_W.  (If you're interested
        // in more details on this, see section 10.5 of IA32 volume
        // 3A.)
        //
        // Be sure to round size up to a multiple of PGSIZE and to
        // handle if this reservation would overflow MMIOLIM (it's
        // okay to simply panic if this happens).
        //
        // Hint: The staff solution uses boot_map_region.
        //
        // Your code here:
    
        void* ret = (void*)base;
    
        size = ROUNDUP(size, PGSIZE);
        if (base + size > MMIOLIM || base + size < base)
            panic("mmio_map_region: reservation overflow
    ");
    
        boot_map_region(kern_pgdir, base, size, pa,  PTE_PCD | PTE_PWT |PTE_W );
        base += size;
    
        return ret;
        //panic("mmio_map_region not implemented");

    exercise2:

    size_t i;
        //Mark physical page 0 as in use.
        pages[0].pp_ref = 1;
        pages[0].pp_link = NULL;
        
        size_t lowio= IOPHYSMEM / PGSIZE;
        size_t  highio = EXTPHYSMEM / PGSIZE;
        
        for (i = 1; i < npages; i++)
        {
            if ( (i == MPENTRY_PADDR / PGSIZE)||(i >= lowio && i < highio) || (i >= EXTPHYSMEM / PGSIZE && i < PADDR(boot_alloc(0)) / PGSIZE))
            {
                pages[i].pp_ref = 1;
                pages[i].pp_link = NULL;
            }
                    
            else {
                pages[i].pp_ref = 0;
                pages[i].pp_link = page_free_list;
                page_free_list = &pages[i];
            }
    
        }
        
  • 相关阅读:
    php类自动加载
    tp5自定义分页参数
    cURL error 60: SSL certificate problem...
    ajax动态刷新的元素,导致绑定事件失效
    thinkphp5省市区三级联动例子
    restful状态码常用
    mysql的like子句
    mysql官方的测试数据库employees超30万的数据,安装方法介绍
    Aes加解密,php
    php5.6,Ajax报错,Warning: Cannot modify header information
  • 原文地址:https://www.cnblogs.com/luo-he/p/13991550.html
Copyright © 2011-2022 走看看