【OS学习笔记】十四 保护模式二:段描述符

上一篇文章初步进入保护模式的学习。首先学习了全局描述符表GDT。点击链接查看上一篇文章:全局描述符表

本篇文章继续学习,GDT中存放的条目:描述符,确切的说是段描述符。学习段描述符的作用以及段描述符的格式。

1、段描述符的格式

实模式和保护模式,在内存访问上是由区别的,在保护模式下,你不能说访问哪个段就访问哪个段,在访问之前,必须在GDT内定义要访问的内存段。这个定义就是段的描述符。

描述符不是用户自己建立的,而是用户程序被操作系统加载时,有操作系统根据用户程序的结构而建立的。用户程序是无法自己修改和建立GDT的。用户程序只能老老实实的在自己的地盘上工作。这个时候操作系统为用户程序建立了几个段(定义了几个段描述符),用户程序就只能在这些段内工作,超出这个范围,或者未按预定的方法访问这些段,都将被处理器阻止。

一旦确定了GDT在内存中的位置,下一步就是确定要访问的段,并在GDT中为这些段定义各自的段描述符。

如下图,每个段描述符都是8字节大小。图中下面是低32位,上面是高32位。

在这里插入图片描述

很明显,描述符制定了32位的段起始地址(段基地址),以及20位的段边界。

在32位模式下,段地址与实模式下的段地址不一样。在实模式先段地址不是真正的物理地址,它还需要左移4位。而保护模式下,段地址是32位的线性地址,它就是真实的物理地址(未开启分页功能,分页功能后面学习)。

描述符中段基址和段界限不是连续的。这是历史的问题与兼容的问题。

20位的段界限是用来限制段的扩展范围。

下面来介绍段描述符各个字段的意思。

2、段描述符各个字段的意义

下面的表格列出了上述段描述符的各个位的意思,如果现在不理解这些位也无所谓,后面的学习会慢慢深入理解。

G: 粒度位用于解释段界限的含义。当G位是0时,段界限以字节为单位。此时段的扩展范围是从1字节到1M字节,因为描述符中的界限值是20位的。相反,如果该位是1,那么段界限是以4KB位单位。这样段的扩展范围是4KB到4GB
S: 类 型 位当该位是0时,表示是一个系统;为1时,表示是一个代码段或者数据段(栈段也是特殊的数据段)。系统段将在后面的文章中学习
DPL 特权级这两位用于指定描述符的特权级。共有4中处理器支持的特权级别,分别是0、1、2、3 ,其中0是最高的特权级,3是最低的特权级别。刚进入保护模式时执行的代码具有最高特权级0(可以看成是从处理器那里继承来的)这些代码通常是操作系统代码,因此它的特权级最高。每当操作系统加载一个用户程序,它通常都会制定一个低的特权级,比如3特权级。不同特权级的程序是互相隔离的,其访问是严格限制的,而且有些处理器指令只能由0特权级的程序来执行,为的就是安全。在这里,描述符的特权级是用于指定访问该段所必须具有的最低特权级。
P: 段存在位P位用于指示描述符所对应的段是否存在。一般来说,描述符所对应的段是在内存中。但是当内存空间紧张时,有可能指示建立了描述符,对应的内存空间并不存在,这时就应当把描述符的P位清零,表示段并不存在。另外,同样是在内存空间紧张的情况下,会把很少用到的段换出到硬盘中,腾出空间给当前急需内存的进程使用,这时同样要把P位清零,当再次轮到它执行时,再将其装入内存,然后P位置1。 **P是由处理器负责检查的。**每当通过描述符访问内存段时,如果P位是0,处理器就会产生一个异常中断。通常,该中断处理过程是由操作系统提供的,该处理过程的任务是将该段从硬盘换回内存,并将P位置1。在多用户、多任务的系统中,这是一种常用的虚拟内存调度策略。
D/B: 默认的操作数大小设置该标志位,主要是为了能够在32位处理器上兼容运行16位保护模式的程序。 该标志位对不同的段有不同的效果。对于代码段,此位称为D位,用于指定指令中默认的的偏移地址和操作数尺寸。D=0时表示指令中的偏移地址或者操作数是16位的。D=1时,表示32位的偏移地址和操作数。对于栈段来说,该位是B位,用于在进行隐式的栈操作中(push,pop,call等),是使用SP寄存器还是使用ESP寄存器。当B=0时,在访问哪个段时,使用SP寄存器,否则就使用ESP寄存器。同时,B位的值,也决定了栈段的上边界。如果B=0,那么栈的上边界是0xFFFF;如果B=1,那么栈段的上边界是0xFFFFFFFF。
L:64位代码段标志保留此位给64位处理器使用。目前我们将它置0即可
TYPE:描述符子类型对于数据段来说,这4位分别是X,E,W,A,对于代码段来说这4位分别是X,C,R,A。他们具体的含义见下面的表格。
AVL:软件可以使用的位通常由操作系统来用,处理器并不使用它。

下面表格是代码段和数据段的TYPE字段

XEWA描述符类别含义
000X数据段只读
001X数据段读、写
010X数据段只读,向下扩展
011X数据段读、写,向下扩展
  • X 表示是否可执行。对于数据段,总是不可执行。所以为0
  • E 表示段的扩展方向。E=0是向上扩展的。E=1是向下扩展的
  • W 指示段的读写属性,W=0是不允许写入的,W=1是可以正常写入的
  • A 是已访问位,用于指示它所指向的段最近是否被访问过。
XCRA描述符类别含义
100X代码段只执行
101X代码段执行、读
110X代码段只执行、依从的代码段
111X代码段执行、读、依从的代码段
  • X 表示是否可执行。代码段总是可执行,所以为1
  • C 指示段是否为特权级依从的。C=0时,表示非依从的代码段,这样的代码段是可以从与它特权级相同的代码段调用,或者通过门调用;C=1时表示允许从低特权级的代码转移到该段执行。
  • R 指示代码段是否允许读出。代码段总是可以执行的,但是为了防止程序破坏,它是不允许写入的。至于是否有读出的可能,由R位决定。R=0时表示不能读出。R=1时,则代码段是可以读出的。
  • A 是已访问位,用于指示它所指向的段最近是否被访问过。

3、总结

今天学习段描述符的格式,以及段描述符各个字段的含义。

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

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

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

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

相关文章

前端学习(174):图片热区链接

<!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.进程和线程的多种状态2.软件基础1.进程和线程的多种状态 2.软件基础

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

上一篇文章学习了段描述符与段描述符各个标志位的含义&#xff1a;段描述符 本篇文章学习如何进入保护模式&#xff0c;并学习如何在保护模式下进行内存访问。 1、如何进入保护模式 假设我们已经用汇编语言将段描述符安装到GDT中&#xff08;具体的汇编代码在后面的文章中会…

前端学习(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;任务与任务隔…