首页 园地图库文章列表留言下载
现在位置:首页 -> 网络科技 -> 上网指南
Linux操作系统功能概述续3
作者:佚名 来源:mmkey.com搜集 更新日期:2004-10-1 阅读次数
文字 〖 自动滚屏(右键暂停)

4.分时 文摘园地
4.1
许多进程,那么轮换吧 文摘园地
分时是一种使许多正在运行的程序看上去是同时运行一样的方法。因为系统仅仅拥有一块CPU(在这里我们排除多处理器系统的特例),所以这种同时只是一种假象,因为在一个给定的时间里,只能运行一个程序,不过正如我们将要看到的,这是一种很有价值的假象。
第一个问题是,我们如果获得这种假象呢?答案是,我们让所有程序轮换着运行,使每个程序能占用的轮循时间-—-称为量子或时间片-—-都很短,比如50毫秒。假设我们马上就要运行四个程序,uvxy,想想下面这样会造成什么:首先u运行50毫秒,接着u被挂起、v运行50毫秒,然后v被挂起、x运行50毫秒......就象这样继续(当y完成它的50毫秒后,u开始第二次运行)。因为轮循(一般称为现场交换)发生的如此之快(每50毫秒一次),所以我们人类会觉得每个程序都是同时在运行的(虽然只有四分之一的实际速度),而不会查觉到程序的运行、挂起、运行挂起......
但是OS是如何强话这些时间片的呢?举例来说,OS如何使上面的程序u在运行50毫秒之后准时停止呢?结合前面的想想,答案是:操作系统不能,因为在u运行的时候,OS并没有运行!取而代之的,这些轮换是通过一个计数设备来实现的,这个设备会在合适时间发送一个硬件中断。比如,我们可以让这个设备每50毫秒发出一个中断,我们可以编写一个计时设备的驱动,并将它并入OS中。
计数设备驱动可以储存u程序的所有寄存器值,包括它的PC指针值和EFLAGS寄存器值。稍后,当u程序获得执行机会时,这些值会恢复,这样u程序就可以看似连续的执行下去了。不过现在,按照OS的计划,最后将恢复程序v先前的所有寄存器值,特别要保证恢复上一轮的PC值,这最后一步会强制执行一个从OS到程序v的跳转,跳转到它上一次时间片挂起的正确位置。(另外,CPU“只操心自己的事情,而并不会知道OS已经把控制权交给另一个程序v了;CPU只是不断循环获取PC指针指向的数据并且处理这些数据罢了。)
最新的CPU会运行于两个或多个特权级别。我们的例子由于安全原因不会涉及到普通的存取I/O设备的应用程序,比如磁盘驱动。因此CPU被设计为让一定的指令-—-比如那些处理I/O-—-只能在运行在高特权级别上,这个级别称为内核模式(内核这个术语取决于OS)。除了别的之外,计数器发出的中断就会将CPU置于内核模式,所以该中断不仅使OS得以运行,还是OS获得它需要的权限。
在任何给定时间,内存中都会有许多不同的进程。它们是程序执行的实例。如果现在有三个用户在同一台给定设备上运行gcc编译程序,那么会对应于一个程序产生三个进程。

上篇文章: Linux操作系统功能概述续4
下篇文章:七夕礼物
相关文章:
没相关文章

版权所有:文摘园地;本站资料均由站长收集,如果有侵权,请立即来信留言告诉我们,以免损害您的权益,谢谢!
Copyright © 2004 文摘园地 http://wwww.mmkey.com All Rights Reserved Power by:HeadWind
粤ICP备05098767号