模拟cpu调度
先来先服务实现简单但是平均周转时间过长
短作业优先算法缩短了平均周转时间
#!/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调度的更多相关文章
- 【转】CPU调度
转自:http://blog.csdn.net/xiazdong/article/details/6280345 CPU调度 用于多道程序 以下先讨论对于单CPU的调度问题. 回顾多道程序,同时把 ...
- 操作系统学习笔记(五)--CPU调度
由于第四章线程的介绍没有上传视频,故之后看书来补. 最近开始学习操作系统原理这门课程,特将学习笔记整理成技术博客的形式发表,希望能给大家的操作系统学习带来帮助.同时盼望大家能对文章评论,大家一起多多交 ...
- 操作系统概念学习笔记 10 CPU调度
操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU.操作系统能够提高计算机的吞吐率. 对于单处理器系统.每次仅仅同意一个进程执行:不论什么其它进程必须等待,直到C ...
- s5-1 CPU调度
基本概念 通过多道程序设计得到 CPU 的最高利用率 (CPU-- I/O 脉冲周期 - - 进程的执行包括进程在 CPU 上执行和等待 I/O ) 进程的执行以 CPU 脉冲开始,其后跟着 I/O ...
- centos7-java模拟cpu占用高及排查
环境 centos7 1核2GB Java8 模拟cpu占用高 新建一个名为jvm-learn的springboot项目 模拟代码如下 import org.springframework.boot. ...
- [OS] CPU调度
调度准则 为了比较CPU调度算法,分析员提供了许多准则,用于比较的特征对确定最佳算法有很大影响.这些准则包括: ·CPU使用率:需要使CPU尽可能忙. ·吞吐量:一个时间单元内完成进程的数量. ·周转 ...
- CPU调度
概念 1.控制,协调进程对CPU的竞争,按一定的调度算法从就绪队列中选择一个进程把CPU的使用权交给被选中的进程, 如果没有就绪进程,系统会安排一个系统空闲进程或idle进程 cpu调度要解决的三个问 ...
- 操作系统学习笔记:CPU调度
CPU调度的目的在于提高CPU利用率,不让CPU闲着.CPU是宝贵的资源,如果有一个进程,本来在CPU中运行,忽然因为要使用IO资源,于是转而请求IO,这边CPU挂起,造成就绪队列中的其他进程等待,这 ...
- 6.CPU调度
总论:所有的程序都是CPU和I/O等待交替执行 CPU调度器的操作时机 调用CPU调度器的时机,通常发生在 某一进程从执行状态转化为等待状态 某一进程从执行状态转化为就绪状态 某一进程从等待状态转为就 ...
随机推荐
- php启动时候提示PHP startup的解决方法
最近在学习php,配置好php环境后,每次开机都有警告提示说 PHP startup.如下图: 显然这是个小问题,是关于php配置的. 解决这个问题很简单只需要在php.ini 文件中修改 exten ...
- FOOD
Serving order of food courses(上菜顺序)1. Appetizer(starter)2. Main Course3. Dessert Style of cooking1. ...
- 如何构建日均千万PV Web站点
http://www.cnblogs.com/xiaocen/p/3723839.html http://www.cnblogs.com/xiaocen/p/3726763.html http://w ...
- Centos下搭建ftp服务器
完全不用那么麻烦,直接可以用xshell中自带的传输文件功能,下载客户端xftp安装就行,不用配置,可以在windows系统向Linux系统的任何文件地方上传下载文件,简单方便,大大节约时间, vsf ...
- eclips中增加对jar包的引用
http://jingyan.baidu.com/article/ca41422fc76c4a1eae99ed9f.html
- Asp.Net 上传图片并生成高清晰缩略图(转)
在asp.net中,上传图片功能或者是常用的,生成缩略图也是常用的.baidu或者google,c#的方法也是很多的,但是一用却发现缩略图不清晰啊,缩略图片太大之类的事情,下面是我在处理图片上的代码, ...
- [ZOJ 1004] Anagrams by Stack (简单搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1004 题目大意:给你个栈,给你源串和目标串,按字典序输出符合要求 ...
- Sqoop2入门之导入关系型数据库数据到HDFS上
需求:将hive数据库中的TBLS表导出到HDFS之上: $SQOOP2_HOME/bin/sqoop.sh client sqoop:> set server --host hadoop000 ...
- RequireJS API
可以找到许多的解读,但是原文总是最重要的,也是最正宗的说明,直接访问 RequireJS 有时不太方便,这里将 RequireJS 2.0 API 的原文转载到博客园,方便查看. This is th ...
- 在Ubuntu Server14.04上编译Android6.0源码
此前编译过Android4.4的源码,但是现在Android都到了7.0的版本,不禁让我感叹Google的步伐真心难跟上,趁这周周末时间比较充裕,于是在过去的24小时里,毅然花了9个小时编译了一把An ...