📌  相关文章
📜  具有不同到达时间的优先级CPU调度–设置2

📅  最后修改于: 2021-04-24 04:42:02             🧑  作者: Mango

先决条件–优先级计划程序–第1集

优先级调度是一种非抢占式算法,是批处理系统中最常见的调度算法之一。如果两个进程具有相同的到达时间,则为每个进程分配第一个到达时间(首先减少到达时间的进程),然后将其与优先级进行比较(首先是最高进程)。同样,如果两个进程具有相同的优先级,则将其与进程号进行比较(首先减少进程号)。在执行所有过程的同时重复此过程。

执行 –

  1. 首先输入进程的到达时间,突发时间和优先级。
  2. 如果两个进程的到达时间相同,则根据到达时间对进程进行排序,如果两个进程的优先级相同,则根据进程优先级进行排序,然后根据进程号进行排序。
  3. 现在只需应用FCFS算法。


甘特图 –

例子 –

Input :
process no-> 1 2 3 4 5 
arrival time-> 0 1 3 2 4
burst time-> 3 6 1 2 4
priority-> 3 4 9 7 8
Output :
Process_no Start_time Complete_time Trun_Around_Time Wating_Time
1          0           3            3           0
2          3           9            8           2
4          9           11           9           7
3          11          12           9           8
5          12          16           12          8
Average Wating Time is : 5.0
Average Trun Around time is : 8.2

C++
// C++ implementation for Priority Scheduling with 
//Different Arrival Time priority scheduling
/*1. sort the processes according to arrival time 
2. if arrival time is same the acc to priority
3. apply fcfs
*/
  
#include 
  
using namespace std;
  
#define totalprocess 5
  
// Making a struct to hold the given input 
  
struct process
{
int at,bt,pr,pno;
};
  
process proc[50];
  
/*
Writing comparator function to sort according to priority if 
arrival time is same 
*/
  
bool comp(process a,process b)
{
if(a.at == b.at)
{
return a.pr


Java
// Java implementation for Priority Scheduling with 
//Different Arrival Time priority scheduling
import java.util.*;
  
/// Data Structure
class Process {
    int at, bt, pri, pno;
    Process(int pno, int at, int bt, int pri)
    {
        this.pno = pno;
        this.pri = pri;
        this.at = at;
        this.bt = bt;
    }
}
  
/// Gantt chart structure
class GChart {
    // process number, start time, complete time,
    // turn around time, waiting time
    int pno, stime, ctime, wtime, ttime;
}
  
// user define comparative method (first arrival first serve,
// if arrival time same then heigh priority first)
class MyComparator implements Comparator {
  
    public int compare(Object o1, Object o2)
    {
  
        Process p1 = (Process)o1;
        Process p2 = (Process)o2;
        if (p1.at < p2.at)
            return (-1);
  
        else if (p1.at == p2.at && p1.pri > p2.pri)
            return (-1);
  
        else
            return (1);
    }
}
  
  
// class to find Gantt chart
class FindGantChart {
    void findGc(LinkedList queue)
    {
  
        // initial time = 0
        int time = 0;
  
        // priority Queue sort data according
        // to arrival time or priority (ready queue)
        TreeSet prique = new TreeSet(new MyComparator());
  
        // link list for store processes data
        LinkedList result = new LinkedList();
  
        // process in ready queue from new state queue
        while (queue.size() > 0)
            prique.add((Process)queue.removeFirst());
  
        Iterator it = prique.iterator();
  
        // time set to according to first process
        time = ((Process)prique.first()).at;
  
        // scheduling process
        while (it.hasNext()) {
  
            // dispatcher dispatch the
            // process ready to running state
            Process obj = (Process)it.next();
  
            GChart gc1 = new GChart();
            gc1.pno = obj.pno;
            gc1.stime = time;
            time += obj.bt;
            gc1.ctime = time;
            gc1.ttime = gc1.ctime - obj.at;
            gc1.wtime = gc1.ttime - obj.bt;
  
            /// store the exxtreted process
            result.add(gc1);
        }
  
        // create object of output class and call method
        new ResultOutput(result);
    }
}


Python3
# Python3 implementation for Priority Scheduling with 
# Different Arrival Time priority scheduling 
"""1. sort the processes according to arrival time 
   2. if arrival time is same the acc to priority 
   3. apply fcfs """
   
totalprocess = 5
proc = []
for i in range(5):
    l = []
    for j in range(4):
        l.append(0)
    proc.append(l)
  
# Using FCFS Algorithm to find Waiting time 
def get_wt_time( wt): 
  
    # declaring service array that stores
    # cumulative burst time 
    service = [0] * 5
  
    # Initilising initial elements 
    # of the arrays 
    service[0] = 0
    wt[0] = 0
  
    for i in range(1, totalprocess): 
        service[i] = proc[i - 1][1] + service[i - 1] 
        wt[i] = service[i] - proc[i][0] + 1
  
        # If waiting time is negative,
        # change it o zero 
        if(wt[i] < 0) :     
            wt[i] = 0
          
def get_tat_time(tat, wt): 
  
    # Filling turnaroundtime array 
    for i in range(totalprocess):
        tat[i] = proc[i][1] + wt[i] 
  
def findgc():
      
    # Declare waiting time and
    # turnaround time array 
    wt = [0] * 5
    tat = [0] * 5
  
    wavg = 0
    tavg = 0
  
    # Function call to find waiting time array 
    get_wt_time(wt) 
      
    # Function call to find turnaround time 
    get_tat_time(tat, wt) 
  
    stime = [0] * 5
    ctime = [0] * 5
    stime[0] = 1
    ctime[0] = stime[0] + tat[0]
      
    # calculating starting and ending time 
    for i in range(1, totalprocess): 
        stime[i] = ctime[i - 1] 
        ctime[i] = stime[i] + tat[i] - wt[i] 
  
    print("Process_no\tStart_time\tComplete_time",
               "\tTurn_Around_Time\tWaiting_Time")
  
    # display the process details 
    for i in range(totalprocess):
        wavg += wt[i] 
        tavg += tat[i] 
          
        print(proc[i][3], "\t\t", stime[i], 
                         "\t\t", end = " ")
        print(ctime[i], "\t\t", tat[i], "\t\t\t", wt[i]) 
  
  
    # display the average waiting time 
    # and average turn around time 
    print("Average waiting time is : ", end = " ")
    print(wavg / totalprocess)
    print("average turnaround time : " , end = " ")
    print(tavg / totalprocess)
  
# Driver code 
if __name__ =="__main__":
    arrivaltime = [1, 2, 3, 4, 5]
    bursttime = [3, 5, 1, 7, 4]
    priority = [3, 4, 1, 7, 8] 
      
    for i in range(totalprocess): 
  
        proc[i][0] = arrivaltime[i] 
        proc[i][1] = bursttime[i] 
        proc[i][2] = priority[i] 
        proc[i][3] = i + 1
      
    # Using inbuilt sort function 
    proc = sorted (proc, key = lambda x:x[2])
    proc = sorted (proc)
      
    # Calling function findgc for
    # finding Gantt Chart 
    findgc() 
  
# This code is contributed by
# Shubham Singh(SHUBHAMSINGH10)


输出:

Process_no Start_time Complete_time Trun_Around_Time Wating_Time
1           1           4              3            0
2           4           9              7            2
3           9           10             7            6
4          10           17             13           6
5          17           21             16           12
Average Wating Time is : 5.2
Average Trun Around time is : 9.2