存档

文章标签 ‘流水线’

操作系统阅读笔记005

2011年3月24日 没有评论

CPU是计算机的大脑,它从内存中取出指令并执行。在每个CPU的基本周期中,首先从内存中取出指令,解码以确定其类型和操作数,然后执行。接下来循环上面的过程。每个CPU都有一套可执行的专门指令集,所以Pentium不能执行SPARC程序。由于用于访问内存以得到指令或数据的时间比执行指令花费的时间长很多,因此,所有的CPU内有有一些用来保存关键变量和临时结果的寄存器。这样,通常在指令集中提供一些指令,用以将一个字从内存调入寄存器,以及将一个字从寄存器写入内存。其他的指令可以用来自寄存器和内存的操作数组合,或者用两者产生一个结果。操作系统必须知晓所有的寄存器。在时间多路处理的CPU中,操作系统经常会终止正在运行的某个程序并启动另一个程序。原来的程序状态必须被保存,这样再次运行时就可以重新载入了。

为了改善性能,CPU设计师早就放弃了一次读取,解码和执行一条指令的简单模型。许多现代的CPU具有同时取出多条指令的机制。例如,一个CPU可以有分开的取指单元,解码单元和执行单元,于是当它执行执行n时,它还可以对指令n+1编码,并且读取指令n+2。这样一种机制成为流水线。这种设计的缺点是,一旦一条指令被取进流水线中,它就必须被执行完毕,即便前一条指令是条件转移,它也必须被执行完毕。流水线使得编译器和操作系统的编写者很头疼,因为它造成了在机器中实现这些软件的复杂性。流水线是一种整体效率较高的方式,但是它具有方向性和不可逆性,同时由于判断能力的缺乏,使得灵活性减小了。

比流水线更为先进的设计是超标量CPU。在这种设计模式中,CPU有多个执行单元。两个或更多的指令被同时取出,解码并存储到一个共同的缓冲区中,直到它们被执行完成。这些执行单元一旦空闲,就马上去缓冲区中找是否有待处理的指令,如果有,就马上执行。这种设计在灵活性方便强于流水线,但是它隐含着程序可能不按预定的顺序执行。在多数情况下,硬件保证这种运算的结果和顺序执行指令的结果相同,但是,仍然会给操作系统的处理带来复杂的情形。

除了用于嵌入式系统中的简单CPU外,多数CPU都有两种模式:核心态和用户态。通常,在PSW寄存器中有一个二进制控制这两种模式。当在核心态运行时,CPU可以执行指令集的每一条指令,并且使用所有的硬件功能。操作系统在核心态下运行,从而可以访问整个硬件。而用户程序则在用户态模式下运行,仅允许执行整个指令集的一个子集和访问所有功能的一个子集。在用户态中有关I/O和内存保护的操作指令是被禁止的。那么用户程序该如何从操作系统中获得服务呢?通过系统调用(system call),系统调用切换至核心态模式然后调用操作系统。TRAP指令从用户态切换至核心态,并启用操作系统。当调用完成后,后面的指令把控制权重新交给用户程序。

分类: 科技 标签: , , ,