进程调度
操作系统实验报告进程调度

操作系统实验报告进程调度操作系统实验报告:进程调度引言在计算机科学领域中,操作系统是一个重要的概念,它负责管理和协调计算机系统中的各种资源,包括处理器、内存、输入/输出设备等。
其中,进程调度是操作系统中一个非常重要的组成部分,它负责决定哪个进程在何时获得处理器的使用权,以及如何有效地利用处理器资源。
实验目的本次实验的目的是通过对进程调度算法的实验,深入理解不同的进程调度算法对系统性能的影响,并掌握进程调度算法的实现方法。
实验环境本次实验使用了一台配备了Linux操作系统的计算机作为实验平台。
在该计算机上,我们使用了C语言编写了一些简单的进程调度算法,并通过模拟不同的进程调度场景进行了实验。
实验内容1. 先来先服务调度算法(FCFS)先来先服务调度算法是一种简单的进程调度算法,它按照进程到达的顺序进行调度。
在本次实验中,我们编写了一个简单的FCFS调度算法,并通过模拟多个进程同时到达的情况,观察其对系统性能的影响。
2. 短作业优先调度算法(SJF)短作业优先调度算法是一种根据进程执行时间长度进行调度的算法。
在本次实验中,我们编写了一个简单的SJF调度算法,并通过模拟不同长度的进程,观察其对系统性能的影响。
3. 时间片轮转调度算法(RR)时间片轮转调度算法是一种按照时间片大小进行调度的算法。
在本次实验中,我们编写了一个简单的RR调度算法,并通过模拟不同时间片大小的情况,观察其对系统性能的影响。
实验结果通过实验,我们发现不同的进程调度算法对系统性能有着不同的影响。
在FCFS 算法下,长作业会导致短作业等待时间过长;在SJF算法下,长作业会导致短作业饥饿现象;而RR算法则能够较好地平衡不同进程的执行。
因此,在实际应用中,需要根据具体情况选择合适的进程调度算法。
结论本次实验通过对进程调度算法的实验,深入理解了不同的进程调度算法对系统性能的影响,并掌握了进程调度算法的实现方法。
同时,也加深了对操作系统的理解,为今后的学习和研究打下了良好的基础。
实验一、进程调度实验报告

实验一、进程调度实验报告一、实验目的进程调度是操作系统中的核心功能之一,其目的是合理地分配 CPU 资源给各个进程,以提高系统的整体性能和资源利用率。
通过本次实验,我们旨在深入理解进程调度的原理和算法,掌握进程状态的转换,观察不同调度策略对系统性能的影响,并通过实际编程实现来提高我们的编程能力和对操作系统概念的理解。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 C++,开发工具为 Visual Studio 2019。
三、实验原理1、进程状态进程在其生命周期中会经历不同的状态,包括就绪态、运行态和阻塞态。
就绪态表示进程已经准备好执行,只等待 CPU 分配;运行态表示进程正在 CPU 上执行;阻塞态表示进程由于等待某个事件(如 I/O操作完成)而暂时无法执行。
2、调度算法常见的进程调度算法有先来先服务(FCFS)、短作业优先(SJF)、时间片轮转(RR)等。
先来先服务算法按照进程到达的先后顺序进行调度。
短作业优先算法优先调度执行时间短的进程。
时间片轮转算法将 CPU 时间划分成固定大小的时间片,每个进程轮流获得一个时间片执行。
四、实验内容1、设计并实现一个简单的进程调度模拟器定义进程结构体,包含进程 ID、到达时间、执行时间、剩余时间等信息。
实现进程的创建、插入、删除等操作。
实现不同的调度算法。
2、对不同调度算法进行性能测试生成一组具有不同到达时间和执行时间的进程。
分别采用先来先服务、短作业优先和时间片轮转算法进行调度。
记录每个算法下的平均周转时间、平均等待时间等性能指标。
五、实验步骤1、进程结构体的定义```c++struct Process {int pid;int arrivalTime;int executionTime;int remainingTime;int finishTime;int waitingTime;int turnaroundTime;};```2、进程创建函数```c++void createProcess(Process processes, int& numProcesses, int pid, int arrivalTime, int executionTime) {processesnumProcessespid = pid;processesnumProcessesarrivalTime = arrivalTime;processesnumProcessesexecutionTime = executionTime;processesnumProcessesremainingTime = executionTime;numProcesses++;}```3、先来先服务调度算法实现```c++void fcfsScheduling(Process processes, int numProcesses) {int currentTime = 0;for (int i = 0; i < numProcesses; i++){if (currentTime < processesiarrivalTime) {currentTime = processesiarrivalTime;}processesistartTime = currentTime;currentTime += processesiexecutionTime;processesifinishTime = currentTime;processesiwaitingTime = processesistartTime processesiarrivalTime;processesiturnaroundTime = processesifinishTime processesiarrivalTime;}}```4、短作业优先调度算法实现```c++void sjfScheduling(Process processes, int numProcesses) {int currentTime = 0;int minExecutionTime, selectedProcess;bool found;while (true) {found = false;minExecutionTime = INT_MAX;selectedProcess =-1;for (int i = 0; i < numProcesses; i++){if (processesiarrivalTime <= currentTime &&processesiremainingTime < minExecutionTime &&processesiremainingTime > 0) {found = true;minExecutionTime = processesiremainingTime;selectedProcess = i;}}if (!found) {break;}processesselectedProcessstartTime = currentTime;currentTime += processesselectedProcessremainingTime;processesselectedProcessfinishTime = currentTime;processesselectedProcesswaitingTime =processesselectedProcessstartTime processesselectedProcessarrivalTime;processesselectedProcessturnaroundTime =processesselectedProcessfinishTime processesselectedProcessarrivalTime;processesselectedProcessremainingTime = 0;}}```5、时间片轮转调度算法实现```c++void rrScheduling(Process processes, int numProcesses, int timeSlice) {int currentTime = 0;Queue<int> readyQueue;for (int i = 0; i < numProcesses; i++){readyQueueenqueue(i);}while (!readyQueueisEmpty()){int currentProcess = readyQueuedequeue();if (processescurrentProcessarrivalTime > currentTime) {currentTime = processescurrentProcessarrivalTime;}if (processescurrentProcessremainingTime <= timeSlice) {currentTime += processescurrentProcessremainingTime;processescurrentProcessfinishTime = currentTime;processescurrentProcesswaitingTime =processescurrentProcessstartTime processescurrentProcessarrivalTime;processescurrentProcessturnaroundTime =processescurrentProcessfinishTime processescurrentProcessarrivalTime;processescurrentProcessremainingTime = 0;} else {currentTime += timeSlice;processescurrentProcessremainingTime = timeSlice;readyQueueenqueue(currentProcess);}}}```6、性能指标计算函数```c++void calculatePerformanceMetrics(Process processes, int numProcesses, double& averageWaitingTime, double& averageTurnaroundTime) {double totalWaitingTime = 0, totalTurnaroundTime = 0;for (int i = 0; i < numProcesses; i++){totalWaitingTime += processesiwaitingTime;totalTurnaroundTime += processesiturnaroundTime;}averageWaitingTime = totalWaitingTime / numProcesses; averageTurnaroundTime = totalTurnaroundTime / numProcesses;}```7、主函数```c++int main(){Process processes100;int numProcesses = 0;//创建进程createProcess(processes, numProcesses, 1, 0, 5);createProcess(processes, numProcesses, 2, 1, 3);createProcess(processes, numProcesses, 3, 2, 4);createProcess(processes, numProcesses, 4, 3, 2);//先来先服务调度fcfsScheduling(processes, numProcesses);double fcfsAverageWaitingTime, fcfsAverageTurnaroundTime;calculatePerformanceMetrics(processes, numProcesses, fcfsAverageWaitingTime, fcfsAverageTurnaroundTime);cout <<"先来先服务调度的平均等待时间:"<<fcfsAverageWaitingTime << endl;cout <<"先来先服务调度的平均周转时间:"<<fcfsAverageTurnaroundTime << endl;//短作业优先调度sjfScheduling(processes, numProcesses);double sjfAverageWaitingTime, sjfAverageTurnaroundTime;calculatePerformanceMetrics(processes, numProcesses, sjfAverageWaitingTime, sjfAverageTurnaroundTime);cout <<"短作业优先调度的平均等待时间:"<<sjfAverageWaitingTime << endl;cout <<"短作业优先调度的平均周转时间:"<<sjfAverageTurnaroundTime << endl;//时间片轮转调度(时间片为 2)rrScheduling(processes, numProcesses, 2);double rrAverageWaitingTime, rrAverageTurnaroundTime;calculatePerformanceMetrics(processes, numProcesses, rrAverageWaitingTime, rrAverageTurnaroundTime);cout <<"时间片轮转调度(时间片为 2)的平均等待时间:"<< rrAverageWaitingTime << endl;cout <<"时间片轮转调度(时间片为 2)的平均周转时间:"<< rrAverageTurnaroundTime << endl;return 0;}```六、实验结果与分析1、先来先服务调度平均等待时间:40平均周转时间:85分析:先来先服务调度算法简单直观,但对于短作业可能会造成较长的等待时间,导致平均等待时间和平均周转时间较长。
进程调度概念

进程调度概念进程调度是操作系统中的一个重要概念,它涉及到如何合理分配和管理计算机资源,确保各个进程能够公平、高效地执行。
进程调度涉及到许多算法和策略,旨在提高系统的运行效率和响应时间。
本文将探讨进程调度的概念及其在操作系统中的应用。
概念解析进程调度是操作系统中的一个核心概念,它可以理解为操作系统对正在运行的进程进行优先级排列和调度执行的过程。
在单处理器系统中,进程调度决定了哪个进程将拥有处理器的执行权。
在多处理器系统中,进程调度还可以决定将哪些进程分配到哪个处理器上执行。
进程调度的目标进程调度的主要目标是提高系统的吞吐量和响应时间。
吞吐量表示单位时间内可以完成的任务数量,响应时间则表示从请求发出到系统给出响应所需要的时间。
为了实现这些目标,进程调度需要考虑多个因素,如进程的优先级、执行的时间片、进程等待时间等。
进程调度算法在实际应用中,有许多进程调度算法被广泛应用。
其中最早、最原始的是先来先服务(FCFS)调度算法,即根据进程到达的先后顺序进行调度。
这种算法简单直观,但存在“作业饥饿”问题,即后到达的长作业会导致前面的短作业等待时间过长。
为了解决FCFS算法的问题,人们提出了短作业优先(SJF)调度算法,即优先调度执行预计执行时间较短的进程。
这种算法可以最大限度地减少平均等待时间,提高系统的响应速度。
另外,还有时间片轮转(RR)调度算法,它将处理器的执行时间划分为固定长度的时间片,每个进程在一个时间片内执行,时间片过后,执行权交给下一个进程。
这种算法适合在多任务环境下使用,能够公平地分配处理器的执行时间。
还有其他一些调度算法,如最高响应比优先(HRRN)调度算法、多级反馈队列调度算法等。
这些算法根据不同的场景和需求,选择合适的优化策略,以提高系统的性能和效率。
进程调度的应用进程调度不仅仅在操作系统中发挥作用,在其他领域也有广泛的应用。
例如,工业自动化中的分布式控制系统,需要合理调度各个子系统之间的通信和任务执行,以实现高效的生产过程。
简述进程调度的主要功能。

简述进程调度的主要功能。
进程调度是操作系统中的一个重要功能,其主要作用是合理地分配和利用系统资源,提高系统的效率和响应速度。
进程调度的目标是使得系统的CPU利用率高、响应时间短、吞吐量大,并且能够保证各个进程按照一定的优先级顺序得到执行。
进程调度的主要功能包括以下几个方面:1. 实现进程的创建和终止:进程调度需要负责管理系统中的各个进程,包括进程的创建和终止。
当一个新的进程被创建时,进程调度会为其分配合适的资源,并将其加入到就绪队列中等待执行。
当一个进程完成任务或者发生异常时,进程调度会将其从执行队列中移除,并释放其占用的资源。
2. 决定进程的执行顺序:进程调度需要根据一定的调度算法决定进程的执行顺序。
常见的调度算法包括先来先服务(FCFS)、短作业优先(SJF)、优先级调度、时间片轮转等。
不同的调度算法有不同的优势和适用场景,可以根据实际情况选择合适的调度算法。
3. 分配CPU时间片:进程调度需要根据系统的运行状态和进程的优先级,合理地分配CPU时间片。
时间片是指每个进程在CPU上执行的时间段,时间片的长度可以根据实际情况进行调整。
较高优先级的进程可以获得更长的时间片,而较低优先级的进程则获得较短的时间片。
4. 处理进程的状态转换:进程调度需要根据进程的状态变化,进行相应的处理。
进程的状态包括就绪状态、运行状态、阻塞状态等。
当一个进程由就绪状态转变为运行状态时,进程调度需要将其从就绪队列中移除,并将其放入执行队列中。
当一个进程由运行状态转变为阻塞状态时,进程调度需要将其从执行队列中移除,并将其放入阻塞队列中等待条件满足后再次调度。
5. 处理进程的优先级调整:进程调度需要根据进程的优先级进行调整。
优先级可以根据进程的重要性、紧急程度、资源需求等因素来确定。
进程调度可以根据实时情况动态地调整进程的优先级,以便更好地满足系统的需求。
进程调度是操作系统中的一个核心功能,对于提高系统的性能和响应能力至关重要。
进程调度实验报告

进程调度实验报告这篇文章将讨论进程调度的相关实验及其结果。
进程调度是指计算机在多任务环境下对进程进行管理和调度,以便最大化系统的效率和可靠性。
在进程调度实验中,我们使用了Linux操作系统,并编写了一段程序来模拟具有多个进程的计算机系统。
我们首先定义了三个不同类型的进程:I/O Bound进程、CPU Bound进程和Interactive进程。
I/O Bound进程是一个需要从磁盘读取数据并进行处理的进程,CPU Bound进程则是一个需要使用CPU来完成复杂计算的进程,而Interactive进程是用户与系统交互的进程。
实验中,我们使用了三个不同的进程调度算法:Round Robin、先来先服务(FCFS)和最短作业优先(SJF)。
Round Robin是最简单的进程调度算法,它会将CPU时间分配给每个进程一段时间,然后切换到下一个进程。
FCFS根据队列中进程的顺序分配CPU时间。
SJF则是根据进程执行所需时间的长度进行调度的。
在我们的实验中,我们评估了每个算法的性能,并得出了以下结论:Round Robin算法的结果最好。
我们发现这种算法的表现非常良好,因为它能在繁忙的计算机系统中平均分配CPU时间,并避免长时间运行的进程占用计算机资源。
FCFS算法的性能很糟糕。
我们发现在FCFS算法中,长时间运行的进程会占用系统资源,而短时间运行的进程则需要等待很久才能获得CPU时间。
这样会导致整个计算机系统的效率下降。
SJF算法表现一般。
我们发现,在繁忙的系统中,SJF算法会基于当前进程的下一步行动来调度进程。
但是,如果多个进程具有相似的执行时间,并且它们需要同时运行,则存在一定的竞争和时间分配的缺陷。
总体来说,进程调度算法是计算机系统中非常重要的一部分,因为它会直接影响系统的效率和可靠性。
在我们的实验中,我们发现Round Robin算法是最好的选择,它能够抵消系统中不同进程需要不同时间的差异,确保每个进程都能获得相应的时间来完成任务。
linux系统中调度的基本单位

linux系统中调度的基本单位一、进程调度进程调度是操作系统中的一个重要组成部分,用于决定在多个进程同时竞争CPU资源时,应该选择哪个进程来执行。
Linux系统中的进程调度采用了时间片轮转调度算法。
时间片轮转调度是一种公平的调度算法,它将CPU的执行时间划分为一个个固定长度的时间片,每个进程在一个时间片内执行一段时间,然后切换到下一个进程。
这样可以保证每个进程都有机会执行,并且避免了长时间占用CPU 的情况。
二、线程调度线程调度是指在多线程应用程序中,操作系统决定哪个线程应该被执行的过程。
Linux系统中的线程调度和进程调度类似,同样采用时间片轮转调度算法。
不同的是,线程是共享同一个进程的资源,因此线程的切换相对于进程的切换来说更加轻量级。
线程调度的目标是尽可能地提高CPU利用率和系统响应速度。
三、任务调度任务调度是指在Linux系统中,操作系统决定何时执行某个任务的过程。
任务可以是周期性的,也可以是非周期性的。
周期性任务是指按照一定的时间间隔重复执行的任务,而非周期性任务则是指只执行一次的任务。
Linux系统中的任务调度使用了多种算法,如最早截止时间优先算法和最短作业优先算法等。
这些算法的目标是根据任务的优先级和执行时间来决定任务的执行顺序,以提高系统的性能和响应速度。
四、总结在Linux系统中,进程调度、线程调度和任务调度是操作系统中的重要组成部分。
进程调度决定在多个进程竞争CPU资源时的执行顺序,线程调度决定在多线程应用程序中哪个线程应该被执行,任务调度决定何时执行某个任务。
这些调度的基本单位都采用了时间片轮转调度算法,并根据不同的调度目标采用不同的调度策略。
通过合理的调度算法,可以提高系统的性能和响应速度,保证各个任务的执行顺序和时间片的分配合理。
进程调度

Linux调度程序提高交互式程序的优先级,让它们运行更频繁。因此, 调度程序提供较长的默认时间片给交互式程序。此外,调度程序还能根 据进程的优先级动态调整分配给它的时间片,从而保证了优先级高的进 程,执行的频率高,执行时间长。通过动态掉正优先级和时间片的长度 机制,Linux调度性能不但非常稳定而且也很强健。
计算优先级和时间片
进程拥有一个初始的nice值(优先级),范围是-20~19,默认 是0,进程task_struct的static_prio域存放这个值,因为它 从一开始由用户指定,不能修改,所以是静态优先级。 调度程序用到的动态优先级存放在prio域里,动态优先级 是通过一个关于静态和进程交互性的函数关系计算而来。 effective_prio()函数返回一个进程的动态优先级。 调度程序通过一些推断来获取准确反映进程时I/O消耗型还 是处理器消耗型。 为了支持这种推断,Linux记录了一个进程用于休眠和用于 执行的时间。该值存放在task_struct的sleep_avg域中,范 围是从0到MAX_SLEEP_AVG。默认值是10毫秒, sleep_avg会根据它的休眠时间的长短而增长,直到最大值 为止,进程没运行一个节拍,sleep_avg就相应减少,直到 0为止。
可运行队列
调度程序中最基本的数据结构是运行队列。 可执行队列定义于kernel/sched.c中,由结构runqueue 表示,可执行队列是给定处理器上可执行进程的链表 ,每个处理器一个。每一个可投入运行的进程都惟一 的归属于一个可执行队列。此外,可执行队列中还包 含每个处理器的调度信息。因此,可执行队列是每一 个处理器最重要的数据结构。
重新计算时间片
操作系统在所有的进程的时间片都用完时,会重新计 算每个进程的时间片。 典型的实现是循环访问每个进程: for(系统中的每个人物){ 重新计算优先级 重新计算时间片 }
进程调度

引起进程调度的主要因素有:(1)一个进程运行完毕。
(2)一个正在运行的进程被阻塞。
(3)在抢占式调度中,一个高优先级的进程被创建。
(4)在抢占式调度中,一个高优先级进程由阻塞唤醒。
(5)在轮转式调度中,正垢进程运行完进程调度的概念无论是在批处理系统还是分时系统中,用户进程数一般都多于处理机数、这将导致它们互相争夺处理机。
另外,系统进程也同样需要使用处理机。
这就要求进程调度程序按一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。
进程有四个基本属性1.多态性从诞生、运行,直至消灭。
2.多个不同的进程可以包括相同的程序3.三种基本状态它们之间可进行转换4.并发性并发执行的进程轮流占用处理器进程的三种基本状态:1.等待态:等待某个事件的完成;2.就绪态:等待系统分配处理器以便运行;3.运行态:占有处理器正在运行。
运行态→等待态往往是由于等待外设,等待主存等资源分配或等待人工干预而引起的。
等待态→就绪态则是等待的条件已满足,只需分配到处理器后就能运行。
运行态→就绪态不是由于自身原因,而是由外界原因使运行状态的进程让出处理器,这时候就变成就绪态。
例如时间片用完,或有更高优先级的进程来抢占处理器等。
就绪态→运行态系统按某种策略选中就绪队列中的一个进程占用处理器,此时就变成了运行态进程调度的分级高级、中级和低级调度作业从提交开始直到完成,往往要经历下述三级调度:高级调度:(High-Level Scheduling)又称为作业调度,它决定把后备作业调入内存运行;低级调度:(Low-Level Scheduling)又称为进程调度,它决定把就绪队列的某进程获得CPU;中级调度:(Intermediate-Level Scheduling)又称为在虚拟存储器中引入,在内、外存对换区进行进程对换。
进程调度的方式进程调度有以下两种基本方式:非剥夺方式分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
进程被剥夺处理器便处于就绪态。该进程可能被保留在主 存中,也有可能被换出到磁盘对换区中(如果内存空间不 够),此时的进程状态为挂起状态。 主存中有足够的空间时,又可以把对换区中处于就绪状态 的进程装入主存。 进程在主存与磁盘间的转换,这项工作称为进程的换进换 出。 中级调度也称对换调度,选择外存上具备运行条件的就绪 进程重新调入内存。
进程调度与死锁
进程调度类型和准则 进程调度算法 死锁的基本概念 死锁的预防与避免 死锁的检测与解除
为什么需要进程调度
在多道程环境下,进程数目往往多于处理机数目,致使它 们争用处理机。
这就要求系统能按某种算法,动态地把处理机分配给就绪 队列中的一个进程,使之执行。
分配处理机的任务是由进程调度程序完成的。它是操作系
调度的级别-低级调度
低级调度也称进程调度, 从就绪进程中选择一个 进程占用处理器的工作称为进程调度。
Ready Suspend
Blocked Suspend
New
Ready
Blocked
高 级 调 度
中 级 调 度
低 级 调 度
Running
6
Exit
进程调度的方式
非剥夺方式(非抢占方式)
统设计的中心问题之一。
调度的级别-高级调度
高级调度也称为作业调度,在批处理操作系统控制下的作 业称为批处理作业,若干个用户作业组成的作业流成批进 入计算机系统,存放在磁盘的专用区域中等待处理。磁盘 上用来存放作业信息的专用区域称为输入井,把从输入井 中选择后备作业装入主存的工作称为作业调度。
调度的级别-中级调度
进程退出 进程阻塞 时间片用完 高优先级进程抢占处理器 在进程通信中,执行中的进程执行了某种原语操作,
例如:P操作。
调度的准则
响应时间 周转时间 优先级 截止时间(实时系统) 处理机的利用率 系统吞吐量(批处理) 公平(避免“饿死”) 各类资源的平衡利用率 ……
调度算法
作业号
A B
10:06 10:18
42 30
10:06
C
D E
10:30
10:36 10:42
24
28 12
计算时间短作业优先算法总结
采用计算时间端的作业优先算法能减少平均周转时间,提 高系统吞吐量。 需要注意的问题:
该算法以用户估算的作业时间为准。 进入输入井时间早,但是计算时间长的作业等待时间长 没有考虑到作业或者进程的紧迫程度
一旦把处理机分配给某进程后便让它一直运行下去,直
到进程完成或发生某事件而阻塞时,才把处理机分配给另 一个进程。
剥夺方式(抢占方式):
当一个进程正在运行时,系统可以基于某种原则,剥夺已
分配给它的处理机,将之分配给其它进程。剥夺原则有:
优先权原则、短进程优先原则、时间片原则等。
进程调度的时机
80
100 110 125 125
调度次序:1-2-3-4-5 平均周转时间为(80 + 100 + 110 + 125 + 125)/5 = 108分钟
批处理作业调度算法
作业的周转时间 假定作业i进入输入井的时间为Si,若它被选中执行,得到计算 结果的时间为Ei,那么这个作业的周转时间为
Ti = Ei – Si
n
平均周转时间
1 T ( Ti ) n i 1
例
在单道批处理系统中,有五个作业进入输入井的时间及需要执行的时间 如下表所示,并约定第一个作业进入输入井后立即进行调度,忽略调度 的时间开销。写出采用先来先服务调度算法时的调度次序和作业平均周 转时间。
进入输入井时间 需执行时间 开始执行时 结束执行时 周转时间 间(分钟) 间(分钟) (分钟) (分钟)
分级调度法
尾 就绪进程入队 时间片用完 第二级就绪队列 时间片用完 第三级就绪队列 长 低 阻塞队列 头
第一级就绪队列
时 间 片
优 先 级
时间片用完
死锁
多个进程在运行过程中因争夺资源而造成的一种僵 局,若无外力作用,这些进程将永远不能向前推 进。
死锁形成的原因
进程A占用R1
R1
请求R1 进程B
响应比高者优先算法
响应比高者优先算法综合考虑等待时间和计算时间 等待时间 响应比 = 计算时间
采用响应比高者优先算法进行调度时,必须先计算输入井 中资源能得到满足的所有作业的响应比,选最高进行调度。
例
某单道程序设计系统中有三个作业A,B,C,它们到达输入井的时间和需 要的计算时间如表所示,当这三个作业全部到达输入井后,若系统以响 应比高者优先调度算法选择作业,写出调度顺序和平均周转时间。 到达输入 井时间 8:50 9:00 9:30 计算时间 (小时) 1.5 0.4 1.0 开始时间 9:54 9:30 11:24 结束时间 11:24 9:54 12:24 周转时间 2小时34分 54分 2小时54分
作业号
A B
10:06 10:18423010:06C
D E
10:30
10:36 10:42
24
28 12
先来先服务总结
有一定公平性,容易实现 可能使计算时间短的作业长时间等待
短作业(进程)优先算法
优先选择计算时间短且资源能得到满足的作业(进程),这 种算法能降低作业的平均周转时间,提高系统的吞吐能力。
如何确定优先级
优先级可以固定也可以变化,一般可根据使用资源的情况、 任务的紧急程度、等待使用处理器的时间、系统效率等。 为了调度方便,就绪队列中的进程可按优先级从大到小排 列,有进程就绪时,根据优先级插入队列的适当位置,这 样进程调度总是把处理器分配给就绪队列中的第一个进程 优先级调度算法可以和先来先服务算法混合使用,相同优 先级的进程可以使用先来先服务算法
作业名 A B C
9点30分的响应比:A : 40/90 = 4/9 B:30/24 = 5/4
9点54分的响应比:A : 64/90 = 32/45 C: 24/60 = 2/5
C: 0/60 = 0
假定有4个作业,它们到达“输入井”时间和需要运行时间如下表所示, 都是十进制数。现采用响应比最高者优先算法,忽略作业调度所化的时 间。并规定这4个作业全部到达“输入井”后,才开始调度 作业名 到达输入 井时间 计算时间 (小时) 开始时间 结束时间 周转时间
作业号 进入输入井时间 需执行时间 (分钟) 开始执行时 间(分钟) 结束执行时 间(分钟) 周转时间 (分钟)
1
2 3 4 5
10:00
10:10 10:20 10:30 10:40
40
30 20 25 10
10:40
11:20 11:50 12:10 12:35
11:20
11:50 12:10 12:35 12:45
先来先服务(FCFS)算法 短作业(进程)优先调度算法 最高优先权优先调度算法
时间片轮转法
多级反馈队列
先来先服务算法FCFS
先来先服务可以用在进程调度或者作业调度中。它的基本 思想是按照进程或作业进入等待队列的先后次序进行调度, 先进入的进程或者作业先调度。
例
在单道批处理系统中,有五个作业进入输入井的时间及需要执行的时间 如下表所示,并约定当这五个作业全部进入输入井后立即进行调度,忽 略调度的时间开销。写出采用先来先服务调度算法时的调度次序和作业 平均周转时间。
时间片轮转调度
时间片是指允许进程一次占用处理器的最长时间。 把就绪进程按就绪先后次序排成队列,调度时总是选择就 绪队列的第一个进程,但规定它一次连续占用处理器的时 间不能超过预定的时间片。
如果时间片用完进程尚未结束,让出处理器,链入就绪队 列末尾等待。
如果允许的时间片内出现了等待事件,让出处理器给下一 个就绪进程使用,链入等待队列,等待的事件发生后再进 入就绪队列末尾,再次分配处理器时使用一个新的时间片。
时间片轮转调度
分时操作系统中通常使用时间片轮转调度算法。 时间片的取值大小关系到计算机系统的效率和用户的满意 度,时间片的值应根据进程要求的应答时间和进入系统的 进程数来决定。如要求快速应答,时间片应小一些,如果 进程少,时间片就大一些。 时间片大小可以相同,也可以对不同的进程规定不同的时 间片。
进程A 请求R2 R2
进程B占用R2
死锁
若系统中存在一组进程(两个或多个),它们中每个进程 占用了某种资源,又再等待已被该组进程中的其他进程占 用的资源,如果这种进程等待永远不能结束,则说系统出 现了死锁,或者说这组进程处于死锁状态。
可剥夺资源&不可剥夺资源
可剥夺性资源指某进程获得该资源后,该类资源可被 其他进程或系统剥夺。 非剥夺资源一旦被分给进程后,不可被强行收回,只 能在进程用完后释放。
竞争非剥夺性资源导致的死锁
进程P1 申请打印机 申请扫描仪 使用 …… …… 进程P2 申请扫描仪 申请打印机 使用 …… ……
竞争临时资源导致的死锁
临时性资源是指由一个进程产生,被另一进程使用短暂时间后 就无用的资源。可以动态生成和消耗,一般不限制数量。例如 进程同步时交换的信息,数据文件等。
J1
J2 J3
8.0
8.3 8.5
2.0
0.5 0.1
J4
9.0
0.4
优先级调度算法
为每个作业/进程确定一个优先级,资源满足且优先级高 的作业/进程优先被选取,同优先级的按照先来先服务进 行调度。 优先级的确定