操作系统导论-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

相关文章

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Mysql如何解决死锁问题

《Mysql如何解决死锁问题》:本文主要介绍Mysql如何解决死锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录【一】mysql中锁分类和加锁情况【1】按锁的粒度分类全局锁表级锁行级锁【2】按锁的模式分类【二】加锁方式的影响因素【三】Mysql的死锁情况【1

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

SpringBoot内嵌Tomcat临时目录问题及解决

《SpringBoot内嵌Tomcat临时目录问题及解决》:本文主要介绍SpringBoot内嵌Tomcat临时目录问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录SprinjavascriptgBoot内嵌Tomcat临时目录问题1.背景2.方案3.代码中配置t

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4: