ucore 地址映射的几个阶段
第零阶段:
启动之后的实模式阶段
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 地址映射的几个阶段相关推荐
- ucore lab2
UCORE实验2 实验目的 理解基于段页式内存地址的转换机制 理解页表的建立和使用方法 理解物理内存的管理方法 实验内容 本次实验包含三个部分.首先了解如何发现系统中的物理内存:然后了解如何建立对物理 ...
- ucore lab2 操作系统实验
LAB2: 知识准备 (通过操作系统原理教材.gitbook实验指导书.清华大学教学视频以及其他相关的资料进行学习) 1.特权级以及特权级的转换 (在清华大学教学视频中格外详细讲述了此内容,故结合视频 ...
- 操作系统 ucore lab1 练习2-6
[练习2] 使用qemu执行并调试lab1中的软件 进行如下的小练习: 从CPU加电后执行的第一条指令开始,单步跟踪BIOS的执行. 在初始化位置0x7c00设置实地址断点,测试断点正常. 从0x7c ...
- 操作系统实验二实验报告
实验二:物理内存管理 练习0:填写已有实验 将lab1中已完成的代码更新到lab2中,在这里分别尝试了diff+patch和meld两种方法 在lab2目录下,trap.c的更新如下(注意可能需要手动 ...
- 清华操作系统实验lab1
第一次写的lab1练习1太冗杂,没有重点,理解不到位,后续进一步研究后感觉务必重新写一篇...... [练习1.1] 操作系统镜像文件 ucore.img 是如何一步一步生成的 生成ucore.img ...
- linux 内核位置无关,Linux内核启动阶段虚实地址映射
前言 编译kernel的时候,会通过链接脚本指定编译出来的image的布局以及image的运行地址,这里说的运行地址,是从CPU的视角来说的,是一个虚拟地址.CPU执行代码的时候,要么是顺序执行,要么 ...
- 操作系统实验报告11:ucore Lab 2
ucore实验报告2 实验内容 uCore Lab 2:物理内存管理 (1) 编译运行 uCore Lab 2 的工程代码: (2) 完成 uCore Lab 2 练习 1-3 的编程作业: (3) ...
- ucore lab 2
LAB 2 物理内存管理 实验一过后大家做出来了一个可以启动的系统,实验二主要涉及操作系统的物理内存管理.操作系统为了使用内存,还需高效地管理内存资源.在实验二中大家会了解并且自己动手完成一个简单的物 ...
- 最快69秒逆向DRAM地址映射,百度设计的这款逆向工具如何做到快速可靠?
来源 | 百度安全实验室 出品 | AI科技大本营(ID:rgznai100) 导读:近日,国际顶级设计自动化大会DAC大会公布DAC 2020会议议程和论文名单,由百度安全发表的<DRAMDi ...
- Linux内核初始化阶段内存管理的几种阶段
本系列旨在讲述从引导到完全建立内存管理体系过程中,内核对内存管理所经历的几种状态.阅读本系列前,建议先阅读memblock的相关文章. 一些讲在前面的话 在很久很久以前,linux内核还是支持直接从磁 ...
最新文章
- GDAL中GDALDataset::RasterIO分块读取的实现
- 面试被问到Redis实现发布与订阅,手摸手教
- android html footer 固定,前端小技巧之footer固定
- java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.doWithLocalFieldsV
- JavaWeb文件上传(1)--基础
- Vmprotect 驱动加壳踩坑
- QQScLauncher.exe应用程序错误,0xc0000022
- Fabric.js IText 手动设置斜体
- 阿里云 Linux云服务器登陆方式(Windows远程登录工具XShell,基于ssh建立会话)
- Win32创建菜单篇
- C++提高进阶,你知道多少?
- 前端vue中ts无法识别引入的vue文件,提示找不到xxx.vue模块的解决【引入新建页面或者通过router引入时报错】
- python和excel数据分析有什么区别_用Excel、SQL、Python做数据分析有何不同?
- 反编译之脱去乐固加固的壳
- JavaScript面向对象
- SPM AC原点校正
- 解决:word表格,未完成一页就跳到下一页
- mac idea java 配置_Mac JAVA环境变量配置及IDEA JDK配置
- usart串口发送与接收问题
- cometd java_Jetty cometd(Continuation)学习笔记
热门文章
- 拓端tecdat|Prophet在R语言中进行时间序列数据预测
- 【大数据部落】 用机器学习识别不断变化的股市状况—隐马尔可夫模型(HMM)股票指数预测实战
- not optimal php,PHP错误提示It is not safe to rely on the system……的解决方法
- 如何用yolov5训练自己的图片
- python实现递归和非递归求两个数最大公约数、最小公倍数
- 2021-06-27函数定义与参数
- 响应式编程优点 有效_美团 EasyReact 源码剖析:图论与响应式编程
- 操作系统导论 书中代码下载_经典教材统计学习导论终于有Python版了(附下载)...
- 数据库学习笔记1-事务 transaction
- JavaSE——Java8之四大函数式接口