操作系统导论-py2文件修改为py3文件快捷解决方法

2024-03-28 13:36

本文主要是介绍操作系统导论-py2文件修改为py3文件快捷解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在操作系统导论作业中,我们需要用到HW文件。但是这个代码包中,所有.py文件都是py2格式的,需要我们修改为py3文件后运行,即将.py文件开头的

#! /usr/bin/env python

修改为:

#! /usr/bin/env python3

在前面小部分文件中,这样就解决问题了。但后续的大部分文件,包含了大量的print语句。众所周知,py2和py3的print语句格式是不一样的,后者比前者多了一个括号()。这时候不少同学就开始手动修改代码,这也不失为一种方法。但是,我们也可以使用一些神奇的库函数修改。

 

比如如下py2代码:

#! /usr/bin/env pythonimport sys
from optparse import OptionParser
import random# finds the highest nonempty queue
# -1 if they are all empty
def FindQueue():q = hiQueuewhile q > 0:if len(queue[q]) > 0:return qq -= 1if len(queue[0]) > 0:return 0return -1def Abort(str):sys.stderr.write(str + '\n')exit(1)#
# PARSE ARGUMENTS
#parser = OptionParser()
parser.add_option('-s', '--seed', help='the random seed', default=0, action='store', type='int', dest='seed')
parser.add_option('-n', '--numQueues',help='number of queues in MLFQ (if not using -Q)', default=3, action='store', type='int', dest='numQueues')
parser.add_option('-q', '--quantum', help='length of time slice (if not using -Q)',default=10, action='store', type='int', dest='quantum')
parser.add_option('-a', '--allotment', help='length of allotment (if not using -A)',default=1, action='store', type='int', dest='allotment')
parser.add_option('-Q', '--quantumList',help='length of time slice per queue level, specified as ' + \'x,y,z,... where x is the quantum length for the highest ' + \'priority queue, y the next highest, and so forth', default='', action='store', type='string', dest='quantumList')
parser.add_option('-A', '--allotmentList',help='length of time allotment per queue level, specified as ' + \'x,y,z,... where x is the # of time slices for the highest ' + \'priority queue, y the next highest, and so forth', default='', action='store', type='string', dest='allotmentList')
parser.add_option('-j', '--numJobs', default=3, help='number of jobs in the system',action='store', type='int', dest='numJobs')
parser.add_option('-m', '--maxlen', default=100, help='max run-time of a job ' +'(if randomly generating)', action='store', type='int',dest='maxlen')
parser.add_option('-M', '--maxio', default=10,help='max I/O frequency of a job (if randomly generating)',action='store', type='int', dest='maxio')
parser.add_option('-B', '--boost', default=0,help='how often to boost the priority of all jobs back to ' +'high priority', action='store', type='int', dest='boost')
parser.add_option('-i', '--iotime', default=5,help='how long an I/O should last (fixed constant)',action='store', type='int', dest='ioTime')
parser.add_option('-S', '--stay', default=False,help='reset and stay at same priority level when issuing I/O',action='store_true', dest='stay')
parser.add_option('-I', '--iobump', default=False,help='if specified, jobs that finished I/O move immediately ' + \'to front of current queue',action='store_true', dest='iobump')
parser.add_option('-l', '--jlist', default='',help='a comma-separated list of jobs to run, in the form ' + \'x1,y1,z1:x2,y2,z2:... where x is start time, y is run ' + \'time, and z is how often the job issues an I/O request',action='store', type='string', dest='jlist')
parser.add_option('-c', help='compute answers for me', action='store_true',default=False, dest='solve')(options, args) = parser.parse_args()random.seed(options.seed)# MLFQ: How Many Queues
numQueues = options.numQueuesquantum = {}
if options.quantumList != '':# instead, extract number of queues and their time slicquantumLengths = options.quantumList.split(',')numQueues = len(quantumLengths)qc = numQueues - 1for i in range(numQueues):quantum[qc] = int(quantumLengths[i])qc -= 1
else:for i in range(numQueues):quantum[i] = int(options.quantum)allotment = {}
if options.allotmentList != '':allotmentLengths = options.allotmentList.split(',')if numQueues != len(allotmentLengths):print('number of allotments specified must match number of quantums')exit(1)qc = numQueues - 1for i in range(numQueues):allotment[qc] = int(allotmentLengths[i])if qc != 0 and allotment[qc] <= 0:print('allotment must be positive integer')exit(1)qc -= 1
else:for i in range(numQueues):allotment[i] = int(options.allotment)hiQueue = numQueues - 1# MLFQ: I/O Model
# the time for each IO: not great to have a single fixed time but...
ioTime = int(options.ioTime)# This tracks when IOs and other interrupts are complete
ioDone = {}# This stores all info about the jobs
job = {}# seed the random generator
random.seed(options.seed)# jlist 'startTime,runTime,ioFreq:startTime,runTime,ioFreq:...'
jobCnt = 0
if options.jlist != '':allJobs = options.jlist.split(':')for j in allJobs:jobInfo = j.split(',')if len(jobInfo) != 3:print('Badly formatted job string. Should be x1,y1,z1:x2,y2,z2:...')print('where x is the startTime, y is the runTime, and z is the I/O frequency.')exit(1)assert(len(jobInfo) == 3)startTime = int(jobInfo[0])runTime   = int(jobInfo[1])ioFreq    = int(jobInfo[2])job[jobCnt] = {'currPri':hiQueue, 'ticksLeft':quantum[hiQueue],'allotLeft':allotment[hiQueue], 'startTime':startTime,'runTime':runTime, 'timeLeft':runTime, 'ioFreq':ioFreq, 'doingIO':False,'firstRun':-1}if startTime not in ioDone:ioDone[startTime] = []ioDone[startTime].append((jobCnt, 'JOB BEGINS'))jobCnt += 1
else:# do something randomfor j in range(options.numJobs):startTime = 0runTime   = int(random.random() * (options.maxlen - 1) + 1)ioFreq    = int(random.random() * (options.maxio - 1) + 1)job[jobCnt] = {'currPri':hiQueue, 'ticksLeft':quantum[hiQueue],'allotLeft':allotment[hiQueue], 'startTime':startTime,'runTime':runTime, 'timeLeft':runTime, 'ioFreq':ioFreq, 'doingIO':False,'firstRun':-1}if startTime not in ioDone:ioDone[startTime] = []ioDone[startTime].append((jobCnt, 'JOB BEGINS'))jobCnt += 1numJobs = len(job)print 'Here is the list of inputs:'
print 'OPTIONS jobs',            numJobs
print 'OPTIONS queues',          numQueues
for i in range(len(quantum)-1,-1,-1):print 'OPTIONS allotments for queue %2d is %3d' % (i, allotment[i])print 'OPTIONS quantum length for queue %2d is %3d' % (i, quantum[i])
print 'OPTIONS boost',           options.boost
print 'OPTIONS ioTime',          options.ioTime
print 'OPTIONS stayAfterIO',     options.stay
print 'OPTIONS iobump',          options.iobumpprint '\n'
print 'For each job, three defining characteristics are given:'
print '  startTime : at what time does the job enter the system'
print '  runTime   : the total CPU time needed by the job to finish'
print '  ioFreq    : every ioFreq time units, the job issues an I/O'
print '              (the I/O takes ioTime units to complete)\n'print 'Job List:'
for i in range(numJobs):print '  Job %2d: startTime %3d - runTime %3d - ioFreq %3d' % (i, job[i]['startTime'],job[i]['runTime'],job[i]['ioFreq'])
print ''if options.solve == False:print 'Compute the execution trace for the given workloads.'print 'If you would like, also compute the response and turnaround'print 'times for each of the jobs.'print ''print 'Use the -c flag to get the exact results when you are finished.\n'exit(0)# initialize the MLFQ queues
queue = {}
for q in range(numQueues):queue[q] = []# TIME IS CENTRAL
currTime = 0# use these to know when we're finished
totalJobs    = len(job)
finishedJobs = 0print '\nExecution Trace:\n'while finishedJobs < totalJobs:# find highest priority job# run it until either# (a) the job uses up its time quantum# (b) the job performs an I/O# check for priority boostif options.boost > 0 and currTime != 0:if currTime % options.boost == 0:print '[ time %d ] BOOST ( every %d )' % (currTime, options.boost)# remove all jobs from queues (except high queue) and put them in high queuefor q in range(numQueues-1):for j in queue[q]:if job[j]['doingIO'] == False:queue[hiQueue].append(j)queue[q] = []# change priority to high priority# reset number of ticks left for all jobs (just for lower jobs?)# add to highest run queue (if not doing I/O)for j in range(numJobs):# print '-> Boost %d (timeLeft %d)' % (j, job[j]['timeLeft'])if job[j]['timeLeft'] > 0:# print '-> FinalBoost %d (timeLeft %d)' % (j, job[j]['timeLeft'])job[j]['currPri']   = hiQueuejob[j]['ticksLeft'] = allotment[hiQueue]# print 'BOOST END: QUEUES look like:', queue# check for any I/Os doneif currTime in ioDone:for (j, type) in ioDone[currTime]:q = job[j]['currPri']job[j]['doingIO'] = Falseprint '[ time %d ] %s by JOB %d' % (currTime, type, j)if options.iobump == False or type == 'JOB BEGINS':queue[q].append(j)else:queue[q].insert(0, j)# now find the highest priority jobcurrQueue = FindQueue()if currQueue == -1:print '[ time %d ] IDLE' % (currTime)currTime += 1continue# there was at least one runnable job, and hence ...currJob = queue[currQueue][0]if job[currJob]['currPri'] != currQueue:Abort('currPri[%d] does not match currQueue[%d]' % (job[currJob]['currPri'], currQueue))job[currJob]['timeLeft']  -= 1job[currJob]['ticksLeft'] -= 1if job[currJob]['firstRun'] == -1:job[currJob]['firstRun'] = currTimerunTime   = job[currJob]['runTime']ioFreq    = job[currJob]['ioFreq']ticksLeft = job[currJob]['ticksLeft']allotLeft = job[currJob]['allotLeft']timeLeft  = job[currJob]['timeLeft']print '[ time %d ] Run JOB %d at PRIORITY %d [ TICKS %d ALLOT %d TIME %d (of %d) ]' % \(currTime, currJob, currQueue, ticksLeft, allotLeft, timeLeft, runTime)if timeLeft < 0:Abort('Error: should never have less than 0 time left to run')# UPDATE TIMEcurrTime += 1# CHECK FOR JOB ENDINGif timeLeft == 0:print '[ time %d ] FINISHED JOB %d' % (currTime, currJob)finishedJobs += 1job[currJob]['endTime'] = currTime# print 'BEFORE POP', queuedone = queue[currQueue].pop(0)# print 'AFTER POP', queueassert(done == currJob)continue# CHECK FOR IOissuedIO = Falseif ioFreq > 0 and (((runTime - timeLeft) % ioFreq) == 0):# time for an IO!print '[ time %d ] IO_START by JOB %d' % (currTime, currJob)issuedIO = Truedesched = queue[currQueue].pop(0)assert(desched == currJob)job[currJob]['doingIO'] = True# this does the bad rule -- reset your tick counter if you stay at the same levelif options.stay == True:job[currJob]['ticksLeft'] = quantum[currQueue]job[currJob]['allotLeft'] = allotment[currQueue]# add to IO Queue: but which queue?futureTime = currTime + ioTimeif futureTime not in ioDone:ioDone[futureTime] = []print 'IO DONE'ioDone[futureTime].append((currJob, 'IO_DONE'))# CHECK FOR QUANTUM ENDING AT THIS LEVEL (BUT REMEMBER, THERE STILL MAY BE ALLOTMENT LEFT)if ticksLeft == 0:if issuedIO == False:# IO HAS NOT BEEN ISSUED (therefor pop from queue)'desched = queue[currQueue].pop(0)assert(desched == currJob)job[currJob]['allotLeft'] = job[currJob]['allotLeft'] - 1if job[currJob]['allotLeft'] == 0:# this job is DONE at this level, so move onif currQueue > 0:# in this case, have to change the priority of the jobjob[currJob]['currPri']   = currQueue - 1job[currJob]['ticksLeft'] = quantum[currQueue-1]job[currJob]['allotLeft'] = allotment[currQueue-1]if issuedIO == False:queue[currQueue-1].append(currJob)else:job[currJob]['ticksLeft'] = quantum[currQueue]job[currJob]['allotLeft'] = allotment[currQueue]if issuedIO == False:queue[currQueue].append(currJob)else:# this job has more time at this level, so just push it to endjob[currJob]['ticksLeft'] = quantum[currQueue]if issuedIO == False:queue[currQueue].append(currJob)# print out statistics
print ''
print 'Final statistics:'
responseSum   = 0
turnaroundSum = 0
for i in range(numJobs):response   = job[i]['firstRun'] - job[i]['startTime']turnaround = job[i]['endTime'] - job[i]['startTime']print '  Job %2d: startTime %3d - response %3d - turnaround %3d' % (i, job[i]['startTime'],response, turnaround)responseSum   += responseturnaroundSum += turnaroundprint '\n  Avg %2d: startTime n/a - response %.2f - turnaround %.2f' % (i, float(responseSum)/numJobs,float(turnaroundSum)/numJobs)print '\n'

如果直接在终端运行,不修改print语句的话,会报这种错误:

可以打开Pycharm,把代码全部复制过去(注意选择Ctrl+Alt+Shift+V,即无格式文本粘贴,不然会出现自动换行现象),然后使用2to3命令:

 

如果没安装的uu可以安装一下

pip install 2to3

然后再Pycharm终端输入:

2to3 -w your_script.py

其中,your_script为你的新py文件名称。

新的py3文件就生成好啦!

#! /usr/bin/env python3import sys
from optparse import OptionParser
import random# finds the highest nonempty queue
# -1 if they are all empty
def FindQueue():q = hiQueuewhile q > 0:if len(queue[q]) > 0:return qq -= 1if len(queue[0]) > 0:return 0return -1def Abort(str):sys.stderr.write(str + '\n')exit(1)#
# PARSE ARGUMENTS
#parser = OptionParser()
parser.add_option('-s', '--seed', help='the random seed',default=0, action='store', type='int', dest='seed')
parser.add_option('-n', '--numQueues',help='number of queues in MLFQ (if not using -Q)',default=3, action='store', type='int', dest='numQueues')
parser.add_option('-q', '--quantum', help='length of time slice (if not using -Q)',default=10, action='store', type='int', dest='quantum')
parser.add_option('-a', '--allotment', help='length of allotment (if not using -A)',default=1, action='store', type='int', dest='allotment')
parser.add_option('-Q', '--quantumList',help='length of time slice per queue level, specified as ' + \'x,y,z,... where x is the quantum length for the highest ' + \'priority queue, y the next highest, and so forth',default='', action='store', type='string', dest='quantumList')
parser.add_option('-A', '--allotmentList',help='length of time allotment per queue level, specified as ' + \'x,y,z,... where x is the # of time slices for the highest ' + \'priority queue, y the next highest, and so forth',default='', action='store', type='string', dest='allotmentList')
parser.add_option('-j', '--numJobs', default=3, help='number of jobs in the system',action='store', type='int', dest='numJobs')
parser.add_option('-m', '--maxlen', default=100, help='max run-time of a job ' +'(if randomly generating)', action='store', type='int',dest='maxlen')
parser.add_option('-M', '--maxio', default=10,help='max I/O frequency of a job (if randomly generating)',action='store', type='int', dest='maxio')
parser.add_option('-B', '--boost', default=0,help='how often to boost the priority of all jobs back to ' +'high priority', action='store', type='int', dest='boost')
parser.add_option('-i', '--iotime', default=5,help='how long an I/O should last (fixed constant)',action='store', type='int', dest='ioTime')
parser.add_option('-S', '--stay', default=False,help='reset and stay at same priority level when issuing I/O',action='store_true', dest='stay')
parser.add_option('-I', '--iobump', default=False,help='if specified, jobs that finished I/O move immediately ' + \'to front of current queue',action='store_true', dest='iobump')
parser.add_option('-l', '--jlist', default='',help='a comma-separated list of jobs to run, in the form ' + \'x1,y1,z1:x2,y2,z2:... where x is start time, y is run ' + \'time, and z is how often the job issues an I/O request',action='store', type='string', dest='jlist')
parser.add_option('-c', help='compute answers for me', action='store_true',default=False, dest='solve')(options, args) = parser.parse_args()random.seed(options.seed)# MLFQ: How Many Queues
numQueues = options.numQueuesquantum = {}
if options.quantumList != '':# instead, extract number of queues and their time slicquantumLengths = options.quantumList.split(',')numQueues = len(quantumLengths)qc = numQueues - 1for i in range(numQueues):quantum[qc] = int(quantumLengths[i])qc -= 1
else:for i in range(numQueues):quantum[i] = int(options.quantum)allotment = {}
if options.allotmentList != '':allotmentLengths = options.allotmentList.split(',')if numQueues != len(allotmentLengths):print('number of allotments specified must match number of quantums')exit(1)qc = numQueues - 1for i in range(numQueues):allotment[qc] = int(allotmentLengths[i])if qc != 0 and allotment[qc] <= 0:print('allotment must be positive integer')exit(1)qc -= 1
else:for i in range(numQueues):allotment[i] = int(options.allotment)hiQueue = numQueues - 1# MLFQ: I/O Model
# the time for each IO: not great to have a single fixed time but...
ioTime = int(options.ioTime)# This tracks when IOs and other interrupts are complete
ioDone = {}# This stores all info about the jobs
job = {}# seed the random generator
random.seed(options.seed)# jlist 'startTime,runTime,ioFreq:startTime,runTime,ioFreq:...'
jobCnt = 0
if options.jlist != '':allJobs = options.jlist.split(':')for j in allJobs:jobInfo = j.split(',')if len(jobInfo) != 3:print('Badly formatted job string. Should be x1,y1,z1:x2,y2,z2:...')print('where x is the startTime, y is the runTime, and z is the I/O frequency.')exit(1)assert(len(jobInfo) == 3)startTime = int(jobInfo[0])runTime   = int(jobInfo[1])ioFreq    = int(jobInfo[2])job[jobCnt] = {'currPri':hiQueue, 'ticksLeft':quantum[hiQueue],'allotLeft':allotment[hiQueue], 'startTime':startTime,'runTime':runTime, 'timeLeft':runTime, 'ioFreq':ioFreq, 'doingIO':False,'firstRun':-1}if startTime not in ioDone:ioDone[startTime] = []ioDone[startTime].append((jobCnt, 'JOB BEGINS'))jobCnt += 1
else:# do something randomfor j in range(options.numJobs):startTime = 0runTime   = int(random.random() * (options.maxlen - 1) + 1)ioFreq    = int(random.random() * (options.maxio - 1) + 1)job[jobCnt] = {'currPri':hiQueue, 'ticksLeft':quantum[hiQueue],'allotLeft':allotment[hiQueue], 'startTime':startTime,'runTime':runTime, 'timeLeft':runTime, 'ioFreq':ioFreq, 'doingIO':False,'firstRun':-1}if startTime not in ioDone:ioDone[startTime] = []ioDone[startTime].append((jobCnt, 'JOB BEGINS'))jobCnt += 1numJobs = len(job)print('Here is the list of inputs:')
print('OPTIONS jobs',            numJobs)
print('OPTIONS queues',          numQueues)
for i in range(len(quantum)-1,-1,-1):print('OPTIONS allotments for queue %2d is %3d' % (i, allotment[i]))print('OPTIONS quantum length for queue %2d is %3d' % (i, quantum[i]))
print('OPTIONS boost',           options.boost)
print('OPTIONS ioTime',          options.ioTime)
print('OPTIONS stayAfterIO',     options.stay)
print('OPTIONS iobump',          options.iobump)print('\n')
print('For each job, three defining characteristics are given:')
print('  startTime : at what time does the job enter the system')
print('  runTime   : the total CPU time needed by the job to finish')
print('  ioFreq    : every ioFreq time units, the job issues an I/O')
print('              (the I/O takes ioTime units to complete)\n')print('Job List:')
for i in range(numJobs):print('  Job %2d: startTime %3d - runTime %3d - ioFreq %3d' % (i, job[i]['startTime'],job[i]['runTime'],job[i]['ioFreq']))
print('')if options.solve == False:print('Compute the execution trace for the given workloads.')print('If you would like, also compute the response and turnaround')print('times for each of the jobs.')print('')print('Use the -c flag to get the exact results when you are finished.\n')exit(0)# initialize the MLFQ queues
queue = {}
for q in range(numQueues):queue[q] = []# TIME IS CENTRAL
currTime = 0# use these to know when we're finished
totalJobs    = len(job)
finishedJobs = 0print('\nExecution Trace:\n')while finishedJobs < totalJobs:# find highest priority job# run it until either# (a) the job uses up its time quantum# (b) the job performs an I/O# check for priority boostif options.boost > 0 and currTime != 0:if currTime % options.boost == 0:print('[ time %d ] BOOST ( every %d )' % (currTime, options.boost))# remove all jobs from queues (except high queue) and put them in high queuefor q in range(numQueues-1):for j in queue[q]:if job[j]['doingIO'] == False:queue[hiQueue].append(j)queue[q] = []# change priority to high priority# reset number of ticks left for all jobs (just for lower jobs?)# add to highest run queue (if not doing I/O)for j in range(numJobs):# print '-> Boost %d (timeLeft %d)' % (j, job[j]['timeLeft'])if job[j]['timeLeft'] > 0:# print '-> FinalBoost %d (timeLeft %d)' % (j, job[j]['timeLeft'])job[j]['currPri']   = hiQueuejob[j]['ticksLeft'] = allotment[hiQueue]# print 'BOOST END: QUEUES look like:', queue# check for any I/Os doneif currTime in ioDone:for (j, type) in ioDone[currTime]:q = job[j]['currPri']job[j]['doingIO'] = Falseprint('[ time %d ] %s by JOB %d' % (currTime, type, j))if options.iobump == False or type == 'JOB BEGINS':queue[q].append(j)else:queue[q].insert(0, j)# now find the highest priority jobcurrQueue = FindQueue()if currQueue == -1:print('[ time %d ] IDLE' % (currTime))currTime += 1continue# there was at least one runnable job, and hence ...currJob = queue[currQueue][0]if job[currJob]['currPri'] != currQueue:Abort('currPri[%d] does not match currQueue[%d]' % (job[currJob]['currPri'], currQueue))job[currJob]['timeLeft']  -= 1job[currJob]['ticksLeft'] -= 1if job[currJob]['firstRun'] == -1:job[currJob]['firstRun'] = currTimerunTime   = job[currJob]['runTime']ioFreq    = job[currJob]['ioFreq']ticksLeft = job[currJob]['ticksLeft']allotLeft = job[currJob]['allotLeft']timeLeft  = job[currJob]['timeLeft']print('[ time %d ] Run JOB %d at PRIORITY %d [ TICKS %d ALLOT %d TIME %d (of %d) ]' % \(currTime, currJob, currQueue, ticksLeft, allotLeft, timeLeft, runTime))if timeLeft < 0:Abort('Error: should never have less than 0 time left to run')# UPDATE TIMEcurrTime += 1# CHECK FOR JOB ENDINGif timeLeft == 0:print('[ time %d ] FINISHED JOB %d' % (currTime, currJob))finishedJobs += 1job[currJob]['endTime'] = currTime# print 'BEFORE POP', queuedone = queue[currQueue].pop(0)# print 'AFTER POP', queueassert(done == currJob)continue# CHECK FOR IOissuedIO = Falseif ioFreq > 0 and (((runTime - timeLeft) % ioFreq) == 0):# time for an IO!print('[ time %d ] IO_START by JOB %d' % (currTime, currJob))issuedIO = Truedesched = queue[currQueue].pop(0)assert(desched == currJob)job[currJob]['doingIO'] = True# this does the bad rule -- reset your tick counter if you stay at the same levelif options.stay == True:job[currJob]['ticksLeft'] = quantum[currQueue]job[currJob]['allotLeft'] = allotment[currQueue]# add to IO Queue: but which queue?futureTime = currTime + ioTimeif futureTime not in ioDone:ioDone[futureTime] = []print('IO DONE')ioDone[futureTime].append((currJob, 'IO_DONE'))# CHECK FOR QUANTUM ENDING AT THIS LEVEL (BUT REMEMBER, THERE STILL MAY BE ALLOTMENT LEFT)if ticksLeft == 0:if issuedIO == False:# IO HAS NOT BEEN ISSUED (therefor pop from queue)'desched = queue[currQueue].pop(0)assert(desched == currJob)job[currJob]['allotLeft'] = job[currJob]['allotLeft'] - 1if job[currJob]['allotLeft'] == 0:# this job is DONE at this level, so move onif currQueue > 0:# in this case, have to change the priority of the jobjob[currJob]['currPri']   = currQueue - 1job[currJob]['ticksLeft'] = quantum[currQueue-1]job[currJob]['allotLeft'] = allotment[currQueue-1]if issuedIO == False:queue[currQueue-1].append(currJob)else:job[currJob]['ticksLeft'] = quantum[currQueue]job[currJob]['allotLeft'] = allotment[currQueue]if issuedIO == False:queue[currQueue].append(currJob)else:# this job has more time at this level, so just push it to endjob[currJob]['ticksLeft'] = quantum[currQueue]if issuedIO == False:queue[currQueue].append(currJob)# print out statistics
print('')
print('Final statistics:')
responseSum   = 0
turnaroundSum = 0
for i in range(numJobs):response   = job[i]['firstRun'] - job[i]['startTime']turnaround = job[i]['endTime'] - job[i]['startTime']print('  Job %2d: startTime %3d - response %3d - turnaround %3d' % (i, job[i]['startTime'],response, turnaround))responseSum   += responseturnaroundSum += turnaroundprint('\n  Avg %2d: startTime n/a - response %.2f - turnaround %.2f' % (i,float(responseSum)/numJobs,float(turnaroundSum)/numJobs))print('\n')

这篇关于操作系统导论-py2文件修改为py3文件快捷解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855754

相关文章

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

CentOS 7部署主域名服务器 DNS的方法

《CentOS7部署主域名服务器DNS的方法》文章详细介绍了在CentOS7上部署主域名服务器DNS的步骤,包括安装BIND服务、配置DNS服务、添加域名区域、创建区域文件、配置反向解析、检查配置... 目录1. 安装 BIND 服务和工具2.  配置 BIND 服务3 . 添加你的域名区域配置4.创建区域