zoukankan      html  css  js  c++  java
  • Lab2 新增的细节

    entry.S

    新增加了这个入口函数
    bootloader 加载完成后 将执行 kern_entry 而非lab1 中的kern_init

    defs.h##

    使用了 ({})宏定义的方式,并且执行了一行定义的语句,
    首先 将a转换成size_t 然后在转换回去

    define ROUNDDOWN(a,n) ({

    size_t __a=(size_t)(a);
    (typeof(a)) (__a-__a %(n));
    

    })

    define ROUNDUP(a, n) ({

            size_t __n = (size_t)(n);                               
            (typeof(a))(ROUNDDOWN((size_t)(a) + __n - 1, __n));     
        })
    

    ROUNDUP 有相似的定义

    pmm.h##

    PADDR () / / 接受虚拟地址,返回实际地址
    就是接受地址后 减了一个 KERNBASE 返回

    pa2page 以及引出的页机制宏##

    接受物理地址 ,返回对应page 条目的信息
    应该是目前传入的 物理地址就是逻辑地址? 取出

    内存分配细节##

    alloc_page() -> alloc_page(1)

    alloc_page(int) ->alloc_pages(int) (pmm.c )

    alloc_pages :
    local_intr_save(intr_flag) 保存寄存器状态值
    page=pmm_manager-alloc_pages()
    local_intr_restore(intrflag) 回复寄存器状态值
    return page

    寄存器的状态值 是否改变还取决于 readeflags & FL_IF 的值 FL_IF 被值1才会进行 中断屏蔽 FL_IF interrupte flag

  • 相关阅读:
    Cookies和Session的定义与区别
    selenium元素定位篇
    http协议基础教程
    selenium自动化基础知识
    数组基础练习
    软件生命周期及其相关文档
    作业1
    作业2
    第四次个人作业关于微软必应词典客户端 的案例分析
    自我期许
  • 原文地址:https://www.cnblogs.com/sfzyk/p/9028719.html
Copyright © 2011-2022 走看看