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

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

#!/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. 2015 年最棒的 5 个 HTML5 框架

    大多数的 web 开发者一直在用关键点来寻找动态的框架,这样能简化他们的设计和开发工作.HTML5 框架在所有的 web 浏览器和手机应用上都展现了优秀的性能.它不仅简化了 HTML5 开发中 CSS ...

  2. bootstrap在jsp中怎么没有效果?

    页面顶部<!DOCTYPE html> 

  3. C++primer 练习15.15

    // 15_15.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  4. PinYinCls

    using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using S ...

  5. IO/NIO

    1.转换流,Buffered BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out)); BufferedRe ...

  6. Java: 基类、子类、构造函数、程序块的初始化顺序

    初始化顺序 基类static block 子类static block 基类non-static block 子类non-static block 基类constructor 子类constructo ...

  7. 如何在低api中使用View的属性设置方法如setAlpha等

    ViewPagerTransforms 是一个自定义了各种翻转效果的开源库,其中的各种PageTransformer使用了view的很多属性设置方法如DepthPageTransformer中:? p ...

  8. VS2015+win10+opencv3.0整个安装过程

    LZ最近换了台新台式电脑,开始下载新VS软件,话说软件平台越新越好用,一看网上已经有VS2015版本,果断就去官网下载. 1.安装VS操作 官方网的链接如下:https://www.visualstu ...

  9. Objective-C的内存管理

    一.Objective-C内存管理的对象 1. 值类型:比如int.float.struct等基本数据类型. 值类型会被放入栈中,在内存中占有一块连续的内存空间,遵循先进后出的原则,故不会产生碎片. ...

  10. socket学习笔记——获取域名与IP(linux)

    gethostbyname.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #includ ...