一 基本概念
1 队列中的记录通常是进程的进程控制块。
2 CPU调度决策可在如下四种环境下发生
a 当一个进程从运行状态切换到等待状态 例如,I/O请求或调用wait以等待一个子进程的终止
b 党一个进程从运行状态切换到就需状态 例如,当出现中断
c 当一个进程从等待状态切换到就需状态 例如,I/O完成
d 当一个进程终止
当调度只能发生在第一和第四种种情况时,称调度方案是非抢占的,否则调度方案是可抢占的。
采用非抢占调度,一旦CPU被分配给一个进程,那么该进程会一直使用CPU直到进程终止或切换到等待状态时释放CPU
3 分派程序
功能包括:
切换上下文
切换到用户模式
跳转到用户程序的合适位置以重新启动这个程序
二 调度准则
CPU使用率: 40%到90%
吞吐量:一个时间单元内所完成进程的数量。
周转时间:从进程提交到进程完成的时间间隔称为周转时间。周转时间是所有时间段之和,包括等待进入内存、在就绪队列中等待
,在cpu上执行和I/O执行
等待时间:CPU调度算法并不影响进程运行和执行I/O的时间量。它只影响进程在就需队列中等待所花费的时间。
响应时间:从提交请求到产生第一响应的时间。是开始响应所需要的时间,而不是输出该响应所需要的时间。
CPU使用率和吞吐量最大化,周转时间、等待时间和相应时间最小化
三 CPU调度算法
1 先到先服务调度
FCFS(first-come,first-served)
当一个进程进入到就需队列,其pcb就被链接到队列的尾部,当CPU空闲时,CPU被分配给位于队列头的进程。接着,该运行进程从队
列中被删除。
FCFS策略的平均等待时间相当长
FCFS调度算法是非抢占式的。
2 最短作业优先调度
SJF(shortest-job-first)
SJF算法的真正困难时如何知道下一个CPU请求的长度。SJF调度经常用于长期调度。
3 优先权调度
每个进程都有一个优先权与其关联,具有最高优先权的进程会被分配到CPU。具有相同优先权的进程按FCFS顺序调度。
优先权可以通过内部或外部方式来定义。
优先权调度可以使可抢占的或者非抢占的。
优先权调度算法的一个主要问题是无穷阻塞。解决办法是老化,老化是一种技术,以逐渐增加在系统中等待很长时间的进程的优先
权。
4 轮转法调度
轮转法(RR)调度算法是专门为分时系统设计的。定义一个小时间单元,称为时间量或时间片。时间片通常为10ms到100ms。就绪队
列作为循环队列处理。CPU调度程序循环就需队列,为每个进程分配不超过一个时间片间隔的CPU。
如果上下文切换时间约为时间片的10%,那么约10%的CPU时间会浪费在上下文切换上。
5 多级队列调度
(multilevel queue-scheduling algorithm)
不同队列可用于前台和后台进程,前台队列可能使用RR算法调度,而后台队列可能使用FCFS算法调度。
6 多级反馈队列调度
对于多级队列调度算法,通常进程进入系统时,被永久地分配到一个队列,进程并不在队列之间移动。
四 多处理器调度
堆成多处理器
非对称多处理器
五 实时调度
实时计算分为两种类型:硬实时,软实时
硬实时:系统需要在保证的时间内完成关键任务。通常,在提交进程时,同时有一条语句告诉系统用来完成或执行I/O所需要的时间
软实时:要求关键进程要比其他较弱进程拥有更高的优先权。
实现软实时要求自习设计调度程序和操作系统的有关方面:
第一,系统必须有优先权调度,且实时进程必须有最高的优先权。实时进程的优先权不随时间而下降,尽管非实时进程的优先权可
以。
第二,分配延迟必须小
分派程序停止一个进程而启动另一个进程执行所需要花费的时间成为分派延迟
六 linux
linux提供了两种独立进程调度算法。一种是分时算法,用于在多个进程之间进行公平可抢占调度
一种是为实时任务设计的,
linux只允许在用户模式下运行的进程被抢占
第一种调度类型是用于分时进程的,对于传统的分时进程,linux使用了优先权的、基于信用度的算法。每个进程都有一定数量的调
度信用度,党要选择一个新任务运行时,具有最多信用的进程会被选择。每次出现定时器中断时,当前运行进程会失去一个信用,
党其信用为0时,它会被暂停且另一个进程会被选择。
linux使用两种实时调度类型:先到先处理和轮转。
时间片轮转(RR)调度对于分时系统更为适合。
FCFS算法是非抢占的,RR算法是可抢占的。SJF和优先级算法可以使可抢占的也可以使非抢占的。
多级队列算法允许多个不同算法用于各种类型的进程,最为常用的是前台交互队列(RR)和后台批处理队列(FCFS)。多级反馈队
列允许进程在队列之间迁移。
solaris 2和windows2000都采用可抢占的、基于优先级的调度算法,包括支持实时线程,来调度线程
linux进程调度程序也使用基于优先级的算法,并提供实时支持。

操作系统概念学习笔记三 cpu调度算法的更多相关文章

  1. 操作系统概念学习笔记 10 CPU调度

    操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU.操作系统能够提高计算机的吞吐率. 对于单处理器系统.每次仅仅同意一个进程执行:不论什么其它进程必须等待,直到C ...

  2. 《30天自制操作系统》笔记(06)——CPU的32位模式

    <30天自制操作系统>笔记(06)——CPU的32位模式 进度回顾 上一篇中实现了启用鼠标.键盘的功能.屏幕上会显示出用户按键.点击鼠标的情况.这是通过设置硬件的中断函数实现的,可以说硬件 ...

  3. 操作系统学习笔记:CPU调度

    CPU调度的目的在于提高CPU利用率,不让CPU闲着.CPU是宝贵的资源,如果有一个进程,本来在CPU中运行,忽然因为要使用IO资源,于是转而请求IO,这边CPU挂起,造成就绪队列中的其他进程等待,这 ...

  4. 操作系统学习笔记4 | CPU管理 && 多进程图像

    操作系统的核心功能就是管理计算机硬件,而CPU就是计算机中最核心的硬件.而通过学习笔记3的简史回顾,操作系统通过多进程图像实现对CPU的管理.所以多进程图像是操作系统的核心图像. 参考资料: 课程:哈 ...

  5. 操作系统学习笔记(三) windows内存管理

    //系统物理页面是由 (Page Frame Number Database )简称PFN数据库来进行管理,实际上是一个数组,每个物理页面都对应一个PFN项. 进程的地址空间是通过VAD(Virtua ...

  6. 操作系统学习(三)-- CPU调度

    操作系统之进程与线程 L14 CPU调度策略 如何设计调度算法? 调度关键在:折中和综合 IO约束型的任务一般是前台任务,和用户交互:CPU约束型关注周转时间 进程切换过程需要系统内耗,切换时间长则系 ...

  7. 操作系统学习笔记----进程/线程模型----Coursera课程笔记

    操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...

  8. 清华大学ucore操作系统课笔记

    操作系统 清华大学ucore操作系统课笔记 全文思维导图 1. 操作系统概述 1.1 什么是操作系统? 操作系统的定义 没有公认的精确定义 一个控制程序 一个系统软件 控制程序执行过程,防止错误和计算 ...

  9. 操作系统学习笔记5 | 用户级线程 && 内核级线程

    在上一部分中,我们了解到操作系统实现多进程图像需要组织.切换.考虑进程之间的影响,组织就是用PCB的队列实现,用到了一些简单的数据结构知识.而本部分重点就是进程之间的切换. 参考资料: 课程:哈工大操 ...

随机推荐

  1. Java StringJoiner

    Java StringJoiner Java added a new final class StringJoiner in java.util package. It is used to cons ...

  2. Socket 编程(二)

    首先,看主界面 点击链接按钮,开始建立与服务端的连接 Socket socket = null; private void btnStart_Click(object sender, EventArg ...

  3. 牛客网 牛客练习赛43 C.Tachibana Kanade Loves Review-最小生成树(并查集+Kruskal)+建虚点+读入挂

    链接:https://ac.nowcoder.com/acm/contest/548/C来源:牛客网 Tachibana Kanade Loves Review 时间限制:C/C++ 2秒,其他语言4 ...

  4. POJ3255 Roadblocks [Dijkstra,次短路]

    题目传送门 Roadblocks Description Bessie has moved to a small farm and sometimes enjoys returning to visi ...

  5. Python并发编-用Event,线程检测数据库连接的例子

    尝试3次连接数据库 import time import random from threading import Thread,Event def connect_db(e): count = 0 ...

  6. 在 HTTP Request 中加入特定的 Header

    转:http://www.findspace.name/easycoding/1137 要加入 header,需要使用 Request 对象: #code1 import urllib2 reques ...

  7. SpringBoot学习(四)

    spring boot 默认端口是 8080,如果想要进行更改的话,只需要修改 application.properties 文件,在配置文件中加入: 1. server.port=9090 其他常用 ...

  8. HDU 5952 [DFS]

    题目链接:[http://acm.hdu.edu.cn/showproblem.php?pid=5952] 题意:给出一张无向图,然后判断这张图中一共有多少个不同的大小为S的完全图,并且保证每个点的度 ...

  9. 埃及分数 a* 搜索 知识点mark

    题意 在古埃及,人们使用单位分数的和(即1/a,a是自然数)表示一切有理 数. 例如,2/3=1/2+1/6,但不允许2/3=1/3+1/3,因为在加数中不允许有相同的. 对于一个分数a/b,表示方法 ...

  10. 二维数组sort排序

    和副本任务完全无关的奇怪感慨: 完全搞不懂我为什么会在搞图论的时候学这种奇怪东西,需要的时候不会,不需要的时候又莫名增加了奇怪的技能点. 之前的假期规划在十多天的放飞自我中彻底泡汤,简单的图论都一点不 ...