• 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); 
            //修改的页表是进程正在使用的那些页表,使之无效
        }
    }
  • 相关阅读:
    Android系统架构
    WebView找不到网页,显示空白页问题解决
    隐藏标题栏
    Android编译时gradle报错乱码
    java.net.ConnectException
    can not resolve sendMessage(android.os.message)
    execution failed for task":app:dexDebug"
    android.view.InflateException: Binary XML file line #16: Error&nbs
    com.android.ide.common.process.Pr
    jdbc连接数据库
  • 原文地址:https://www.cnblogs.com/obob/p/11715352.html
Copyright © 2020-2023  润新知