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

  • 相关阅读:
    利用border制作三角形原理
    JavaScript中null和undefined
    localStorage 如何存储JSON数据并读取JSON数据
    常见的几种浏览器内核简单介绍
    关于Banner设计的促销氛围
    分数分配
    餐饮管理系统
    餐馆管理之点菜
    餐饮管理之结账
    餐饮管理之菜品管理
  • 原文地址:https://www.cnblogs.com/sfzyk/p/9028719.html
Copyright © 2011-2022 走看看