进程管理和调度

现在,几乎所有的操作系统都能同时运行多个进程,这是用户的感觉;事实上,如果一个系统只有一个处理器,那么在同一时间只能有一个进程在执行,在多进程的处理机上,能同时运行的进程数是和事实上的CPU的数目相关的。

事实上,是内核和处理器给人一种计算机并行处理多任务的假相,这就是通过相当短的时间内完成任务间的切换来实现的。

而要完成系统管理,内核要完成如下主要任务:

1,  在一般情况下,应用程序间不能存在耦合,例如:应用程序ABUG,不能“传染”给B;因为Linux是多用户的,所以一个应用程序不能读或者修改另一个应用程序的内存空间的内容,否则得话,用户数据的私有保护将变成无稽之谈。

2,  不同的应用程序共享CPU的时间片

内核是如何分配时间给正在执行的程序?什么时候完成程序的切换呢?

又是如何在不同的应用程序之间完成切换?

对于进程之间的切换,首先要保证运行环境的保存和恢复,保存的是当前运行的程序的运行环境,恢复的是待切换程序的运行环境:如,寄存器的内容,和虚拟地址空间的结构划分;要完成这个任务,单独的靠C是无法完成的,还要靠纯汇编。

Linux里有一个叫做调度器的东西完成上述问题,调度器有个调度策略,就是专门解决上述问题的。

一,进程的优先级

不同的任务有不同的紧急程度---进程优先级,作为一个粗略的划分,可以把进程分为实时的和非实时的;而实时进程又分为硬实时和软实时;

硬实时是在一定得时间内必须完成的进程,就是进程的执行严格限制在一定得时间段内。普通的Linux内核是不支持硬实时的,而对于修改后的Linux内核:如,RTLinux,可以提供硬实时的功能,此时,Linux的内核是作为系统的一个进程运行的,此时系统还运行一个处理硬实时任务的进程,当没有硬实时任务时,Linux内核进程才会运行和处理普通的进程。

软实时是相对于硬实时来说的,就是有的进程虽然也对运行的时间有要求但是,并不像硬实时那样严格。

 

CPU时间片的划分可用下图表示:整个系统的运行可以形象描述为轮盘的旋转,这里有四个进程,它们分的时间片段的大小不同,事实上是根据进程的重要性来划分时间片的,而此时cpu可以想象为一个扫描器.

 

此时,在CPU,有C扫描至B时,要进行运行时环境的存储或说保护,以便下个周期接着运行;其实上图中的几个进程都是被理想化的已经到达就绪态,而在真正环境下,还有跟多的因素需要考虑。

 

一,            进程的生命周期:

执行态--------------is running

就绪态--------------ready to run if get the CPU resouce

阻塞态--------------waiting for external event happening;

系统会根据进程的状态,把进程分属到不同的进程表中,但是对于阻塞态的进程,系统是由特殊的标记的,因为他们会告诉调度器,这些阻塞态的进程不再调度考虑范围。但是,任然需要管理这些阻塞态的进程,应为它们会在等待的事件发生后变得可以调度。

在进程表有一种特殊状态的进程————僵尸进程,这些进程是不存在的,但是任然在系统进程表里维护者,之所以说它们已经不存在了是因为它们所在有的资源已经完全释放,不会再执行了。为什么会纯在僵尸进程呢?

这是由UNIX系统的进程创建和销毁机制确定的,在Linux里,同时发生如下两件事才能能让一个程序结束运行:

1,  该程序被其他的进程或者归属用户kill掉,通常是发送一个SIGTERM或者SIGKILL信号,这就等同于直接结束进程;

2,  该进程的父进程调用了wait for 系统调用,也就是通过这种途径父进程告诉内核其子进程已经dead

上述两个事件,当只有第一个发生时,就会产生僵尸进程,僵尸进程可以通过ps 或者top 指令进行查看。其标志为“z”。

 

二,抢占式多任务

 Linux要完成进程管理还要进行另外的进程状态划分:用户态和内核态。其实这两种状态从硬件原理来说是与CPU的不同运行模式相关连的。如果进程在内核态,那么他就有最高的权限,但是用户态的进程就大大受到限制了;

在正常情况下,进程处于用户模式下的,不会觉察到其他进程的纯在,不会访问其他用户的数据和内存区域,但是如果一个进程想访问系统数据或者系统函数,那么首先这个进程就应该进入内核模式,当然,这种状态的转变时受到控制的,否者的话,所有的保护机制都将变成泡影;

通常所说的系统调用就是途径之一;再则就是通过中断进行进程模式的改变,通过中断,进程会自动的由用户模式进入内核模式,而系统调用是要用户程序里显示的进行。其实中断的发生很“荒谬”,因为处理中断的函数一般来说是中断产生时正在执行的进程是无关的:例如,当一个外部的块设备向RAM传输数据时,就会发生中断,但是这些数据是为系统上运行的哪一个进程而准备的却是不一定的,如:A 在运行时,可能发生的中断时为了给B进程提供数据。

内核的可抢占式调度模型,提供了严格的调度策略:

1,  普通的进程永远是可以被中断的

2,  在系统内核模式,处理系统调用时,不会有其他的进程获取CPU时间片,调度器会等待该系统调用执行结束,才会去选择其它的进程执行,但是,此时的系统调用会被中断挂起。

3,  中断可以挂起处于任何进程,无论是内核态或者是用户态

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值