操作系统导论-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日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

python 线程池顺序执行的方法实现

《python线程池顺序执行的方法实现》在Python中,线程池默认是并发执行任务的,但若需要实现任务的顺序执行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录方案一:强制单线程(伪顺序执行)方案二:按提交顺序获取结果方案三:任务间依赖控制方案四:队列顺序消

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

C#高效实现Word文档内容查找与替换的6种方法

《C#高效实现Word文档内容查找与替换的6种方法》在日常文档处理工作中,尤其是面对大型Word文档时,手动查找、替换文本往往既耗时又容易出错,本文整理了C#查找与替换Word内容的6种方法,大家可以... 目录环境准备方法一:查找文本并替换为新文本方法二:使用正则表达式查找并替换文本方法三:将文本替换为图

SQL Server 查询数据库及数据文件大小的方法

《SQLServer查询数据库及数据文件大小的方法》文章介绍了查询数据库大小的SQL方法及存储过程实现,涵盖当前数据库、所有数据库的总大小及文件明细,本文结合实例代码给大家介绍的非常详细,感兴趣的... 目录1. 直接使用SQL1.1 查询当前数据库大小1.2 查询所有数据库的大小1.3 查询每个数据库的详