操作系统进程调度算法(先来先服务,短作业优先算法(SJF))linux下(附源码

job[i].Tservice = temp3;

}

}

}

}

//按服务时间排序

void Service_sort(int num)

{

int temp1, temp2, temp3;

for (int i = 1; i < num; i++)

{

for (int j = i + 1; j < num; j++)

{

if (job[i].Tservice > job[j].Tservice)

{

temp1 = job[j].name;

job[j].name = job[i].name;

job[i].name = temp1;

temp2 = job[j].Tarrive;

job[j].Tarrive = job[i].Tarrive;

job[i].Tarrive = temp2;

temp3 = job[j].Tservice;

job[j].Tservice = job[i].Tservice;

job[i].Tservice = temp3;

}

}

}

}

//按优先级排序

void Priority_sort(int num)//按优先级减小排序

{

int temp1, temp2, temp3, temp4;

for (int i = 1; i < num; i++)

{

for (int j = i + 1; j < num; j++)

{

if (job[i].prio < job[j].prio)

{

temp1 = job[j].name;

job[j].name = job[i].name;

job[i].name = temp1;

temp2 = job[j].Tarrive;

job[j].Tarrive = job[i].Tarrive;

job[i].Tarrive = temp2;

temp3 = job[j].Tservice;

job[j].Tservice = job[i].Tservice;

job[i].Tservice = temp3;

temp4 = job[j].prio;

job[j].prio = job[i].prio;

job[i].prio = temp3;

}

}

}

}

//如果到达时间相等,服务时间按从小到大排序

void Arrive_Short_sort(int num)

{

int temp1, temp2, temp3;

for (int i = 0; i < num; i++)

{

for (int j = i + 1; j < num; j++)

{

if (job[i].Tarrive >= job[j].Tarrive)

{

if (job[i].Tarrive > job[j].Tarrive)

{

temp1 = job[j].name;

job[j].name = job[i].name;

job[i].name = temp1;

temp2 = job[j].Tarrive;

job[j].Tarrive = job[i].Tarrive;

job[i].Tarrive = temp2;

temp3 = job[j].Tservice;

job[j].Tservice = job[i].Tservice;

job[i].Tservice = temp3;

}

else

{

if (job[i].Tservice > job[j].Tservice)

{

temp1 = job[j].name;

job[j].name = job[i].name;

job[i].name = temp1;

temp2 = job[j].Tarrive;

job[j].Tarrive = job[i].Tarrive;

job[i].Tarrive = temp2;

temp3 = job[j].Tservice;

job[j].Tservice = job[i].Tservice;

job[i].Tservice = temp3;

}

}

}

}

}

}

void fcfs(int num)//先来先服务

{

for (int i = 0; i < num; i++)

{

job[i].Tstart = job[i - 1].Taccomplish;//上一个作业结束时间

if (job[i].Tstart < job[i].Tarrive)

{

job[i].Tstart = job[i].Tarrive;

}

else

{

job[i].Tstart = job[i - 1].Taccomplish;

}

job[i].Taccomplish = job[i].Tstart + job[i].Tservice;

}

}

void sjf(int num)//短作业优先

{

Service_sort(num);

for (int i = 0; i < num; i++)

{

job[i].Tstart = job[i - 1].Taccomplish;//上一个作业结束时间

if (job[i].Tstart < job[i].Tarrive)//该作业的开始时间小于到达时间

{

job[i].Tstart = job[i].Tarrive;

}

else

{

job[i].Tstart = job[i - 1].Taccomplish;

}

job[i].Taccomplish = job[i].Tstart + job[i].Tservice;

}

}

void RR(int num)//RR算法

{

int q;

cout << “请输入时间片长度:” << endl;

cin >> q;

int flag = 1;//标志队列中是否还有进程

int finish_pro = 0;//完成的进程数

cout << “进程名称\t” << “开始时间\t” << “运行时间\t” << “剩余服务时间\t” << “结束时间\t” << endl;

int time;//记录当前时刻时间

int c = 0;

while (finish_pro < num)

{

flag = 0;//就绪队列里没进程

for (int i = c; i < num; i++)

{

Arrive_sort(num);

job[i].Tsurplus = job[i].Tservice;

job[i].Tstart = job[i - 1].Taccomplish;//上一个作业结束时间

if (job[i].Tstart < job[i].Tarrive)//该作业的开始时间小于到达时间

{

job[i].Tstart = job[i].Tarrive;

}

else

{

job[i].Tstart = job[i - 1].Taccomplish;

}

time = job[i].Tstart;

if (job[i].if_finish == 1) continue;//该进程已完成

else

{

if (job[i].Tsurplus <= q && time >= job[i].Tarrive)//未完成且少于一个时间片

{

flag = 1;

time = time + job[i].Tsurplus;

job[i].if_finish = 1;//该进程完成

job[i].Taccomplish = time;

cout << job[i].name << “\t\t” << job[i].Taccomplish - job[i].Tsurplus << “\t\t” << job[i].Tsurplus << “\t\t” << 0 << “\t\t” << job[i].Taccomplish << endl;

job[i].Tsurplus = 0;

}

else if (job[i].Tsurplus > q && time >= job[i].Tarrive)

{

flag = 1;

time = time + q;

job[i].Tsurplus -= q;

job[i].Taccomplish = time;

cout << job[i].name << “\t\t” << time - q << “\t\t” << q << “\t\t” << job[i].Tsurplus << “\t\t” << job[i].Taccomplish << endl;

job[num].name = job[i].name;

job[num].Tarrive = time;

job[num].Tservice = job[i].Tsurplus;

num++;

}

if (job[i].if_finish == 1) finish_pro++;//一个进程完成加一

}

c++;

}break;

if (flag == 0 && finish_pro < num)//没执行完且没进入就绪队列

{

for (int i = 0; i < num; i++)

{

if (job[i].if_finish == 0)

{

最后

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节

美团面试经验

美团面试
字节面试经验
字节面试
菜鸟面试经验
菜鸟面试
蚂蚁金服面试经验
蚂蚁金服
唯品会面试经验
唯品会

因篇幅有限,图文无法详细发出
== 0)

{

最后

毕竟工作也这么久了 ,除了途虎一轮,也七七八八面试了不少大厂,像阿里、饿了么、美团、滴滴这些面试过程就不一一写在这篇文章上了。我会整理一份详细的面试过程及大家想知道的一些问题细节

美团面试经验

[外链图片转存中…(img-x7EIzf0k-1720111291403)]
字节面试经验
[外链图片转存中…(img-8V6otfeT-1720111291404)]
菜鸟面试经验
[外链图片转存中…(img-CBuJxgfp-1720111291404)]
蚂蚁金服面试经验
[外链图片转存中…(img-xd2mv3Gw-1720111291405)]
唯品会面试经验
[外链图片转存中…(img-vkb053Tl-1720111291405)]

因篇幅有限,图文无法详细发出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值