分类: LINUX
2011-03-21 10:32:09
在计算机特别是微机的发展历史上,Intel无疑写下了浓重的一笔。应该说,Intel 80386 CPU的出现在计算机的发展史上起着里程碑式的作用。现在,经过三十多年的发展,PC所采用的CPU芯片早已今非昔比,但是基本的系统结构却还是不出80386的窠臼,所以人们称Intel这整个系列的CPU芯片为"x86"系列。之所以在86前面有个x,是因为Intel早期的产品中有个8086 CPU,后来又依次有80186、80286、80386、80486,而Pentium也有人称80586。PC最初采用的是16位的8088 CPU,也应该算是这个系列中的一员,后来则随着这个系列的发展而水涨船高;而Intel的不断发展壮大,也主要得益于PC的日益普及。在这个系列中,80286之前的CPU芯片在功能上和结构上都还不能与当时的小型机CPU相比拟,所以还谈不上采用现代操作系统的问题。之所以说那时的CPU芯片还谈不上采用现代操作系统,是因为8086、80186 CPU在寻址技术上还只能支持"实模式(Real Mode)",还不能支持现代意义上的内存管理,因而不能支持系统空间与用户空间的划分。
那么采用现代意义上的操作系统要有些什么条件呢?
首先,操作系统在内存中的映像必须受到保护,不会因为用户程序的不良行为而受到伤害。也就是说,必须让CPU有"系统态"(或称"内核态")和"用户态"这两种不同的状态,使得当CPU运行于用户态时就只能访问预先配置用于用户态的内存区域,而不能访问操作系统内核所在的内存区域。这样,用户程序的不良行为或误操作就只会影响到用户程序本身,而不会因伤害了操作系统而造成整个系统的崩溃。
"用户态"和"系统态"是不对称的,二者之间不是"井水不犯河水"的关系,而是井水不能犯河水但河水可以犯井水。这是因为,一方面内核有访问用户空间的必要,要不然用户程序就无法运行,用户程序是在内核的安排和操纵下运行的;另一方面内核是专门的软件产品,其质量一般而言是有保证的,所以内核不至于伤害用户空间的程序和数据;而用户软件则五花八门,质量不能保证,因而用户程序很可能伤害内核,所以要把内核保护起来。因此,这里的第一个条件就是内核的映像必须得到保护。
其次,不同的用户程序之间也应该互相防护,不能因一个程序的不良行为或误操作而伤害另一个用户程序。这就是说,用户程序及其数据、堆栈也都应该被保护起来,与其他用户的程序、数据和堆栈隔离开来,以防受到别的用户程序的伤害。
最后,除保护之外,用户程序在物理内存中的位置应该可以浮动。在多进程的系统中,一般都会有多个应用程序同时在运行,如果这些程序都只能被装载在固定的地址上运行,就会互相牵制,整个系统的运行就受到了限制。
这里的关键显然在于"保护"。正因为如此,Intel把符合这些要求的寻址方式称为"保护模式"。80286之前的Intel微处理器之所以不能(不配)采用现代意义上的操作系统,原因就在于不支持保护模式。相比之下,当时的小型机CPU都是可以支持"保护模式"的,尽管当时还没有这个词。唯其如此,UNIX才有可能诞生在当时的小型机上。但是,从80286开始,特别是随着80386的出现,PC就具备了采用现代操作系统的条件。这是因为80286开始支持"保护模式"(但是还有问题),而在80386上这方面的技术就很成熟了,那是80年代中期的事。