Windows2003陷阱调度。陷阱调度设施是用来处理意外事件的硬件机制,当中断或异常发生时硬件或软件可以捕获它们,暂停当前线程的执行,让处理器从用户态切换到核心态,并将控制权交给内核陷阱调度程序,陷阱调度程序将检测中断和异常的类型并进行调度,将控制权交给相应的代码。陷阱调度程序本身可以处理一些异常,但大多数情况下只判断和确定所发生的情况,并把控制权转交给内核的其他部分或执行体。如果是设备中断事件,将把控制权转交给设备驱动程序的中断服务例程。如果是系统调用服务事件,将把控制权转交给执行体中的系统服务代码。其他异常事件由内核自身的异常调度器发送并由相应的处理程序进行处理。

  异常是由运行程序的执行产生的,它是由内核的异常调度器提供服务,其任务是找到能够处理此异常的异常处理程序,内核所定义的异常有:主存访问越界,被0除,整数溢出,浮点异常和调试程序断点。Win32引入异常处理工具,允许应用程序在发生异常时能够得到控制,应用程序可将这个状态固定并返回至异常发生的地方展开堆栈,也可以向系统声明不识别此异常。

  内核俘获和处理对应用程序透明的某些异常,如程序调试断点异常,此时内核将调用调试程序来处理此异常。对于主存越界或算术溢出等异常,内核会原封不动的返回用户态程序来处理。操作系统建立基于栈帧的异常处理器来处理异常。当过程被调用时代表此过程激活的堆栈帧会被推入堆栈。堆栈帧可以有一个或多个与其相关的异常处理程序,每个处理程序都保存在源程序的一个特定代码块内。当异常发生时,内核将查找与当前堆栈帧相关的异常处理程序。如果不存在,内核将继续查找与前一个堆栈帧相关的异常处理程序,如此往复,如果还找不到,内核将调用系统默认的异常处理程序。

  陷阱调度可以调用系统服务,执行INT 2E指令引起一个系统陷阱,从用户态切换到核心态,进入系统服务调度器,被传递的参数指明被请求的系统服务号。内核将根据参数在系统调用服务调度表中查找响应的系统服务程序。

  进程

  所有多道程序设计都是建立在进程的基础上的。进程是为了刻画系统内部的动态状况、描述运行程序的活动规律而引进的概念。从理论角度看,进程是对当前运行程序的活动规律的抽象。从实现角度看,进程是一种数据结构,用来刻画系统动态变化的内在规律,有效地管理和调度在计算机系统运行的程序。

  进程是程序在数据集合上的一次执行过程。它由创建而产生,由调度而执行,由事件而等待,由撤销而消亡。

  进程由程序块、数据块、进程核心栈和进程控制块组成。由三种状态:运行态,占用处理器运行的状态。绪态:具备运行条件,等待系统分配处理器。等待态:又称阻塞态,是指进程不具备运行条件,正在等待某个事件完成。

  处于运行态的进程个数不能大于处理器个数。而处于绪态和等待态的进程可以有多个。通常在创建后处于绪态。Cpu调度程序永远在绪队列选取进程,所以所有进程只能从绪态转到运行态,而不能从等待态转到运行态。

  在很多系统中增加了新建态和终止态。新建态对应于进程被创建的状态,尚未进入绪队列。终止态,指进程完成任务,到达正常结束点。

  主存资源是有限的,有时主存资源不能满足进程运行的要求,此时必须把某些进程挂起,置于磁盘对换区中,释放其占用的某些资源,暂时不参加低级调度。用户在调试程序时,可以请求挂起某进程,以便进行某种检查或修改。为此又添加两个状态:挂起绪态,表明具备运行条件,但目前在辅存中。挂起等待态,表明进程正在等待某一事件发生且进程在辅助存储器中。

  挂起进程等同于不在主存的进程,不会参与低级调度。不能立即执行,可能会等待某个事件发生。

  程序和数据描述进程的静态特征,进程控制块刻画进程的动态特征。进程控制块用于存储进程的标识信息、现场信息和控制信息。它与进程一一对应。是操作系统掌握进程的资料和管理进程的主要依据。

  进程控制块保存进程的标识信息,如进程号、保存cpu现场,用于恢复运行时恢复处理器现场。同时还保存用于管理和调度进程的控制信息,包括:一进程调度信息,如进程状态、等待时间和等待原因、进程优先级、队列指针等。二进程组成信息,如正文段指针,数据段指针,指向父子进程的信息。三进程间通信信息,如消息队列指针、所使用的信号量和锁。四cpu占用和使用信息,如时间片剩余、已占用时间。五资源清单,如进程所需的全部资源、已经分得的资源,如主存、设备、打开文件表等。六进程特权信息,如主存访问权限和处理器特权。

  进程映像还包括进程核心栈,用于当进程在核心态工作(系统调用等)时使用,用来保存中断/异常现场,保存函数调用的参数和返回地址等。

  Pcb(process control block)是操作系统重要的数据结构,包含管理进程所需要的全部信息,只有内核可以修改pcb。操作系统根据pcb对并发执行的进程进行管理,进程借助于pcb才能被调度执行。

  进程队列:把处于同一状态的所有进程的pcb连接在一起的数据结构。如运行队列,绪队列和等待队列。组织方式有:线性方式,连接方式和索引方式。运行队列中通常只有一个进程,绪队列中可按照优先级或FIFO原则排队,也可以按照进程优先级的高低分成多个绪队列。等待队列通常有多个,对应不同的等待队列。

  当发生某个事件使进程的状态发生转换时,进程要退出所在队列而排入另一个队列。处理器调度中负责进程入队和?对的功能模块成为队列管理模块。

  中断和异常是激活操作系统的仅有方法,它暂停当前进程的执行,把处理器切换至核心态,内核获得cpu的控制权后,如果需要可以实现进程切换,进程切换必定发生在核心态而非用户态。当发生进程切换时,寄存器上下文会被保存到系统级上下文(包括进程控制块、主存管理信息、核心栈等)的相应的现场信息位置,然后内核把这些信息压入核心栈的一个上下文层,当内核处理完中断返回或进程完成其系统调用返回用户态,内核进行上下文切换并从核心栈弹出一个上下文层。

  进程上下文切换步骤:

  1,保存被中断程序的处理器现场信息。

  2,修改被中断进程的pcb有关信息,如进程状态等。

  3,把被中断进程的pcb加入相关队列。

  4,选择占用处理器运行的另一个进程。

  5,修改被选中进程pcb有关信息,如改为绪态。

  6,设置被选中进程的地址空间,恢复存储管理信息。

  7,根据被选中进程的上下文信息来恢复处理器现场。