范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

在操作系统中,全局描述符是什么?GDT又是什么?

  在操作系统中,全局描述符是什么?GDT又是什么?在进入保护模式之前,准备好GDT和GDT中的描述符是必须的吗?用汇编代码怎么创建描述符?本文解答上面几个问题。
  在实模式下,CPU是16位的,意思是,寄存器是16位的,数组总线(data bus)是16位的,但地址总线是20位的。物理内存地址的计算公式是:
  $
  物理地址 = 段地址 * 16 + 偏移量
  $
  段地址和偏移量都是16位的,能寻址的最大内存地址是1M。
  1M是怎么计算出来的?2的20次方就是1M,能表示的内存地址是 0~(2的20次方-1)。用简单例子来理解,1位十进制数能表示的最大数是10 - 1 = 9,但1位十进制数能表示的数却是 0  ,和 1-9  ,总计10个数字。
  若一个内存地址是20:30 ,最终内存地址是:20 * 16 + 30 。
  在保护模式下,内存地址仍然用"段地址:偏移量"的方式来表示。不过,"段地址"的含义不同于实模式下的"段地址"。在实模式下,段地址是物理地址的高地址部分,具体说,是高16位部分。而在保护模式下,段地址是选择子,指向一个结构,这个结构描述了一个内存区域,告知该区域的内存地址从哪里开始,在哪里结束,还告知了这片内存能不能被访问、能不能被读取等数据。这个结构组成一个集合,叫GDT,而这个结构叫GDT项,它有一个术语,叫"描述符"。
  GDT的作用是提供段式存储机制。段式存储机制由段寄存器和GDT共同提供。段寄存器提供段值,即描述符在GDT中的索引,也就是选择子。根据选择子在GDT中找到目标描述符。这个描述符中包含一段内存的初始地址、这段内存的最大地址、这段内存的属性。GDT的构成
  GDT项即全局描述符的长度是8个字节,64个bit,64个位,063位,而不是164位。下图是写了位编号的8个字节。真实的全局描述符是不折行的,这里无法在一行显示全部数据,因此折行了。63|62|61|60|59|58|57|56| 55|54|53|52|51|50|49|48| 47|46|45|44|43|42|41|40| 39|38|37|36|35|34|33|32| 31|30|29|28|27|26|25|24| 23|22|21|20|19|18|17|16| 15|14|13|12|11|10|09|08| 07|06|05|04|03|02|01|00|
  15|14|13|12|11|10|09|08| 07|06|05|04|03|02|01|00| 。段界限1。段界限的 0~15 位。描述符的 0~15 位。
  39|38|37|36|35|34|33|32| 31|30|29|28|27|26|25|24| 23|22|21|20|19|18|17|16| 。段基址1。段基址的 0~23位。描述符的 16~39位。
  55|54|53|52|51|50|49|48| 47|46|45|44|43|42|41|40| 。很复杂,很碎片化,需进一步放大观察。
  43|42|41|40| ,TYPE。4位。
  44 ,S。是否为系统段(待验证)。1位。
  46|45 ,DPL。2位。
  47 ,P。1位。
  上面是一个字节,下面是第二个字节。
  51|50|49|48| 。段界限2。段界限的第 16~19 位。描述符的第 48~51 位。段界限一共有20位。
  52 。AVL。1位。
  53 。0。1位。
  54 。D/B。1位。
  55 。G。1位。
  段属性占用空间的位数:4 + 1 + 2 + 1 + 1 + 1 * 3 = 12。
  63|62|61|60|59|58|57|56| 。段基址2。段基址的第 24~31 位。描述符的第 56~63 位。段基址一共有32位。
  描述符的结构比较复杂,要记住它,有点困难,不过并非不可能记住。作者觉得没有必要一个字节不差地背诵出来。选择子
  描述符的选择子的长度是16位。15|14|13|12|11|10|09|08| 07|06|05|04|03|02|01|00|
  01|00| ,RPL。
  02 ,T1。
  15|14|13|12|11|10|09|08| 07|06|05|04|03 ,描述符在GDT中的索引。段式存储机制的寻址方式
  段地址存储的是描述符的选择子,根据选择子能找到GDT中对应的描述符。从描述符中获取段基址,然后加上段式存储机制中的偏移量,就是线性地址。在当前语境下,线性地址等同物理地址。概念比较
  逻辑地址。段式机制的地址,例如"段地址:偏移量",就是逻辑地址。
  线性地址。在保护模式下,用逻辑地址中的段地址从GDT中找到描述符,然后从描述符中获取段的基址,段基址加上偏移量的结果就是线性地址。
  如上文所言,线性地址目前可视为物理地址。开启分页机制后,线性地址不能等同于物理地址。物理地址是物理内存的一个编号。作者的疑问
  进入保护模式前,为什么需要创建好描述符、选择子、GDT?这些是必要条件吗?
  作者曾认为这些不是必须。再次了解段式存储机制后,改变了看法:进入保护模式前,必须准备好GDT、描述符和描述符选择子。这是由保护模式下的内存寻址方式决定的。
  无论是在实模式下还是保护模式下,都需要使用内存。在保护模式下,怎么找到某片内存呢?保护模式下,使用段式机制。回忆一下,段式存储机制的寻址方式是:
  $
  段地址(选择子)-----》在GDT中找到描述符----》在描述符中找到段基址----》段基址+偏移量 = 线性地址
  $
  不在进入保护模式前准备好选择子、GDT、描述符,就无法在保护模式中使用内存。
  作者还有一个疑问:上面的寻址过程是CPU自动完成的吗?实现描述符C语言描述符
  下面内容的前提是,32位CPU。struct { 	int segmentLimit1:16;															// 段界限1   int segmentBaseAddress1:24;											// 段基址1   char attributeType:4;														// 段属性,TYPE   char attributeS:1;															// 段属性,S   char attributeDPL:2;														// 段属性,DPL   char attributeP:1;															// 段属性,P   char segmentLimit2:4;														// 段界限2   char attributeAVL:1;														// 段属性,AVL   char attributeZero:1;														// 段属性,值为0   char attributeDB:1;															// 段属性,DB   char attributeG:1;															// 段属性,G   char segmentBaseAddress2;												// 段基址2 }GlobalDescriptor;
  上面的用法是错误的。对位域的使用是错的,换成int来使用位域也无能力写正确,因为太麻烦。在这个知识点耗费了不少时间。
  参考书中代码后,写出下面的代码:struct{   unsigned short segmentLimitLow;															// 段界限1,16位,0~15 位。描述符的第 0~15 位。   unsigned short segmentBaseAddressLow;												// 段基址低16位,0~15 位。描述符的第 16~31 位。   unsigned char	segmentBaseAddressMid;												// 段基址 16~23 位。描述符的第 32~39 位。   unsigned char attribute;																		// 段属性。描述符的第 40~47 位。   unsigned char segmentLimitHight_attribute2;				// 段界限 16~19 位,第 20~23 位是段属性。描述符的第 48~55 位。   unsigned char	segmentBaseAddressHigh;												// 段基址 24~31 位。描述符的第 46~63 位。			 }GlobalDescriptor;
  段基址虽然存储在描述符的第 16~39 位 和第 24~31 位两段连续的空间中,但用C语言表示它的时候,却人为地将它拆分成了"低位"、"中位"和"高位"三部分,也就是,把描述符的第 16~39 位拆分成了第 16~31 位和第 32~39 位两段。在C语言中,没有现成的能存储23位的整数类型,却用能存储16位和8位的整数类型。将段基址连在一起的24位拆分,用C语言表示更方便。C语言中的位域
  前面已经用到了位域,那就简单学习一下位域的知识吧。
  用两段代码开始。struct{ 	unsigned int age; 	unsigned int height; }Person; struct{ 	unsigned int age:3;   unsigned int height:4; }Person2;
  第二段代码使用了位域,第一段代码是普通的struct 结构。位域语法与struct 的差异仅在于声明成员变量的语法不同。
  struct 结构中,声明成员变量的语法是unsigned int age 。在位域中,声明成员变量的语法是unsigned int age:3 。后者指定了成员变量使用的bit的数量,是3个,而不是1个字节、8个bit。
  第一段代码创建的Person 占用8个字节,第二段代码创建的Person2 占用4个字节。
  抽象出位域的成员变量的声明语法:dataType VariableName:bitCount 。dataType 只能是int 系列的整数类型,即只能是int 、unsigned int  和 signed int  三种类型,不能是char 等类型。这是语法规定。bitCount 不能超过8个字节。nasm汇编
  用汇编语言表示描述符,是作者写本文的终极目的,前面的一切都是铺垫和基础。C语言表示描述符,在前面写出来,是因为它是作者理解描述符的汇编代码的大功臣。作者在看描述符的汇编代码前,没有学过汇编语言,所以第一次看描述符的汇编代码时,怎么都理解不了。看了别人写的描述符的C语言代码后,才恍然大悟,突然理解了描述符的的汇编代码。
  所以,在前文给出描述符的C代码,一是为了纪念这个大功臣,二是让与曾经看不懂汇编代码的作者一样的读者也能借住C代码理解汇编代码。当然,可能是作者多虑了,读者朋友才不会像作者这么愚钝呢。不使用宏
  第一个问题,创建一个描述符,例如DESC_VIDEO ,语法是什么样的。
  第二个问题。描述符的实质是段基址、段界限和段属性。是直接用代码堆砌出描述符呢还是根据给定的段基址、段界限和段属性经过运算拼凑出描述符?
  先解答第二个问题。直接用代码堆砌出描述符的汇编代码如下:DESC_VIDEO	dw	3120h																											; 描述符的第 0~15 位 	dw	111Fh																																; 描述符的第 16~31 位   db	EFh																																	; 描述符的第 32~39 位   db	42h																																	; 描述符的第 40~47 位   db	00h																																	; 描述符的第 48~55 位   db	FFh																																	; 描述符的第 56~63 位
  与前面的C代码比较,每行对应一个struct的成员变量。从上面的汇编代码能看出段基址、段界限和段属性是什么吗?看不出来,需要计算。而且,总不能拿到给定的段基址、段界限和段属性后,先将它们转换成二进制,然后再分割填到上面的代码中吧?最好是给定段基址、段界限和段属性后,经过一段代码处理,就自动构建了描述符。这就是下面要写的方式。宏
  汇编中的宏类似C语言中的函数,给定参数,函数会完成一些功能。这个宏接收段基址、段界限和段属性,然后生成描述符。
  宏的语法是什么样的?创建一个宏的模板是:%macro macroName paramCount 	;some code 	;some code %endmacro
  创建描述符的宏是:; 三个参数依次是:base(段基址)、limit(段界限)、attribute(段属性) ; 在宏中需用到这三个参数时,对应的代号分别是:%1、%2、%3。 ; base--32位,limit--20位,attribute--12位 %macro Descriptor	3 	dw	%2 & FFFFh															; 段界限的第 0~15 位。16位 	dw	%1 & FFFFh															; 段基址的第 0~15 位。16位。 	db	(%1 & FF0000h) >> 16										; 段基址的第 16~23 位。8位。 	db	%3 & FFh																; 段属性的第 0~7 位。48位。 	db	(%2 & F0000) | (%3 >> 8) 								; 段界限的第 16~20 位 和 段属性的第 8~11 位。56位。 	db	%1 >> 24																; 段基址的第 24~31 位。8位。 %endmacro
  使用这个宏创建一个描述符,代码如下:DESC_VIDEO:	Descriptor	0B8000h		0ffff			0
  段属性是随便设置的。描述符的段属性比较复杂。作者暂时没有弄清楚。
  路漫漫其修远兮,吾将上下而求索。

白色面板又回归了,魅族18也新增白色面板,限量88台近两年来,随着全能屏的普及,以及消费者和厂商对屏幕比例的极端追求,市场上很少有前面板为白色的车型,主要是因为在高屏比例下,白色前面板的生产难度很大,成品率很低。因此,2021年已经这算不算千元机皇?5000mAh30W闪充,120Hz高刷仅1299元此次,真我发布了三款新机型,分别是Q3proQ3和Q3i,看一下刚刚发布的中端产品Q3。让我们来看看这款新机型的实际表现吧!首先,在外观方面。炫彩的后盖ID设计还是挺上头的,布林布决策参考消息称快手2019年营收目标300亿元Netflix拥抱广告1消息称快手2019年营收目标300亿元,直播和广告占大头事件5月13日,界面新闻从知情人士处获悉,快手将2019年的营收目标定位在300亿元,可以实现小幅盈利,直播和广告是主要收决策参考李彦宏王坚等入选中国工程院候选院士名单1李彦宏王坚等入选中国工程院候选院士名单事件4月30日下午消息,中国工程院公布了2019年院士增选有效候选人名单。经中国工程院主席团审定,最终确定的有效候选人共531位。今年来自企打马灯的女人13岁少年笔下的绝唱编者按打马灯的女人,已获授权,转自丘现田(写作时仅13岁)发表在读者上的一篇文章。作者丘现田,不仅写下亲人回忆,几个时代小人物的悲欢离合,更有对打马灯历史文化追溯。如今,广东打马灯传字节跳动转让老股筹备IPO百度AI开发者大会李彦宏被泼水1中国工程院院士5G之后还有6G事件近日,中国科协年会举行高端对话5G与未来,中国工程院院士邬贺铨邓中翰29日指出,5G是移动通信技术发展的一种必然趋势,在5G之后还有6G,跟政治首批5G网络覆盖城市名单公布中国电影票房9年来首现负增长1首批5G网络覆盖城市名单公布40城将率先获益事件近日,中国移动与中国联通公布了首批5G网络覆盖城市,两大运营商将覆盖至少40个城市,并在部分城市推出5G服务。首批支持5G网络的城工信部发放四张5G商用牌照字节跳动12。6亿获虎扑30股权1工信部发放四张5G商用牌照事件6月6日,工业和信息化部向三大电信运营商中国移动中国联通中国电信和中国广播电视网络有限公司正式发放5G牌照,批准这四家企业经营第五代数字蜂窝移动通信雷布斯又双叒发钱了,连续三波,包括金山8000员工雷布斯又双叒发钱了,连续三波,包括金山8000员工,小米优秀青年工程师,小米技术专家中高层管理者和新十年创业者计划入选人士等。这里有三点可以说一说,第一,发的其实不是钱,而是期权和罗永浩回应行业冥灯称号,还道出了投资圈的小秘密罗永浩回应行业冥灯称号,还道出了投资圈的小秘密。近日,老罗罗永浩在微博上回应了此前有人对他的评价,做啥啥失败,为啥还有人继续投资。其实,在老罗看来,投资行为其实是一场收益与风险之前小米平板5真的要来了,性能超越华为Matepad11,但是真的有用吗?小米平板5这回真的要来了,性能超越华为Matepad11,但是真的有用吗?最近,有博主爆料说,小米即将推出的新平板已经正式入网工信部了。如果消息属实,那么距离小米平板5的发布也就不
电信有哪些好用的手机卡?您好,电信有很多套餐都很划算的,可以根据需求来选择想要流量高的,推荐电信星卡星卡19元套餐,包含30G定向流量星卡39元流量版,每月10G国内通用流量和30G定向流量,国内接听免费中国移动评5G通信指数最强机,ColorOS加持的OPPOFindX3登顶中国移动终端实验室近日发布了中国移动5G通信指数报告,对目前市售的5G手机产品通过数据传输性能关键功能通话性能和功耗性能四个维度进行了综合测试,其中OPPOFindX3凭借出色的软到底什么是黑车?滴滴车主私家车注册成功可以接单,但没有所谓的双证,也是黑车吗?是的,这就是黑车!为什么这样说呢,所谓的黑车就是指,车辆或者司机没有取得相关的营运资质就是非法营运的黑车!简单的说就是所有收你钱而又没有经营许可的车辆都是黑车,包括大多数的顺风车!27号前小米能推送完12。5增强版的系统吗?从小米社区及社交平台的网友反馈来看,有部分用户表示已经收到MIUI12。5增强版的升级,但也有用户称,刷新键都要点烂了也没有更新。官方表示,受限于带宽和众多机型发版安排等因素,全量魅族手机没人买了?骁龙888零广告系统,从4399元跌至3399元众所周知魅族是国产品牌里智能机的鼻祖,早在iPhone4的年代就推出了搭载WinCE系统的魅族M8,在当时引起了很大轰动,但之后由于种种原因,使得它如今已经沦为小众厂商,每年只能够2021中国国际数字经济博览会冀深无人系统合作峰会9月7日举行9月7日,以推动无人机产业落地河北,促进无人机产业一体化发展为主题的冀深无人机产业合作峰会将在石家庄举办。本次峰会由中国国际数字经济博览会组委会主办,深圳市无人机行业协会河北省电子最近想买台电脑,但是对电脑硬件又一窍不通,想请大家给些建议?选择电脑,首要考虑的是你入手这台电脑的应用目的是什么?然后根据你的应用目的,再请专业电脑人员为你建议配置与你所需要相匹配的电脑,这样比较实际的有的放矢地配置电脑再有,根据自己的实际红米K50配置被曝光,两大硬件升级,预定年度水桶机称号如今的红米已经掌握中国中低端智能手机市场的话语权,可以说是众多国产友商学习的榜样,也是它们无法轻易忽视的对手。是的,卢伟冰打造产品的能力很强,目前又一款神秘旗舰渐渐浮出水面,它就是减少充电线的堆积,而且安全性能高,aigo插座简评现在我们家用的电子产品越来越多,我们每天都要给各种各样的电子产品充电?但是,家里固定的插座只有那么几个,往往不够用。所以每次给不同产品充电的时候都要拔来拔去的,很麻烦。有人可能会说明基E530老师用智能投影仪来教课,比写板书有效得多村里的学校都没啥钱,但也不算穷,很多都用传统的教师写板书的形式教学。小学课余期间的活动也只是简单的老鹰捉小鸡类,很简单,升初中的小孩见识都比较短,全靠家长平时带学生去学习更多的知识整车下线才是真正扭转百度估值模式的关键本文系深潜atom第317篇原创作品有一则朴素的寓言故事是这么说的围绕着新生牛犊要不要下地,两个老农展开了激烈的交锋。张老汉说,不让下地,怎会犁地?李老汉说,不会犁地,怎能下地?这