首页 > 代码库 > 处理器管理 - 操作系统概论
处理器管理 - 操作系统概论
程序的顺序执行
一个计算问题往往按照一定的顺序执行,执行的顺序是由编制的程序确定的。
例如,一个作业:输入机读入数据需要 10s,处理器处理数据需要 5s,结果打印需要 15s;执行完总耗时 30s,执行两次需要 60s,呈下图显示:
可以看出,输入机工作时,处理器和打印机在等待;处理器工作时,输入机打印机在等待;各部件依顺序工作,完整的消耗了整个作业的时间周期,效率不高。
程序的并行执行
现代计算机中的硬件都具有处理器与外围设备并行工作的能力。若将上述作业分成三个可独立执行的模块:输入程序、处理程序、打印程序,输入程序把读入的数据交给处理器执行的同时,由可继续读入下一批数据;处理器处理好一批数据让打印程序输出结果,只要下一批新的数据已经读入,即可在打印的同时又开始处理数据。如图:
可见,程序的并行执行发挥了处理器与外围设备并行工作的能力,使处理器的效率有所提高。但由于处理器的执行速度远远高于外围设备的传输速度,仍可能出现处理器处理好数据交给打印程序输出,但输入机还没读完下一批新的数据,致使处理器处于空闲状态的情况。
多道程序设计
让多个计算题同时进入一个计算机系统的主存储器并行执行,这种程序设计方法称为 多道程序设计,这样的计算机系统称为 多道程序设计系统。采用多道程序设计的方法后,能充分发挥处理器的使用效率,增加单位时间内的算题量。
在上例的基础上,再增加一道计算题,每次从磁带机读入一批数据进行处理,当这两道题并行工作时,处理器在 t2 – t4 这段时间内又为第二道题忙碌了一阵,这就减少了处理器的空闲时间,从而提高了处理器的利用率,如图:
需要指出,一道计算题的执行可能受到另一道计算题的制约。在单处理器的计算机系统中,两个程序不能同时占用处理器。因此,从总体上而言,采用多道程序设计可增加单位时间内的算题量,但对每一道来说,执行完成的时间可能比单道执行要延长。
例如:
A 的执行过程为:计算 50ms,打印 100ms,再计算 50ms,打印 100ms;
B 的执行过程为:计算 50ms,输入数据 80ms,再计算 100ms,打印 100ms;
如果 AB 分别单独执行,共需 630ms,使用处理器的时间为 250ms,处理器的使用效率为 250 / 630 * 100% = 39.7%
如果采用多道程序设计,让 AB 两道并行执行的话,则如下图:
可以看出,AB 执行完共耗时 400ms,处理器的使用效率为 250 / 400 = 62.5%!
显然,多道程序设计不仅提高了处理器的使用效率,而且降低了完成计算所需的总时间,从而提高了单位时间内的算题能力,提高了吞吐量。但是多道并行工作时,一道题可能受另一道题的制约,所以对每一道题来说,从开始执行到完成所需的时间有时会比单独执行时所需的时间长。
进程的概念
要使用计算机系统来解决某个问题时首先需要编制程序。程序是具有独立功能的一组指令的集合,程序的执行必须依赖于一个实体 - 数据集。一个程序在一个数据集上的一次执行称为一个进程(Process),因此,程序是静止的,进程是动态的。
- 为什么要引入进程?
- 为了提高资源的利用率。操作系统把一个计算问题中每个可独立执行的程序模块看作一个进程,例如,输入进程、处理进程、打印进程。通过进程的同步可使这些进程正确合作,从而使处理与外围设备以及各种外围设备之间有效地并行工作,提高资源的利用率。
- 为了正确描述程序的执行情况。在多道程序设计系统中,往往要处理多个用户的计算问题,每个用户都会为自己的计算问题编制源程序,进入系统后,首先会调用“编译程序”把源程序翻译成目标程序。假定编译程序 P 从 a 点开始工作,正在编译程序 A,当工作到 b 点时,需要把中间结果记录到磁盘上,于是程序 P 在 b 点等待磁盘传输信息的空闲时间开始编译程序 B,P 仍从 a 点开始工作。现在的问题是如何描述程序 P 的状态?到底是“P 在 b 点等待磁盘传输”还是说“P 在 a 点开始执行”?显然,从程序 P 的角度已经无法正确描述程序执行时的状态。编译程序 P 只有一个,而加工对象有 AB 两个源程序,如果把编译程序与服务对象联系起来,则可以说构成了 PA 和 PB 两个进程。现在可以很好的解释程序执行的情况,即进程 PA 在 b 点等待磁盘传输信息;进程 PB 正在 a 点开始执行编译。
- 进程的 4 个基本属性
- 进程是动态的,它包含了数据和执行在数据集上的程序。
- 多个进程可以含有相同的程序。
- 多个进程可以并发执行。一个进程已经开始工作但还没有结束之前,另一个进程也可以开始工作,这就是 进程的并发执行。
- 进程有三种基本状态(等待态 - 等待某一事件发生、就绪态 - 等待系统分配处理器以便运行、运行态 - 正占有处理器运行中)。单处理器系统,若干进程轮流占用处理器运行,一个进程运行若干条指令后,由于自身原因(例如,请求启动外围设备传输信息)或外界的原因(例如,有高优先级的进程需要运行)而让出处理器,然后别的进程可以占用处理器。
进程在执行过程中状态不断发生变化,但在任一时刻仅处于 3 种基本状态之一。其转换关系有 4 种,如下图:
- 运行态 → 等待态【启动外围设备,等待设备传输结束;申请资源(主存空间、外围设备)得不到满足;程序出错卡死】
- 等待态 → 就绪态【外围设备工作结束、等待的资源得到了满足】
- 运行态 → 就绪态【分配给进程占用处理器的时间用完而强迫让出处理器、有更高优先级的程序要运行而迫使正在运行的进程让出处理器】
- 就绪态 → 运行态【系统按一种规定的策略从多个处于就绪态的进程中选择一个进程,让它占用处理器,被选中的进程状态就变成运行态】
根据上述 4 个基本属性可概括为进程具有如下三个特性:
- 动态性。进程是程序的一次执行过程,在执行过程中进程状态不断发生变化。
- 并发性。若干进程可以同时执行,它们轮流占用处理器交替执行。
- 异步性。进程执行的速度取决于自身、外界原因、进程的调度策略,因此以不可预知的速度向前推进。
进程控制块
为了能区别各个不同的进程,记录各个进程执行的情况,对每一个进程都设置一个“进程控制块(Process Control Block,PCB)”。在计算机系统中,进程控制块 就是对进程进行管理和调度的信息集合。
进程控制块包含 4 类信息:
- 标识信息。标识一个进程。
- 说明信息。说明进程情况。
- 现场信息。保留当前运行进程暂时让出处理器时存放在处理器中的各种信息,以便能在继续运行时得以恢复。
- 管理信息。管理进程。
每一个进程都有生命周期。为运行某一个程序,就要为它分配一个工作区(存放程序执行时的数据)和建立一个进程控制块,这时就创建了一个进程。创建后的进程由进程控制块中的进程名来标识,此时的状态为就绪态,当它能占用处理器时就变成了运行态,执行过程中状态可不断发生变化,这些变化的情况记录在进程控制块中,操作系统依据进程控制块对进程进行控制和管理。
一个进程在执行过程中,可要求再创建其他进程。例如,一个作业进入系统中,首先系统为该作业创建一个“编译进程”;编译进程请求系统将源程序读入主存储器,于是系统又创建一个“分配主存”的进程;如此等等,各进程相互协作,完成特定的计算任务。每创建一个进程都有一个进程控制块来标识,这时是该进程的生命的开始;一个进程完成了自己的任务后,系统要收回这个进程占有的工作区和撤销该进程的进程控制块,于是该进程就结束了它的生命而消亡。
操作系统中往往设计一些完成特定功能且不可中断的过程,这些不可中断的过程称为 原语。用于控制进程的原语有:
- 创建原语。(为一个程序分配工作区、建立进程控制块、并置为就绪态)
- 撤销原语。(一个进程完成任务后,收回它的工作区和进程控制块)
- 阻塞原语。(进程运行过程中发生等待事件时,把进程置为等待态)
- 唤醒原语。(当进程等待的事情发生时,把进程的状态改为就绪态)
进程队列
在单处理器的情况下,每次只能让一个进程运行。在多道程序设计系统中,往往会同时创建多个进程,这些被创建的若干就绪进程可按一定的次序排成队列,等待系统把处理器分配给它们以便运行,这个队列称为 就绪队列。
同一队列中的进程通过进程控制块中的队列指针联系起来。队首指针指向队列中第一个进程控制块,每一个进程控制块的指针指向下一个进程控制块,最后一个进程控制块中的指针值为“0”。如图:
除了就绪队列外,系统中还有其他队列。例如,若干进程都要求使用同一台外围设备时,一次只有一个进程可用,其他进程必须等待,这时就会形成等待队列;同样,系统把等待不同资源的进程组织成不同的等待队列,这样就形成了多个等待队列。
一个进程在执行过程中,由于进程的状态不断变化,就需要从一个队列退出(出队),并进入另一个队列(入队),直至进程结束。系统中负责进程入队和出队的工作称为 队列管理。如图:
当一个指定的进程要退出某队列时,首先找到队首指针,沿链查找要出队的进程,找到后取出该进程的 PCB 中的队列指针,将其送入到前一个进程的 PCB 中的队列指针位置。以此类推,考虑在这种链表结构下,各种位置下发生的出队入队情况。
中断和中断处理
由于某些事件的出现,中止现行进程的运行,而由操作系统去处理出现的事件,待适当的时候让被中止的进程继续运行,这个过程称为 中断 。引起中断的事件称为 中断源 。对出现的事件进行处理的程序称为 中断处理程序 。
- 中断类型
从中断事件的性质来说,一般可以分为以下几种中断类型:
- 硬件故障中断。例如,电源故障、主存出错等。
- 程序中断。这是由于程序执行到某条机器指令时可能出现的各种问题而引起的中断。例如,除数为 0、地址越界等。
- 外部中断。这是由各种外部事件引起的中断。例如,按下了控制板上的中断键、设置的定时时钟的时间周期到。
- 输入/输出中断。输入输出控制系统发现外围设备完成了输入输出操作而引起的中断、或执行输入输出操作时通道与外围设备产生的错误而引起的中断。
- 访管中断。它是正在运行的进程为了请求调用操作系统的某个功能而执行一条访管指令所引起的中断。例如,用户要求分配一台外围设备、要求分配一些主存区域等。
1 ~ 4 类的中断不是正在运行的进程所期待的,而是由于外界的原因迫使正在运行的进程被打断,因此称为 强迫性中断事件。
第 5 类中断是正在运行的进程所期待的,它表示进程对操作系统的某种需求,故称为 自愿性中断事件,在小型和微型计算机中称为 系统调用。
- 中断响应
自愿性中断事件是由处理器执行指令时根据指令中的操作码捕获到的,强迫性中断事件是由硬件的中断装置发现的。通常,处理器执行完一条指令后,硬件的中断装置立即检查有无强迫性中断事件发生。
无论发生哪一类中断事件,都由硬件的中断装置暂停现行进程的运行,而让操作系统的中断处理程序占用处理器,这一过程称为 中断响应。
每一个程序都要有一个程序状态字(PSW)来刻画本程序的执行状态,在单处理器的计算机系统中,整个系统设置一个用来存放当前运行进程的 PSW 的寄存器,该寄存器称为 程序状态字寄存器。
为了说明中断响应过程,我们区分三种 PSW:
- 存放在程序状态字寄存器中的 PSW 是当前正在占用处理器的进程的 PSW,称为 当前PSW。
- 出现中断事件后,操作系统的中断处理程序会占用处理器来处理出现的中断事件,我们把中断处理程序的 PSW 称为 新PSW。
- 中断处理程序占用处理器前,必须把被中断进程的 PSW 保护好,以便该进程在适当的时候按被中断时的情况继续执行,把保护好的被中断进程的 PSW 称为 旧PSW。
于是,当发现中断事件后,中断装置首先把出现的中断事件存放到程序状态字寄存器中的中断码位置;然后把程序状态字寄存器中的 PSW 作为旧 PSW存放到预先约定好的主存固定单元中保护起来;再把已经确定好的操作系统处理程序的新 PSW 送到程序状态字寄存器的 PSW 中成为当前 PSW,这一过程称为 交换 PSW。当中断程序占用处理器后,先从保护好的旧 PSW 中取出中断码,分析发生的具体事件,然后对中断事件进行处理。
- 中断处理
中断处理程序对中断事件的处理分为两步:保护好被中断进程的现场信息;根据旧 PSW 中指示的中断事件进行具体处理。
各类中断事件的处理原则大致如下:
- 硬件故障中断事件的处理。这类故障必须进行人工干预,因此处理这类事件只能是输出一些故障信息,待操作员排除故障后,重新启动进程。
- 程序中断事件的处理。这类中断事件往往与程序编制有关,所以中断处理程序把出现的事件转交给用户自行处理。如果用户对发生的事件没有提出处理办法,那么操作系统就把发生事件的进程名、程序断点、事件性质等报告给操作员。
- 外部中断事件的处理。如果用户用控制板上的中断键请求调用操作系统的某个特定功能,那么处理程序就根据中断键的编号把处理转交给特定的例行程序。
- 输入/输出中断事件的处理。被启动的外围设备在完成一次数据传输时要形成一个“I/O 正常结束”事件,出现错误则要形成一个“I/O 异常结束”事件。
- 访管中断事件的处理。这类中断事件表示运行中的进程要调用操作系统的功能。中断处理程序可设置一张“系统调用程序入口表”,按系统调用类型号查询,找到相应的系统调用程序的入口地址,把处理交给实现调用功能的程序执行。
综上所述,多数情况下,中断处理程序只需要做一些保护现场、分析事件性质等原则性的处理,而具体的处理可由适当的例行程序完成。
中断和进程切换控制流程如图:
处理器调度
采用批处理操作系统和分时操作系统的计算机系统都属于多道程序设计系统。在这样的系统中,往往同时有多个作业请求处理,它们都要使用系统资源从而发生竞争。因此,如何对资源进行管理和分配是操作系统中的一个重要问题。处理器调度担负着对处理器的分配工作,它将决定谁能先占用处理器以及一次能占用多长时间。
- 处理器的两级调度(作业调度 & 进程调度)
在批处理操作系统控制下,把若干个用户作业组织成作业流,成批进入计算机系统中存放在磁盘上的专用区域等待处理。在操作系统中,把磁盘上用来存放作业信息的专用区域称为 输入井。把在输入井中等待处理的作业称为 后备作业。
任何作业只有被装入主存储器后才能执行。当输入井中等待处理的多个作业不能全部同时装入主存储器时,就必须根据系统设计时确定的允许并行工作的道数和一定的规则(算法),从后备作业中选取若干作业装入主存储器中,使它们有机会去获得处理器执行。从输入井中选取后备作业装入主存储器的工作称为 作业调度。不同计算机系统采用不同的规则进行作业调度,但都遵循一个必要条件:即系统现有的尚未分配的资源可以满足备选作业的资源要求。这才能避免进入主存储器的作业又得不到必要的资源无法执行的现象,从而保证系统有较高的吞吐能力。
作业调度会为选中的、进入主存储器中的一个或多个作业创建进程,这些进程的初始状态都为就绪态。在单处理器的计算机系统中,每一时刻都只能让一个进程占用处理器,多个进程竞争处理器时,必须按照一定的规则从就绪进程中选取一个进程,让它来占用处理器,这项选取工作就称为 进程调度。
作业调度和进程调度相互配合能实现多道作业的并行执行。对任何一个作业来说,只有先被作业调度选中才有机会去竞争处理器,只有被进程调度选中才能占用处理器。
- 作业调度算法
从用户角度来说,每一个用户都希望自己的作业能尽快的执行。从计算机系统的角度来说,既要考虑用户的要求,又要有利于系统效率的提高。所以在设计调度算法时,可考虑如下原则:
- 公平性。不能无故或无限制的拖延一个作业的执行。
- 平衡资源使用。尽可能使系统的资源都处于忙碌。
- 极大的流量。在单位时间内为尽可能多的作业服务,保证计算机系统的吞吐能力。
不同的计算机系统应根据系统的设计目标来决定采用的调度算法。目标不同,选择调度算法的侧重点也不同。常用的作业调度算法:
- 先来先服务算法。这是最简单的调度算法,但要主要,不是先进入的作业一定被先选中,还必须该作业执行的所需资源被得到满足才行。这个算法具有一定的公平性,但也可能使计算时间短的作业长时间的等待,这会使这些用户不满意,而且计算时间短的作业周转时间很长,从而增加多道作业的平均周转时间,降低了系统的吞吐能力。
- 计算时间短的作业优先算法。用户对自己作业需要计算的时间作出预估,作业调度依据输入井中的这些作业预估值,优先选择计算时间短且资源能满足的作业。这种算法能降低作业的平均周转时间,从而提高系统的吞吐能力。但有些用户为了自己的作业能更快的执行,故意把计算时间预估的很短;另外,由于系统可不断接收新作业进入输入井,如果新进作业的预估时间比较短,则会时进入输入井较早但计算时间长的作业等待太长的时间,会使某些用户不满意。
- 响应比高者优先算法。综合考虑作业的等待事件和计算时间,把响应比定义为: 响应比 = 等待时间 / 计算时间。这个分式动态的反映了作业的调度情况,等待时间越久(分子变大),则响应比越大。计算时间越短(分母小)则响应比值越大。
- 优先级调度算法。为每一个作业确定优先级,优先级高的作业优先被选中;相同优先级再按先来先服务的原则进行调度。优先级的确定可以根据作业的缓急程度、预估的计算时间、已经等待的时间来考虑。
- 均衡调度算法。根据作业对资源的要求进行分类,尽可能使得使用不同资源的作业同时执行。这样不仅可以使系统的资源都在忙碌,还可减少作业等待使用同类资源的时间,从而缩短作业的平均周转时间。
进程调度算法
一个进程让出处理器让另一个进程占用处理器的过程称为 进程切换。
我们知道,进程有就绪态、运行态、等待态。通常,进程切换是由进程状态的变化引起的,进程调度程序会按某种调度算法从就绪状态的进程中选择一个进程占用处理器。
常用的调度算法有:
- 先来先服务调度算法
这种算法就是按进程进入就绪队列的先后次序来选择,调度程序总是把处理器分配给队列中第一个进程,当有新的进程就绪时,就排入就绪队列的末尾。
- 最高优先级调度算法
对每一个进程给出一个优先级,进程调度总是让具有最高优先级的进程先使用处理器。这时又可分为二种方式:
- 非抢占式。一旦某个高优先级进程占用了处理器就一直运行下去,不管此时是否有更高优先级的进程就绪。
- 抢占式。进程调度程序严格保证任何时刻总是让优先级最高的进程占用处理器。这在实时系统中很有用,例如,把处理紧急情况的报警进程定位最高优先级,一旦有紧急情况,报警进程可抢占处理器进行紧急处理和发出警报。
进程的优先级也可以不是固定的。可根据使用资源的情况,所负任务的紧急程度、使用处理器的时间、系统效率等多方面的因素综合考虑。例如,可让操作系统进程优先级高于用户程序进程;或随着时间的推延,逐步提高长时间未使用处理器的就绪进程的优先级;提高经常使用外围设备的进程的优先级。
优先级调度算法也可与先来先服务调度算法混合使用,即相同优先级的进程又可使用先来先服务算法。
- 时间片轮转调度算法
时间片 是指允许进程一次占用处理器的最长时间。时间片轮转调度算法把就绪进程按就绪的先后次序排成队列,调度时总是选择就绪队列中的第一个进程,让它占用处理器,但规定它一次占用处理器的时间不能超过预定的时间片。时间片用完无论当前进程执行是否结束,都必须把处理器让给下一个就绪进程使用,而自己则重新排到就绪队列的末尾继续等待。
在分时操作系统中,经常采用时间片轮转调度算法。多个用户通过终端与计算机系统进行一系列交互,计算机系统应及时的对每一个用户的要求作出反应,采用时间片轮转调度算法可使每个用户都感觉到计算机系统对自己有求必应,好像自己单独在使用一个计算机系统。
时间片取值的大小关系到计算机系统的效率和用户的满意度。时间片小一些,系统会尽快的作出应答,这使轮转一圈的总时间减少。如果进程数比较少,则时间片可以大一些,这样可以减少调度次数,提高系统效率。每一个进程的时间片可以相同,也可不同,对需要执行时间长的进程可以给一个大一些的时间片,达到减少调度次数,加快进程执行速度的目的。
线程的概念
线程(Thread) 是现代操作系统的新概念,把用户的一个计算问题作为一个进程,把该进程中可以并行执行的各部分分别作为线程。
线程是进程中可独立执行的子任务,一个进程中可以有多个线程,每一个线程都有一个唯一的标识符和一张线程描述表。线程描述表用来记录线程执行时的现场信息及状态。
- 为什么要引入线程?
虽然一个计算问题可由若干个进程合作完成来提高效率,但进程多了缺点也随之而来,只要表现在:
- 每个进程都要占用一个进程控制块和一个私有的主存空间(存放数据集),开销较大。
- 进程之间传递信息时要从一个工作区传到另一个工作区,需要专用的通信机制,速度较慢。
- 进程增多了就增加了进程的调度次数,给调度和控制带来了复杂性。
因而,现代操作系统尽量避免设计过多的进程,而采用线程技术。
采用多线程技术的操作系统仅为被创建的进程分配所需的资源,让一个进程内的各个线程共享进程拥有的资源。因而,进程是资源分配单位,线程则是调度、执行单位。
多线程技术有明显的优越性:
- 减少了进程也就节省了分配进程控制块和工作区的开销。
- 创建线程需要为线程建立一张“线程描述表”以记录线程的活动情况,但不需要另行分配资源,创建速度快。
- 线程间的信息传递在同一主存空间(进程所拥有的主存空间)进行,不需要额外的通信机制,且传递速度快。
- 线程能独立执行,能充分利用和发挥处理器与外围设备的并行工作能力。
- 线程的属性
线程有如下属性:
- 同一进程中的各线程驻留在分配给该进程的主存空间中,且共享该进程的所有资源。
- 一个线程被创建后便开始它的生命周期,直至执行结束而中止,期间会经历等待态、就绪态、运行态等各状态变化。
- 线程是处理器的独立调度单位,多个线程可以并发执行。在单处理器的计算机系统中交替占用处理器,在多处理器的计算机系统中可同时占用不同的处理器。
- 不同的线程可以执行相同的程序。即同一个服务程序被不同用户调用时,操作系统就为它们创建不同的线程。
线程与进程有许多相似之处,所以线程往往又被称为 轻型进程。
Test
1. 什么是多道程序设计?为什么要采用多道程序设计?
让多个计算题同时进入一个计算机系统的主存储器并行执行,这种程序设计方法称为多道程序设计。多道程序设计不仅提高了处理器的使用效率,而且降低了完成计算所需的总时间,从而提高了单位时间内的算题能力,提高了吞吐量。
2. 现有 AB 两道程序,它们各自需要执行 1 小时,其中需要使用处理器 18 分钟。今在一个多道程序设计系统中让 AB 并行执行,总共花了 72 分钟都执行结束。问两道并行工作时的处理器使用率比单道执行时的处理器使用率提高了多少?
单道执行时处理器的使用率为:18 * 2 / 120 * 100% = 30%;两道并行执行时处理器的使用率为:18 * 2 / 72 * 100% = 50%;处理器使用率提高了约 66.66%。
3. 进程有哪些基本状态?画出进程基本状态变化图。
进程有 3 种基本状态:等待态、就绪态、运行态。
4. 列举进程状态发生变化的事件。
运行态 → 等待态(启动外围设备,等待设备传输结束;申请资源如主存空间、外围设备等得不到满足;程序出错卡死)
等待态 → 就绪态(外围设备工作结束、等待的资源得到了满足)
运行态 → 就绪态(分配给进程占用处理器的时间用完而强迫让出处理器、有更高优先级的程序要运行而迫使正在运行的进程让出处理器)
就绪态 → 运行态(系统按一种规定的策略从多个处于就绪态的进程中选择一个进程,让它占用处理器,被选中的进程状态就变成运行态)
5. 解释中断、中断源。
由于某些事件的出现,中止现行进程的运行,而由操作系统去处理出现的事件,待适当的时候让被中止的进程继续运行,这个过程称为中断 。引起中断的事件称为 中断源 。
6. 硬件发现中断事件后应做哪些工作?
当发现中断事件后:
1. 置中断码。中断装置首先把出现的中断事件存放到程序状态字寄存器中的中断码位置。
2. 交换新、旧 PSW。然后把程序状态字寄存器中的 PSW 作为旧 PSW存放到预先约定好的主存固定单元中保护起来;再把已经确定好的操作系统处理程序的新 PSW 送到程序状态字寄存器的 PSW 中成为当前 PSW。
7. 中断处理程序应做哪些工作?
中断处理程序对中断事件的处理分为两步:保护好被中断进程的现场信息;根据旧 PSW 中指示的中断事件,分析事件性质,而具体的处理可由适当的例行程序完成。
8. 设在一个单处理器的多道程序设计系统中,有两道作业同时执行,一道以计算为主,另一道以输入输出为主。你将怎样赋予作业进程占有处理器的优先级?为什么?
赋予计算为主的作业的进程低优先级,I/O 进程高优先级。因为 I/O 设备通常处理速度较慢,该进程一旦调用 I/O 设备时,就会主动让出处理器,以计算为主的作业就能占有处理器执行。这样,能使处理器和 I/O 设备都处于忙碌状态,提高系统的使用率。
9. 假定就绪状态的进程按优先级自小到大顺序排成队列,当有一进程要进入就绪队列时,应按它的优先级排在相应位置上,试写出进程入队的程序。
当一个就绪态的进程要进入就绪队列时,首先根据队首指针,沿链查找,按本题的意思就是要比较优先级之后确定自己要插入的位置。假设要插入在进程A和进程B进程之间,应把进程A的进程控制块中的指针指向自己,把自己的进程控制块中的指针指向进程B;如经过比较优先级之后,需要插入在队首,则把队首指针指向自己的进程控制块,自己进程控制块的指针指向原先第一个进程控制块;如经比较后需插入到队列的末尾,则把原队列中最后一个进程的进程控制块中的指针指向自己,把自己的进程控制块中的指针置为 0。,这样就完成了进程入队的操作。
10. 解释处理器的两级调度。
首先,进行作业调度。任何作业只有被装入主存储器后才能执行。当输入井中等待处理的多个作业不能全部同时装入主存储器时,就必须根据系统设计时确定的允许并行工作的道数和作业调度算法,从后备作业中选取若干作业装入主存储器中,使它们有机会去获得处理器执行。从输入井中选取后备作业装入主存储器的工作称为就称为作业调度。作业调度会为选中的、进入主存储器中的一个或多个作业创建进程,这些进程的初始状态都为就绪态。
接着,进行处理器调度。在单处理器的计算机系统中,每一时刻都只能让一个进程占用处理器,多个进程竞争处理器时,必须按照进程调度算法从就绪进程中选取一个进程,让它来占用处理器,这项选取工作就称为进程调度。
11. 什么是作业调度?作业调度选择作业的必要条件是什么?
任何作业只有被装入主存储器后才能执行。当输入井中等待处理的多个作业不能全部同时装入主存储器时,就必须根据系统设计时确定的允许并行工作的道数和作业调度算法,从后备作业中选取若干作业装入主存储器中,使它们有机会去获得处理器执行。从输入井中选取后备作业装入主存储器的工作称为就称为作业调度。
不同计算机系统采用不同的规则进行作业调度,但都遵循一个必要条件:即系统现有的尚未分配的资源可以满足备选作业的资源要求。这才能避免进入主存储器的作业又得不到必要的资源无法执行的现象,从而保证系统有较高的吞吐能力。
12. 设有供用户使用的主存空间 100K,系统配有 4 太磁带机。该系统采用多道程序设计技术,请分别写出采用“先来先服务调度算法”和“计算时间最短优先算法”选中的作业执行次序。作业序列如下:
作业号 | 进入输入井时间 | 要求计算时间 | 要求主存量 | 申请磁带机数 |
1 | 10:00 | 25 分钟 | 15K | 2 台 |
2 | 10:20 | 30 分钟 | 60K | 1 台 |
3 | 10:30 | 10 分钟 | 50K | 3 台 |
4 | 10:35 | 20 分钟 | 10K | 2 台 |
5 | 10:40 | 15 分钟 | 30K | 2 台 |
先来先服务算法下的作业执行次序为:1,2,4,5,3。
计算时间最短优先算法下的作业执行次序为:3,5,4,1,2。
13. 在某计算中心的一个单道程序设计系统中,有ABC三个作业在等待处理,他们到达系统的时间和估计计算的时间如下图。假定系统从9:30开始调度作业,试问,采用计算时间短的作业优先算法和最高响应比优先算法调度时各自的等待时间和完成时间。
作业 | 到达时间 | 估计时间 |
A | 8:30 | 130 分钟 |
B | 8:50 | 15 分钟 |
C | 9:20 | 70 分钟 |
计算时间短的作业优先算法将依以下顺序执行:
作业B 于 9:30 分开始执行,等待时间为 40分钟,计算 15 分钟,9:45 分完成计算。
作业C 于 9:45 分开始执行,等待时间为 25分钟,计算 70 分钟,10:55 分完成计算。
作业A 于 10:55 分开始执行,等待时间为 145分钟,计算 130 分钟,13:05 分完成计算。
最高响应比优先算法将依以下顺序执行:
9:30分,此时,作业A 的响应比为 60/130,作业B 的响应比为 40/15,作业C 的响应比为 10/70,于是,作业B 先执行,等待时间为 40分钟, 9:45 分完成计算。
9:45分,此时,作业A 的响应比为 75/130,作业C 的响应比为 25/70,于是,作业A 先执行,等待时间为 75 分钟,并于 11:55 分完成计算。
11:55分,此时,作业C 开始执行,等待时间为 155 分钟,并于 13:05 分完成计算。
14. 什么是进程调度?进程调度怎样使被选中的进程能占用处理器?
在单处理器的计算机系统中,每一时刻都只能让一个进程占用处理器,多个进程竞争处理器时,必须按照进程调度算法从就绪进程中选取一个进程,让它来占用处理器,这项选取工作就称为进程调度。
进程调度选中了一个进程后,就将其进程控制块中的现场信息、如通用寄存器、控制器寄存器、程序状态字寄存器等内容送入处理器相应的寄存器中,从而使它占用处理器运行。
15. 在分时系统中采用时间片轮转的调度策略有什么优越性?
多个用户通过终端与计算机系统进行一系列交互,计算机系统应及时的对每一个用户的要求作出反应,采用时间片轮转调度算法可使每个用户都感觉到计算机系统对自己有求必应,好像自己单独在使用一个计算机系统。可以提升系统效率和用户满意度。
16. 分时系统中的进程可能出现如下图中 1~4 的变化,请把产生每一种状态变化的具体原因填写在表格的相应栏内。
变化 | 变化原因 |
1 | 就绪态 → 运行态。多个进程等待分配处理器时,系统按既定策略从中选择一个进程,让它占有处理器,被选中的进程的状态就变为运行态。 |
2 | 运行态 → 就绪态。分配给进程占用处理器的时间用完;或有更高优先级的进程要运行,都会迫使进程让出处理器,从而再进入就绪态。 |
3 | 运行态 → 等待态。在运行中启动了外围设备,等待外围设备传输结束;运行中申请资源(如主存空间)得不到满足;出现故障(如程序出错)。 |
4 | 等待态 → 就绪态。外围设备工作结束;等待的资源得到满足等都会使进程由等待态变为就绪态。 |
17. 某计算机系统中,进程调度采用时间片轮转调度算法。每个进程得到的时间片可随进程的执行情况而变化,在过去的时间里,若进程经常启动外设,则给它分配较短的时间片;若启动外设次数很少,则分配一个较长的时间片。请回答:(1) 上述分配时间片的方法有什么优点?(2)在系统中设置两个就绪队列,一个是时间片较短的进程就绪队列,另一个是时间片较长的进程就绪队列。那么,你认为进程调度时应优先从哪个队列中选取一个就绪进程占有 CPU?为什么?
(1)提高了处理器的利用率。因为启动外设的速度是很慢的,进程在使用外设的过程中处于一种阻塞的状态,CPU 只能闲置,极大的降低了 CPU 的利用率,CPU 完全可以利用该进程读写外设的时间运行其他的进程。
(2)优先选用时间片较短的进程就绪队列。假设有两个进程A和B,A执行只需要1ms,B需要30ms。如果先A后B,A的响应时间为1ms,B的响应时间为31ms;如果先B后A,A的响应时间为31ms,B的响应时间为30ms。由此可见,若优先选取时间片较长的进程就绪队列,那么平均响应时间会很长,用户体验极差。
18. 有 5 个进程 P1,P2,P3,P4,P5。它们同时依次(一个接一个)进入就绪队列,它们的优先级和需要的处理时间如下表所示:
进程 | 处理器时间 | 优先数 |
P1 | 10 | 3 |
P2 | 1 | 1 |
P3 | 2 | 3 |
P4 | 1 | 4 |
P5 | 5 | 2 |
只要就绪队列非空就可以开始调度,且忽略进行调度所花费的时间。请回答下列问题:(1)写出分别采用“先来先服务”和“非抢占式的优先数”调度算法中进程执行的次序。(2)分别算出上述两种算法使各进程在就绪队列中的等待时间以及两种算法下的平均等待时间。
“先来先服务”调度算法的情况下:执行次序是 P1,P2,P3,P4,P5。P1 等待时间 0,P2 等待时间 10,P3 等待时间 11,P4 等待时间 13,P5 等待时间 14,平均等待时间 (0 + 10 + 11 + 13 + 14)/ 5 = 9.6。
“非抢占式的优先数”调度算法的情况下:执行次序是 P1,P4,P3,P5,P2。P1 等待时间 0,P4 等待时间 10,P3 等待时间 11,P5 等待时间 13,P2 等待时间 18,平均等待时间 (0 + 10 + 11 + 13 + 18)/ 5 = 10.4。
19. 什么是线程?线程与进程有什么异同?
线程是进程中可独立执行的子任务,一个进程中可以有多个线程,每一个线程都有一个唯一的标识符和一张线程描述表。线程描述表用来记录线程执行时的现场信息及状态。
两者的相同点:(1) 都具有标识符、寄存器、状态、优先级和所要遵循的调度策略。(2)每一个进程都有进程控制块,每一个线程也有一个线程控制块。
在多线程技术的操作系统中,两者的根本区别是:(1)把进程作为资源分配单位,而线程是调度和执行单位。(2)每一个进程都有自己的主存空间,但同一进程中的各个线程共享该进程的主存空间,都有对数据集的存取权限。
20. 采用多线程技术有什么优点?
(1)减少了进程也就节省了分配进程控制块和工作区的开销。
(2)创建线程需要为线程建立一张“线程描述表”以记录线程的活动情况,但不需要另行分配资源,创建速度快。
(3)线程间的信息传递在同一主存空间(进程所拥有的主存空间)进行,不需要额外的通信机制,且传递速度快。
(4)线程能独立执行,能充分利用和发挥处理器与外围设备的并行工作能力。
处理器管理 - 操作系统概论