Chiến lược điều phối xoay vòng :
Danh sách sẵn sàng được xử lý như một danh sách vòng, bộ điều phối lần lượt cấp phát cho từng tiến trình trong danh sách một khoảng thời gian sử dụng CPU gọi là quantum. Đây là một giải thuật điều phối không độc quyền : khi một tiến trình sử dụng CPU đến hết thời gian quantum dành cho nó, hệ điều hành thu hồi CPU và cấp cho tiến trình kế tiếp trong danh sách. Nếu tiến trình bị khóa hay kết thúc trước khi sử dụng hết thời gian quantum, hệ điều hành cũng lập tức cấp phát CPU cho tiến trình khác. Khi tiến trình tiêu thụ hết thời gian CPU dành cho nó mà chưa hoàn tất, tiến trình được đưa trở lại vào cuối danh sách sẵn sàng để đợi được cấp CPU trong lượt kế tiếp.
*Thời gian xử lý : P1=24,P2=3,P3=3
* Thời gian xử lý trung bình : (24+3+3)/3=10
*Thời gian đợi :
P1=0
P2=4-1=3
P3=4+3-2=5
P1'=4+3+3-3=6
đến lúc này p1 sẽ được xử lý liên tục nên không phải tính thời gian chờ của p1'' p1'''...
*Thời gian đợi trung bình: (0+3+5+6)/3=4.66
* Thời gian lưu lại trong hệ thống :
P1: vòng 1 =4 vòng 2=20 khoảng cách 2 vòng là 6 => thời gian lưu lại của P1 =4+20+6 =30
P2=3
P3=3
* Thời gian lưu lại trung bình : (30+3+3)/3=12
CODE:
Danh sách sẵn sàng được xử lý như một danh sách vòng, bộ điều phối lần lượt cấp phát cho từng tiến trình trong danh sách một khoảng thời gian sử dụng CPU gọi là quantum. Đây là một giải thuật điều phối không độc quyền : khi một tiến trình sử dụng CPU đến hết thời gian quantum dành cho nó, hệ điều hành thu hồi CPU và cấp cho tiến trình kế tiếp trong danh sách. Nếu tiến trình bị khóa hay kết thúc trước khi sử dụng hết thời gian quantum, hệ điều hành cũng lập tức cấp phát CPU cho tiến trình khác. Khi tiến trình tiêu thụ hết thời gian CPU dành cho nó mà chưa hoàn tất, tiến trình được đưa trở lại vào cuối danh sách sẵn sàng để đợi được cấp CPU trong lượt kế tiếp.
*Thời gian xử lý : P1=24,P2=3,P3=3
* Thời gian xử lý trung bình : (24+3+3)/3=10
*Thời gian đợi :
P1=0
P2=4-1=3
P3=4+3-2=5
P1'=4+3+3-3=6
đến lúc này p1 sẽ được xử lý liên tục nên không phải tính thời gian chờ của p1'' p1'''...
*Thời gian đợi trung bình: (0+3+5+6)/3=4.66
* Thời gian lưu lại trong hệ thống :
P1: vòng 1 =4 vòng 2=20 khoảng cách 2 vòng là 6 => thời gian lưu lại của P1 =4+20+6 =30
P2=3
P3=3
* Thời gian lưu lại trung bình : (30+3+3)/3=12
CODE:
#include<stdio.h>
int
main()
{
int
i,j,n,
time
,remain,flag=0,ts;
int
sum_wait=0,sum_turnaround=0,at[10],bt[10],rt[10];
printf
(
"Enter no of Processes : "
);
scanf
(
"%d"
,&n);
remain=n;
for
(i=0;i<n;i++)
{
printf
(
"Enter arrival time and burst time for Process P%d :"
,i+1);
scanf
(
"%d"
,&at[i]);
scanf
(
"%d"
,&bt[i]);
rt[i]=bt[i];
}
printf
(
"Enter time slice"
);
scanf
(
"%d"
,&ts);
printf
(
"\n\nProcess\t|Turnaround time|waiting time\n\n"
);
for
(
time
=0,i=0;remain!=0;)
{
if
(rt[i]<=ts && rt[i]>0)
{
time
+=rt[i];
rt[i]=0;
flag=1;
}
else
if
(rt[i]>0)
{
rt[i]-=ts;
time
+=ts;
}
if
(rt[i]==0 && flag==1)
{
remain--;
printf
(
"P[%d]\t|\t%d\t|\t%d\n"
,i+1,
time
-at[i],
time
-at[i]-bt[i]);
sum_wait+=
time
-at[i]-bt[i];
sum_turnaround+=
time
-at[i];
flag=0;
}
if
(i==n-1)
i=0;
else
if
(at[i+1]<=
time
)
i++;
else
i=0;
}
printf
(
"\nAvg sum_wait = %f\n"
,sum_wait*1.0/n);
printf
(
"Avg sum_turnaround = %f"
,sum_turnaround*1.0/n);
return
0;
}
Tags:
Lập Lịch CPU
cho mình hỏi có files hướng dẫn cụ thể không ?
ReplyDeletecho em xin bài code điều phối với độ ưu tiên không độc quyền đi ạ thanks <3
ReplyDelete