`
tansitongba
  • 浏览: 484604 次
文章分类
社区版块
存档分类
最新评论

内功修炼之操作系统学习(二:处理器管理)

阅读更多

处理器管理

处理器管理是操作系统的重要组成部分,它负责调度、管理和分配处理器并控制程序的执行。处理器管理中最重要的是处理器调度,即进程调度,也就是控制、协调进程对处理器的竞争。为了提高并发粒度和降低并发开销,现代操作系统引进了线程的概念,此时进程仍然是资源分配和保护的单位。

处理器包括控制器、运算器和寄存器。如果计算机系统只有一个运算器则被称为单处理器,如果包含多个则被称为多处理器。也就是说运算器的个数决定是单处理器还是多处理器。

寄存器所存储器的信息构成处理器现场。它与程序的执行密切相关。

处理器状态可以表明当前cpu是运行内核程序还是运行用户应用程序。处理器状态又称为处理器模式,可划分为核心态(管态)和用户态(目态)。当处理器处于核心态时,cpu运行可信软件,硬件允许执行全部机器指令。当处理器处于用户态时,cpu运行非可信软件,程序无法执行特权指令,且访问权限仅限于当前cpu上进程的地址空间。Intelx86处理器的状态有四种。0级为内核级,3级为应用程序级。但运行在此处理器上的windows操作系统只使用0级和3级。

有两种情况会导致处理器模式切换。一是程序请求操作系统服务,执行系统调用。二是在程序运行时,产生中断或异常事件,运行程序被中断,转向中断处理程序。这两种情况都是通过中断机制发生,可以说中断和异常是用户态到核心态转换的唯一途径。

当系统产生中断或异常,处理器将作出响应并交换程序状态字,此时处理器会从用户态到核心态转换。处理完成后计算机通过加载程序状态字的特权指令来实现从核心态返回用户态。

中断是指在程序执行过程中,遇到急需要处理的事件时,暂时中止现行程序在cpu上的运行,转而执行相应的事件处理程序,处理完成后再返回断点或调度其他程序。它是现在带计算机系统的重要组成部分之一。每当应用程序执行系统调用要求获得操作系统服务等都要通过中断机制产生中断信号并启动内核工作。可以说操作系统是由中断驱动的。

Cpu会在执行在两条指令之间检查有无中断发生。

自愿性中断事件时正在运行的程序所期待的,是由于执行访管指令而引起的,它表示运行的程序对操作系统的有某种需求,一旦机器执行访管指令,就会使cpu状态从用户态转向核心态,停止现行程序的执行而转入内核的相应系统调用例程进行处理。这被称为访管中断。

硬中断分为外中断和内中断。外中断,又称中断,是指来自处理器之外的中断信号。包括时钟中断、键盘中断、设备中断等。内中断又称为异常。是指来自cpu内部的中断信号。又分为三种:访管中断,由系统调用引起。硬件故障中断,如电源失效,奇偶校验错误,总线超时等;程序性中断,如非法操作,地址越界,页面故障,除数为0,浮点数溢出。所有这些异常均有异常处理程序处理,且不能被屏蔽。

中断和异常的区别:中断是由于当前程序无关的中断信号触发的,cpu对中断的响应是被动的,且与cpu模式无关。既可以发生在用户态,又可以发生在核心态。通常在发生两条机器指令之间才响应中断。通常在两条机器指令之间才能响应中断。异常是由cpu控制单元产生的,源于现行程序执行指令过程中检测到例外。大部分异常发生在用户态。异常处理程序所提供的服务通常是当前进程所需要的。如程序出错或页面故障。异常处理程序在当前程序的上下文执行。

Cpu对异常和中断的响应是一致的。即当执行完当前指令后,或在执行当前指令的中途,根据中断源所提供的中断向量,在主存中找到响应服务程序的入口地址并调用此服务。中断向量由硬件或操作系统的内核预先分配和设置。系统调用所对应的向量在访管指令中给出。中断和异常以统一的模式加以实现,这也是许多书中将它们都归入中断机制的原因。

在两条指令中间,cpu会检查中断寄存器是否有中断事件发生,若无中断信号或中断信号被屏蔽,则继续执行后续指令。否则将暂停当前程序,转向内核的中断处理程序。

中断和异常的响应需要做四件事:1,发现中断源;2,保护现场;3,转向中断/异常处理程序。4,恢复现场。

访管中断是由程序执行访管指令而引起的,表示当前运行的程序对操作系统功能的调用。它包括操作码和访管参数两部分。前者表示此指令是访管指令,后者表示具体的访管要求。当程序发出访管请求时,cpu控制设备发出中断向量,然后指定系统调用号,表示想要调用的系统调用。

时钟是操作系统进行调用工作的重要工具,如维护系统绝对日期和时间,让分时进程按时间片轮转,让实时进程定时发送或接收控制信号,系统定时唤醒或阻塞进程。利用定时器能够确保操作系统必要时获得控制权,使陷入死循环的进程最终会因为时间片耗尽而被迫让出处理器。时钟通常是一个硬件,它按照固定周期发出中断请求,分为绝对时钟和间隔时钟。系统设置一个绝对时钟寄存器,定时的把此寄存器的内容加一。间隔时钟在每个时间切换点将间隔时钟寄存器的内容减一。当减为0时,就产生间隔时钟中断。操作系统经常利用间隔时钟进行调度

发生中断的每个设备都有一个相应的中断处理程序。一个设备的中断处理程序是它设备驱动程序的一部分。中断处理程序是被内核调用来响应中断的,工作在核心态的中断上下文中,不允许被阻塞。

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

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

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

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

进程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

进程上下文切换步骤:

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

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

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

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

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

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

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

处理器模式切换步骤:

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

2,处理器从用户态切换到核心态,以便执行系统服务程序或中断处理程序。

3,如果处理中断,可根据所规定的中断级别设置中断屏蔽位。

4,根据系统调用号或中断号,从系统调用表或中断入口地址表中找到系统服务程序或中断处理程序的地址。

模式切换不同于进程切换,它不一定引起进程状态的切换,也不一定引起进程切换。

在引用进程之后又引入了线程的概念,是为了减少程序并发执行时所付出的时空开销,使并发粒度更细、并发度更好。基本思路是:把进程的两项功能:独立分配资源和被调度分派执行分离开来。前一项任务仍然由进程完成,作为系统资源分配和保护的独立单位,无需频繁切换。后一项任务交给成为线程的实体来完成,线程作为系统调用和分派的基本单位。

线程的组成部分有:

1,线程标识符及线程状态信息。

2,线程上下文信息。

3,核心栈,在核心态工作时保存参数,在函数调用时的返回地址。

4,拥有存放局部变量和用户站的私有存储区。

线程有运行、就绪和等待状态。因为它不拥有资源,因此挂起状态对于进程是没有意义的。如果进程在挂起后被对换出主存,它的所有线程也必须被对换出去。如果进程内的某一线程需要等待某资源,如果进程内还存在其他处于就绪态的线程运行,操作系统就会调度此线程运行,否则将进程转换为等待态。Windows仅把进程分为运行态和不可运行态。

处理器调度分为三级:

高级调度,又称作业调度,按照预定的策略从一批作业中挑选一批作业进入主存,创建进程并为其分配所需资源。

中级调度:根据主存资源决定主存中所能容纳的进程数目,并根据进程的当前状态来决定辅助存储器和主存中的进程的对换。

低级调度:又称进程/线程调度,根据某种原则决定就绪队列中的哪个线程获得处理器,并将处理器让出给其使用。低级调度是操作系统最核心的部分,其调度策略的优劣将直接影响整个系统的性能。有两种调度方式:剥夺时和非剥夺式。内核关键程序是非剥夺式的,用户进程是剥夺式的。

低级调度是所有操作系统必备的功能。

作业是用户提交给操作系统计算的一个独立的任务。

作业与进程的关系:作业是任务实体,进程是完成任务的执行实体。没有作业任务,进程无事可做,没有进程,作业任务无法完成。

cpu利用率=cpu有效工作时间/cpu总的工作时间。

吞吐率=单位时间cpu处理作业的个数。

周转时间:向系统提交作业开始到作业完成为止。

低级调度算法(大部分也适用于作业调度算法):

1,先来先服务算法。(FCFS)

2,最短作业优先算法(SJF)

3,最短剩余时间优先算法(SRTF)

4,响应比最高优先算法(H RRF)响应比=作业周转时间/作业处理时间。

5,优先级调度算法。

6,轮转调度算法(RoundRobin)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics