进程调度研究现状分析

合集下载

操作系统实验报告进程管理

操作系统实验报告进程管理

操作系统实验报告进程管理操作系统实验报告:进程管理引言操作系统是计算机系统中的核心软件,负责管理计算机的硬件资源和提供用户与计算机之间的接口。

进程管理是操作系统的重要功能之一,它负责对计算机中运行的各个进程进行管理和调度,以保证系统的高效运行。

本实验报告将介绍进程管理的基本概念、原理和实验结果。

一、进程管理的基本概念1. 进程与线程进程是计算机中正在运行的程序的实例,它拥有独立的内存空间和执行环境。

线程是进程中的一个执行单元,多个线程可以共享同一个进程的资源。

进程和线程是操作系统中最基本的执行单位。

2. 进程状态进程在运行过程中会经历不同的状态,常见的进程状态包括就绪、运行和阻塞。

就绪状态表示进程已经准备好执行,但还没有得到处理器的分配;运行状态表示进程正在执行;阻塞状态表示进程由于某些原因无法继续执行,需要等待某些事件的发生。

3. 进程调度进程调度是操作系统中的一个重要任务,它决定了哪个进程应该获得处理器的使用权。

常见的调度算法包括先来先服务(FCFS)、最短作业优先(SJF)和时间片轮转等。

二、进程管理的原理1. 进程控制块(PCB)PCB是操作系统中用于管理进程的数据结构,它包含了进程的各种属性和状态信息,如进程标识符、程序计数器、寄存器值等。

通过PCB,操作系统可以对进程进行管理和控制。

2. 进程创建与撤销进程的创建是指操作系统根据用户的请求创建一个新的进程。

进程的撤销是指操作系统根据某种条件或用户的请求终止一个正在运行的进程。

进程的创建和撤销是操作系统中的基本操作之一。

3. 进程同步与通信多个进程之间可能需要进行同步和通信,以实现数据共享和协作。

常见的进程同步与通信机制包括互斥锁、信号量和管道等。

三、实验结果与分析在本次实验中,我们使用了一个简单的进程管理模拟程序,模拟了进程的创建、撤销和调度过程。

通过该程序,我们可以观察到不同调度算法对系统性能的影响。

实验结果显示,先来先服务(FCFS)调度算法在一些情况下可能导致长作业等待时间过长,影响系统的响应速度。

先来先服务,时间片调度,优先级调度算法实验报告

先来先服务,时间片调度,优先级调度算法实验报告

先来先服务,时间片调度,优先级调度算法实验报告实验报告1. 引言进程调度是操作系统中非常重要的一部分,它决定了进程在CPU上执行的顺序和时间长度。

在本次实验中,我们通过实现先来先服务调度算法、时间片调度算法和优先级调度算法,并对其性能进行比较,来深入了解各种调度算法的工作原理及优缺点。

2. 先来先服务调度算法先来先服务调度算法按照进程到达的先后顺序进行调度。

当一个进程到达时,如果CPU空闲,则将其分配给CPU进行执行;如果CPU 正在执行其他进程,则该进程将等待直到CPU空闲。

优点是简单易实现,适用于长作业。

缺点是可能出现饥饿现象,即低优先级的进程可能会一直等待高优先级进程的执行。

3. 时间片调度算法时间片调度算法将CPU的执行时间划分为固定长度的时间片,每个进程在一个时间片内执行,当时间片用完后,系统将切换到下一个进程执行。

该算法确保每个进程都有公平的执行时间,避免了饥饿现象。

然而,对于CPU利用率较高的情况下,可能会导致进程频繁地切换,增加了上下文切换的开销。

4. 优先级调度算法优先级调度算法根据进程的优先级来进行调度,优先级较高的进程将具有更高的执行优先级。

当多个进程同时到达CPU时,系统将选择优先级最高的进程先执行。

该算法可以分为静态优先级调度和动态优先级调度两种方式。

优点是可以根据进程的重要性灵活调整执行顺序。

缺点是可能导致优先级低的进程长时间等待,造成饥饿现象。

5. 实验结果与分析我们通过模拟多个进程的到达和执行过程,在不同的场景下比较了先来先服务调度算法、时间片调度算法和优先级调度算法的性能。

实验结果显示,在长作业的情况下,先来先服务调度算法表现较好;在要求公平性的场景下,时间片调度算法比较适合;而对于需要根据优先级来调度的场景,优先级调度算法可以更好地满足需求。

6. 结论不同的进程调度算法在不同的场景下有各自的优劣。

先来先服务调度算法简单易实现,适用于长作业;时间片调度算法保证了公平性,适用于要求公平的场景;而优先级调度算法则可以根据进程的重要性进行调度。

计算机系统实验报告

计算机系统实验报告

计算机系统实验报告计算机系统实验报告一、引言计算机系统是现代社会不可或缺的一部分,它的发展与应用深刻地影响着我们的生活。

为了更好地理解和掌握计算机系统的工作原理,我们进行了一系列的实验。

本报告将对这些实验进行总结和分析,以便更好地理解计算机系统的运行机制。

二、实验目的本次实验的主要目的是通过实际操作和观察,加深对计算机系统各个组成部分的理解。

具体实验内容包括CPU的运行原理、内存管理、进程调度等。

三、实验过程与结果1. CPU的运行原理在本次实验中,我们通过模拟CPU的运行过程,深入了解了指令的执行过程。

我们使用了一系列指令,包括算术运算、逻辑运算、条件判断等。

通过观察指令的执行结果,我们可以清楚地看到CPU对指令的解码、执行和结果输出过程。

2. 内存管理内存管理是计算机系统中非常重要的一部分,它负责管理计算机的内存资源。

在本次实验中,我们学习了内存的分配与回收算法。

通过实际操作,我们了解了最先适应算法、最佳适应算法等不同的内存分配策略,并对它们的优缺点进行了比较和分析。

3. 进程调度进程调度是操作系统中的一个重要功能,它负责决定哪个进程先执行,哪个进程后执行。

在本次实验中,我们模拟了多个进程的运行,并通过实验操作观察了不同的调度算法对系统性能的影响。

我们了解了先来先服务算法、短作业优先算法、时间片轮转算法等不同的调度算法,并对它们的优劣进行了探讨。

四、实验结果分析通过以上实验,我们对计算机系统的各个组成部分有了更深入的了解。

我们发现,CPU的运行原理决定了计算机的运算速度和效率,内存管理直接影响了计算机的稳定性和资源利用率,而进程调度则决定了系统的响应速度和用户体验。

因此,合理的CPU设计、高效的内存管理和优秀的进程调度算法是保证计算机系统高效运行的关键。

五、实验总结通过本次实验,我们不仅加深了对计算机系统的理论知识的理解,还通过实际操作和观察,更加直观地感受到了计算机系统的工作原理。

我们了解了CPU的运行过程、内存管理的重要性以及进程调度的作用。

实验一、进程调度实验报告

实验一、进程调度实验报告

实验一、进程调度实验报告一、实验目的进程调度是操作系统中的核心功能之一,其目的是合理地分配 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分析:先来先服务调度算法简单直观,但对于短作业可能会造成较长的等待时间,导致平均等待时间和平均周转时间较长。

实验进程调度的实验报告

实验进程调度的实验报告

一、实验目的1. 加深对进程概念和进程调度算法的理解。

2. 掌握进程调度算法的基本原理和实现方法。

3. 培养编程能力和系统分析能力。

二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发工具:Visual Studio 2019三、实验内容1. 实现进程调度算法2. 创建进程控制块(PCB)3. 模拟进程调度过程四、实验原理进程调度是操作系统核心功能之一,负责将CPU分配给就绪队列中的进程。

常见的进程调度算法有先来先服务(FCFS)、短作业优先(SJF)、优先级调度、时间片轮转(RR)等。

1. 先来先服务(FCFS)算法:按照进程到达就绪队列的顺序进行调度。

2. 短作业优先(SJF)算法:优先调度运行时间最短的进程。

3. 优先级调度算法:根据进程的优先级进行调度,优先级高的进程优先执行。

4. 时间片轮转(RR)算法:每个进程分配一个时间片,按顺序轮流执行,时间片结束后进行调度。

五、实验步骤1. 定义进程控制块(PCB)结构体,包含进程名、到达时间、运行时间、优先级、状态等信息。

2. 创建进程队列,用于存储就绪队列、等待队列和完成队列。

3. 实现进程调度算法:a. FCFS算法:按照进程到达就绪队列的顺序进行调度。

b. SJF算法:优先调度运行时间最短的进程。

c. 优先级调度算法:根据进程的优先级进行调度。

d. 时间片轮转(RR)算法:每个进程分配一个时间片,按顺序轮流执行。

4. 模拟进程调度过程:a. 初始化进程队列,将进程添加到就绪队列。

b. 循环执行调度算法,将CPU分配给就绪队列中的进程。

c. 更新进程状态,统计进程执行时间、等待时间等指标。

d. 当进程完成时,将其移至完成队列。

六、实验结果与分析1. FCFS算法:按照进程到达就绪队列的顺序进行调度,简单易实现,但可能导致短作业等待时间过长。

2. SJF算法:优先调度运行时间最短的进程,能提高系统吞吐量,但可能导致进程饥饿。

进程管理实验报告分析(3篇)

进程管理实验报告分析(3篇)

第1篇一、实验背景进程管理是操作系统中的一个重要组成部分,它负责管理计算机系统中所有进程的创建、调度、同步、通信和终止等操作。

为了加深对进程管理的理解,我们进行了一系列实验,以下是对实验的分析和总结。

二、实验目的1. 加深对进程概念的理解,明确进程和程序的区别。

2. 进一步认识并发执行的实质。

3. 分析进程争用资源的现象,学习解决进程互斥的方法。

4. 了解Linux系统中进程通信的基本原理。

三、实验内容1. 使用系统调用fork()创建两个子进程,父进程和子进程分别显示不同的字符。

2. 修改程序,使每个进程循环显示一句话。

3. 使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号,实现进程的终止。

4. 分析利用软中断通信实现进程同步的机理。

四、实验结果与分析1. 实验一:父进程和子进程分别显示不同的字符在实验一中,我们使用fork()创建了一个父进程和两个子进程。

在父进程中,我们打印了字符'a',而在两个子进程中,我们分别打印了字符'b'和字符'c'。

实验结果显示,父进程和子进程的打印顺序是不确定的,这是因为进程的并发执行。

2. 实验二:每个进程循环显示一句话在实验二中,我们修改了程序,使每个进程循环显示一句话。

实验结果显示,父进程和子进程的打印顺序仍然是随机的。

这是因为并发执行的进程可能会同时占用CPU,导致打印顺序的不确定性。

3. 实验三:使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号在实验三中,我们使用signal()捕捉键盘中断信号(按c键),然后通过kill()向两个子进程发送信号,实现进程的终止。

实验结果显示,当按下c键时,两个子进程被终止,而父进程继续执行。

这表明signal()和kill()在进程控制方面具有重要作用。

4. 实验四:分析利用软中断通信实现进程同步的机理在实验四中,我们分析了利用软中断通信实现进程同步的机理。

进程调度 实验报告

进程调度 实验报告

进程调度实验报告进程调度实验报告概述:进程调度是操作系统中一个重要的组成部分,它负责决定在多个进程同时运行时,每个进程分配到的CPU时间片以及切换进程的时机。

合理的进程调度算法能够提高系统的性能和资源利用率,因此对进程调度的研究和优化具有重要意义。

1. 背景介绍进程调度是操作系统中的一个关键任务,它负责管理和控制多个进程的执行顺序,以实现对CPU的合理分配。

在多道程序设计环境下,进程调度的作用尤为重要。

进程调度算法的好坏直接影响着系统的性能和响应速度。

2. 进程调度算法2.1 先来先服务(FCFS)先来先服务是最简单的调度算法之一,它按照进程到达的先后顺序进行调度,即先到达的进程先执行,直到该进程执行完成或者发生I/O操作。

FCFS算法的优点是公平且易于实现,但是它无法适应不同进程的执行时间差异,可能导致长作业效应。

2.2 最短作业优先(SJF)最短作业优先调度算法是根据进程的执行时间长度来进行调度,执行时间越短的进程越优先执行。

SJF算法能够最大程度地减少平均等待时间,但是它需要预先知道进程的执行时间,这在实际应用中往往是不可行的。

2.3 时间片轮转(RR)时间片轮转是一种经典的调度算法,它将CPU的执行时间划分为若干个时间片,每个进程在一个时间片内执行,如果时间片用完还没有执行完,则将该进程放入就绪队列的末尾,继续执行下一个进程。

RR算法能够保证每个进程都能获得公平的CPU时间,但是对于长时间执行的进程,会导致较大的上下文切换开销。

3. 实验设计与结果分析为了评估不同进程调度算法的性能,我们设计了一系列实验。

首先,我们使用不同的进程到达时间和执行时间生成一组测试数据。

然后,分别使用FCFS、SJF和RR算法进行调度,并记录每个进程的等待时间和周转时间。

最后,我们对实验结果进行分析。

实验结果显示,FCFS算法对于执行时间较长的进程会出现较长的平均等待时间,而SJF算法能够有效减少平均等待时间。

进程的调度实验报告(3篇)

进程的调度实验报告(3篇)

第1篇一、实验目的通过本次实验,加深对操作系统进程调度原理的理解,掌握先来先服务(FCFS)、时间片轮转(RR)和动态优先级(DP)三种常见调度算法的实现,并能够分析这些算法的优缺点,提高程序设计能力。

二、实验环境- 编程语言:C语言- 操作系统:Linux- 编译器:GCC三、实验内容本实验主要实现以下内容:1. 定义进程控制块(PCB)结构体,包含进程名、到达时间、服务时间、优先级、状态等信息。

2. 实现三种调度算法:FCFS、RR和DP。

3. 创建一个进程队列,用于存储所有进程。

4. 实现调度函数,根据所选算法选择下一个执行的进程。

5. 模拟进程执行过程,打印进程执行状态和就绪队列。

四、实验步骤1. 定义PCB结构体:```ctypedef struct PCB {char processName[10];int arrivalTime;int serviceTime;int priority;int usedTime;int state; // 0: 等待,1: 运行,2: 完成} PCB;```2. 创建进程队列:```cPCB processes[MAX_PROCESSES]; // 假设最多有MAX_PROCESSES个进程int processCount = 0; // 实际进程数量```3. 实现三种调度算法:(1)FCFS调度算法:```cvoid fcfsScheduling() {int i, j;for (i = 0; i < processCount; i++) {processes[i].state = 1; // 设置为运行状态printf("正在运行进程:%s\n", processes[i].processName); processes[i].usedTime++;if (processes[i].usedTime == processes[i].serviceTime) { processes[i].state = 2; // 设置为完成状态printf("进程:%s 完成\n", processes[i].processName); }for (j = i + 1; j < processCount; j++) {processes[j].arrivalTime--;}}}```(2)RR调度算法:```cvoid rrScheduling() {int i, j, quantum = 1; // 时间片for (i = 0; i < processCount; i++) {processes[i].state = 1; // 设置为运行状态printf("正在运行进程:%s\n", processes[i].processName); processes[i].usedTime++;processes[i].serviceTime--;if (processes[i].serviceTime <= 0) {processes[i].state = 2; // 设置为完成状态printf("进程:%s 完成\n", processes[i].processName); } else {processes[i].arrivalTime++;}for (j = i + 1; j < processCount; j++) {processes[j].arrivalTime--;}}}```(3)DP调度算法:```cvoid dpScheduling() {int i, j, minPriority = MAX_PRIORITY;int minIndex = -1;for (i = 0; i < processCount; i++) {if (processes[i].arrivalTime <= 0 && processes[i].priority < minPriority) {minPriority = processes[i].priority;minIndex = i;}}if (minIndex != -1) {processes[minIndex].state = 1; // 设置为运行状态printf("正在运行进程:%s\n", processes[minIndex].processName);processes[minIndex].usedTime++;processes[minIndex].priority--;processes[minIndex].serviceTime--;if (processes[minIndex].serviceTime <= 0) {processes[minIndex].state = 2; // 设置为完成状态printf("进程:%s 完成\n", processes[minIndex].processName); }}}```4. 模拟进程执行过程:```cvoid simulateProcess() {printf("请选择调度算法(1:FCFS,2:RR,3:DP):");int choice;scanf("%d", &choice);switch (choice) {case 1:fcfsScheduling();break;case 2:rrScheduling();break;case 3:dpScheduling();break;default:printf("无效的调度算法选择。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

进程调度研究现状分析(中南大学信息学院)【摘要】:调度算法是指根据系统的资源分配策略所规定的资源分配算法.本文详细地讨论了先来先服务调度算法、短作业(进程)优先调度算法、时间片轮转调度算法、优先级调度算法、最短剩余时间优先、高响应比优先调度算法、多级反馈队列调度算法、最晚时间限调度等八种常用作业调度算法的基本思想,并就其性能的进行了比较分析。

【关键字】:调度策略;FCFS;SPJ;RR;优先级【Abstract】:Scheduling algorithm is defined as the resource allocation strategy for the allocation of resources required by algorithm. This article discussed in detail first-come first-serve scheduling algorithm, the short operations (the process) priority scheduling algorithm, time scheduling algorithm rotary tablet, priority scheduling algorithm, the shortest time remaining priority, high priority response ratio scheduling algorithm, multi-level feedback queue scheduling algorithm the latest scheduling time limit of eight common operations, such as the basic idea of scheduling algorithm and its performance on a comparative analysis.【Key Words】:Scheduling strategy; FCFS; SPJ; RR; Priority【正文】:1、引言随着现代操作系统的日趋成熟,用户对计算机的需求越来越多,处理机在同一时刻能处理的资源是有限的,从而导致各种任务随时随地争夺使用处理机,因此对程序的并发能力提出了更高的要求。

引进并发技术后,为了更好地说明并发现象(尤其是动态过程),引入了进程的概念。

进程是一个具有一定独立功能的可并发执行的程序关于某个数据集合的一次运行活动。

一个程序的启动执行,便是一个进程的建立;一个程序执行结束(正常或非正常结束),便是一个进程的撤销。

由于同时处于就绪态(争夺使用CPU资源)的进程经常比较多,因此需要CPU调度算法来决定由哪个进程获得CPU使用权进入运行态,即进程调度算法(策略)。

本文主要就现代操作系统中目前常用的几种调度算法的基本思想及其性能展开论述。

现代操作系统常用的调度算法有:先来先服务调度算法(FCFS,First Come First Served)、短作业(进程)优先调度算法(SJF/SPF,Shortest Job/Process First)、时间片轮转调度算法(RR,Round Robin)、优先级调度算法、最短剩余时间优先(Shortest Remaining Time)、高响应比优先调度算法(HRN,highest-response-tatio-next scheduling)、多级反馈队列调度算法、最晚时间限调度(deadline scheduling)。

2、调度算法性能评价的主要指标(1)、周转时间:将一个作业提交给计算机系统后到该作业完成并将结果返回给用户所需要的时间。

周转时间Ta=T1(外存上等待调度的时间)+T2(就绪队列等待时间)+Ts(服务时间)+To(等待I/O操作完成的时间)。

(2)、带权周转时间:Tw=Ta/Ts。

(3)、吞吐率:单位时间内,系统所完成的任务的数量。

(4)、响应时间:从用户输入一个命令到计算机把相应的执行结果返回给用户所需要的时间。

3、常用调度算法的分析与评价3.1、先来先服务调度算法(FCFS)该调度算法在所有就绪进程中,选择最先进入就绪态的进程最先进入运行态,属于非抢占式方式,一个进程一旦获得处理机便将一直运行,直到该进程完成或者因为等待其他资源(如I/O设备)的到来进入阻塞状态,而自动放弃CPU。

先来先服务调度算法的模型表示如下图所示(假设系统的服务器只有一个S)。

该算法易于实现,系统开销较小。

该算法从表面上看对于所有的作业都是公平的,每个进程什么时候获得处理机,以及一个作业的等待时间是可以预先估计的。

但是从另一方面来看也不一定公平,当一个长作业先到达系统时就会使长作业后面进入就绪队列的许多短作业等待很长时间,先到先服务算法有利于长作业,不利于短作业.先到先服务算法使得一批作业的平均周转时间较长,即提供给用户的平均服务较差.从作业的类型角度看,先到先服务算法有利于CPU繁忙型的作业(需要大量的CPU时间进行计算而很少请求I/O),不利于I/O繁忙型的作业(CPU进行处理时需频繁的请求I/O.今天先来先服务调度算法已很少用作主要的调度策略,尤其是不作为分时系统和实时系统的主要调度策略,但它常常用作辅助调度策略被结合在其它调度算法中使用.3.2、短作业(进程)优先调度算法(SJF/SPF,SHortest Job/Process First)短作业(进程)优先调度算法,最先执行占用CPU时间最短(估计占用CPU时间最短)的进程(作业),是一种非抢占方式的算法,该调度算法的系统吞吐率相对于FCFS有了很大的提高。

该调度算法对长作业和紧迫性作业不利。

由于该算法每次都是从就绪队列中选择短作业获得CPU使用权,可能导致长作业即使进入了就绪队列,但是由于不断有短作业进入就绪队列,从而长期得不到调度,周转时间变的很大,出现饥饿现象。

对于紧迫性作业来说,由于调度的依据是作业占用CPU时间的长短,根本没有考虑作业(进程)的紧迫性,因而紧迫作业也不能得到及时处理。

3.3、时间片轮转调度算法(RR)该算法的基本思想是:系统为每个进程分配一段运行时间(时间片),允许进程在系统为它分配的时间片内运行。

若在分配的一个时间片内,该进程还没有结束,系统强行将它挂到就绪队列,并根据调度算法将CPU交付给后备队列中的另外一个进程;若该进程运行完成,则系统正常将CPU交付给后备队列中的某一个进程。

该调度算法相对于前面两个调度算法,提高了进程的并发性,缩短了每一个作业的相应时间,提高了系统资源利用率,一般不会出现饿死现象。

时间轮转算法中时间片的大小的选择对计算机性能有很大的影响:(1).时间片<进程执行时间,进程需交替执行;(2)时间片>进程执行时间,退化为FCFS。

在不考虑时间片相应外,基于上述算法原理的时间片轮转算法系统吞吐率也没有达到最佳状态,在进程运行到即将结束的时候,即系统为之分配的时间片要结束了,如果按照上面的算法原理,它必须等待下一轮时间片的到来,这十分不利于系统吞吐率的提高。

于是对算法做出的如下的改进,即进程在运行到即将执行完毕时,通过增加一定的时间片值,使得当前进程能不被调度程序切换出去而连续的执行完剩下的工作。

其原理为:在时间片轮转凋度算法中对进程最后一次执行时间片进行优化,即当进程按时间片轮转法调度时,如果当前进程运行还需占用的CPU时间已不足进程分配到的时间片值的二分之一(此值可调整)时,调度算法自动为当前进程增加一定的时间片值,使之能继续获得CPU的使用权,从而立即完成剩余代码的执行。

]1[特别对于我们所讨论的实时操作系统中,对于同一优先级的任务用改进后的时间片轮转法进行调度,具有更为的重要意义,因为在实时系统中任务在规定的期限内能否执行完毕将可能导致灾难性的后果。

从对改进前后的原理的比较分析可知,用改进前的时间片轮转法算法对同一优先级任务进行调度时,对于当前获得CPU的任务在仅差几个时间片甚至半个时间片就能运行完的情况,前一个调度算法不会加以特殊考虑,该任务仍然会被进程调度程序切换出去,从而导致系统吞吐率的下降,使本可以在规定的期限内完成的任务延迟,而改进后的算法则能避免这种可能性的发生。

3.4、优先级调度算法不同进程的重要程度和紧急程度是不同的,优先级算法给每个进程赋予一个优先级,带有最高优先级的进程最先执行。

优先级调度算法分为静态优先级和动态优先级两种。

静态优先级是在创建进程的时候就确定的,且规定它在进程的整个运行过程中保持不变;静态优先级是指在创建进程时所赋予的优先级,可以随着进程的推进而变动,可以防止优先级高的进程不停地执行,低优先级进程饿死。

根据优先级的确定的方式不同,优先级调度方式分为抢占式和非抢占式两种。

在静态优先级下,属于非抢占式,每次都是将CPU的使用权交给就绪队列中具有最高优先权的进程,直到该进程执行完成,即使在进程执行过程中,就绪队列中存在优先级更高的进程。

在动态优先级方式下,属于抢占式,一旦就绪队列中有比当前任务优先级更高的进程,该任务的CPU使用权就会被剥夺,分配给就绪队列中当前具有最高优先级的进程。

静态优先权调度算法简单易行、系统开销小, 但是不太灵活, 很可能会出现低优先权的进程长期得不到调度而等待的情况;动态优先权调度算法比较灵活、科学, 可以防止有些进程一直得不到调度, 也可防止有些进程长期垄断处理机, 但是系统动态地确定进程的优先级需要花费相当多的程序执行时间,因而花费的系统开销比较大。

]2[但是,在作为服务器的系统中运用动态优先调度方式,尤其在大用户量的交互系统中,该调度算法还是存在以下一些缺点:(1)对于系统负担较重的情况下,预定义的时间片过大。

但如果定得过小,处理器在进程间的切换工作过于频繁,其系统调度所占的时间比例将增大,使系统的效率降低。

(2)不能很好地考虑系统的吞吐量。

尤其是不能减少短进程的平均等待时间。

(3)不能得到较好的输入输出设备的利用率。

(4)不能因交互用户需及时响应而照顾输入输出型进程。

3.5、最短剩余时间优先算法(SRT)最短剩余时间优先算法(SRT)可以看成是抢占式的短作业优先算法,即当一个新进程进入就绪队列时,若其需要的运行时间比当前运行进程的剩余时间短,则它将抢占CPU。

]3[与短作业优先算法一样,很难准确确定进程的剩余执行时间,且对长进程不公平。

但是,它不象先到先服务算法偏袒长进程,也不象时间片轮转算法会产生很多中断而增加系统负担。

由于短进程提前完成,故其平均周转时间比短作业优先算法短。

3.6、高响应比优先调度算法(HRN)该算法优先执行相应比最高的进程,响应比公式为:响应比R=(等待时间+要求服务时间)/要求服务时间。

相关文档
最新文档