繁体   English   中英

调度算法中到达时间大于突发时间时等待时间返回负值

[英]Wait time returns minus value when arrival time is bigger than burst time in scheduling algorithm

我正在尝试在 C 中实现 FCFS 调度算法,并且我创建了时间间隔,直到用户进入另一个进程。 下面是代码,下面几行将显示我想问的实际问题。

#include <stdio.h>
#include <time.h>

#define MAX 50

struct ProcessControlBlock{

    int processID;
    int burstTime;
    int arrivalTime; 
    int turnAround;

};

void main(){

    int terminateController=1;
    int inputCheck;
    int processIndex = 0;
    struct ProcessControlBlock processControlBlocks[MAX];
    time_t beginTime = time(NULL);
    while(terminateController!=0){


        printf("If you want to enter a process, please press 1: ");
        scanf("%d",&inputCheck);

        time_t endTime = time(NULL);
        if(inputCheck==1){
            printf("The arrival time of the process is %d\n",(endTime-beginTime));
            processControlBlocks[processIndex].processID = processIndex;
            processControlBlocks[processIndex].arrivalTime = endTime-beginTime;
            printf("Process ID is: %d\n", processControlBlocks[processIndex].processID);
            printf("Enter the burst time of the process: ");
            scanf("%d",&processControlBlocks[processIndex].burstTime);
            printf("Waiting time of the process is: %d\n",(processControlBlocks[processIndex].burstTime-processControlBlocks[processIndex].arrivalTime));
        }

        printf("If you want to continue to add process, please press 1: ");
        scanf("%d",&terminateController);
        processIndex++;
    }

}

因此,例如,当用户等待第二个进程进入时,时间到达假设为 12 秒。 如果进程的突发时间为 8 秒,则等待时间将为 -4 秒,这没有任何意义。 那么,我犯了什么错误或者我错过了什么?

我认为您只对每个流程用户输入的wait-timeschedule-timeturn-around-time感兴趣。 然后也许average-wait-time & average-turn-around-time
用户可能需要几秒钟来输入process-details ,就像你的情况决定继续两次是否继续然后输入burst-time

您可以实施实时模拟,但跟踪和验证这些统计数据变得乏味。 相反,您为一组流程准备测试数据并与预期结果相符。 所以我们事先需要的细节:

  • 进程号
  • 到达时间(process-#1 为方便起见从 0 开始)
  • 入场顺序(到达时间相同时)
  • 突发时间(需要 CPU 运行其例程的时间)
  • 因为这是 FCFS,所以没有进程的优先权和优先权。

然后按(到达时间和进入顺序)对列表进行排序,并为每个进程处理列表计算:

  • 等待时间
  • 预定时间
  • 周转时间
  • 列表的平均等待时间
  • 列表的平均周转时间

您将其与其他调度算法进行比较,它对进程有多公平。

下面是一对 C 的实现:

FCFS 调度按照 FIFO 原则工作,就像队列一样。 进程根据到达时间加入队列,根据队列中position、等待时间和执行时间移除。 等待时间取决于队列中前一个进程的退出时间(如果有的话),要计算它,您必须跟踪队列中所有进程的到达时间、执行时间和等待时间。

例子:

Timer started at 00:00:00
_____
1/ process 1 arrived at 00:00:03 | exec time 10s | waiting time  0s | exit 00:00:13
2/ process 2 arrived at 00:00:05 | exec time  8s | waiting time  8s | exit 00:00:21
3/ process 3 arrived at 00:00:08 | exec time  5s | waiting time 13s | exit 00:00:26

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM