代写 用C++写,9月5

用C++写,9月5
Assignment 1
本作业的目的是提高您在过程调度算法方面的学习经验。你需要为库伯斯体育场设计一个在线售票系统。具体来说,有两个座位区:红色区域用于通过该系统进行公众预订;非红色区域,可通过热线预订。图1显示了座椅部分的分布。
在该系统中,所有的客户根据他们对该票务系统的忠诚度(累计积分)分为7个优先级(数字),从1到7不等。优先级越小表示优先级越高。所有由客户创建的票务流程(购买/取消)都被分配与该客户具有相同优先级的编号。为了最大化系统服务性能,您需要使用具有两个队列的多级队列策略实现调度算法:高优先级队列1和低优先级队列2。队列1比队列2具有绝对优先级。换句话说,只有在队列1中没有客户时,才会处理队列2中的客户请求。有一个阈值(=3)用于确定客户应该留在队列1(优先级数≤阈值)还是队列2(优先级数>阈值)。这两个队列的具体操作如下:
队列1:这是高优先级队列(优先级数≤阈值)。这个队列中的客户按照优先级组合最高优先级First (HPF)和加权轮询(WRR -定义见下文)的方式处理,如下所示:选择优先级最高的客户
Figure 1: Stadium Map.
(具有相同优先级的客户在他们的到达顺序中被处理),然后处理这个
客户要求的机票配额为N =加权时间量子票,非先发制人,然后5个时间单位
将该客户移动到队列1的末尾,其优先级降低1(即,优先级增加1),这里我们假设:
•加权时间量=(8 -客户优先数)×10个时间单位。•一张票需要5个时间单位来处理。
•客户的优先级编号是客户当前的优先级编号。
加权循环(WRR):给定n个进程P1, P2,…,Pn,其中process Pi的权值wi(1≤i≤n), WRR分配Pi一个加权时间量wi时间单位(即a股) (i.e. a share of
在这里,为了简化实现,客户的权重为(8 -客户的优先级编号),客户的优先级编号为客户当前的优先级编号。
相同优先级的客户按他们的到达顺序处理。该队列中客户的优先级每运行该客户3次降低1次,即当客户在当前优先级下被处理3次时,其优先级号将增加1。当客户的优先级数字超过阈值(=3)时,它将从队列1降级为队列2。
例如,此队列的优先级2号是减少了一个运行的客户,即一旦预订第N =(8−2)∗10/5 = 12票优先将成为3和机票配额下运行将书N =(8−3)∗10/5 = 10票(而不是12在首次运行)。
队列2:这是低优先级队列(优先级编号>阈值)。这个队列中的客户是循环处理的。也就是说,选择具有先到先得服务的客户,并先发制人地处理该客户对固定时间量20张票(= 20个时间单位)的请求(针对任何从队列1降级的客户),然后将该客户移动到队列2的末尾。注意:当队列中正在运行的客户X被从队列1降级的新客户中断时,客户X将立即离开他/她的时间量,新降级的客户将获得运行CPU的机会。如果通过以下老化机制,此队列中的客户的优先级数量等于或低于阈值(=3),则该客户将从队列2提升到队列1。
老化机制由于队列1优先于队列2,并且使用HPF策略,可能会发生饥饿。也就是说,队列2中的一些客户可能永远无法运行,因为队列1中总是有优先级更高的作业。要解决饥饿问题,您必须实现一种使每个客户年龄变大的机制。这并不需要在每次客户运行时都执行,因为这样会降低系统的运行速度,而是说每9个客户执行一次。也就是说,如果一个客户自上次运行以来已经等待了其他客户的8次运行(被中断的客户被计算为一次运行),那么他/她的优先级号将减少1。这样,队列2中每个客户的优先级数量就会随着最后一次运行以来的等待时间逐渐减少。
注意:可能存在具有相同优先级的三个客户同时到达的数量()的priority-subqueue队列1:新客户到来队列1,客户B的优先级队列1年底搬到队列1 (weighted round – Robin),和提升客户C从队列2队列。在这种情况下,队列1中的(执行)顺序将是A→B→c。
Test Input
每个客户由输入文件中的一行标识。这一行描述了客户ID、到达时间、优先级、年龄和所需的总机票。例如,s1 31 0 50描述了一个客户s1,该客户在时间3时到达,优先级为1,年龄为0,需要50张票。一次票务处理消耗一个时间单位。
Output
输出提供了每个客户执行的信息。该行从客户ID、到达和终止时间、准备时间(系统第一次处理他/她的请求)以及运行和等待的时间开始。