Chinaunix

标题: 关于操作系统的疑惑? [打印本页]

作者: cnppk    时间: 2012-05-10 11:17
标题: 关于操作系统的疑惑?
操作系统也是一个应用程序,只不过这个比较特殊。在单CPU的情况下任意时刻只有一个进程获得CPU,那如果某个应用程序获得了CPU时间,那其他的都要暂停,这时候操作系统处于什么状态?也处于暂停? 请高手解答心中的疑惑!
作者: tempname8    时间: 2012-05-10 12:03
这个要看对进程的解释了,我想可能有OS里设计成进程存在的。

但是大部分操作系统都是设计成server式,或者说OS像个库一样,它的代码渗透在每一个进程里。
作者: 灌水菜鸟    时间: 2012-05-10 13:32
什么是暂停?应用程序暂停的时候他还拥有CPU么?还继续运行么?那么操作系统呢?如果操作系统确实有暂停状态,我觉得应该是虚拟机上的操作系统。
作者: cnppk    时间: 2012-05-10 13:41
灌水菜鸟 发表于 2012-05-10 13:32
什么是暂停?应用程序暂停的时候他还拥有CPU么?还继续运行么?那么操作系统呢?如果操作系统确实有暂停状态 ...


暂停也就是挂起的意思,挂起之后也就让出了cpu
作者: kouu    时间: 2012-05-10 14:45
当某个进程在CPU上运行时,你可以想象这时内核处于挂起状态。
它什么时候会再被激活呢?如果进程使用了系统调用、或者CPU来了中断/异常,内核就被激活,然后开始干活。
如果进程没有使用系统调用,CPU也没中断/异常,是不是意味着内核永远不能激活,永远对机器失去控制了呢?答案是:yes。
不过内核在初始化时会设置时钟芯片,让它周期性地发出时钟中断。所以最坏情况下内核在每个时钟周期会被激活一次,以施展它对机器的掌控。

不过,内核的“挂起”和进程的挂起,实质是不一样的。进程这个概念本身是由内核抽象出来的,进程的激活、挂起,都是由内核来操控的。
而内核的“激活”与“挂起”,则需要CPU来提供支持。CPU需要提供这样的途径,使得当中断/异常到来、或者程序使用系统调用指令时,CPU完成特权级别的切换,然后跳到事先安排好的内核代码上去执行。相当于将内核“激活”。内核的“激活”是被动的,不过由于时钟中断是由内核来配置的,也可以认为内核在被动“激活”之外,还会周期性的主动“激活”自己。
反之,内核完成需要做的事情之后,可以使用“退出”指令,让CPU将特权级别切换回去,然后跳到应用程序的代码去执行。这相当于内核“挂起”。显然,内核的“挂起”是主动的。(内核“挂起”之后,CPU回到哪里去执行?这也是由内核来操控的。可能并不会回到“激活”内核之前所执行的代码上,因为内核可以进行进程切换。)
作者: cnppk    时间: 2012-05-11 11:39
kouu 发表于 2012-05-10 14:45
当某个进程在CPU上运行时,你可以想象这时内核处于挂起状态。
它什么时候会再被激活呢?如果进程使用了系统 ...


非常精辟!!!
作者: linuxfellow    时间: 2012-05-13 13:15
回复 1# cnppk
分两种:
monolithic os:  操作系统有thread,能独立于应用程序运行,如linux, wince
non monolithic os: 操作系统只是一个库函数,必须连接到应用程序里形成一个执行文件然后运行。如vxworks, osek
即使操作系统能独立运行,如果调度程序选择了运行某个用户进程,内核线程就处于等待状态。如果某一段时间里没有任何进程运行,一般操作系统都提供一个idle进程来消耗剩余的cpu时间。idle进程基本上什么事情都不做,等待其他进程来运行。

   
作者: 灌水菜鸟    时间: 2012-05-14 14:54
回复 4# cnppk


    如果你把操作系统和应用程序都当作普通的,平等的指令流来看待,操作系统确实会经常“暂停“,比如,处于用户态的时候。但是如果把操作系统看作运行于其上的所有应用的根基的话,操作系统永远处在激活状态,永远不会停摆。
作者: amarant    时间: 2012-05-14 15:19
把指令流当做操作系统运行的单位,就会发现cpu停不下来了。
作者: 灌水菜鸟    时间: 2012-05-14 15:31
amarant 发表于 2012-05-14 15:19
把指令流当做操作系统运行的单位,就会发现cpu停不下来了。


版主?!?!?PF啊PF,呵呵。不过,何出此言?
作者: amarant    时间: 2012-05-14 19:17
回复 10# 灌水菜鸟


    处理器不断发射指令,不断执行。哪怕你的进程是在空转,那也是一直在执行nop之类的指令。所以你说操作系统处于暂停,我觉得就不太妥当。操作系统一直在跑中。不如说被切出去的进程“暂停”。
作者: 灌水菜鸟    时间: 2012-05-15 09:41
amarant 发表于 2012-05-14 19:17
回复 10# 灌水菜鸟


可是,这个帖子的主题就是操作系统的暂停啊。不同的角度对暂停会有不同的理解。不过既然提到了操作系统的暂停,我们也就可以可以用不同的角度来理解它啊。比如,虚拟机上的操作系统被切换出去,又比如,把操作系统看作指令流,系统处运行用户态应用程序的时候,这种时候,隶属于操作系统的这些指令流确实得不到运行。主要是理解角度的不同。
作者: realkernel    时间: 2012-05-20 15:53
在Linux0.11内核中,进程都可以被挂起。内核好像不会被挂起。因为就算进程0被挂起了,也会切换到就绪进程中运行。如果这时这个就绪进程又被挂起,则进程0又得接管这台计算机,当然是没有任何进程接管的情况下。所以,从这个角度来说,内核一直在寻找可以运行的进程,而不会被挂起。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2