模拟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调度器的时机,通常发生在 某一进程从执行状态转化为等待状态 某一进程从执行状态转化为就绪状态 某一进程从等待状态转为就 ...
随机推荐
- Introduction to ASP.NET Web Programming Using the Razor Syntax (C#)
1, http://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-c 2, Introduction ...
- CentOS配置网卡,重启网络显示:Device does not seem to be present(转载)
From:http://www.cnblogs.com/fbwfbi/archive/2013/04/29/3050907.html 一.故障现象: [root@c1node01 ~]# servic ...
- 容易导致outofmemoryException内存泄漏异常的编码问题
1.System.Drawing方面的类使用问题 System.Drawing用到了很多系统的资源和非托管代码,所以使用的时候要特别小心,注意内存泄漏(Memory Leak) 2.new byte[ ...
- emacs设置代理访问插件仓库
下面这个配置适合ss (setq url-gateway-method 'socks)(setq socks-server '("Default server" "127 ...
- 理解EnterCriticalSection 临界区
通俗解释就像上厕所: 门锁了,就等着,等到别人出来了,进去锁上,然后该干什么干什么,干完了,把门打开 门没锁,就进去,锁上,然后该干什么干什么,干完了,把门打开 ------------------- ...
- SQLSERVER:计算数据库中各个表的数据量和每行记录所占用空间
转:http://www.cnblogs.com/lyhabc/p/3828496.html CREATE TABLE #tablespaceinfo ( nameinfo ) , rowsinfo ...
- C - Fractal(3.4.1)
Description A fractal is an object or quantity that displays self-similarity, in a somewhat technica ...
- Tools之FindBugs
我们先来看FindBugs.(因为我们的错误通常分为两种,静态错误和动态错误也就是运行时的,而FindBugs是一个Java代码静态错误分析工具.) 1) 安装 Help->SoftWare U ...
- Shell | grep with n following lines
'foo' sample.txt ➜ dex-method-counts git:(master) ./dex-method-counts ~/Downloads/n.apk | 'hui' hui: ...
- 《Head First 设计模式》ch.1 策略(Strategy)模式
策略模式 定义了算法族,分别封装起来,让它们可以互相替换,让算法的变化独立于使用算法的客户. 模式名词的意义 威力强大,交流的不止是模式名称,而是一整套模式背后所象征的质量.特性.约束 用更少的词汇做 ...