【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字段
X | E | W | A | 描述符类别 | 含义 |
---|---|---|---|---|---|
0 | 0 | 0 | X | 数据段 | 只读 |
0 | 0 | 1 | X | 数据段 | 读、写 |
0 | 1 | 0 | X | 数据段 | 只读,向下扩展 |
0 | 1 | 1 | X | 数据段 | 读、写,向下扩展 |
- X 表示是否可执行。对于数据段,总是不可执行。所以为0
- E 表示段的扩展方向。E=0是向上扩展的。E=1是向下扩展的
- W 指示段的读写属性,W=0是不允许写入的,W=1是可以正常写入的
- A 是已访问位,用于指示它所指向的段最近是否被访问过。
X | C | R | A | 描述符类别 | 含义 |
---|---|---|---|---|---|
1 | 0 | 0 | X | 代码段 | 只执行 |
1 | 0 | 1 | X | 代码段 | 执行、读 |
1 | 1 | 0 | X | 代码段 | 只执行、依从的代码段 |
1 | 1 | 1 | X | 代码段 | 执行、读、依从的代码段 |
- X 表示是否可执行。代码段总是可执行,所以为1
- C 指示段是否为特权级依从的。C=0时,表示非依从的代码段,这样的代码段是可以从与它特权级相同的代码段调用,或者通过门调用;C=1时表示允许从低特权级的代码转移到该段执行。
- R 指示代码段是否允许读出。代码段总是可以执行的,但是为了防止程序破坏,它是不允许写入的。至于是否有读出的可能,由R位决定。R=0时表示不能读出。R=1时,则代码段是可以读出的。
- A 是已访问位,用于指示它所指向的段最近是否被访问过。
3、总结
今天学习段描述符的格式,以及段描述符各个字段的含义。
笔记记得不是很全,如果有不懂的可以加我联系方式一起交流。
学习探讨加个人:
qq:1126137994
微信:liu1126137994
【OS学习笔记】十四 保护模式二:段描述符相关推荐
- 【OS学习笔记】十七 保护模式五:保护模式下如何进行内存保护 与 别名段的意义与作用
上一篇文章学习了如何进入保护模式,以及如何在保护模式下进行内存访问.点击链接查看上一篇文章:进入保护模式与在保护模式下访问内存 首先说明本片文章有对应的汇编代码,点击链接查看:点击查看 本篇文章接着学 ...
- 【OS学习笔记】十三 保护模式一:全局描述符表(GDT)
上一篇文章,我们大致领略了现代处理器的结构和特点.点解链接查看上一篇文章:现代处理器的结构和特点 本篇文章开始,学习保护模式下的的各种机制.什么是保护模式呢? 一般来说,操作系统负责整个计算机软硬件的 ...
- 【OS学习笔记】四十 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----动态加载的用户程序/任务二代码
本文是以下几篇文章对应的微型动态加载的用户程序/任务二代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十 ...
- 【OS学习笔记】三十四 保护模式十:中断和异常区别
上几篇文章学习了分页机制的一些原理: [OS学习笔记]三十 保护模式九:段页式内存管理机制概述 [OS学习笔记]三十一 保护模式九:页目录.页表和页三者的关系详解 今天继续学习保护模式下的关于中断与异 ...
- 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进
吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...
- Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理
Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...
- CPU保护模式 分页表 描述符 段选择子
第一:实模式下程序的运行回顾. 程序运行的实质是什么?其实很简单,就是指令的执行,显然CPU 是指令得以执行的硬件保障,那么CPU如何知道指令在什么地方呢? 对了,80x86系列是使用CS寄存器配合I ...
- 【OS学习笔记】二十四 保护模式七:调用门与依从的代码段----特权级保护
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 上一篇文章学习了保护模式下的任务与任务隔离,以及简单介绍了保护模式下 ...
- 【OS学习笔记】六 实模式:编写主引导扇区代码
上一篇文章学习了:计算机的启动过程(点击链接查看上一篇文章) 这篇文章学习记录为:编写主引导扇区代码. 参考:<X86汇编语言-从实模式到保护模式>-李忠.纯学习笔记,更详细内容请阅读正版 ...
最新文章
- 一文初识:美、日、中3国药品GMP特点
- 1091 线段的重叠
- python一个月能学成嘛-学过 Python 的人没有告诉你,年入百万有多难
- python读取中文文件报错-Python3 解决读取中文文件txt编码的问题
- android 打包报错,android 打包报错,请问有没有好的解决办法
- JZOJ 100047. 【NOIP2017提高A组模拟7.14】基因变异
- SAP系统和微信集成的系列教程之一:微信开发环境的搭建
- cmd如何默认以管理身份运行
- 数据库封装 sql server mysql_mysql操作数据库进行封装实现增删改查功能
- sql语句中单引号嵌套问题
- 第6次结对作业--郑锦伟古维城
- Windows 下Temp帐号处理
- xunsearch全文检索初体验
- 求数组中最大值和次大值
- Android 2.3 版本中链接边框问题解决
- java高校贫困生助学贷款系统ssm框架毕业设计
- 记录第一次面试的体会(字节跳动实习生招聘)
- python七巧板房子_七巧板拼图技巧,房子用简单的七巧板怎么拼 请给图
- Unity Editor 基础篇(三):自定义窗口
- hone hone clock 与小松鼠驾到~还有牛顿摆等一些其他好玩的东西
热门文章
- spring mvc学习(39):restful的crud实现删除方式
- angular路由传递参数_Angular路由——在路由时候传递数据
- 如何阻止表单的默认提交事件
- 采用python解决实际问题_Python编程语言解决几种常见的实际问题
- mysql 获取结果_【原创】7. MYSQL++中的查询结果获取(各种Result类型)
- ES6笔记 -- 变量/语句声明
- 【数组】—冒泡排序选择排序---【巷子】
- Anaconda日志
- SEO笔记—网页结构优化(四)
- AS3 CookBook学习整理(八)