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

一、CPU调度算法

1、先到先服务(FCFS)

谁先请求CPU谁先得到服务,一直到服务完。这应该是最简单的调度了。但效率不高,有些只须很短CPU区间的进程也只能死等,会造成平均等待时间较长。

2、最短作业优先(SJF)

最佳调度算法,平均等待时间最小。问题在于,如何知道下一个CPU区间的长度,或者说,如何知道进程要消耗多少CPU时间?

可以通过一定的算法来预测这个长度。

3、优先级

进程被赋予优先级。优先级高的先获得CPU。

优先级调度可以是抢占式也可以是非抢占式。、

抢占式:优先级高的进程到达就绪队列时,假如正在运行的进程优先级比它低,立刻抢占CPU;

非抢占式:优先级高的进程到达就绪队列时,排在就绪队列头部

缺点是会产生无穷堵塞或饥饿,造成有些低优先级进程无线等待。

解决饥饿问题,是老化。即等待时间越长的进程,其优先级会递增。

4、轮转法(RR)

限定CPU时间片,就绪队列中的进程轮流执行,每个进程执行完毕即退出,否则重新排队。如果时间片足够长,就等于FCFS。

轮转法专为分时系统而设计。

5、多级队列

设置多条、优先级不同的就绪队列,进程散落其中。一旦归入某条队列,不可以转移到别的队列。优先级高的队列先执行,直至为空,才到次优先级的队列。一旦高优先级队列又有新进程进入,马上抢占CPU。

同样,存在饥饿问题。

6、多级反馈队列

同多级队列,但允许进程迁移。假如某个进程消耗CPU时间片次数多,即沉入低优先级队列。可以防止饥饿。

二、多处理器调度

1、非对称多处理和对称多处理

非对称多处理:一个CPU负责调度、IO处理及其他系统活动,而其他CPU只执行用户代码。好处是只有一个CPU访问系统数据,减轻了数据共享的需要。

对称处理(SMP):每个CPU都可以调度,甚至有私有的就绪队列。算法比较复杂。现代操作系统都支持SMP。

2、处理器亲和性

努力让一个进程只在同一个处理器上运行,就叫处理器亲和性。

主要是因为进程迁移到其他处理器,缓存需要重新构建。所以这是OS极力避免的情况。

亲和性有软硬之分。如果只是努力,而不能保证,则软也;如果硬性规定,则为硬也,如Linux。

3、负载均衡

如何尽快将众多嗷嗷待运的进程放入CPU中运行,以完全利用多CPU的优点,就涉及到负载均衡。

通常有2种方法:

1)推

一个特定任务周期性地检查各个CPU,发现不平衡即进行适当调配

2)拉

CPU空闲时,即主动从其他地方拉一个进程过来运行,。

负载均衡与处理器亲和性是矛盾的。如何取得平衡,有个度的考量。

4、对称多线程(SMT)

多物理CPU同时运行多线程,是为对称多处理器(SMP);提供多个逻辑CPU,来同时运行多线程,即为对称多线程(SMT,英特尔处理器中称为超线程)。

SMT的思想是同一个物理CPU上生成多个逻辑CPU。

SMT是硬件提供的,而不是软件。

5、线程调度

OS调度的是内核线程。一个用户线程要得到CPU运行,有2个步骤要走:

1)用户线程与内核线程挂钩

2)内核线程获得CPU

用户线程与内核线程的对应关系有一对一,多对一,多对多等关系。在后二者模型中,线程库调度用户线程到一个LWP(轻量级进程)。

但这并不意味着用户线程可以执行。当线程所在进程获得CPU时,进程内的线程还要经过争用,获得CPU。

获得LWP,叫进程竞争范围(PCS);

获得CPU,叫系统竞争范围(SCS)。

所有的用户线程与内核线程对应的模型中,都需要SCS。一对一模型中,只有SCS。

版权声明:本文为博主原屙文章,喜欢你就担走。

操作系统学习笔记:CPU调度的更多相关文章

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

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

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

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

  3. 深挖计算机基础:趣谈Linux操作系统学习笔记

    参考极客时间专栏<趣谈Linux操作系统>学习笔记 核心原理篇:内存管理 趣谈Linux操作系统学习笔记:第二十讲 趣谈Linux操作系统学习笔记:第二十一讲 趣谈Linux操作系统学习笔 ...

  4. 操作系统学习笔记(五)--CPU调度

    由于第四章线程的介绍没有上传视频,故之后看书来补. 最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助.同时盼望大家能对文章评论,大家一起多多交 ...

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

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

  6. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...

  7. RTX51 Tiny实时操作系统学习笔记—初识RTX51 Tiny

     一,RTX51 Tiny简单介绍    RTX51 Tiny是一种实时操作系统(RTOS),能够用它来建立多个任务(函数)同一时候运行的应用(从宏观上看是同一时候运行的,但从微观上看,还是独立运行的 ...

  8. ucore操作系统学习笔记(二) ucore lab2物理内存管理分析

    一.lab2物理内存管理介绍 操作系统的一个主要职责是管理硬件资源,并向应用程序提供具有良好抽象的接口来使用这些资源. 而内存作为重要的计算机硬件资源,也必然需要被操作系统统一的管理.最初没有操作系统 ...

  9. 操作系统学习笔记10 | I/O、显示器与键盘

    从这一部分开始介绍操作系统的设备驱动,操作系统通过文件系统的抽象驱动设备让用户能够使用显示器.键盘等交互工具.并讲解printf和scanf是如何实现敲下键盘将字符显示到屏幕上的. 参考资料: 课程: ...

随机推荐

  1. react之webpack

    1. 下载相关模块包 * 创建package.json ``` npm init ``` * react相关库 package-lock.json ``` npm install react reac ...

  2. nodejs学习(二) ---- express中使用模板引擎jade

    系列教程,上一节教程  express+nodejs快速创建一个项目 在创建一个项目后,views目录下的文件后缀为 .jade . 打开 index.jade,具体内容如下图(忽略 header.j ...

  3. js 技巧 (十)广告JS代码效果大全 【1】

    广告JS代码效果大全 1.[普通效果]     现在很多网站广告做的如火如荼,现在我就来介绍一下常见的对联浮动广告效果的代码使用方法,介绍的这种效果,在1024*768分辨率下正常显示,在800*60 ...

  4. 等待某(N)个线程执行完再执行某个线程的几种方法(Thread.join(),CountDownLatch,CyclicBarrier,Semaphore)

    1.main线程中先调用threadA.join() ,再调用threadB.join()实现A->B->main线程的执行顺序 调用threadA.join()时,main线程会挂起,等 ...

  5. 集训第四周(高效算法设计)N题 (二分查找优化题)

    原题:poj3061 题意:给你一个数s,再给出一个数组,要求你从中选出m个连续的数,m越小越好,且这m个数之和不小于s 这是一个二分查找优化题,那么区间是什么呢?当然是从1到数组长度了.比如数组长度 ...

  6. 【Objective-C】07-自定义构造方法和description方法

    在第5讲中已经介绍了如何定义类和创建并初始化对象,比如有Student这个类 1.Student.h 1 #import <Foundation/Foundation.h> 2 3 @in ...

  7. python pip 安装一些包找不到的问题 Could not find a version that satisfies....

    有时我们使用下载python 自带的pip 安装一些工具包时,会报如下错误 找不到满意的版本,这时就是我们的pip可能需要升级了,所以使用 python -m pip install --upgrad ...

  8. [luoguP1439] 排列LCS问题(DP + 树状数组)

    传送门 无重复元素的LCS问题 n2 做法不说了. nlogn 做法 —— 因为LCS问题求的是公共子序列,顺序不影响答案,影响答案的只是两个串的元素是否相同,所以可以交换元素位置. 首先简化一下问题 ...

  9. noip模拟赛 经营与开发

    题目描述 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXplore(探索) eXpand(拓张与发展) eXploit(经营与开发) ...

  10. android开发里跳过的坑-AS导入NDK工程提示错误 No such property: sdkHandler for class: com.android.build.gradle.LibraryPlugin

    接到一个NDK工程需要调试,导入后发现总是提示错误 Error:(37, 1) A problem occurred evaluating project ':libuvccamera'.> N ...