【OS学习笔记】十五 保护模式三:保护模式下的内存访问机制

上一篇文章学习了段描述符与段描述符各个标志位的含义:段描述符

本篇文章学习如何进入保护模式,并学习如何在保护模式下进行内存访问。

1、如何进入保护模式

假设我们已经用汇编语言将段描述符安装到GDT中(具体的汇编代码在后面的文章中会给出),并且也已经将GDTR的线性地址与界限值加载到了GDTR中。现在前期的准备已经准备好了,可以直接进入到保护模式了。那么如何进入到保护模式呢?

控制实模式与保护模式切换的一个控制器是CR0寄存器。CR0是处理器内部的一个控制寄存器。

CR0是32位寄存器。如下图:
在这里插入图片描述

它的第一位(位0)是保护模式允许位(PE位)。如果把该位置1,则处理器进入保护模式的规则下运行。其他位暂时不用,所以显示的空白。以后学习过程中会继续学习。

好了,只要我们再汇编代码中将CR0寄存器的PE位置1,则进入保护模式的规则。现在假设我们已经进入了保护模式。

2、进入保护模式后如何访问内存

2.1、32位处理器的段寄存器

我们很清楚16位的8086处理器的是如何通过段寄存器来访问内存的。

在保护模式下,32位的处理器中。段寄存器有所变化。如下图是32位处理器的段寄存器:
在这里插入图片描述
每个段寄存器的前16位于8086的寄存器一样,在实模式下,他们用传统的方式访问1M内存,使用方法没有变化。

同时每个段寄存器还包括一个不可见的部分,如上述图的红色部分,称为描述符高速缓存器,用来存放所要访问的段的线性地址、段界限和属性。

说它不可见是因为只有处理器可以访问,只能是处理器来使用。

那么保护模式下,是如何听过上述的段寄存器访问内存的呢?

在保护模式中,前16位的段寄存器称为段选择器。 将段描述符在GDT中的索引号传送给段选择器。

如下图所示,是段选择器里的内容。
在这里插入图片描述

在保护模式下访问一个段时,传送到段选择器的是段选择子。它由上述三部分组成。

  • 描述符索引: 用来在描述符表(GDT)中找到一个段描述符。
  • TI :描述符表指示器。TI=0时,表示描述符在GDT中。TI=1时表示描述符在LDT中。LDT是局部描述符表,在后面会有所介绍。
  • RPL :请求特权级,表示给出当前选择字的能程序的特权级,正式该程序要访问这个内存段。

2.2、开始访问内存

到了这里,我们知道了段选择器的作用,就是用来索引段描述符的。现在还不知道描述符高速缓存器的作用呢??? 不着急,马上就来。

假设现在我们要访问的是数据段。

DS寄存器的段选择器中存放的是数据段描述符在GDT中的索引号,而GDTR寄存器又保存的是GDT的基地址。GDT中每一个描述符的大小是8字节。那么访问数据段的内容,就如下图所示了:

在这里插入图片描述

在第一次访问数据段的时候, 首先将之前传送到段选择器的段选择子部分的描述符的索引号乘以8,得到描述符在GDT中的偏移地址。再用这个偏移地址加上GDT的基地址GDTR指向的内容,就可以访问到内存中的段。

如果没有发现什么问题,就自动的找到数据段描述符,将它加载到段寄存器的描述符高速缓存部分。加载的部分包括数据段的线性地址、段界限、与访问属性。

此后,如果再有访问数据段的内存操作,处理器直接访问段寄存器的描述符高速缓存部分的内容,而不用像开始那样还用段选择子部分的描述符索引号乘以8加上GDTR指向的GDT基地址。不用那么麻烦了,以后如果还访问数据段,直接在数据段的描述符高速缓存中查找段的地址以及访问属性即可。

比如接下来如果有一条指令mov byte [0x00],'P' 假设现在的DS中的描述符高速缓存存的数据段的线性地址是 0x000B8000,那么上述指令的访问就如下图所示:
在这里插入图片描述

不只是访问数据段。访问代码段也是与上述过程类似。只不过指令的偏移地址一般是由EIP寄存器指定。那么访问一个内存中的指令大概就是下面的过程:

在这里插入图片描述

到了这里,我们已经很明白段寄存器中的描述符高速缓存的作用。它其实就是一个cache的作用。

3、总结

本篇文章有点绕。但是只要很用心的看,多看几遍,肯定会看明白保护模式下的内存访问机制。

笔记记得不是很全,如果有不懂的可以加我联系方式一起交流。

学习探讨加个人:
qq:1126137994
微信:liu1126137994

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(175):弹窗

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>超链接——J…

前端学习(176):列表元素

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>有序列表<…

设计模式-装饰者模式

1. 场景 很经典的一个场景 咖啡类型 espresso&#xff08;意大利咖啡&#xff09;&#xff0c;shortblack,LongBlack(美食咖啡)&#xff0c;Decaf(无因咖啡)调料 Milk ,Soy(豆浆)&#xff0c;Chocolate费用 不同的咖啡价格是不同的&#xff0c;而且有 咖啡调料的类型组合 每个咖…

【OS学习笔记】十七 保护模式五:保护模式下如何进行内存保护 与 别名段的意义与作用

上一篇文章学习了如何进入保护模式&#xff0c;以及如何在保护模式下进行内存访问。点击链接查看上一篇文章&#xff1a;进入保护模式与在保护模式下访问内存 首先说明本片文章有对应的汇编代码&#xff0c;点击链接查看&#xff1a;点击查看 本篇文章接着学习。我们已经知道…

前端学习(177):定义列表

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>定义列表<…

oracle 数据库工作总结思维导图

oracle 数据库工作中使用总1. oracle 数据库 工作中使用总结思维导图2 解析oracle执行计划1. oracle 数据库 工作中使用总结思维导图 2 解析oracle执行计划 执行计划树的基本规则如下&#xff1a; 执行计划将包含一个根&#xff0c;没有父&#xff08;操作&#xff09; 父&…

【软件开发底层知识修炼】十一 链接器-链接脚本

上一篇文章学习了链接器之-main函数不是第一个执行的函数:main函数不是第一个执行的函数 今天继续学习链接器&#xff0c;学习链接是如何动作的&#xff0c;从而引入链接脚本的概念。本文就学习链接脚本的概念。 1、链接脚本的作用 我们都知道可重定位文件经过链接器链接后最…

前端学习(178):表格元素

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>表格</ti…

java后端分享整理

java规范总结1. Java 常见的代码规范1.1. Java 自带的工具方法1.1.1 比较两个对象是否相等1.1.2 apache commons工具类库1.1.2.1 字符串判空1.1.2.3 重复拼接字符串1.1.2.4 格式化日期1.1.2.4 包装临时对象 &#xff08;不是特别常用&#xff09;1.1.3 common-beanutils 操作对…

SharePoint要在master page中动态显示List数据的几种方式

我们都知道&#xff0c;在SharePoint中&#xff0c;Content page继承自Page layout&#xff0c;而Page layout又继承自Master page。Master page的作用大家都知道&#xff0c;它定义了站点的的整体外观和公共元素&#xff0c;因此有了很强的页面重用性和很好的页面编辑体验&…

前端学习(179):表单元素

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>表单</ti…

【软件开发底层知识修炼】十二 C/C++语言中内嵌汇编语言(asm)

上一篇文章学习了链接脚本的语法与相关概念&#xff1a;链接脚本的概念 在继续学习链接器的内容的同时&#xff0c;先学习一个新内容&#xff1a;内嵌汇编。 GCC编译器一般支持C/C内嵌汇编语言&#xff0c;这样可以实现语言本身无法实现的内容。我们本文主要介绍C语言中的内嵌…

数据思维整理

数据思维整理分享

windows7下iis网站的.net框架版本设置

昨天下载了 VS2010 创建了一个默认的WebApplication&#xff0c;想看看在iis中运行的情况&#xff0c;虽说用了几个月的 win7 &#xff0c;但还从没有用过IIS。首先给人的感觉是IIS变化很大&#xff0c;多出了很多东西&#xff0c;让人感到很茫然。 先建个网站试试&#xff0c;…

【OS学习笔记】二十三 保护模式七:保护模式下任务的隔离与任务的特权级概念

上一篇文章学习了保护模式下操作系统内核如何加载程序并运行&#xff1a;点击链接查看上一篇文章 本篇文章接着上一篇文章学习保护模式下任务的隔离。 包括以下学习内容&#xff1a; 任务的全局空间和局部空间任务的TSS任务的LDT任务的特权级概念等 1、回顾 在保护模式下&…

[Drupal] How to add the js file and js code block in Drupal

Drupal 6:代码//This will add a JS file to your head (specifically the $scripts variable in page.tpl.php)drupal_add_js(drupal_get_path(module,my_module) ./my_module.js); //This add inline JS to the head of the documentdrupal_add_js(alert("Hello!"…

【OS学习笔记】二十四 保护模式七:调用门与依从的代码段----特权级保护

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章学习了保护模式下的任务与任务隔离&#xff0c;以及简单介绍了保护模式下的特权级的概念。点击链接查看上一篇文章&#xff1a;任务与任务隔…

【OS学习笔记】二十六 保护模式八:任务门---任务切换

上一篇文章学习了&#xff1a;保护模式七&#xff1a;调用门与依从的代码段----特权级保护 主要学习了以下内容&#xff1a; 描述符特权级&#xff08;目标对象的特权级&#xff09;DPL 描述符特权级&#xff08;目标对象的特权级&#xff09;DPL 当前特权级CPL 低特权级的应…

腾讯微博应用

腾讯微博开放平台提供了一些官方微博应用&#xff0c;供开发者借鉴和利用&#xff0c;其中包括&#xff1a; 一键转播——嵌入一键转播到你的网站里&#xff0c;访客便能将网页信息直接传播至腾讯微博。分享资讯的同时&#xff0c;用户通过来源链接可进入你的网站&#xff0c;从…

【OS学习笔记】二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中断嵌套

上一篇文章学习了任务门的概念&#xff1a;任务门—任务切换。主要学习了以下内容&#xff1a; 使用任务门进行任务切换的一般工作原理&#xff08;和中断有关的任务切换&#xff09; 本篇文章接着上一篇文章学习以下内容&#xff1a; 利用jmp进行任务切换利用call进行任务切…