第零阶段:
启动之后的实模式阶段
vir = lin = pa

第一阶段 :
启动 bootloader 的段式分页
这里段基址是0 ,所以地址空间维持不变
vir addr = lin addr = pa addr

第二阶段 :
从entry.S enable paging 开始
这时
vir
addr 0-4G
kernelbase - kernelbase+4G
这两个段都被映射到了 pa 的0-4G

第三阶段

第二阶段转换到第三阶段只有几行指令
因为启动了页式分页后 需要把eip中的值更新到 basekernel 以上去
在这几行执行完后就可以取消vir addr 0-4G 至 pa addr 0-4G 的映射

自映射机制在这里启动
有一个 0xFAC00000 作为VPT

使用指令 boot_pgdir[PDX(VPT)] = PADDR (boot_pgdir ) | PTE_P | PTE_W

于是使用 VPT 地址访问的就是 pgd 这个页表本身 更进一步的
VPT - VPT +4G 这个空间被映射到了全部的页表上去
其中一个特殊的地址也就是
0xFACFAC000 地址不会这样写,我的含义是高十位和中间十位相同并且等于 0xFAC 的地址被映射到了页目录项本身

第四阶段
地址空间也不改变
进入gdt_init 进行最后一次段式设置
这次设置用户代码和数据段信息,加载tss 的值
以上所有的段都有 基址=0x0
所以就是说全程都有 lin addr= vir addr

转载于:https://www.cnblogs.com/sfzyk/p/9811134.html

ucore 地址映射的几个阶段相关推荐

  1. ucore lab2

    UCORE实验2 实验目的 理解基于段页式内存地址的转换机制 理解页表的建立和使用方法 理解物理内存的管理方法 实验内容 本次实验包含三个部分.首先了解如何发现系统中的物理内存:然后了解如何建立对物理 ...

  2. ucore lab2 操作系统实验

    LAB2: 知识准备 (通过操作系统原理教材.gitbook实验指导书.清华大学教学视频以及其他相关的资料进行学习) 1.特权级以及特权级的转换 (在清华大学教学视频中格外详细讲述了此内容,故结合视频 ...

  3. 操作系统 ucore lab1 练习2-6

    [练习2] 使用qemu执行并调试lab1中的软件 进行如下的小练习: 从CPU加电后执行的第一条指令开始,单步跟踪BIOS的执行. 在初始化位置0x7c00设置实地址断点,测试断点正常. 从0x7c ...

  4. 操作系统实验二实验报告

    实验二:物理内存管理 练习0:填写已有实验 将lab1中已完成的代码更新到lab2中,在这里分别尝试了diff+patch和meld两种方法 在lab2目录下,trap.c的更新如下(注意可能需要手动 ...

  5. 清华操作系统实验lab1

    第一次写的lab1练习1太冗杂,没有重点,理解不到位,后续进一步研究后感觉务必重新写一篇...... [练习1.1] 操作系统镜像文件 ucore.img 是如何一步一步生成的 生成ucore.img ...

  6. linux 内核位置无关,Linux内核启动阶段虚实地址映射

    前言 编译kernel的时候,会通过链接脚本指定编译出来的image的布局以及image的运行地址,这里说的运行地址,是从CPU的视角来说的,是一个虚拟地址.CPU执行代码的时候,要么是顺序执行,要么 ...

  7. 操作系统实验报告11:ucore Lab 2

    ucore实验报告2 实验内容 uCore Lab 2:物理内存管理 (1) 编译运行 uCore Lab 2 的工程代码: (2) 完成 uCore Lab 2 练习 1-3 的编程作业: (3) ...

  8. ucore lab 2

    LAB 2 物理内存管理 实验一过后大家做出来了一个可以启动的系统,实验二主要涉及操作系统的物理内存管理.操作系统为了使用内存,还需高效地管理内存资源.在实验二中大家会了解并且自己动手完成一个简单的物 ...

  9. 最快69秒逆向DRAM地址映射,百度设计的这款逆向工具如何做到快速可靠?

    来源 | 百度安全实验室 出品 | AI科技大本营(ID:rgznai100) 导读:近日,国际顶级设计自动化大会DAC大会公布DAC 2020会议议程和论文名单,由百度安全发表的<DRAMDi ...

  10. Linux内核初始化阶段内存管理的几种阶段

    本系列旨在讲述从引导到完全建立内存管理体系过程中,内核对内存管理所经历的几种状态.阅读本系列前,建议先阅读memblock的相关文章. 一些讲在前面的话 在很久很久以前,linux内核还是支持直接从磁 ...

最新文章

  1. GDAL中GDALDataset::RasterIO分块读取的实现
  2. 面试被问到Redis实现发布与订阅,手摸手教
  3. android html footer 固定,前端小技巧之footer固定
  4. java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.doWithLocalFieldsV
  5. JavaWeb文件上传(1)--基础
  6. Vmprotect 驱动加壳踩坑
  7. QQScLauncher.exe应用程序错误,0xc0000022
  8. Fabric.js IText 手动设置斜体
  9. 阿里云 Linux云服务器登陆方式(Windows远程登录工具XShell,基于ssh建立会话)
  10. Win32创建菜单篇
  11. C++提高进阶,你知道多少?
  12. 前端vue中ts无法识别引入的vue文件,提示找不到xxx.vue模块的解决【引入新建页面或者通过router引入时报错】
  13. python和excel数据分析有什么区别_用Excel、SQL、Python做数据分析有何不同?
  14. 反编译之脱去乐固加固的壳
  15. JavaScript面向对象
  16. SPM AC原点校正
  17. 解决:word表格,未完成一页就跳到下一页
  18. mac idea java 配置_Mac JAVA环境变量配置及IDEA JDK配置
  19. usart串口发送与接收问题
  20. cometd java_Jetty cometd(Continuation)学习笔记

热门文章

  1. 拓端tecdat|Prophet在R语言中进行时间序列数据预测
  2. 【大数据部落】 用机器学习识别不断变化的股市状况—隐马尔可夫模型(HMM)股票指数预测实战
  3. not optimal php,PHP错误提示It is not safe to rely on the system……的解决方法
  4. 如何用yolov5训练自己的图片
  5. python实现递归和非递归求两个数最大公约数、最小公倍数
  6. 2021-06-27函数定义与参数
  7. 响应式编程优点 有效_美团 EasyReact 源码剖析:图论与响应式编程
  8. 操作系统导论 书中代码下载_经典教材统计学习导论终于有Python版了(附下载)...
  9. 数据库学习笔记1-事务 transaction
  10. JavaSE——Java8之四大函数式接口