zoukankan      html  css  js  c++  java
  • ucore学习笔记_LAB2

    练习1:实现 first-fit 连续物理内存分配算法

    关键数据结构:

    struct list_entry {
        struct list_entry *prev, *next; //父节点,子节点
    };
    
    typedef struct list_entry list_entry_t; //重命名
    typedef struct {
        list_entry_t free_list; //链表头部        
        unsigned int nr_free;   //空闲块的个数    
    } free_area_t; //链表头部结构
    
    struct Page {
        int ref;       //映射此物理页的虚拟页的个数       
        uint32_t flags; //物理页属性    
        unsigned int property;  //连续空页有多少(只在地址最低页有值)
        list_entry_t page_link; // 双向链接各个Page结构的page_link
    };

    练习2:实现寻找虚拟地址对应的页表项

    逻辑地址结构及重要的宏:

    // A linear address 'la' has a three-part structure as follows:
    //
    // +--------10------+-------10-------+---------12----------+
    // | Page Directory |   Page Table   | Offset within Page  |
    // |      Index     |     Index      |                     |
    // +----------------+----------------+---------------------+
    //  \--- PDX(la) --/ \--- PTX(la) --/ \---- PGOFF(la) ----/
    //  \----------- PPN(la) -----------/
    //
    
    // page directory index
    #define PDX(la) ((((uintptr_t)(la)) >> PDXSHIFT) & 0x3FF)
    // page table index
    #define PTX(la) ((((uintptr_t)(la)) >> PTXSHIFT) & 0x3FF)
    // page number field of address
    #define PPN(la) (((uintptr_t)(la)) >> PTXSHIFT)
    // offset in page
    #define PGOFF(la) (((uintptr_t)(la)) & 0xFFF)

    练习3:释放某虚地址所在的页并取消对应二级页表项的映射

    static inline void
    page_remove_pte(pde_t *pgdir, uintptr_t la, pte_t *ptep) {
    if (*ptep & PTE_P) {  //页表项存在
            struct Page *page = pte2page(*ptep); //找到页表项
            if (page_ref_dec(page) == 0) {  //只被当前进程引用
                free_page(page); //释放页
            }
            *ptep = 0; //该页目录项清零
            tlb_invalidate(pgdir, la); 
            //修改的页表是进程正在使用的那些页表,使之无效
        }
    }
  • 相关阅读:
    Java学习笔记-函数
    Java学习笔记-数组
    Git 常用命令速查表
    $.fn与$.fx什么意思; $.extend与$.fn.extend用法区别; $(function(){})和(function(){})(jQuery)
    offsetWidth的bug
    jQuery对象和DOM对象转换,解决jQuery对象不能使用js方法的问题
    1
    $().ready()与window.onload的不同
    offsetHeight在不同的浏览器下取值不同
    getElementsByName兼容ie 但并不是兼容ie下的所有标签
  • 原文地址:https://www.cnblogs.com/obob/p/11715352.html
Copyright © 2011-2022 走看看