80X86 分段机制(读书笔记)
GDT(全局描述符表)本身并不是一个段,而是线性地址空间的一个数据结构。GDT的线性地址和长度必须加载进GDTR寄存器中。LDT(局部描述符表)存放在LDT类型的系统段中。此时GDT必须含有LDT的段描述符。如果系统支持多LDT的话那么每个LDT都必须在GDT中有一个段描述符和段选择符。LDT的段描述符可以在GDT的任何地方。
段选择符
段选择符是段的一个16位标识符。段选择符并不直接指向段而是指向段描述符表中第一的段描述符。段选择符3个字段内容:
1.请求特权级RPL 提供了保护信息。
2.表指示标志TI TI=0表示描述符在GDT中;TI=1表示描述符在LDT中。
3.索引值 给出了描述符在GDT或LDT表中的索引号。
选择符通过定位段表中的一个描述符来指定一个段,并且描述符中包含有访问一个段的所有信息,例如段的基址,段长度和段属性。
处理器不使用GDT表中的第一项,指向GDT该项的选择符用作为空选择符。当把空选择符加载到一个段寄存器(除了CS和SS以外)中时处理器并不产生异常。但是当使用含有空选择符的段寄存器用于访问内存时就会产生异常。当把空选择符加载到CS或SS段寄存器中时将会导致一个异常。
当一个段选择符被加载到一个段寄存器可见部位时处理器也同时把段选择符指向的段描述符中的段地址、段限长以及访问控制信息加载到段寄存器隐藏部分(影子寄存器)。
在对描述符表中描述符做过任何改动之后就立刻重新加载6个段寄存器。这将把描述符表中的相应位段信息重新加载到影子寄存器中。
段描述符
段描述符是GDT和LDT表中的一个数据结构项。用于相处理器提供有关一个段的位置和大小信息以及访问控制的状态值。每个段描述符长度是8字节,含有三个主要字段:段基址、段限长和段属性。段描述符通常由编译器、连接器、加载器或者操作系统来创建,但绝不是应用程序。
对于下扩段,减小段限长度,字段中的值会在该段地址空间底部分配新的内存而不是在顶部分配。80X86的栈总是向下扩展的,因此这种实现方式很适合扩展堆栈。
段基地址应该对齐16字节边界。
代码和数据段描述符类型
如果堆栈的长度需要动态的改变。那么堆栈段可以是一个向下扩展的数据段(拓展方向标志置位)。这里动态改变段限长将导致栈空间被添加到栈底部。
系统段描述符指向系统段(如LDT段和TSS段),门描述符就是一个“门”对于调用、中断或陷阱门。其中含有代码段的选择符和段中程序入口的指针。
80X86 分段机制(读书笔记)的更多相关文章
- mysql锁机制 读书笔记
目录 MySQL锁机制 1.什么是锁 2.lock与latch 3.InnoDB存储引擎中的锁 3.1锁的类型 3.2 一致性非锁定读 3.3 一致性锁定读 4 锁的算法 4.1行锁的3中算法 4.2 ...
- 《Java并发编程实战》第十五章 原子变量与非堵塞同步机制 读书笔记
一.锁的劣势 锁定后假设未释放.再次请求锁时会造成堵塞.多线程调度通常遇到堵塞会进行上下文切换,造成很多其它的开销. 在挂起与恢复线程等过程中存在着非常大的开销,而且通常存在着较长时间的中断. 锁可能 ...
- 副本机制与副本同步------《Designing Data-Intensive Applications》读书笔记6
进入到第五章了,来到了分布式系统之中最核心与复杂的内容:副本与一致性.通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之 ...
- 《android开发艺术探索》读书笔记(十)--Android的消息机制
接上篇<android开发艺术探索>读书笔记(九)--四大组件 No1: 消息队列MessageQueue的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表,因为单链表 ...
- 《android开发艺术探索》读书笔记(二)--IPC机制
接上篇<android开发艺术探索>读书笔记(一) No1: 在android中使用多进程只有一种方法,那就是给四大组件在AndroidMenifest中指定android:process ...
- Windows内核读书笔记——Windows异常分发处理机制
本篇读书笔记主要参考自<深入解析Windows操作系统>和<软件调试>这两本书. IDT是处理异常,实现操作系统与CPU的交互的关口. 系统在初始化阶段会去填写这个结构. ID ...
- 《Java并发编程的艺术》读书笔记:二、Java并发机制的底层实现原理
二.Java并发机制底层实现原理 这里是我的<Java并发编程的艺术>读书笔记的第二篇,对前文有兴趣的朋友可以去这里看第一篇:一.并发编程的目的与挑战 有兴趣讨论的朋友可以给我留言! 1. ...
- Linux内核学习笔记3——分段机制和分页机制
一 分段机制 1.什么是分段机制 分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元. 2.什么是段 每个段由三个参数定义:段基地址.段限长和段属性. 段的基地址.段限长以及 ...
- 《android开发艺术探索》读书笔记(三)--分发机制和滑动冲突
接上篇<android开发艺术探索>读书笔记(二) No1: 通过MotionEvent对象可以得到点击事件发生的x和y坐标,getX/getY返回的是相对于当前View左上角的x和y坐标 ...
随机推荐
- apache commons io包基本功能
1. http://jackyrong.iteye.com/blog/2153812 2. http://www.javacodegeeks.com/2014/10/apache-commons-io ...
- 关于“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问 ”
原因:在从远程服务器复制数据到本地时出现“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatas ...
- 可以打开mdb文件的小软件
下载地址: http://dl-sh-ocn-1.pchome.net/09/rh/DatabaseBrowser.zip
- JSONModel的基本使用
JSONModel 是一个库,它能智能并且快速的创建出数据 model,你可以在你的 iOS 项目或者 OSX 项目上使用它. 使用前准备 添加 JSONModel 到你的工程中 1.需要的环境: A ...
- 2016年9月ccf
去长沙理工考ccf.恰好又可以见闺蜜. 前2道题很简单,第三题题目太长就跳过了[绕来绕去就像“你儿子是我儿子的爸爸一样头疼”],就做第四题.但是还有最后一个部分没写写好就到点了. 现在把它补充完整. ...
- 关于ASP.NET Session State Server
最近公司开发的一个网站因为访问量增大,需要添加多台Web Server来进行负载均衡. 但是在做负载均衡前需要将一些原来固定存储在单台机器上的东西分离出来,使之能单独存在在一个独立的机器上,其中就有S ...
- PHP不依赖系统自动执行机制
不依赖系统,以及不依赖yii事物机制,则考虑人为触发.触发可以写在总体的公共页面上,但是考虑到对数据库以及WWW服务器的压力问题,程序的延迟问题,需要对执行函数进行一些优化. 首先,我们考虑对数据库的 ...
- thinkphp 中js 实现刷新
<input name="Button5" value="返回" id="Button5" style="width:56p ...
- 那些年被我坑过的Python——牵一发动全身 第十一章MySQL、ORM
#!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = "Zhang Xuyao" from sqlalchemy im ...
- ORACLE 日志 logminer 使用
1. logminer安装 SQL> @$ORACLE_HOME/rdbms/admin/dbmslm.sql Package created. Grant succeeded. Synonym ...