操作系统中进程调度策略有哪几种?

FCFS(先来先服务),优先级,时间片轮转,多级反馈-调度算法。

  先来先服务调度算法:是一种最简单的调度算法,每次调度是从进程队列中选择一个最先进入该队列的进程,为之分配资源投入运行。该进程一直运行完成或发生某事件而阻塞后才继续处理后面的进程。

  优先级调度算法:有短进程优先级、高优先权优先级、高响应比优先级等,按照优先级来执行就绪进程队列中的调度。  (高响应比:(等待时间+服务运行时间)/服务运行时间)

  时间片轮转调度算法:系统还是按照先来先服务调度就绪进程,但每次调度时,CPU都会为队首进程分配并执行一个时间片(几ms~百ms)。执行时间片用完后计时器即产生时钟中断,停止该进程并将它送到队尾,其他依次执行。这样保证系统能在给定的时间内执行所有用户进程的请求。

  多级反馈调度算法:前面都有局限性,综合-> 多级反馈调度算法则不必事先知道各进程所需的执行时间,而且还可以满足各类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。

(1)设置多个就绪队列,每个队列优先级依次减小。为各个队列分配的时间片大小不同,优先级队列越高,里面进程规定的执行时间片就越小。

(2)队列中还是按照FCFS原则排队等待,如果第一队列队首进程在规定的时间片内未执行完,则直接调送至第二队尾,依次向后放一个队列的队尾。因此一个长作业进程会分配到n个队列的时间片执行。

(3)按照队列先后依次执行,如果新进的待处理进程优先级较高,则新进程将抢占正在运行的进程,被抢占的进程放置正在运行的队尾。

1.抢占式内核与非抢占式内核

  1.1.UNIX采用抢占式内核,Windows、Linux采用多任务非抢占式内核。

抢占式:  内核空间中,有一个更高优先级的任务出现时,则可以将当前任务挂起,执行优先级更高的进程。

非抢占式:高优先级的进程不能中止正在内核中运行的低优先级的进程而抢占CPU运行。 则除非进程自愿放弃CPU,否则该进程将一直运行下去,直至完成或退出内核。

多任务系统中, 内核负责管理各个任务, 或者说为每个任务分配CPU时间, 并且负责任务之间的通讯。

  1. 2.Linux下CPU抢占分两种情况:

1)用户抢占(发生时机:从系统调用返回用户空间、从中断(异常)处理程序返回用户空间时);

2)内核抢占(是指在内核中运行的进程, 可能在执行内核函数期间被另一个进程取代。发生时机:如果内核中的任务堵塞,任务主动放弃CPU使用权时)

  1.3.需要内核抢占的原因:

当内核处于相对耗时的操作中, 比如文件系统或者内存管理相关的任务,而其他进程无法执行, 无法调度, 这就造成了系统的延迟增加, 用户体验到”缓慢”的响应.

2.优先级翻转问题:

  高优先级任务要访问共享资源,而此时低优先级任务正在占用,此时中等优先级任务到来先执行完毕后,低优先级任务释放资源高优先级任务才得以执行,这就发生了优先级翻转问题。

解决方式:优先级天花板,优先级继承

优先级天花板:

  当任务申请某资源时就将当前任务的优先级提高到可访问该资源任务的最高优先级。

优先级继承:

  当任务申请某资源时,此资源已被占用,那么判断当前任务是否比占用资源的任务优先级高,若高,则将占用资源任务的优先级提高到当前任务的优先级,等释放资源后再恢复其本身的优先级。

原文地址:https://www.cnblogs.com/hjh-666/p/11449470.html

时间: 2024-08-02 07:15:36

操作系统中进程调度策略有哪几种?的相关文章

关于linux操作系统中进程相关问题的学习笔记

关于linux操作系统中进程相关问题的学习笔记 1.摘要   进程的经典定义是一个执行中程序的实例.系统中的每个程序都运行在某个进程的上下文中(contest)中.上下文是由程序运行正确运行所需的状态组成的.这个状态包括存放在内存中的程序的代码和数据,它的栈.通用目的寄存器的内容.程序计数器.环境变量以及打开文件描述符合的集合.在本次学习笔记中,我是以linux为例,学习了以下三个方面的知识:操作系统如何组织进程.进程状态如何转换以及进程是如何调度的.在最后我还谈了下自己对操作系统进程模型的一些

模拟操作系统中进程的三种基础状态与内存的分配和回收(最佳适配算法)

利用键盘模拟进程的三种操作状态,并且使用C++中的list模板模拟内存的分配和回收. 能够模拟进程的创建与撤销过程 l可对进程的状态进行全面的控制 按先进先出方式管理就绪和阻塞队列,能够按队列形式输出进程状 用PCB代表进程,用全局变量表示进程的个数. 1 #include <iostream> 2 #include <list> 3 #include <numeric> 4 #include <algorithm> 5 #include<stdlib

操作系统中常见的进程调度算法

1.      先来先服务(FCFS)调度算法 FCFS调度算法是一种最简单的调度算法,该调度算法既可以用于作业调度也可以用于进程调度.在作业调度中,算法每次从后备作业队列中选择最先进入该队列的一个或几个作业,将它们调入内存,分配必要的资源,创建进程并放入就绪队列. 在进程调度中,FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机. FCFS调度算法属于不可剥夺算法.从表面上看,它对所有作业都是公平的,但若一个长作业

操作系统中常用的进程调度算法

操作系统中对进程的调度算法大体上可以分为三类: 1.先来先服务算法 2.优先级法 3.时间片轮法 接下来简要介绍一下这三类算法. 一.先来先服务算法 (FCFS:    First Come First Service) 原理: 这是最简单的一种调度算法,用到了队列的思想.每次调度都从进程就绪队列中选择队首的进程(也就是最先进入队列的进程)进行调度. 直到进程的执行被阻塞,或进程结束,再调用下一个进程,依然是从队列中选择队首的进程的. 这里要注意,上文我说的队列中的进程实际上是进程的PCB,因为

操作系统中的进程与线程

操作系统中的进程与线程 转自:http://www.cnblogs.com/CareySon/archive/2012/05/04/ProcessAndThread.html 简介 在传统的操作系统中,进程拥有独立的内存地址空间和一个用于控制的线程.但是,现在的情况更多的情况下要求在同一地址空间下拥有多个线程并发执行.因此线程被引入操作系统. 为什么需要线程? 如果非要说是为什么需要线程,还不如说为什么需要进程中还有其它进程.这些进程中包含的其它迷你进程就是线程. 线程之所以说是迷你进程,是因为

操作系统中的进程/线程互斥

在操作系统中,不同的进程和线程之间涉及到一个重要的问题就是互斥,即保证对共享数据的正确修改. 基本的思想就是避免多余一个进程或线程(后面统一用进程来代替)同时读写共享数据. 为了解决这个问题,有很多的想法,为了方便说明各自的问题,按照<现代操作系统>中的思路来叙述. 首先是想到的控制进程的执行顺序,提出了两个方法:一个是严格轮转法,一个是Peterson算法. 严格轮转法就是让进程挨个按序执行,进程0做完了让给进程1,依次下去:缺点就是有忙等待,而且进程0可能会被不在临界区的进程1阻塞(因为两

操作系统中的进程和线程

进程与进程的作用 当我们双击程序图标,开始运行程序时,就产生了一个进程.所以进程的本质是一个正在执行的程序.进程包含了程序运行的所需要的所有信息,如代码段,数据段,程序计数器(存放下一条指令所在的地址),进程标识符(PID)进程控制块(PCB,用来保存进程退出CPU时的现场信息)等等信息. 所以进程可以看做是容纳程序运行的所有信息的容器. 值得注意的是,一个程序如果运行了两遍,则算是两个进程.如运行了两个word程序,这两个进程除了代码段,其他信息都是不一样的,事实上,这两个进程共享代码段. 进

操作系统中作业、线程、进程、内存管理、垃圾回收以及缓存等概念

作业:用户在一次解题或是一个事务处理过程中要求计算机系统所做的工作的集合.它包括用户程序.所需要处理的数据以及控制命令等.作业是由一系列有序的步骤组成. 进程:一个程序在一个数据集合的一次运行过程.所以一个程序在不同数据集合上运行,乃至一个程序在同样的数据集合上的多次运行都是不同的进程. 线程:线程是进程中的一个实体,被系统独立调度和执行的基本单位. 管程:管程实际上是定义了一个数据结构和在该数据结构上的能为并发进程做执行的一组操作,这组操作能同步进程和改变管程中的数据. 操作系统中作业.线程.

操作系统中,进程的“死锁”现象

所谓死锁: 是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程. "死锁"产生的原因: 1.系统资源不足 2.进程运行推进的顺序不合适 3.资源分配不当 "死锁"产生的条件 1.互斥条件:一个进程每次只能被一个进程使用 2.请求与保持条件:一个进程因资源请求被阻塞时,对已获得的资源保持不放 3.不剥夺条件: 进程已获