java, الگوریتم زمان‌بندی, جاوا

الگوریتم زمانبندی FCFS در جاوا (First Come First Serve)

الگوریتم زمانبندی FCFS در جاوا

در این قسمت ما را با آموزش الگوریتم زمانبندی FCFS در جاوا همراهی کنید. الگوریتم‌های زمانبندی برای تخصیص CPU به یک فرآیند استفاده می‌شوند. در این آموزش به نحوه پیاده‌سازی الگوریتم زمانبندی FCFS خواهیم پرداخت. همچنین با توجه به نحوه پیاده سازی کد این الگوریتم، پیشنهاد می‌کنیم پیش‌نیازهای زیر را مطالعه کنید:

  1. آشنایی با متد در جاوا
  2. آشنایی با حلقه for در جاوا
  3. آشنایی با آرایه در جاوا

الگوریتم زمانبندی FCFS

الگوریتم First Come First Served یا به اختصار FCFS یکی از ساده‌ترین الگوریتم‌های زمانبندی است. این الگوریتم به فرآیند‌های ورودی، به ترتیب، CPU اختصاص می‌دهد. هر فرآیندی زودتر وارد شود زودتر به آن CPU اختصاص داده خواهد شد. در این الگوریتم برای هر فرآیند پارامترهای زیر تعریف می‌شود:

  • Completion Time : زمانی که یک فرآیند به اتمام می‌رسد.
  • Arrival Time : زمانی که یک فرآیند وارد صف نوبت دهی CPU می‌شود.
  • Burst Time : مدت زمان مورد نیاز یک فرآیند برای اجرا در CPU .
  • Turn Around Time : اختلاف زمانی بین Completion Time و Arrival Time .
  • Waiting Time : اختلاف زمانی بین Turn Around Time و Burst Time .

فرمول‌های زیر برای هر فرآیند می‌توان تعریف کرد:

Turn Around Time = Completion Time – Arrival Time;

Waiting Time = Turn Around Time – Burst Time;

الگوریتم زمانبندی FCFS در جاوا

برای پیاده سازی FCFS ابتدا دو پارامتر Arrival Time و Burst Time را باید به عنوان ورودی به برنامه بدهیم در خروچی Completion Time و Turn Around Time و Waiting Time را چاپ می‌کنیم. پیاده سازی این برنامه به صورت  Non-Preemptive می‌باشد. کد الگوریتم زمانبندی FCFS در جاوا به صورت زیر می‌باشد:

public class FCFS {
	static void findWaitingTime
(int processes[], int n, int bt[], int wt[]
			, int at[]) {
		int service_time[] = new int[n];
		service_time[0] = 0;
		wt[0] = 0;
		for (int i = 1; i < n; i++) {
			service_time[i]
 = service_time[i - 1] + bt[i - 1];
			wt[i] = service_time[i] - at[i];
			if (wt[i] < 0)
				wt[i] = 0;
		}
	}
	static void findTurnAroundTime
(int processes[], int n, int bt[],
			int wt[], int tat[]) {
		for (int i = 0; i < n; i++)
			tat[i] = bt[i] + wt[i];
	}
	static void findavgTime
(int n, int wt[], int tat[]) {
		int total_wt = 0, total_tat = 0;
		for (int i = 0; i < n; i++) {
			total_wt = total_wt + wt[i];
			total_tat = total_tat + tat[i];
		}
		System.out.print("Average waiting time
 = " + (float) total_wt / (float) n);
		System.out.print("\nAverage turn around time 
= " + (float) total_tat / (float) n);
	}
	public static void Display
(int n, int[] burst_time, int[] arrival_time,
			int[] wt, int[] tat) {
		System.out.print("Processes " 
+ " Burst Time " + " Arrival Time " +
	" Waiting Time " + " Turn-Around Time "
				+ " Completion Time \n");
		for (int i = 0; i < n; i++) {
			int compl_time = tat[i] + arrival_time[i];
			System.out.println(i + 1 + "\t\t" +
 burst_time[i] + "\t\t" + arrival_time[i]
					+ "\t\t" + wt[i] + "\t\t "
					+ tat[i] + "\t\t " + compl_time);
		}
	}
	public static void main(String[] args) {
		int processes[] = { 1, 2, 3 };
		int n = processes.length;
		int burst_time[] = { 5, 9, 6 };
		int arrival_time[] = { 0, 3, 6 };
		int wt[] = new int[n], tat[] = new int[n];
		findWaitingTime
(processes, n, burst_time, wt, arrival_time);
		findTurnAroundTime
(processes, n, burst_time, wt, tat);
		Display(n, burst_time, arrival_time, wt, tat);
		findavgTime(n, wt, tat);
	}
}

متدهای مورد استفاده در کد بالا به صورت زیر می‌باشد:

  • findWaitingTime : این متد جهت محاسبه Wating Time هر فرآیند می‌باشد.
  • findTurnAroundTime: برای محاسبه Turn Around Time فرآیندها از این متد استفاده می‌شود.
  • Display : جهت چاپ فرآیندها در خروجی استفاده می‌شود.
  • FindavgTime : نحوه کار این متد و دلیل پیاده سازی آن را به شما واگذار می‌کنیم….

متغیرهای مورد استفاده در کد فوق:

  • Process: یک کد برای هر فرآیند در این آرایه ذخیره می‌گردد.
  • N: تعداد فرآیندها
  • Arrival_time یا at : زمان ورود هر فرآیند به صف.
  • Burst_Time یا bt: مدت زمان مورد نیاز فرآیند برای اجرا در CPU
  • Wt: منظور همان Watining Time است.
  • Tat: منظور همان Turn around time برای هر فرآیند است.
  • service_time : زمان تخصیص CPU به یک فرآیند. برای محاسبه این متغیر برای یک فرآیند، Burst time و Service Time فرآیند قلبی را با هم جمع می‌کنیم.

خروجی برنامه فوق به صورت زیر می‌باشد:

مثال الگوریتم زمانبندی FCFS

فرض کنید فرآیند‌های زیر وارد صف برای تخصیص CPU می‌شوند.

گانت چارت تخصیص CPU برای فرآیند‌های فوق به صورت زیر می‌باشد:

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *