linux内核--进程调度(一)

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                引言:无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。

 

进程调度的具体功能可总结为如下几点:

   作为进程调度的准备,进程管理模块必须将系统中各进程的执行情况和状态特征记录在各进程的PCB表中。并且,根据各进程的状态特征和资源需求等、进程管理模块还将各进程的PCB表排成相应的队列并进行动态队列转接。进程调度模块通过PCB变化来掌握系统中存在的所有进程的执行情况和状态特征,并在适当的时机从就绪队列中选择出一个进程占据处理机。

选择占有处理机的进程

  进程调度的主要功能是按照一定的策略选择—个处于就绪状态的进程,使其获得处理机执行。根据不同的系统设计目的,有各种各样的选择策略,例如系统开销较少的静态优先数调度法,适合于分时系统的轮转法(Round RoLin)和多级互馈轮转法(Round Robin withMultip1e feedback)等。这些选择策略决定了调度算法的性能。

进行进程上下文切换

  —个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。一个进程的执行是在进程的上下文中执行。当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行。当进行上下文切换时点统要首先检查是否允许做上下文切换(在有些情况下,上下文切换是不允许的,例如系统正在执行某个不允许中断的原语时)。然后,系统要保留有关被切换进程的足够信息,以便以后切换回该进程时,顺利恢复该进程的执行。在系统保留了CPU现场之后,调度程序选择一个新的处于就绪状态的进程、并装配该进程的上下文,使CPU的控制权掌握在被选中进程手中。

 

Unix进程调度

   

   进程是程序的执行系统中活动的实体. 在UNIX系统中进程被定义为映像的执行. 映像是计算机的执行环境,它包括各种寄存器及存储器的值、打开文件的状态及现行目录等等.进程映像的组成部分:寄存器、进程控制块proc结构和user结构、进程数据区ppda (共享正文段(由text 结构控制) 、数据段和栈段( 含用户栈和核心栈) ) . 对于一个进程的映像来说,proc 结构、进程页表、text 结构是常驻内存的,而user 结构、正文段、数据段是非常驻内存部分. 它们在用户虚拟空间形成一个整体,一起换进换出.

    在Unix操作系统中,所以的程序,不论是用户级上还是在内核级上执行的,都出现在某个进程的现场内,所有的用户程序都在它们自己的进程现场中运行。当这些用户进程通过系统调用请求内核服务的时候,实现该系统调用的内核代码继续在请求进程的现场内执行,这就能让内核方便的访问进程的所有状态及其他地址空间。它还提供了一种代表用户程序记录内核执行的当前状态的方式。例如,如果需要挂起一次系统调用的执行来等待I/O操作完成,那么内核有关系统调用处理的状态就要保存在进程中。

    因为系统的所有活动,无论是用户级上的还是内核级上的,都发生在某个进程的现场内,所有UNIX内核只调度需要执行的进程。当使用传统的分时调度策略的时候,在用户级执行的进程不会被分入时间内执行。只有当前的内核进程明确允许的情况下,才能切换到在内核执行的另一个进程。

   

UNIX进程调度核心思想


你可能感兴趣的:(linux内核--进程调度(一))