资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
查阅资料,分析X86如何实现用户进程与用户进程之间、用户进程 与操作系统之间的隔离;分析分段系统和段页式系统的地址变换机 制。X86的隔离机制主要是通过全局描述符表(GDT)和局部描述符 表(LDT )来实现,其中全局描述符表里装载的是可供系统中所有任 务使用的段描述符。局部描述符表只含有与系统中某一个给定任务相 关联的描述符。那么什么是段描述符呢,在CPU的保护模式下,把有关一个段 的信息即段基址、限长(段的字节数,个人理解是偏移量)、类型、 访问权限成为段描述符,简称描述符(Descriptor)其中描述符又分 为非系统段描述符和系统段描述符。非系统段即应用程序段,也就是 通常的代码段、数据段、和堆栈段;而系统段包括任务状态段TSS (Task State Segment )和各种门,另外,局部描述符表也作为一种系 统段。任务状态段是多任务系统中的一种特殊数据结构,它对应一个 任务的各种信息。为了查找和识别,把系统中的描述符以线性表的形式来组织,即 构成描述符表。描述符表的每一项就是一个描述符。描述符表由操作 系统建立,并由操作系统维护和管理。三种类型的描述符表:GDT,LDT和IDT (中断描述符表)诠局描述附表GDT含有可供系统中所有任务使用的段描述符。 局部描述符表LDT只含有与系统中某一个给定任务相关联的描述符。中断描述符表IDT含有指出各中断服务程序位置及相关属性 信息的描述符。由于描述符表是位于存储器中的,因此系统中分别用一个寄存器 来指出其位置,并称该寄存器为描述符表寄存器一共有三个描述 符表寄存器:GDTR,LDTR,IDTR。每个段描述符都有一个与之对应的段选择符。在保护模式下,16 位段寄存器的内容即为段选择符。段选择符对GDT或LDT提供索引、 全局/局部标志以及请求特权级信息。即用段选择赴的高13位来选择 描述符表中8192个描述符中的一个描述符(273=8192), 13次方用段 选择符的右数第3位决定是从GDT中还是从LDT中选择描述符,用 段选择赴的最低两位指出请求特权级 下图是16位寄存器的内容(段 选择符)3210TIRPL段选择符全局描述符表局部描述符表图15.1段选择符的格式及功能索引:位153。在全局描述符表GDT或局部描述符表LDT 的8192个描述符中选择一个描述符。处理器将索引值乘8 (因为8 字节),再加上GDT或LDT的基址,结果用来选择一个段描述符。TI:位2。表指示器,指定要用的描述符表,该位复位时, 选择GDT;该位置位时,选择LDT。 RPL:位10。请求特权级,指定选择符的特权级。特权级 为03,为0时特权级最高 假定LDT的基址为00120000H,GDT的基址为00100000H。如果装入CS寄存器的选择符的值为1007H,那么请求特权级是多少?是GDT还是LDT的段描述符?段描述符的地址是什么?解将选择符用二进制表示,得到CS=0001000000000111B,由于最低两位为11,所以请求特权级RPL=3。右数第3位(表指示器TI位)为1,说明段描述符位于LDT中。将最左13位的值乘以8,即可得到描述符相对于表基址的偏移量:偏移量 OFFSET=0001000000000B X8 = 1000H段描述符地址为:00120000H+1000H = 00121000H。这里因为选择的是LDT: 00120000物理存储器图15.3全局描述符表机制GDTR是80386DX中的48位寄存器。该寄存器的低2个字节在图15.3中标为限长(LIMIT)16位,它规定了 GDT按字节算的大小。限长的值要比表的实际大小小1。例如,如果限长等于00FFH,贝U表 的大小为256 (2的八次方)个字节。由于限长字段为16位,所以 GDT最大可达65536 (2的16次方)字节长。GDTR的高7个字节,在图153中标为基址(BASE),用以指示物理 存储器中GDT的开始位置。该32位基址(对)允许GDT定位在80386DX线性地址空间的任何地方如果全局描述符表寄存器(GDTR)中的限长和基址分别为0FFFH和 00100000H,则描述符表的起始地址是多少?表按字节算有多大?表的 结束地址是多少?全局描述符表在物理存储器中的起始地址由GDTR中的基址字段给 出,所以,全局描述符表的起始地址为:GDTSTART=00100000H。限长是表尾到表头的偏移量,所以,表的结束地址为:GDTEND = 00100000H+0FFFH=00100FFFH最后,表的大小等于限长的值加1:GDTSIZE=0FFFH+1=4096 字节。80386 DX在从实模式转到保护模式之前必须将基址和限长的值装 入GDTR寄存器,80386DX的系统控制指令(特权指令)集提供了这 一类指令。每个任务除了可访问全局描述符表外还可访问它自己的专用描述符 表。该专用描述符表称为局部描述符表(LDT),它定义了任务所使用 的局部存储器地址空间LDT中的段描述符可用来访问当前任务存储器段中的代码和数据由于每项任务都有它自己的存储器段,因此保护模式的软件系统可能 会包含许多局部描述符表。物理存储器说明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分段机制:http:/blog.csdn.net/happyfyshan/article/details/2403669#userconsent#进程权限:http:/blog.csdn.net/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文件系统格式的讨论在 网上内容很多,如下链接就是一例:http:/www.baidu.com/#wd二fatl6%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F&rs v_spt=l&issp二1&rsv_bp=0&ie二utf-8&tn二baiduhome_pg&rsv_sug3=3&rsv_sug4二 218&rsv_sugl=2&oq二FAT16&rsv_sug2=0&f=3&rsp=8&inputT=14141如果你想完成这个任务的话,那么就要分析FAT文件系统结构,然后编程实现。 这个实验可以在minix、linux、windows上做,使用哪一个操作系统我不限制你。 大家可以找一个软盘映像文件(img文件),把这个img文件映射到VMWare虚拟 机的一个软盘驱动器,你的程序访问这张软盘,通过分析软盘上的FAT文件系统 就可以列出软盘上的文件目录。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号