版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、开题报告计算机技术高速发展的今天,对于计算机系统底层技术的掌握,已经到了至关重要的时候,尤其是操作系统、编译原理等核心技术的研究。这些核心技术,直接关系到一个公司、一个国家是否有自己真正知识产权的问题。操作系统和编译原理是计算机领域的两个重大课题。之所以说它们重大,是因为这两个方向既重要(计算机的核心技术)又庞杂。随着硬件的不断升级和各种相关技术的发展,(由于intel与amd公司竞争的越来越激烈,cpu的更新速度会越来越快j,而其结构也会相应发生更大的改变。)操作系统也会随之不断更新和发展。如现在基于网络的分布式操作系统、基于多个cpu的多处理机操作系统等等。现在cpu最新的研究方向是“乱序
2、发射”,当它有了更新的发展之后,相信操作系统还会随之做相应的改变。对于编译器的研发也是极具挑战的。由于编译原理本身涉及很多的算法,加之又与cpu有着紧密的联系,所以能够对其进行深入研究的人为之甚少。不用说对代码优化,就是使用yacc工具产生一个语法分析器的人,在中国的本科生中也不是很多。那么,研究它们有何意义呢?很多软件开发人员觉得没有必要过深的去研究这些核心技术。“我们大多是搞应用的,更应关注的是如何把应用做好,如何给企业带来更大的利润,而不应该去把时间浪费在研究底层上面,而且又那么难懂、麻烦”。通过分析这句话,可以得出这样一个结论:应用简单,我们就做。而麻烦、难懂的东西,我们不做。然而我却
3、不这样认为。作为应用软件的开发人员,我们当然应该更多的关注如何把应用做好,如何使用户操作起来更加简便。但是,如果不了解系统的底层,不了解系统的运行原理,我们在以后就会遇到很多麻烦,也很难做出好的应用程序。可以举个现实的例子,我们花了很长时间学习了一种新的技术。如vc(mfc的结构很难懂呦l)。但计算机行业里新技术很快就会过时,又会出现更新的技术。由于项目要求必须采用新的技术和语言,所以我们只能再去学习。于是我们就在一个又另一个新技术之间疲于奔命,当我们再也没有精力去学习的时候,我们也就随着新技术的出现而被淘汰了l。可悲!可叹!而中国的软件程序员的命运大多如此。正所谓 “无源之水、无本之木”。为
4、什么会这样呢?这当然有程序员本身的原因,但我觉得更多的还是社会导向的原因。如果我们不是这样急功近利,多花一些时间去研读一下系统的底层,那我们的情况就会大不一样。我们会发现,其实这些所谓的新技术,大多不过是商家为了商业的目的而做的一些“装簧”罢了。举个例子,如“回调函数”其实就是一个指针函数,钩子函数就是一种特殊的回调函数,其实还是一个指针函数。它们来做什么用的呢,找段代码分析一下我们就会发现,原来是为了实现软件框架而使用的一种技术。还有指针,其实就是地址的意思。还搞的特别神秘似的l。磨刀不误砍柴功!所以我们做事情搞学问就要踏踏实实。尤其是在中国,这一点就显得更为重要了。下面我就要一步一步进入我
5、的正题了,关于学习保护模式的意义。首先引入www.oldl论坛上的一个帖子。它是关于学习linux内核意义的讨论,这又与保护模式有什么关系呢?当然有关系了,而且还有很强的联系(否则我这段企不是没有任何意义了j)。应该说80386不仅与linux有紧密的联系,而且它还和其它在intel cpu上开发的很多操作系统有着紧密的联系。先让我们来看一下他们的讨论吧。我想无论做什么事,考虑什么问题,首先一点应该知道这件事的到底有何意义。即所谓的出师有名,所以我提出这个问题,大家来讨论一下学习linux的重大意义在那里。我曾和我身边的人说我正在学习linux内核,一些人觉得这个很深奥,一些人
6、很不屑。他们说学习它有什么意义吗?linux red hat 才50元一套,难道你想自己开发一个操作系统?即使你开发出来了,别人会用吗?而且学习底层的东西要学的东西太多,花的精力也太多。这有必要吗。现在只要学好java就能赚钱,还不如把这些时间放到学习j2ee的好。多看看数据结构和算法。以后挣钱是肯定的。你开发出一套自己的操作系统又能挣多少钱?况且 linux 很多公司做的已经相当成熟,你做出来的东东会有人用吗?所以这个只能玩玩,没有多大意义。 面对上述的说法你们的想法是什么?难道学习linux内核只能是玩玩而以吗? by lgr 学习linux内核是为了更好地了解一个操作系统的运行原理,从而
7、能够轻松地理解几乎所有运行在其上的所有软件的工作原理,并能为应用软件的开发打下扎实的基础。一个真正的编程高手是肯定对操作系统的工作原理有一定的了解的,而且了解越深就能编制出越好的软件来。也许我说的有些绝对,但几乎没有人会完全反对我的这种论调。当然,学习内核还有很多其他原因。作为理解嵌入式系统工作原理、更好地熟练地掌握c语言、了解硬件与软件的交互关系等等。如果学习的直接目的只是为了挣钱,那么我认为这个目的或目的太短浅。钱是为了生活、生存,当然也是富有的表现。但它并不能代表你的精神生活有多么得充实。以我之见,人活着的最根本目的是为了追求快乐、幸福。但有了很多钱并不就很快乐。君不见富翁跳楼自杀者现象
8、吗?照理他们这种做法是荒唐的,因为已有大把大把的钱。很可惜,人不是一般动物。人还需要精神享受。因此,如果在学习中不仅能掌握基础知识(我把内核当作基础知识),还能从学习基础知识中获得乐趣,这也不免是一件一举两得的事。若自己想编制自己的操作系统,这也可以,只要乐在其中:)说白一点,学习操作系统的工作原理,主要目的是促进应用程序的编程。理解内核你就能用更好的思路编制应用程序,从而。因此娱乐与生活最终还是可以统一的:) by 赵烔 linux内核完全注释的作者c语言高手通常会或多或少的了解汇编语言c语言专家,或多或少需要浏览c标准库源代码甚至编译器源代码优化c或汇编语言的性能,或多或少需要了解cpu的
9、运算机制编写操作系统,或多或少需要了解cpu的运作机制 by engumen linux高手看一下梁肇新的编程高手缄言,就知道一个程序员如果不知道操作系统是干什么,不知道数据结构,不知道计算机体系结构,不了解编译器对于一个程序员来说是干什么的,而只是一味地追求java,.net这个编程工具,那么这个程序员肯定会陷入java,.net挖的看起来像金子般的坑,而无法自拔! by love-centry 论坛版主从上面几位高手的讨论中我们可以看出,在他们眼里学习linux内核有多么的重要了。既然这些大“牛”们都认为学习linux很重要,对于我们这些“菜鸟”,当然应该顺着光辉方向勇往直前了j。linu
10、x的开源给了我们机会,一窥一个真正的,强大的操作系统到底是如何工作的。在真实的操作系统里,处理机是如何分配的,进程是如何体现的,文件管理又在系统中占有怎样的位置呢,这些疑问终于可以通过对linux源代码的分析而得到。使我们不光只是在操作系统的原理课上知道一些它的原理,而且还真的感受到操作系统确实是在真正运行着的,那种只见树木不见森林的状况有了很大的改观。然而要想看懂linux这么庞大的东西,不知道“保护模式”是不成的。操作系统是直接在硬件上运行的。它在软件与硬件之间搭起了一座桥。软件必须通过操作系统才能与硬件沟通。而硬件同样也需要操作系统将它完成的结果告诉给软件,所以操作系统的地位就显得格外重
11、要了。它是不允许其它软件对其进行破坏的,否则企不是整个世界就要崩溃了l,所以就要对其进行保护。用软件的方法行吗?当然是不行了。软件来保护软件,那谁又来保护它呢。(都快把我绕晕了l)。看来还是硬件进行保护来的直接。那么它应该如何进行保护呢?(终于切入正题了j)当然是保护模式了。所以在我进行linux内核源代码的研读之前,来仔细研究一下保护模式的工作原理是很有必要的。那么关于保护模式我们都要了解那些东西呢?我觉得至少要知道下面几个方面的知识:什么是实模式,什么是保护模式、为什么要使用保护模式,如何从实模式转到保护模式、在保护模式下硬件上是怎样实现分段、分页的,从而保护操作系统的等等。上面我已经对我
12、要写的论文的目的和意义做了一个说明,就算是我这篇论文的开题报告了。以后的时间里我就要逐步、细致的讨论保护模式的方方面面。在这里,先预祝我们:一路成功j。前言从linux1.0的正式发布,linux就给软件行业带来了一个惊喜。它结构的完整性、功能的强大性、源代码的开放性、发展的快速性,每一项都使得人们不得不将它另眼相看。linux用短短的十几年的时间走完了unix几十年才走完的路程。由于linux的开源使得全世界的hacker们都能够阅读它的源代码,提出自己的想法,并将他们优秀、经典的想法放到linux中来实现。正是这种集体的力量才使linux发展的如此迅速。而这种开源的方式也使得linux的源
13、代码得到了全世界hacker们的严格检查,使得它的代码更加精简、功能更加强大。windows的图形界面带领普通用户进入了计算机的世界,这当然是好的一面,微软也因此得到了巨大的回报。然而由于商业的关系,使得我们(特别是从事计算机专业的人们)无法看到它的内部核心代码,这在我们开发自己应用程序的时候,受到了很大的约束。虽然开发简单了,操作也方便了(这里是指windows给我们提供了大量的api,使我们在开发上方便了),但它同样给我们带来了巨大的损失,这一点相信学过mfc的人都深有感处。说明程序员只能在mfc框架内进行程序开发,而不能超出其框架,否则,付出的代价是巨大的。而由于项目的需要,mfc的框架
14、可能不能满足项目的需要,这时矛盾就产生了。所以它是一把双刃剑。如果我们一味的依赖微软这种不开源的产品,不能了解它的核心,其结果就是,使我们这样一个世界大国,却在软件业无法形成自己真正的产品。也就是说,如果微软不给我们提供操作接口,我们上层的产品很多就无法进行开发。wps与word在字处理软件的竞争就很好的证明了这一点。(说句实说,wps在功能上和操作的方便性上根本无法与word比较,如果是我的话,我是绝对不会在有word的情况下去使用wps的,除非。)导致这种结果的是什么原因呢?无非是我们对windows里面的机制不了解,不知道它内部是如何实现的。当然还有硬件上的原因(比如cpu等,不过,中国
15、龙芯cpu系列的生产给我们带来了希望j)。如何去改变这一现象,是摆在我们每一个人(这里指软件开发人员)面前的一道难题。恰恰是linux的出现,将我们面前的这道不可逾越的鸿沟轻而易举的填平了。所以全世界的软件开发人员投入了linux的大军中,学习它,使用它,品味它,修善它。它给我们带来了无限的商机,无限的利益。我们终于可以有我们自己的产品了,不再受制于windows。因为我们可以看到linux的所有源代码,并可以将我们的思想加入到其中,使它为我们所用。我们看到了linux的好处,但如何才能真正的掌握linux,将它用好,并发挥的淋漓尽致呢?当然是阅读它的源代码了,难道还有比这个更直接更好的方法吗
16、l。不过linux的源代码是如此庞大,岂能是谁说阅读就能读得了的。现在遇到问题了,我们下一步就是如何解决问题j。解决的方法很简单,就是在阅读它之前先对一些基础知识进行一下饿补。unix操作系统设计、80386保护模式、接口原理等等。l这么多东西要补呀!那自是当然,linux操作系统可不是玩具j。不过我们(软件开发人员)不可能是一点基础没有的人。(否则我真不知道你大学这四年里到底学了些什么l)我想,这里一个很重要的,也是对于阅读代码很有帮助的就是80386保护模式的知识了。(啊!终于写到正题了。j)。为什么要学习80386保护模式呢?有以下几点原因:第一、 linux最开始就是在一台intel
17、80386上开发的。第二、 intel直到80386才真正的实现了32位的保护模式(80286是16位的保护模式),以后的机型基本上都采用这种模式,框架变化不大。而软件当然要跟着硬件“跑”了,否则“皮之不存毛之焉附”。第三、 操作系统要和硬件和软件两方面打交道。而80386保护模式为操作系统的实现和保护提供了硬件保证和支持。在前言的最后,我还要介绍一下我的章节安排。这篇论文共分为九部分。80386保护模式概述,介绍了80386的一些基本概念。80386体系架构综述,主要描述80386中对操作系统进行保护的机制的总体结构。描述符介绍了它的在保护模式中的基本特征及其作用。内存管理介绍了80386对
18、内存进行管理的一系列保护机制。门描述符是描述符的一种特殊形式,之所以在这里单独列出一个章节是因为它在保护模式中的内容很多,单独拿出一章来可以更好的将其描述清楚。任务管理说明了在保护模式下,多个任务之间是如何进行任务切换的从而实现多任务处理功能的。中断与异常处理不再使用实模式下的中断向量表,80386对其进行了另行处理,使得中断与异常处理也纳入到了保护的机制下。输入输出保护实现了对i/o操作的保护,只有操作系统允许的情况下,用户程序才可以对i/o进行操作。操作系统引导这一章主要是说明linux是如何引导启动的,从而将一个真正的、强大的操作系统运行起来的。好了,说了这么多没有一点实质的东西,这可不
19、是我的本色。下面的章节我们就开始我们的80386保护模式的学习之旅吧j!80386保护模式概述intel对80386处理器的描述the 80386 is an advanced 32-bit microprocessor optimized for multitasking operating systems and designed for applications needing very high performance. the 32-bit registers and data paths support 32-bit addresses and data types. the pr
20、ocessor can address up to four gigabytes of physical memory and 64 terabytes (246 bytes) of virtual memory. the on-chip memory-management facilities include address translation registers, advanced multitasking hardware, a protection mechanism, and paged virtual memory. special debugging registers pr
21、ovide data and code breakpoints even in rom-based software.80386是一种高级32位多任务微处理器,这种处理器是为高要求的应用而设计的。32位的寄存器与数据路径支持32位的地址和数据类型。处理器能寻址到4g的物理内存和64t的虚拟内存。内存管理设备包括地址转换寄存器、高级多任务硬件、保护机制和分页虚拟内存。专门的调试寄存器,即使在只读寄存器软件中也提供代码和数据的断点调试功能。什么是保护模式我们只要到中输入“protected mode”这个关键字,我们就可以找到很多链接,在what is protected mode?the 808
22、8 cpu used in the original ibm pc was not very scalable. in particular, there was no easy way to access more than 1 megabyte of physical memory. to get around this while allowing backward compatability, intel designed the 80286 cpu with two modes of operation: real mode, in which the 286 acts like a
23、 fast 8088, and protected mode (now called 16-bit protected mode). protected mode allows programs to access more than 1 megabyte of physical memory, and protects against misuse of memory (i.e. programs cant execute a data segment, or write into a code segment). an improved version, 32-bit protected
24、mode, first appeared on the 386 cpu. 什么是保护模式? ibm pc最初使用的是8088 cpu,它的扩展性很差。尤其是,没有一种容易的方法访问超过1m的物理内存。为了向后兼容,intel将 80286 cpu设计成两种模式:实模式和保护模式。实模式下286就像一台快速8088一样工作。在保护模式下(现在称为16位保护模式)允许程序访问1m以上的物理内存,并保护物理内存不被误使用(例如,程序不能执行数据段或对代码段进行写操作)。32位保护模式是16位保护模式的改进版本,首先是在386上实现的。保护模式与实模式有什么不同实模式16位保护模式32位保护模式段基址
25、16*段寄存器(20位)段选子(24位)段选子(32位)段界限 64k(16位)64k(16位)1m或4g(20位) 段保护没有有有段寄存器段基址/16 段选子段选子分析上面表格,做出以下几点说明:在实模式下,地址总线是20位的。所以在计算实际物理地址时要进行如下换算。物理地址 = 段基址 4 + 偏移地址物理地址等于段基址左移4位再加上偏移地址。而保护模式下的物理地址要通过段描述符才能计算出来。对于这一点我将在后面做详细介绍。在16位地址总线上,段界限最大为64k。也就是说,一个段最大寻址范围只能从段基址到它向后寻址64k的地方,再大点它也够不到了j。而且每一个段的大小是固定的,而32地址总
26、线可以访问的最大地址空间为4g。而且还可以根据需要,设置段界限的大小和设置段界限的单位长度。它提供了两种单位长度,一种是以字节为单位,一种是以4k为单位。根据段描述符的g位来选择。这一点我到后面还会详细论述。现在只要知道在32位地址总线下,段界线可以是1m或4g就可以了。在实模式下不进行段保护,而在保护模式下却可以对段进行细致的保护。如:段是否可用,段的大小是多少,是代码段还是数据段,段的特权级是多少等等。而在实模式下这些是不存在的。在实模式下段寄存器是16位的,在计算物理地址时是通过移位然后加偏移地址来实现的。在32位保护模式下,段寄存器同样是16位的,但这些在实模式下存放段基址的寄存器到了
27、保护模式下,却用来存放段选择子了。关于段选择子的概念我将在稍后介绍。intel对几种模式的说明the processing mode of the 80386 also determines the features that are accessible. the 80386 has three processing modes:1. protected mode.2. real-address mode.3. virtual 8086 mode.protected mode is the natural 32-bit environment of the 80386 processor.
28、in this mode all instructions and features are available.real-address mode (often called just real mode) is the mode of theprocessor immediately after reset. in real mode the 80386 appears to programmers as a fast 8086 with some new instructions. most applications of the 80386 will use real mode for
29、 initialization only.virtual 8086 mode (also called v86 mode) is a dynamic mode in the sensethat the processor can switch repeatedly and rapidly between v86 mode andprotected mode. the cpu enters v86 mode from protected mode to execute an 8086 program, then leaves v86 mode and enters protected mode
30、to continueexecuting a native 80386 program.80386处理模式还决定了它可访问的特性(不同的模式决定了不同的访问方式)。80386有三种处理方式:1. 保护模式2. 实模式3. 虚拟86模式保护模式本身是32位的80386处理器环境。在这种模式下所有的指令和特性是有效的。实地址模式(通常只称为 “实模式” )是处理器复位后就进入的模式。在实模式下,80386给程序员的感觉就像一个快速的8086,只多了一些新的指令。大多数80386应用程序仅使用实模式进行初始化工作。虚拟8086模式(也称为v86模式),在某种意义上说是一个动态模式。处理器能反复、快速
31、的在v86模式和保护模式之间转换。cpu从保护模式进入v86模式去执行8086程序,然后离开v86模式进入保护模式继续本地的80386程序。为什么要使用保护模式对于这个问题有很多解释。每一个学完80386机制的人,都能给你列举出一箩筐关于保护模式的好处。其实我在上面已经说了一些保护模式的优点。这里我又将其单独列举出来,算是对前面的一次总结与补充吧。第一、它可以轻而易举的访问到1m空间以上的内存,不需要做什么特别的处理。这一点应该很好理解吧。因为80386是32位地址总线,而8088却是16位地址线。其实这一点并不是保护模式的特点,而是80386本身就具有的特点。第二、保护模式可以在硬件上给系统
32、软件和多任务的执行提供保护。保护机制既可以保护用户级程序不能直接访问系统级的数据段和代码段,也可以保护多个任务之间不能相互访问对方的私有数据。第三、保护模式不但提供了分段机制而且还提供分页机制。那么分页机制又有什么好处呢?可以说是好处多多j。分页机制给了我们进一步对进程的保护机制。分页机制为我们提供了虚拟内存的实现。所谓虚拟内存是指,用有限的内存通过外存储器的配合来实现无限内存的假象,使得程序员在开发程序时,不用担心内存溢出。分页机制可以节省内存空间。每页的大小固定为4k。可以大大减少内存碎片的出现,并提高对内存操作的灵活性。总结:在这一章中我主要介绍了80386的一些基本机制及为什么要使用8
33、0386保护模式原因。80386保护模式实际上起到了两个重要的作用,第一、可以访问更大的内存空间。一是采用了32位地址总线,二是可以使用虚拟内存来模拟更大的内存。第二、在硬件上对程序实现了保护。80386体系架构综述下面这张图引自ia-32 intel architecture software developers manualvolume 3:system programming guide,第二章。这张图清晰的描述了各个寄存器之间的关系,使我们对intel80386架构有了一个整体的了解。注意我在讲述80386时,选用的是intel的80386作为讲述的例子,主要因为,在个人计算机领域i
34、ntel的地位,可以说是无人能比。它引领着个人计算机设计的发展潮流。虽然amd在个人计算机领域也占有一席之地,但intelcpu更具典型,其它的cpu基本上都是遵守与intel同样的规范而设计的。下面我就详细叙述一下上面这张图的所描述的一些基本概念。让我们来看一下“intel第三卷”上是怎样说的。概述the ia-32 architecture (beginning with the intel386 processor family) provides extensive support for operating-system and system-development software
35、. this support is part of the ia-32 system-level architecture and includes features to assist in the following operations: memory management protection of software modules multitasking exception and interrupt handling multiprocessing cache management hardware resource and power management debugging
36、and performance monitoringia-32架构(开始于intel386处理器家族)对操作系统与系统开发软件提供广泛的支持。这种支持是ia-32系统级架构的一部分。它包括下面几个特性:内存管理软件模块保护多任务异常与中断处理多处理机(多cpu)高速缓冲区管理硬件资源和电源管理(设备管理与电源管理)调试与性能监视the ia-32 system-level architecture consists of a set of registers, data structures, and instructions designed to support basic system-
37、level operations such as memory management, interrupt and exception handling, task management, and control of multiple processors (multiprocessing).ia-32系统级架构由一系列寄存器、数据结构及很多指令组成。这些指令用于支持基本系统级操作。例如内存管理、中断和异常控制,任务管理及多处理机控制。全局描述表与局部描述表global and local descriptor tableswhen operating in protected mode,
38、all memory accesses pass through either the global descriptor table (gdt) or the (optional) local descriptor table (ldt), these tables contain entries called segment descriptors. a segment descriptor provides the base address of a segment and access rights, type, and usage information.each segment d
39、escriptor has a segment selector associated with it. the segment selector provides an index into the gdt or ldt (to its associated segment descriptor), a global/local flag (that determines whether the segment selector points to the gdt or the ldt), and access rights information. to access a byte in
40、a segment, both a segment selector and an offset must be supplied. the segment selector provides access to the segment descriptor for the segment (in the gdt or ldt). from the segment descriptor, the processor obtains the base address of the segment in the linear address space. the offset then provi
41、des the location of the byte relative to the base address. this mechanism can be used to access any valid code, data, or stack segment in the gdt or ldt, provided the segment is accessible from the current privilege level (cpl) at which the processor is operating. (the cpl is defined as the protecti
42、on level of the currently executing code segment.)the linear address of the base of the gdt is contained in the gdt register (gdtr); the linear address of the ldt is contained in the ldt register (ldtr).全局和局部描述符表当在保护模式下操作时,所有对内存的访问,或者通过gdt或者通过ldt来实现(ldt可选的)。这些表包含了称作段描述符的表项。段描述符提供了段基址、访问权限、类型和使用信息。每一
43、个段描述符有一个段选子与其关联。段选子提供了对gdt和ldt的索引值(得到相关的描述符),全局/局部标志位(检测段选子是指向的全局操作符还是局部描述符)以及访问权的信息。想要访问段内的一个字节,必须提供段选子和偏移地址。段选子提供了为段访问段描述符的机会(在gdt或ldt中)(先通过段子找到段描述符,再通过段描述符找到段基址)。处理器从段描述符中,得到线性空间中的段基址。而偏移量提供了相对于段基址的偏移位置。如果这个段可以由当前特权级访问(当前特权级是指cpu当前工作的特权级,cpl被定义为当前执行代码段的保护级别),那么这种机制能够应用于任何对gdt或ldt中的有效代码段、数据段及堆栈段的访
44、问。gdtr寄存器包含着gdt的线性基地址,ldtr寄存器中包含着ldt的线性基地址。上面的概念如下图所示:系统段、段描述符与门system segments, segment descriptors, and gatesbesides the code, data, and stack segments that make up the execution environment of a program or procedure, the system architecture also defines two system segments: the task-state segment
45、 (tss) and the ldt. (the gdt is not considered a segment because it is not accessed by means of a segment selector and segment descriptor.) each of these segment types has a segment descriptor defined for it.the system architecture also defines a set of special descriptors called gates (the call gat
46、e, interrupt gate, trap gate, and task gate) that provide protected gateways to system procedures and handlers that operate at different privilege levels than application programs and procedures. for example, a call to a call gate provides access to a procedure in a code segment that is at the same
47、or numerically lower privilege level (more privileged) than the current code segment. to access a procedure through a call gate, the calling procedure must supply the selector of the call gate. the processor than performs an access rights check on the call gate, comparing the cpl with the privilege
48、level of the call gate and the destination code segment pointed to by the call gate. if access to the destination code segment is allowed, the processor gets the segment selector for the destination code segment and an offset into that code segment from the call gate. if the call requires a change i
49、n privilege level, the processor also switches to the stack for that privilege level. (the segment selector for the new stack is obtained from the tss for the currently running task.) gates also facilitate transitions between 16-bit and 32-bit code segments, and vice versa.系统段、段描述符与门除了代码段、数据段及堆栈段构成了
50、一个程序或过程的执行环境外,系统架构还定义了两个系统段:任务状态段(tss)及局部描述符表(ldt)。(gdt全局描述符表,不认为是一个段,因为它不能通过段选子和段描述符来进行访问。)每一个系统段都有一个段描述符与之对应。系统架构还定义了一系列特殊的被调用的门描述符(包括调用门、中断门、陷阱门及任务门)。这些门给应用程序和过程提供了操纵(访问)系统程序和过程的保护通路,这些系统程序和过程与应用程序和过程具有不同的特权级。例如,一个call指令(汇编语言里的一条指令)通过调用门就可以访问一个与当前代码段同级或数字更低的特权级代码段中的过程。(数字越低,权值越大即具有更高特权级。)要想通过调用门去
51、访问一个过程,主调过程必须提供调用门的选择子。然后处理器对调用门的特权级进行检查,即比较当前特权级(cpl)与调用门特权级及由调用门指出的目标代码段特权级的大小。如果目标代码段允许访问,那么处理器就从调用门得到目标代码段的选择子及它的偏移地址。如果需要改变特权级,那么处理机器还要交换特权级堆栈。(新栈的段选子是从当前运行任务或进程的tss中获得的)而且门还能方便的在16位与32位代码段之间转换。下面让我们看一下普通段描述符、系统段描述符和调用门描述符的抽象图及低特权级代码段使用调用门访问高特权级代码段的具体处理过程:任务状态段和任务门task-state segments and task g
52、atesthe tss (see figure 2-1) defines the state of the execution environment for a task. it includes the state of the general-purpose registers, the segment registers, the eflags register, the eip register, and segment selectors and stack pointers for three stack segments (one stack each for privileg
53、e levels 0, 1, and 2). it also includes the segment selector for the ldt associated with the task and the page-table base address. all program execution in protected mode happens within the context of a task, called the current task. the segment selector for the tss for the current task is stored in
54、 the task register. the simplest method of switching to a task is to make a call or jump to the task. here, the segment selector for the tss of the new task is given in the call or jmp instruction. in switching tasks, the processor erforms the following actions:1. stores the state of the current tas
55、k in the current tss.2. loads the task register with the segment selector for the new task.3. accesses the new tss through a segment descriptor in the gdt.4. loads the state of the new task from the new tss into the general-purpose registers, the segment registers, the ldtr, control register cr3 (pa
56、ge-table base address), the eflags register, and the eip register.5. begins execution of the new task.a task can also be accessed through a task gate. a task gate is similar to a call gate, except that it provides access (through a segment selector) to a tss rather than a code segment.任务状态段和任务门tss(任
57、务状态段)定义了任务执行环境的状态。它包括通用寄存器、段寄存器、eflags寄存器(标志位寄存器)、eip寄存器(指令指针寄存器)及段选子和三个堆栈段的堆栈指针(对于特权级0、1、2,每一个都有一个堆栈)的状态,它还包括任务的ldt(局部描述符表)基址和页表基址。在保护模式下,任务上下文内执行的程序称为当前任务。对于当前任务的tss的段选子存储在任务寄存器(tr)中。交换任务最简单的方法是调用或跳转到另一个任务。这里,对于新任务的tss的段选子是由call或jump指令给出的。在交换任务时,处理器执行下面的活动:存储当前任务的状态到tss中。使用段选子把新任务导入到任务寄存器。通过gdt中的段描述符来访问新的tss从tss导入新任务的状态到通用寄存器、段寄存器、ldtr、cr3寄存器(存放页表基址),eflags寄存器及eip寄存器中。开始执行新的任务。任务还可以通过任务门来访问。任务门是访问
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级学有余力学生的教学方法研究
- 《土壤地理学》笔记
- 2025年湖北省高考数学模拟试卷(附答案解析)
- 数据迁移与转换
- 阅读理解记叙文(练习)(学生版)-2025年高考英语一轮复习(新教材新高考)
- 湖北省襄阳市襄州区2024-2025学年九年级上学期9月月考英语试题(含答案)
- 2024年18-萘二甲酰亚胺项目投资申请报告代可行性研究报告
- 有理数的乘方(六大题型)-2024-2025学年沪教版六年级数学上册同步练习
- 3.2 二次函数 同步练习
- 读书交流会主持词
- 当代社会政策分析 课件 第八章 儿童社会政策
- 2023年徽商银行市区支行招聘综合柜员信息笔试上岸历年典型考题与考点剖析附带答案详解
- 2024年湖南化工职业技术学院单招职业技能测试题库带答案解析
- JGT 472-2015 钢纤维混凝土
- TD/T 1061-2021 自然资源价格评估通则(正式版)
- 24春国家开放大学《建筑力学#》形考任务1-4参考答案
- 推拿手法完整版本
- 五育并举-同心筑梦家长会课件
- 物业工程能耗管控方案
- 2024年北京京能清洁能源电力股份有限公司招聘笔试参考题库含答案解析
- 帕金森病机制
评论
0/150
提交评论