先来先服务实现简单但是平均周转时间过长

短作业优先算法缩短了平均周转时间

#!/usr/bin/python
#-*- coding: utf-8 -*-
#
# table
# 0:进程号 1:到达时间 2:所需时间
#
# pTable 先来先服务
# 0:进程号 1:开始运行时间 2:运行时间 3:周转时间 4:带权周转时间
#
# qTable 短作业优先
# 0:进程号 1:开始运行时间 2:运行时间 3:周转时间 4:带权周转时间
# class Work4Ligon(object):
table = []
pTable = []
qTable = [] def __init__(self):
pass #输入数据
def dataIn(self):
num = raw_input("请输入进程数:")
num = num.strip()
num = int(num)
i = 1
while(i <= num):
print "请输入进程 ",i,"的到达时间"
a = float(raw_input())
print "请输入进程 ",i,"的运行时间"
b = float(raw_input())
self.table.append([i,a,b])
i += 1 #计算先来先服务
def pTableFill(self):
table = self.table
time = 0
for i in xrange(len(table)):
num = table[i][0]
if (time > table[i][1]):
startTime = time
else:
startTime = table[i][1]
time += table[i][2]
runTime = table[i][2]
zj = startTime + runTime - table[i][1]
dzj = zj / table[i][2]
self.pTable.append([num, startTime, runTime, zj, dzj]) #计算短作业优先
def qTableFill(self):
#复制一份作业列表
table = list(self.table) time = 0
for i in xrange(len(table)):
minIndex = -1
minTime = 0
for j in xrange(len(table)):
if (table[j][1] <= time):
if (minIndex == -1):
minIndex = j
minTime = table[j][2]
else:
if (table[j][2] < minTime):
minIndex = j
minTime = table[j][2] num = table[minIndex][0]
if (time > table[minIndex][1]):
startTime = time
else:
startTime = table[minIndex][1]
time += table[minIndex][2]
runTime = table[minIndex][2]
zj = startTime + runTime - table[minIndex][1]
dzj = zj / table[minIndex][2]
self.qTable.append([num, startTime, runTime, zj, dzj])
table.remove(table[minIndex]) #按到达时间排序
def sort(self):
table = list(self.table)
self.table = []
for i in xrange(len(table)):
minIndex = -1
minTime = 0
for j in xrange(len(table)):
if (minIndex == -1):
minIndex = j
minTime = table[j][1]
else:
if (table[j][1] < minTime):
minIndex = j
minTime = table[j][1]
self.table.append(table[minIndex])
table.remove(table[minIndex]) def display(self):
p = self.pTable
q = self.qTable
avg1 = 0
avg2 = 0
print '先来先服务:'
print '线程号\t开始执行时间\t执行时间\t周转时间\t带权周转时间'
for i in xrange(len(p)):
print p[i][0],'\t',p[i][1],'\t\t',p[i][2],'\t\t',p[i][3],'\t\t',p[i][4]
avg1 += p[i][3]
avg2 += p[i][4]
print '平均周转时间:',avg1 / len(p),'\t平均带权周转时间', avg2 / len(p) avg1 = 0
avg2 = 0
print '短作业优先:'
print '线程号\t开始执行时间\t执行时间\t周转时间\t带权周转时间'
for i in xrange(len(p)):
print q[i][0],'\t',q[i][1],'\t\t',q[i][2],'\t\t',q[i][3],'\t\t',q[i][4]
avg1 += q[i][3]
avg2 += q[i][4]
print '平均周转时间:',avg1 / len(p),'\t平均带权周转时间', avg2 / len(q) #开始运行
def run(self):
self.dataIn()
self.sort()
self.qTableFill()
self.pTableFill()
self.display() if __name__ == '__main__':
w = Work4Ligon()
w.run()

模拟cpu调度的更多相关文章

  1. 【转】CPU调度

    转自:http://blog.csdn.net/xiazdong/article/details/6280345 CPU调度   用于多道程序 以下先讨论对于单CPU的调度问题. 回顾多道程序,同时把 ...

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

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

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

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

  4. s5-1 CPU调度

    基本概念 通过多道程序设计得到 CPU 的最高利用率 (CPU-- I/O 脉冲周期 - - 进程的执行包括进程在 CPU 上执行和等待 I/O ) 进程的执行以 CPU 脉冲开始,其后跟着 I/O ...

  5. centos7-java模拟cpu占用高及排查

    环境 centos7 1核2GB Java8 模拟cpu占用高 新建一个名为jvm-learn的springboot项目 模拟代码如下 import org.springframework.boot. ...

  6. [OS] CPU调度

    调度准则 为了比较CPU调度算法,分析员提供了许多准则,用于比较的特征对确定最佳算法有很大影响.这些准则包括: ·CPU使用率:需要使CPU尽可能忙. ·吞吐量:一个时间单元内完成进程的数量. ·周转 ...

  7. CPU调度

    概念 1.控制,协调进程对CPU的竞争,按一定的调度算法从就绪队列中选择一个进程把CPU的使用权交给被选中的进程, 如果没有就绪进程,系统会安排一个系统空闲进程或idle进程 cpu调度要解决的三个问 ...

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

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

  9. 6.CPU调度

    总论:所有的程序都是CPU和I/O等待交替执行 CPU调度器的操作时机 调用CPU调度器的时机,通常发生在 某一进程从执行状态转化为等待状态 某一进程从执行状态转化为就绪状态 某一进程从等待状态转为就 ...

随机推荐

  1. Tomcat启动过程原理详解

    基于Java的Web 应用程序是 servlet.JSP 页面.静态页面.类和其他资源的集合,它们可以用标准方式打包,并运行在来自多个供应商的多个容器.Web 应用程序存在于结构化层次结构的目录中,该 ...

  2. 如何用js来判断浏览器类型(ie,firefox)等等

    现在网络上的浏览器,操作系统就象中国的方言一样,那个叫多啊!这给我们这些开发人员 带来了巨大的痛苦!虽然可能大家的喜好不同!用的系统也不同!有人喜欢用ie,有人喜欢用 firefox,还有人喜欢用腾讯 ...

  3. Java SE 第十六讲----面向对象特征之多态

    1.多态:polymorphism:我们说的子类就是父类(玫瑰是花,男子是人),因此多态的意思就是:父类型的引用可以指向子类的对象 public class PolyTest { public sta ...

  4. python字典copy()方法

    python 字典的copy()方法表面看就是深copy啊,明显独立 d = {'a':1, 'b':2} c = d.copy() print('d=%s c=%s' % (d, c)) Code1 ...

  5. Redis多机功能之Sentinel

    Sentinel的目的:监视主从服务器,并在主服务器下线时自动进行故障转移 启动Sentinel 通过执行Redis安装文件中的redis-sentinel程序,可以启动一个Sentinel实例: r ...

  6. HDU 4597 Play Game 记忆化DP

    Play Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Proble ...

  7. Skill

    Skill Yasser is an Egyptian coach; he will be organizing a training camp in Jordan. At the end of ca ...

  8. JAVA集合学习

    JAVA中有几种常用的集合类.分别是List,Set,Map等 提示:Eclipse中自动导入包的快捷键  Ctrl+Shift+O 一.List类 父接口:该类是Collection集合接口的子接口 ...

  9. python学习笔记(SMTP邮件发送:带附件)

    博主有段时间没有更新博客了 先整理一个之前整理过的SMTP邮件发送,这次是带附件的功能 #!/usr/bin/env python # -*- coding: utf_8 -*- from email ...

  10. Unity AssetBundles and Resources指引 (二) Resources文件夹

    本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ...