开启分页机制———《x86汇编语言:从实模式到保护模式》读书笔记44
开启分页机制
必须说明的是,必须在保护模式下才能启动分页功能。本章的引导程序依然用第13章的。
开启分页机制之前,必须创建页目录和页表。因为内核是在开启页功能之前加载的,段在内存中的位置已经固定。在这种情况下,即使开启了分页功能,线性地址也必须和物理地址相同才行,不然就会“跑飞”。
因为我们的内核很小,将其加载到内存后,连低端的1MB空间都没有占完全,所以只需要将低端1MB内存做特殊处理,使这部分内存的线性地址和物理地址相同即可。这样做的好处是:内核不用做任何变动即可在分页模式下继续正常工作,再也不会担心“跑飞”了。
对于页目录和页表,页目录必须在内存中,页目录和页表必须各自占用一个自然页,也就是说它们的物理地址的低12位必须全零。
一个页表最多可以容纳1024个表项,对应1024个页,也就是4MB内存。对于我们的内核,还不到1MB,所以一个页目录和一个页表足矣。作者的设计是把页目录放在物理地址0x0002_0000处,把页表放在0x0002_1000处。
926 ;页目录表清零
927 mov ecx,1024 ;1024个目录项
928 mov ebx,0x00020000 ;页目录的物理地址
929 xor esi,esi
930 .b1:
931 mov dword [es:ebx+esi],0x00000000 ;页目录表项清零
932 add esi,4
933 loop .b1
以上代码将页目录和页表的所有目录项清零。之所以这样做,主要是使所有目录项的P位为0.
935 ;在页目录内创建指向页目录自己的目录项
936 mov dword [es:ebx+4092],0x00020003
937
938 ;在页目录内创建与线性地址0x00000000对应的目录项
939 mov dword [es:ebx+0],0x00021003 ;写入目录项(页表的物理地址和属性)
创建2个目录项。
936:P=1;RW=1;US=0;这个目录项指向了自己,为的是可以方便地用线性地址访问自己。
939:添加一个表项,使其指向页表。P=1;RW=1;US=0。
942 mov ebx,0x00021000 ;页表的物理地址
943 xor eax,eax ;起始页的物理地址
944 xor esi,esi
945 .b2:
946 mov edx,eax
947 or edx,0x00000003
948 mov [es:ebx+esi*4],edx ;登记页的物理地址
949 add eax,0x1000 ;下一个相邻页的物理地址
950 inc esi
951 cmp esi,256 ;仅低端1MB内存对应的页才是有效的
952 jl .b2
953
954 .b3: ;其余的页表项置为无效
955 mov dword [es:ebx+esi*4],0x00000000
956 inc esi
957 cmp esi,1024
958 jl .b3
上面的代码用来填写页表项。填写后,内核的页目录和页表视图如下。
960 ;令CR3寄存器指向页目录,并正式开启页功能
961 mov eax,0x00020000 ;PCD=PWT=0
962 mov cr3,eax
963
964 mov eax,cr0
965 or eax,0x80000000
966 mov cr0,eax ;开启分页机制
961~962:PWT=0,PCD=0;登记页目录表的基地址。
964~966:正式开启分页机制。
分页机制开启后,根据上面的页目录和页表视图,可以算出:
线性地址:0x0000_0000~0x0000_FFFF
映射到
物理地址:0x0000_0000~0x0000_FFFF;
线性地址:0x8000_0000~0x8000_FFFF
也映射到
物理地址:0x0000_0000~0x0000_FFFF;
开启分页机制———《x86汇编语言:从实模式到保护模式》读书笔记44相关推荐
- X86汇编语言从实模式到保护模式09:32位x86处理器编程架构
目录 1. IA-32架构的基本执行环境 1.1 寄存器的扩展 1.1.1 通用寄存器的扩展 1.1.2 IP寄存器的扩展 1.1.3 FLAGS寄存器的扩展 1.1.4 段寄存器的扩展 1.2 32 ...
- 实模式和保护模式区别及寻址方式
64KB-4GB-64TB? 我记得大学的汇编课程.组成原理课里老师讲过实模式和保护模式的区别,在很多书本上也有谈及,无奈本人理解和感悟能力实在太差,在很长一段时间里都没真正的明白它们的内含,更别说为 ...
- [书]x86汇编语言:从实模式到保护模式 -- 第17章 中断、任务切换、分页机制、平坦模型
# 任务切换 内核任务.用户任务1.用户任务2,之前的轮询切换 利用RTC芯片的硬件中断来实现任务切换 计算机主板上有实时时钟芯片RTC,可以设置RTC芯片,使得它每次更新CMOS中的时间信息后,发出 ...
- [书]x86汇编语言:从实模式到保护模式 -- 第16章 分页机制、平坦模型
# 分页机制 二级页表:页目录.页表 ==> 4KB物理页 32位线性地址中:高10位为页目录中的索引号(乘4得偏移量),该目录项指向页表的基地址:中间10位为页表中的索引号,该页表项指向4KB ...
- X86汇编语言从实模式到保护模式20:平坦模型
1 引入平坦模型(Flat Model)的原因 1.1 内存管理模型变迁 1.1.1 分段模型 1.1.1.1 基本特点 1. 在程序中按结构组织为多个段 2. 在加载程序时,为程序中的每个段创建段描 ...
- x86汇编语言从实模式百度云_Intel x86 CPU 32位保护模式杂谈之任务切换 上
目录: 什么是任务 任务由什么组成 任务门描述符是什么东东?有了TSS描述符为什么要有任务门描述符? 参考文献 什么是任务 任务(task)是处理器可以分配.执行.挂起的工作单位,笔者认为和我们操作系 ...
- ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构
★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...
- 【OS修炼指南目录】----《X86汇编语言-从实模式到保护模式》读书笔记目录表
学习交流加(可免费帮忙下载CSDN资源): 个人微信: liu1126137994 学习交流资源分享qq群1(已满): 962535112 学习交流资源分享qq群2: 780902027 本文是将个人 ...
- 16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16...
一.Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式. (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 ...
最新文章
- VC中读写ini文件
- oracle快速导出1t数据,使用sqluldr2快速高效大批量导出Oracle数据
- EditText获得焦点后,如何关闭软键盘
- 5渲染判断if_React 16 渲染流程
- mysql 优化设计库_MySQL 数据库最优化设计原则
- append()与extend()
- 用 CSS 实现元素垂直居中,有哪些好的方案?
- 结对项目 刘静 201303014059 计科高职13-2
- iOS关键代码遭泄露;Google正式抛弃HTTP;微博网页版出故障 | 一周业界事
- bootstrap居中
- Python版学生管理系统源码分享【考试/作业必备】
- sql server完全卸载
- 泰坦尼克号数据下载链接
- 电脑端微信用户图片DAT格式解码为图片(TK版)
- cocos2d-x传智播客_Hanselminutes播客30-Outlook加载项和个人生产力增强器
- Contrastive Learning
- Linux那些事儿 之 我是PCI(1)PCI,我们来了
- 安卓京东自动炸年兽v4.1.1
- 【旋转矩阵和旋转向量】
- 计算机微程序控制器实验报告,计算机组成原理微程序控制器实验报告