引入操作系统后,从资源管理和控制程序执行的角度出发,必须把指令系统中的指令分作两部分:特权指令和非特权指令。
特权指令是指只能提供给操作系统的核心程序使用的指令,如启动I/O设备、设置时钟、控制中断屏蔽位、清内存、建立存储键,加载PSW(程序状态字)等。
只有操作系统才能执行指令系统中的全部指令(特权指令和非特权指令),用户程序只能执行指令系统中的非特权指令。
处理器状态又称为处理器的运行模式,大多数系统把处理器状态简单划分为核心态(特权状态、系统模式、特态或管态)和用户态(目标状态、用户模式、常态或目态)。
当处理器处于核心态时,程序可以执行全部指令,访问所有资源,并具有改变处理器状态的能力;当处理器处于用户状态时,程序只能执行非特权指令。
中断是指程序执行过程中,当发生某个事件时,中止CPU上现行程序的运行,引出处理该事件的程序执行的过程。
中断是现代操作系统实现并发性的基础之一。
中断是由与现行指令无关的中断信号触发的(异步的),且中断的发生与CPU处在用户模式或内核模式无关,通常在两条机器指令之间才可响应中断,一般来说,中断处理程序提供的服务不是为当前进程所需的,如时钟中断、硬盘读写服务请求中断;
异常是由现行程序执行指令过程中检测到例外,异常与CPU是同步的,一条指令执行期间允许响应异常,异常处理程序提供的服务是为当前进程所用的。异常包括很多方面,有出错(fault),也有陷入(trap)。
进程是操作系统中最基本、重要的概念,是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。
从理论角度看,进程是对正在运行的程序过程的抽象;从实现角度看,进程是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。
进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位。
三种基本状态:
进程上下文:进程物理实体和支持进程运行的环境合称为进程上下文。
进程上下文的三个组成部分:
每个进程都有一个进程控制块PCB,进程控制块PCB是操作系统用于记录和刻画进程状态及有关信息的数据结构,是操作系统控制和管理进程的主要依据。PCB是进程存在的唯一标志。
进程控制块包含三类信息:标识信息,现场信息,控制信息。
把进程的两项功能------“独立分配资源”与“被调度分派执行”分离开来:
原理:线程管理的所有工作由操作系统内核做。
优点:多处理器上,内核能同时调度同一进程中多个线程并行执行。进程中的一个线程被阻塞了,内核能调度同一进程的其它线程或其他进程中的线程占有处理器运行。
缺点:应用程序线程在用户态运行,而线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要用户态-内核态-用户态的模式切换,系统开销较大。
原理:线程管理工作由应用程序做,在用户空间实现,内核不知道线程的存在。
优点:线程切换不需要内核特权方式,因所有线程管理数据结构均在单个进程的用户空间中,管理线程切换的线程库也在用户地址空间中运行,因而不需要切换到内核方式来做线程管理。
缺点:线程执行系统调用时,不仅该线程被阻塞,且进程内的所有线程会被阻塞。
处理器调度分为三个级别:高级调度、中级调度和低级调度
在多道批处理操作系统中,作业首先进入系统辅存上的后备队列,高级调度将按照系统预定的调度策略把后备队列作业中的部分满足其资源要求的作业调入内存,为它们创建进程,分配所需资源。当作业完成后还要为它做好善后工作(功能)。
主要功能是按照某种原则决定就绪队列中的哪个进程或内核级线程能获得处理器, 并将处理机出让给它进行工作。
调度方式:
作业是用户提交给操作系统计算的一个独立任务。一般每个作业必须经过若干个相对独立又相互关联的顺序加工步骤才能得到结果,其中,每个加工步骤称一个作业步。例如,一个作业可分成“编译”、“连接装配”和“运行”三个作业步,往往上一个作业步的输出是下一个作业步的输入。
进程是对系统中已提交完毕并选中运行的程序的执行过程,也是为完成作业任务向系统申请和分配资源的基本单位。用户进程在执行过程中可创建作业步子进程。
作业调度选中一个作业且把它装入主存储器时就为该作业创建一个用户进程。这些进程将在进程调度的控制下占有处理器运行。为了充分利用处理器,可以把多个作业同时装入主存储器,这样就会同时有多个用户进程,这些进程都要竞争处理器。
进入计算机系统的作业只有经过两级调度后才能占用处理器。第一级是作业调度,使作业进入主存储器;第二级是处理器调度,使作业进程占用处理器。作业调度与处理器调度的配合能实现多道作业的同时执行。
策略:按照作业进入系统的先后次序来挑选作业,先进入系统的作业优先被挑选。
性能:算法容易实现,效率不高,只顾及作业等候时间,没考虑作业要求服务时间的长短,不利于短作业而优待了长作业。有利于CPU繁忙型作业而不利于I/O繁忙型作业。
策略:以进入系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行。这是一种非剥夺式调度算法。
性能:算法易于实现,效率不高,弱点是需要预先知道作业所需的CPU时间,而这个时间只能靠估计,估计值很难精确,若估计过低,系统可能提前终止该作业;忽视了作业等待时间,会出现饥饿现象。
FCFS只考虑作业等候时间而忽视了作业的计算时问,SJF只考虑用户估计的作业计算时间而忽视了作业等待时间。
相应比定义:作业进入系统后的等待时间与估计计算时间之和称作该作业的响应时间,作业的响应时间除以作业估计计算时间称作响应比,即:
响应比 = 1 + 等待时间/估计运行时间
策略:介于FCFS和SJF算法,既考虑作业等待时间,又考虑作业的运行时间,既照顾短作业又不使长作业的等待时间过长,改进了调度性能。
性能:
缺点是每次计算各道作业的响应比会有一定的时间开销,需要估计期待的服务时间,性能比SJF略差。
根据确定的优先数来选取作业,每次总是选择优先数高的作业。
预先按一定原则把作业划分成若干类,以达到均衡使用系统资源和兼顾大小作业的目的。
分类原则包括作业计算时间、对内存的需求、对外围设备的需求等。作业调度时还可为每类作业设置优先级,从而照顾到同类作业中的轻重缓急。
引起低级调度的原因:
当一个进程由运行状态变为非运行状态,或者一个进程变为就绪状态时,都会引起低级调度。
按照进程进入就绪队列的先后次序分配处理器。先进入就绪队列的进程优先被挑选,运行进程一旦占有处理器将一直运行直到结束或阻塞。这是一种非剥夺式调度。
算法容易实现,效率不高,不利于I/O频繁的进程。
每次从就绪队列中选择CPU周期最短者
若采用剥夺式调度,则算法变为最短剩余CPU周期优先
思想:轮转法调度也称为时间片调度,时间片调度做法是:调度程序每次把CPU分配给就绪队列首进程使用一个时间片,就绪队列中的每个进程轮流地运行一个时间片。当这个时间片结束时,强迫一个进程让出处理器,让它排列到就绪队列的尾部,等候下一轮调度。
是一种剥夺式算法
给每一个进程确定一个优先数,处理器调度每次选择就绪进程中优先数最大者,让它占用处理器运行称优先数调度。
基于优先数的低级调度算法有两种调度方式:剥夺式和非剥夺式优先数调度算法。对于剥夺式要考虑优先数的计算时机
思想:将就绪进程分为两级或多级,建立两个或多个就绪进程队列,较高优先级的队列一般分配给较短的时间片。调度时先从高级就绪进程队列中选取进程,只有在选不到时,才从较低级的就绪进程队列中选取。同一队列中的进程按先来先服务原则排队。开始工作时,每当一个新进程进入内存后,首先进入高优先级队列等候调度,若能在该级队列的一个时间片内执行完成,则撤离系统,否则进入低一级的队列等候调度,队列级别越低,时间片就越大,低优先级队列中的进程获得调度时运行的时间就长一些。