第零阶段:
启动之后的实模式阶段
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. 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第七节)
  2. REVERSE-PRACTICE-BUUCTF-2
  3. eclipse的SVN插件设置忽略文件
  4. java多线程编程基础
  5. HTML5 云知梦自觉,记录知识 点
  6. MailBee.NET Objects接收电子邮件(POP3)教程一:接收简单的电子邮件
  7. 95-260-055-源码-检查点-Savepoint 和 Checkpoint的异同
  8. jquery之val()和attr(value)
  9. Juniper MIP
  10. 诺基亚n1支持java功能_关于诺基亚N1你必须要了解这10个问题!
  11. Windows jmeter安装
  12. TI 库仑计高级篇之Chemistry 创建
  13. mac 配置mysql 环境变量
  14. 讨论下2018年的北京房市(长文慎入)
  15. [转]俞敏洪:我和马云就差了8个字... [来自: news.mbalib.com]
  16. GET获取表单数据的方法
  17. 手机上如何学会使用计算机,手机怎么投屏到电脑上,我这儿有4种方法,一分钟让你学会...
  18. C++中的var类型
  19. GPU巨头英伟达遭“​毁灭性”网络攻击、头号恶意软件关闭其僵尸网络基础设施|2月28日全球网络安全热点
  20. 关于程序员学习的一些想法

热门文章

  1. oracle中如何测试,Oracle数据库中如何正确的查看sql
  2. (7)机器学习之make_bolbs
  3. linux客户端工具有哪些,Linux命令以及客户端工具的使用
  4. python通过文件路径读取图片
  5. 深度学习在图像检索的应用
  6. python数值计算库Numpy学习之—np.linalg.norm(求范数)
  7. 运行PCL代码出现C2988,C2143,C2913等错误
  8. 2021-07-31mysql连接 基本语句
  9. sqlserver去重记录_SQL去除重复记录(七种)
  10. nemesis什么车_TSC名车品牌将推全新Nemesis全球最强超跑