由于第四章线程的介绍没有上传视频,故之后看书来补。

最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助。同时盼望大家能对文章评论,大家一起多多交流,共同进步!

本篇文章大致内容为:

  • 基本概念(Basic Concept)
  • 调度准则(Scheduling Criteria)
  • 调度算法(Scheduling Algorithm)
  • 实时调度(Real-Time Scheduling)
  • 算法评价(Algorithm Evaluation)

基本概念(Basic Concept)

通过多道程序设计可以尽可能高的提高CPU利用率,但道数不可能无限增加。

同时: 宏观-程序进入内存,被操作系统调度; 微观-进程正在CPU上运行(Running)

调度:切换的过程中,切换越多,系统消耗越多,故道数不可能无限增加(另外还有内存方面的考虑)

CPU-I/O Burst Cycle   CPU-I/O执行期

  • 进程执行包括一系列的CPU执行期和输入输出等待期

CPU执行期分布:为指数型或多阶指数型

CPU型程序:大部分时间用在CPU上的程序

I/O型程序:大部分时间用在I/O上的程序

CPU调度(进程调度,低级调度,短程调度)  CPU Scheduler

选择内存上的处于就绪状态的进程,并分配CPU给它们使用(依照算法)。

什么时候进行CPU调度?或CPU调度的时机:

  1. Switches from running to waiting state
  2. Switches from running to ready state
  3. Switches from waiting to ready state:就绪队列来了新进程。
  4. Switched from waiting to ready state

注:1和4为非剥夺式/非抢占式(nonpreemptive)的,2和3为剥夺式/抢占式(preemptive)的。

调度程序(Dispatcher)

调度程序将CPU的控制权交给就绪队列中选中的进程,包括:

  • switching context  上下文切换(中断现场的保存与恢复)
  • switching to user mode  切换到用户态(PSW最高位),用户态:非特权指令;系统态:非特权指令+特权指令
  • jumping to the proper location in the user program to restart that program  跳转到程序上一次中断前执行的语句的上一行

调度延时(Dispatch latency)

换下一个进程并换上另一个新进程所需的时间,也叫系统消耗(overload)

调度准则(Scheduling Criteria)

  • CPU利用率(CPU utilization)
  • 吞吐量(Throughout):单位时间内执行作业的数量。
  • 周转时间(Turnaround time):提交完毕->执行结束所需时间。
  • 等待时间(Waiting time):在就绪队列内等待的时间,多次等待时间做和。
  • 响应时间(Response time):提交完成->首次给出相应所需时间。

周转时间的组成:后备等待+就绪队列等待时间之和+运行时间之和+阻塞队列等待时间之和

优化准则(Optimization Criteria):对于相同作业而言,

  • Max CPU utilization  CPU利用率最大化
  • Max Throughput  单位时间最大吞吐量
  • Min turnaround time  最小化周转时间
  • Min waiting time  最小化等待时间
  • Min response time  最小化响应时间

调度算法(Scheduling Algorithms)

  1. First-Come,First-Served(FCFS):先来先服务的调度原则
  2. Shortest-Job-First(SJF) Scheduling:短作业优先调度原则
  3. Priority Scheduling:优先级调度原则
  4. Round-Robin Scheduling:时间块调度原则
  5. Multilevel Queue Scheduling:多级队列调度原则
  6. Multilevel Feedback Queue:多级反馈队列调度原则

FCFS Scheduling

Gantt Chart:甘特图

SJF Scheduling:选择下一次CPU执行期最短的进程执行,分为两种,nonpreemptive 非抢占式的 和 preemptive 抢占式的。

抢占式-Shortest-Remainging-Time-First(SRTF)  最短剩余时间优先

SJF可以获得最小的平均等待时间。

Example of Non-Preemptive SJF:

Example of Preeptive SJF:

确定下一次CPU执行期的长短(Determining Length of Next CPU Burst)

只能估计时间,可以使用指数平均法:

两种极端:

通常情况:

优先级调度(Priority Scheduling)

  • 每一个进程都有一个优先级
  • CPU调度给优先级最高的进程
  • 优先级调度可以分为
    • 可抢占式的(Preemptive)
    • 不可抢占式的(Nonpreemptive)

SJF也是一类优先级算法。

存在问题:Infinite blocking(Starvation) 饥饿:优先级低的进程会被无限推迟。

解决方法:Aging(熬),可变优先级,动态优先级

时间片轮转(Round Robin, RR)

time slice - 时间片

  • 每个进程都会得到一个CPU时间段(通常10~100milliseconds)
  • 时间片到后,进程被抢占并被放入就绪队列的末尾
  • 若有n个进程且时间片长度为q,则每个进程都会获1/n的CPU时间,并且每次执行不超过q,则没有进程会等待超过(n-1)q个时间片

性能:若q比较大,则等待时间长;若q比较小,则每个进程等待时间短,但上下文切换所需的系统消耗会变大,q必须大于上下文切换的中断时间否则系统不能正常运行。

多级队列排队 Multilevel Queue

就绪队列被分成两个队列,前台队列用于交互式进程,使用RR调度,后台队列用于批处理进程,使用fcfs调度,后台队列保证前台有比较快的响应。

多级反馈队列 Multilevel Feedback Queue

  1. 有多个队列,每个队列有不同的优先级
  2. 所有新进程都入最高优先级队列
  3. 按照Round Robin情况调度最高优先级队列一次,若进程完成则释放内存结束进程,否则将该进程降入次高级进程
  4. 当最高优先级队列为空时,用RR调度次高优先级队列
  5. 当调度优先级为最高级的队列内加入新进程时,若系统为抢占式调度,则当前进程进入中断,并回到当前队列的队尾。

多级反馈队列为一种综合性调度:多级+RR+优先级+SJF+FCFS

算法评价 Algorithm Evaluation

  • 确定模型 Determining modeling
  • 队列模型 Queueing modeling
  • 使用仿真的方式评价(最常用):在公共的平台基于同样的一组公共数据对算法进行评价。

操作系统学习笔记(五)--CPU调度的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. Java IO学习笔记五:BIO到NIO

    作者:Grey 原文地址: Java IO学习笔记五:BIO到NIO 准备环境 准备一个CentOS7的Linux实例: 实例的IP: 192.168.205.138 我们这次实验的目的就是直观感受一 ...

  7. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

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

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

  9. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  10. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

随机推荐

  1. Excel函数汇总:

    /** *D1—要查找的目标值 *G:G—查找的单元格范围,G:G表示G列 *1—查找第一个匹配 *FALSE—找到结果即返回 */ VLOOKUP(D1,G:G,1,FALSE):返回查找到的单元格 ...

  2. 为iOS的mobileconfig文件进行签名

    本文主要讲,使用苹果开发者证书进行签名达到目的,本文两种方法,一种是刀耕火种的一步步操作,一种使用脚本签名 一.导出苹果证书进行签名 1.从钥匙串(keychain)中导出证书 实用工具->钥匙 ...

  3. C++学习进度0

    昨天,又把<C++ primer> 刷了一遍,这一次看的是陈硕大大的评注版,重点看了陈硕的注释,<Accelerated C++>去年就把代码巧了一遍,<C++ prim ...

  4. ittun配置和使用教程

    有好久没写博了.时间过得真快,一下子一年又过去了. 不墨迹这么多了. 作为一个前端,页面写好了少不了做测试以及给其他同事看看效果,然而公司没有测试服务器,真是悲催哦. 一直都是用ip地址看页面的.但是 ...

  5. 【C#】 格式化说明符 string.Format WriteLine

    定义 格式说明符的语法由3个字段组成:索引号.对齐说明符和格式字段.String.Format和WriteLine都遵守同样的格式化规则. 对齐说明符 对齐说明符表示了字段中字符的最小宽度.对齐说明符 ...

  6. List 集合线程安全测试

    最近在做一些代码整理工作,涉及到List 线程安全问题,查了一些资料.网上有些资料说List 增减成员(Add , Remove) 是安全的,但不保证成员属性值访问安全性,及禁止对 List 跨线程遍 ...

  7. 阿里云服务器被挖矿minerd入侵的解决办法

    上周末,更新易云盘的时候,发现阿里云服务器CPU很高,执行 top 一看,有个进程minerd尽然占用了90%多的CPU, 赶紧百度一下,查到几篇文章都有人遇到同样问题 Hu_Wen遇到的和我最相似, ...

  8. 开发中的一些解决方案(c#)

    1.如果需要配置文件,不妨考虑用XML序列化技术实现XML配置文件.在C#中引入System.Xml.Serialization命名空间,编写实体类序列化到XML文件中(或反序列化到对象),编写少量代 ...

  9. MicroERP开发技术分享:技术选型

    为什么要想起开发一个近似一套完整的ERP软件呢,原因有二:一是想在空闲时间把以前的进销存软件丰富一下,结果越搞越大了:二是这些年光搞C#了,不想把VB6忘光了 非微软的东西还真没时间去学,也有主要原因 ...

  10. DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版及制作Visual Studio C#项目模板文件详解

    关于 DotNetBar for Windows Forms 12.9.0.0_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...