概述

比例份额(proportional-share)调度程序(又称公平份额(fair-share)调度程序)。比例份额算法基于一个简单的想法:调度程序的最终目标,是确保每个工作获得一定比例的CPU时间,而不是优化周转时间和响应时间。

彩票调度(lottery scheduling)是比例份额调度程序的一个例子。基本思想很简单:每隔一段时间,都会举行一次彩票抽奖,以确定接下来应该运行哪个进程。越是应该频繁运行的进程,越是应该拥有更多地赢得彩票的机会。

彩票调度概念与实现

彩票数表示份额

彩票调度中的彩票数(ticket)代表了进程(或用户或其他)占有某个资源的份额。一个进程拥有的彩票数占总彩票数的百分比,就是它占有资源的份额。

通过不断定时地(比如,每个时间片)抽取彩票(调度程序知道彩票总数,取之间一随机数即可),彩票调度从概率上(但不是确定的) 获得这种份额比例。

例子:

假设有两个进程A和B,A拥有75张彩票,B拥有25张。因此我们希望A占用75%的CPU时间,而B占用25%。

随着这两个工作运行的时间越长,它们得到的 CPU 时间比例就会越接近期望。

彩票机制

  1. 彩票货币(ticket currency) 这种方式允许拥有一组彩票的用户以他们喜欢的某种货币,将彩票分给自己的不同工作。之后操作系统再自动将这种货币兑换为正确的全局彩票。
  2. 彩票转让(ticket transfer) 通过转让,一个进程可以临时将自己的彩票交给另一个进程。这种机制在客户端/服务端交互的场景中尤其有用。
  3. 彩票通胀(ticket inflation)。利用通胀,一个进程可以临时提升或降低自己拥有的彩票数量。通胀可以用于进程之间相互信任的环境。在竞争环境中,进程之间互相不信任,这种机制就没什么意义。

实现

只需要一个不错的随机数生成器来选择中奖彩票和一个记录系统中所有进程的数据结构(一个列表),以及所有彩票的总数就可以实现彩票调度。

假定我们用列表记录进程。

// counter: used to track if we've found the winner yet
int counter = 0;// winner: use some call to a random number generator to
// get a value, between 0 and the total # of tickets
int winner = getrandom(0, totaltickets);// current: use this to walk through the list of jobs
node_t *current = head;// loop until the sum of ticket values is > the winner
while (current) {counter = counter + current->tickets;if (counter > winner)break; // found the winnercurrent = current->next;
}
// 'current' is the winner: schedule it...

如果用数组形式,可以采取前缀和+二分实现。

步长调度

虽然随机方式可以使得调度程序的实现简单(且大致正确),但偶尔并不能产生正确的比例,尤其在工作运行时间很短的情况下。由于这个原因,Waldspurger提出了步长调度(stride scheduling),一个确定性的公平分配算法。

步长调度中的每个工作都有自己的步长,这个值与票数值成反比(取各票数的一个较大公倍数/各票数)。

当需要进行调度时,选择目前拥有最小行程值的进程,并且在运行之后将该进程的行程值增加一个步长。

下面是Waldspurger给出的伪代码:

current = remove_min(queue); // pick client with minimum pass
schedule(current); // use resource for quantum
current->pass += current->stride; // compute next pass using stride
insert(queue, current); // put back into the queue

可以使用优先队列实现之。

与彩票调度的对比

彩票调度有一个步长调度没有的优势——不需要全局状态

假如一个新的进程在步长调度执行过程中加入系统,应该怎么设置它的行程值呢?如果设置成0,新来的进程就独占CPU了。

彩票调度算法不需要对每个进程记录全局状态,只需要用新进程的票数更新全局的总票数就可以了。

因此彩票调度算法能够更合理地处理新加入的进程。

总结

彩票调度和步长调度并没有作为CPU调度程序被广泛使用,原因如下:

  • 不能很好地适合I/O;

  • 最难的票数分配问题并没有确定的解决方式,

比例份额调度程序只有在这些问题可以相对容易解决的领域更有用(例如容易确定份额比例)。例如在虚拟(virtualized)数据中心中,你可能会希望分配1/4的CPU周期给Windows虚拟机,剩余的给Linux系统,比例分配的方式可以更简单高效。

reference

[1] 操作系统导论(ostep)

操作系统-比例份额调度相关推荐

  1. 操作系统学习(三):浅析比例份额调度——彩票调度和步长调度

    1.简单介绍 比例份额(proportional-share)算法基于一个简单的想法:调度程序的最终目标,是确保每个工作获得一定比例的 CPU 时间,而不是优化周转时间和响应时间. 他有一种简单的实习 ...

  2. 操作系统导论 第九章 调度:比例份额

    文章目录 第九章 调度:比例份额 9.1 基本概念:彩票数代表份额 9.2 彩票机制 9.3 实现 9.4 步长调度 9.5 小结 第九章 调度:比例份额 在本章,我们将看到一个不同类型的调度程序–比 ...

  3. 2016年3月全球操作系统版本份额:Win10仅次win7

    IDC评述网(idcps.com)04月07日报道:根据市场研究公司Net Applications最新数据显示,在2016年3月全球操作系统市场上,Windows的冠军地位不可动摇,份额与上月基本保 ...

  4. 【408预推免复习】操作系统之处理机调度与死锁

    [408&预推免复习]操作系统之处理机调度与死锁 文章目录 1 作业调度和进程调度 2 实时调度和死锁概述 3 预防死锁和避免死锁 1 作业调度和进程调度 什么是处理机调度? 处理机调度:如何 ...

  5. 处理机调度实验c语言,操作系统实验处理机调度C语言实现

    操作系统实验处理机调度C语言实现 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  6. 操作系统之磁盘调度——SCAN实例讲解

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  7. c语言处理机调度实验报告,操作系统实验处理机调度C语言实现.docx

    操作系统实验处理机调度C语言实现.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. ...

  8. 【操作系统】—处理机调度的概念以及层次

    [操作系统]-处理机调度的概念以及层次 本章节学习内容如下 一.调度的基本概念 当有一堆任务要处理,但由于资源有限,这些事情没办法同时处理,这就需要确定某种规则来决定处理这些任务的顺序,这就是&quo ...

  9. 【操作系统】处理机调度与死锁(三)

    [操作系统]处理机调度与死锁(三) 一.前言 二.处理机调度的层次 2.1 高级调度 2.2 低级调度 2.3 中级调度 三.调度队列模型和调度准则 3.1 仅有进程调度的调度队列模型 3.2 具有高 ...

  10. 【操作系统】处理机调度:处理机调度的层次和调度算法的目标

    处理机调度的层次: (1)高级调度(长程调度,作业调度): [操作系统]处理机调度:作业与作业调度_暮色_年华的博客-CSDN博客 调度对象是作业. 将外存上处于后备队列中的哪几个作业调入内存,为它们 ...

最新文章

  1. 切换阿里云maven源解决maven中央仓库下载太慢卡顿的问题
  2. 【Luogu】P1613 跑路
  3. 容斥 + 爆搜打表 ---- 2020年南京icpc H.Harmonious Rectangle
  4. 银光中国网免费Silverlight空间Web Service部署方法
  5. linux centos7 docker 安装 oracle
  6. leetcode算法题--n个骰子的点数
  7. OpenCV学习笔记(十六):直方图均衡化:equalizeHist()
  8. CCNA试验-NAT
  9. 【操作系统】—进程的状态与转换
  10. 腾讯云服务器CentOS 7安装JAVA JDK并运行class文件
  11. BOSON cisco设备模拟器6.0+注册机
  12. iOS5 UIKit新特性
  13. 何凯明 Single Image Haze Removal Using Dark Channel Prior
  14. Python科学计算初探——余弦相似度
  15. 关于富文本编辑器froala editor和百度Ueditor使用问题
  16. LeetCode常见题型——背包问题
  17. ac算法 java_Aho-Corasick算法的Java实现与分析
  18. wd移动硬盘不能识别_西部数据移动硬盘无法识别恢复
  19. 联想笔记本声音太小怎么办_电脑音量调到最大了还是声音太小,怎么办啊??...
  20. 磁盘满了怎么清理之空间占用分析软件SpaceSniffer

热门文章

  1. 权重股启动意味着什么
  2. 毕业设计python数据分析_毕业设计:爬虫及数据分析
  3. csgo服务器怎么显示cmd,CSGO服务器搭建教程——KZ模式
  4. coffe-script
  5. NavigationDuplicated: Avoided redundant
  6. uva 10099(最短路径)
  7. 佳能MG3620卡纸后错误代码1401/5100
  8. win10 进不了修复服务器失败怎么办,win10自动修复失败开不了机怎么办?win10自动修复失败无限循环解决方法大全...
  9. 10 个最佳 WordPress 幻灯片插件
  10. 一种基于linux系统的精准流量统计方法