q8分析x86和分段系统操作系统me.doc_第1页
q8分析x86和分段系统操作系统me.doc_第2页
q8分析x86和分段系统操作系统me.doc_第3页
q8分析x86和分段系统操作系统me.doc_第4页
q8分析x86和分段系统操作系统me.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

查阅资料,分析X86如何实现用户进程与用户进程之间、用户进程与操作系统之间的隔离;分析分段系统和段页式系统的地址变换机制。X86的隔离机制主要是通过全局描述符表(GDT)和局部描述符表(LDT)来实现,其中全局描述符表里装载的是可供系统中所有任务使用的段描述符。局部描述符表只含有与系统中某一个给定任务相关联的描述符。那么什么是段描述符呢,在CPU的保护模式下,把有关一个段的信息即段基址、限长(段的字节数,个人理解是偏移量)、类型、访问权限成为段描述符,简称描述符(Descriptor)其中描述符又分为非系统段描述符和系统段描述符。非系统段即应用程序段,也就是通常的代码段、数据段、和堆栈段;而系统段包括任务状态段TSS(Task State Segment)和各种门,另外,局部描述符表也作为一种系统段。任务状态段是多任务系统中的一种特殊数据结构,它对应一个任务的各种信息。为了查找和识别,把系统中的描述符以线性表的形式来组织,即构成描述符表。描述符表的每一项就是一个描述符。描述符表由操作系统建立,并由操作系统维护和管理。三种类型的描述符表:GDT,LDT和IDT(中断描述符表)全局描述附表GDT含有可供系统中所有任务使用的段描述符。局部描述符表LDT只含有与系统中某一个给定任务相关联的描述符。 中断描述符表IDT含有指出各中断服务程序位置及相关属性信息的描述符。由于描述符表是位于存储器中的,因此系统中分别用一个寄存器来指出其位置,并称该寄存器为描述符表寄存器一共有三个描述符表寄存器:GDTR,LDTR,IDTR。153201全局描述符表局部描述符表段选择符(16位)图15.1 段选择符的格式及功能每个段描述符都有一个与之对应的段选择符。在保护模式下,16位段寄存器的内容即为段选择符。段选择符对GDT或LDT提供索引、全局/局部标志以及请求特权级信息。即用段选择赴的高13位来选择描述符表中8192个描述符中的一个描述符(213=8192),13次方用段选择符的右数第3位决定是从GDT中还是从LDT中选择描述符,用段选择赴的最低两位指出请求特权级。下图是16位寄存器的内容(段选择符) 索引:位153。在全局描述符表GDT或局部描述符表LDT的8192个描述符中选择一个描述符。处理器将索引值乘8(因为8字节),再加上GDT或LDT的基址,结果用来选择一个段描述符。 TI:位2。表指示器,指定要用的描述符表,该位复位时,选择GDT;该位置位时,选择LDT。 RPL:位10。请求特权级,指定选择符的特权级。特权级为0,为0时特权级最高。 假定LDT的基址为00120000H,GDT的基址为00100000H。如果装入CS寄存器的选择符的值为1007H,那么请求特权级是多少?是GDT还是LDT的段描述符?段描述符的地址是什么?解 将选择符用二进制表示,得到CS0001000000000111B,由于最低两位为11,所以请求特权级RPL3。 右数第3位(表指示器TI位)为1,说明段描述符位于LDT中。 将最左13位的值乘以8,即可得到描述符相对于表基址的偏移量: 偏移量OFFSET0001000000000B81000H; 段描述符地址为: 00120000H+1000H00121000H。/这里因为选择的是LDT:0012000016 1540 39470 图15.3 全局描述符表机制全局描述符表寄存器(GDTR) 物理存储器7GDTR是80386DX中的48位寄存器。该寄存器的低2个字节在图15.3中标为限长(LIMIT)16位,它规定了GDT按字节算的大小。限长的值要比表的实际大小小1。例如,如果限长等于00FFH,则表的大小为256(2的八次方)个字节。由于限长字段为16位,所以GDT最大可达65536(2的16次方)字节长。GDTR的高7个字节,在图15.3中标为基址(BASE),用以指示物理存储器中GDT的开始位置。该32位基址(对)允许GDT定位在80386DX线性地址空间的任何地方如果全局描述符表寄存器(GDTR)中的限长和基址分别为0FFFH和00100000H,则描述符表的起始地址是多少? 表按字节算有多大?表的结束地址是多少?全局描述符表在物理存储器中的起始地址由GDTR中的基址字段给出,所以,全局描述符表的起始地址为: GDTSTART00100000H。限长是表尾到表头的偏移量,所以,表的结束地址为: GDTEND00100000H+0FFFH00100FFFH最后,表的大小等于限长的值加1:GDTSIZE0FFFH+14096字节。 80386 DX在从实模式转到保护模式之前必须将基址和限长的值装入GDTR寄存器,80386DX的系统控制指令(特权指令)集提供了这一类指令。每个任务除了可访问全局描述符表外还可访问它自己的专用描述符表。该专用描述符表称为局部描述符表(LDT),它定义了任务所使用的局部存储器地址空间。LDT中的段描述符可用来访问当前任务存储器段中的代码和数据。由于每项任务都有它自己的存储器段,因此保护模式的软件系统可能会包含许多局部描述符表。LDTR选择符 150LDTR高速缓存限长基址 15031程序不可见80386DX 物理存储器 GDTLDT0LDTn 图15.5 (a) 带全局和局部描述表的任务GDTR限长基址 15031说明16位的LDTR的值并不直接定义一个局部描述符表。它只是一个指向GDT中LDT描述符的选择符。如果LDTR中装入了选择符, 相应的LDT描述符(右边的就是描述符表,一段与段的就死描述符了)就能够从存储器的全局描述符表中读出来并装入CPU内部的“LDTR高速缓存”中。正是这个描述符才确定了局部描述符表32位的基址值标识物理存储器中LDT的起始位置(对),16位的限长值定义LDT的大小(对)。将该描述符装入高速缓存就为当前任务创建了一个LDT。也就是说,每次LDTR中装入选择符,则局部描述符表的描述符被缓存,从而激活一个新的LDT。讲了这么多,总结一下,也就是说X86的隔离机制是在CPU的保护模式下才存在的机制,它靠GDT和LDT来实现的,其中GDT保存有所有进程都可以引用的资料,LDT则是保存有可用来访问当前任务存储器中的代码段和数据段,其中值得注意的是,LDT的值并没有直接定义一个局部描述表。它单纯地指向了GDT,而GDT里面装载有LDT描述符的选择符对,当LDTR中装载有相应的选择符的时候,它就能从GDT中找出相应的描述符表,从而确定当前任务存储器中所定义的代码段数据段和堆栈段的地址范围,避免越界操作。X86分段机制:/happyfyshan/article/details/2403669#userconsent#进程权限:/fysy0000/article/details/6659612#userconsent#最后一个实验的内容(早就发给你们了)是:1、修改MINIX源代码,在其中实现P,V操作。2、编程显示MINIX主文件系统中根目录中的文件名。选做题:编程显示MINIX主文件系统的整个目录树。考虑到目前学生的现状,第二题“编程显示MINIX主文件系统中根目录中的文件名”改为“编程显示DOS(FAT)文件系统中根目录中的文件名”,并且也留作是选做题吧,也就是说,大家实现“1、修改MINIX源代码,在其中实现P,V操作。”就可以了。原来的选做题“编程显示MINIX主文件系统的整个目录树。”仍然是选做题。大家根据自身的情况决定是否做选做题。“1、修改MINIX源代码,在其中实现P,V操作。”如果大家做起来有困难我会给大家讲解,或者提供一些材料参考。MS-DOS、Windows XP支持FAT文件系统格式,关于FAT文件系统格式的讨论在网上内容很多,如下链接就是一例:/#wd=fat16%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&rsv_sug3=3&rsv_sug4=218&rsv_sug1=2&oq=FAT16&rsv_sug2=0&f=3&rsp=8&i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论