模拟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调度器的时机,通常发生在 某一进程从执行状态转化为等待状态 某一进程从执行状态转化为就绪状态 某一进程从等待状态转为就 ...
随机推荐
- View的缩放操作--CGAffineTransformMakeScale:
__weak UIImageView *weekImage = imageView; imageView.transform = CGAffineTransformMakeScale(0.1, 0.1 ...
- 使用bs4对海投网内容信息进行提取并存入mongodb数据库
example: http://xyzp.haitou.cc/article/722427.html 首先是直接下载好每个页面,可以使用 os.system( "wget " ...
- PHP的require()函数可以在一行代码中多次读取
[root@NJ232:~]$[root@NJ232:~]$more tt.php m#!/opt/php/bin/php -q<?phpwhile(1){ sleep(2); $arr = r ...
- spring和springmvc之间的整合
一.springmvc就是运行在spring的环境下,这两者是否需要进行整合,即:是不是要把service .dao . 事务 .和其它框架的整合放在springmvc的配置文件中.这样子在技术层面上 ...
- java 错误之:Exception in thread "main" java.lang.NoClassDefFoundError
Exception in thread "main" java.lang.NoClassDefFoundError: PointTest 环境变量的问题,把环境变量设置好了就可以了 ...
- HappyNum
/*Write an algorithm to determine if a number is "happy". A happy number is a number defin ...
- 使用JDBC构建简单的数据访问层
本教程的目的是使用Java编写的分离的层去访问数据库中的表,这一层通常称为数据访问层(DAL) 使用DAL的最大好处是通过直接使用一些类似insert()和find()的方法简化了数据库的访问操作,而 ...
- 使用 Sahi 实现 Web 自动化测试
Sahi 是 Tyto Software 旗下的一个基于业务的开源 Web 应用自动化测试工具.Sahi 运行为一个代理服务器,并通过注入 JavaScript 来访问 Web 页面中的元素.Sahi ...
- Note for Computer Networks_Circuit Switching & Packet Switching
Packet Switching: - In a packet switched network data is transmitted in blocks(packets), typically l ...
- git 如何恢复只是提交到本地的文件(或者commit)
今天早上傻逼了,把四天的代码commit到了本地,然后fetch一下,然后就全没了,不过git还是挺强大的 参考:http://blog.163.com/jiams_wang/blog/static/ ...