1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Facing problem with the quantum time! Can't change the value.

Discussion in 'C' started by Juzaguy, Aug 31, 2010.

  1. Juzaguy

    Juzaguy New Member

    Joined:
    Aug 31, 2010
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Code:
    /* Round Robin [URL=http://www.go4expert.com/articles/types-of-scheduling-t22307/]Scheduling[/URL] Simulation*/
    
    
    //////////////////////////////////////////////////////////////////////////
    
    /* Process Data Structure */
    struct process {
    int pid; /* Process ID */
    int burst; /* CPU Burst Time */
    
    int priority; /* Priority */
    int working; /* Working time, for round-robin scheduling */
    int waiting; /* Waiting time, for round-robin scheduling */
    
    struct process *next;
    };
    //////////////////////////////////////////////////////////////////////////
    /* Function Prototype Declarations */
    struct process *init_process (int pid, int burst, int priority);
    
    void listprocs (struct process *proc);
    void rr (struct process *proc, int quantum);
    //////////////////////////////////////////////////////////////////////////
    
    /* Main Program Segment */
    int main (void) {
    /* Initialize process list */
    struct process *plist, *ptmp;
    
    plist = init_process(1, 10, 6);
    plist->next = init_process(2, 12, 4); ptmp = plist->next;
    
    ptmp->next = init_process(3, 7, 1); ptmp = ptmp->next;
    ptmp->next = init_process(4, 8, 3); ptmp = ptmp->next;
    
    ptmp->next = init_process(5, 5, 2);
    //////////////////////////////////////////////////////////////////////////
    /* Perform simulations */
    
    listprocs(plist);
    rr(plist, [COLOR=Red]2)[/COLOR];
    /* Terminate cleanly */
    while (plist != NULL) {
    ptmp = plist;
    plist = plist->next;
    free(ptmp);
    };
    
    return(0);
    };
    //////////////////////////////////////////////////////////////////////////
    /* Process list entry initialization routine */
    
    struct process *init_process (int pid, int burst, int priority) {
    struct process *proc;
    proc = (struct process*)malloc(sizeof(struct process));
    
    if (proc == NULL) {
    printf("Fatal error: memory allocation failure.\nTerminating.\n");
    exit(1);
    };
    proc->pid = pid;
    proc->burst = burst;
    
    proc->priority = priority;
    proc->working = 0;
    proc->waiting = 0;
    proc->next = NULL;
    return(proc);
    };
    //////////////////////////////////////////////////////////////////////////
    
    /* Process listing */
    void listprocs (struct process *proc) {
    struct process *tmp = proc;
    
    printf("BEGIN:\tProcess Listing\n");
    
    while (tmp != NULL) {
    printf("PID: %d\t\tPriority: %d\tBurst: %d\n", tmp->pid, tmp->priority, tmp->burst);
    tmp = tmp->next;
    };
    
    printf("END:\tProcess Listing\n\n");
    
    };
    //////////////////////////////////////////////////////////////////////////
    /* Round-Robin scheduling simulation */
    void rr (struct process *proc, int quantum) {
    
    int jobsremain, passes;
    struct process *copy, *tmpsrc, *tmp, *slot;
    
    printf("BEGIN:\tRound-Robin scheduling simulation (Quantum: %d)\n", quantum);
    
    /* Duplicate process list */
    tmpsrc = proc;
    copy = tmp = NULL;
    while (tmpsrc != NULL) {
    if (copy == NULL) {
    copy = init_process(tmpsrc->pid, tmpsrc->burst, tmpsrc->priority);
    
    tmp = copy;
    } else {
    tmp->next = init_process(tmpsrc->pid, tmpsrc->burst, tmpsrc->priority);
    tmp = tmp->next;
    };
    tmpsrc = tmpsrc->next;
    };
    //////////////////////////////////////////////////////////////////////////
    
    /* Main routine */
    jobsremain = 1;
    slot = NULL;
    while (jobsremain) {
    jobsremain = 0;
    //////////////////////////////////////////////////////////////////////////
    
    /* Pick next working slot */
    if (slot == NULL) {
    slot = copy;
    jobsremain = 1;
    } else {
    passes = 0;
    
    do {
    if (slot->next == NULL) {
    passes++;
    slot = copy;
    } else {
    slot = slot->next;
    };
    } while (passes burst == slot->working);
    
    if (passes burst > tmp->working) {
    if (tmp == slot) {
    tmp->working += quantum;
    } else {
    
    tmp->waiting += quantum;
    };
    };
    tmp = tmp->next;
    };
    };
    //////////////////////////////////////////////////////////////////////////
    /* Display statistics and clean up copy */
    
    tmp = copy;
    while (tmp != NULL) {
    printf("Process: %d\tWorking: %d\tWaiting: %d\tTurnaround: %d\n", tmp->pid, tmp->working, tmp->waiting, tmp->working + tmp->waiting);
    
    tmpsrc = tmp;
    tmp = tmp->next;
    free(tmpsrc);
    };
    
    printf("END:\tRR scheduling simulation\n\n");
    };
    Whenever i try to change to 2 or other numbers the program will not display the result. It can only display quantum time = 1.

    Can anyone help me with this problem??
     

Share This Page