进程调度算法–c语言实现

进程调度算法–c语言实现nbsp nbsp 下面我用 c 语言模拟实现了 FCFS 先来先服务 SJF 短作业优先 和 RR 时间片轮转 的操作系统中的进程调度算法 还有实现结果哦 nbsp nbsp 关于这些算法的思想 大家可以去自己找一下 我呢就用结构体数组简单的实现了一下 nbsp nbsp nbsp 话不多说来看看代码 nbsp include lt stdio h gt include lt stdlib h gt include lt io

    下面我用c语言模拟实现了FCFS(先来先服务)、SJF(短作业优先)和RR(时间片轮转)的操作系统中的进程调度算法,还有实现结果哦~~

    关于这些算法的思想,大家可以去自己找一下,我呢就用结构体数组简单的实现了一下

    话不多说来看看代码:

 

#include 
  
    #include 
   
     #include 
    
      using namespace std; struct Node { char name; int Tarrive;//到达时间 int Tservice;//服务时间 int Tsurplus;//剩余时间 int Tstart;//开始时间 int Taccomplish;//完成时间 int prio;//优先级---数字越大优先级越高 int if_finish;//进程是否完成 int num;//进程个数 }job[10]; //按到达时间排序 void Arrive_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) { 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 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) { time = job[i].Tarrive; break; } } } } } //输出 void print(int num) { cout << "进程名" << "\t" << "到达时间" << "\t" << "服务时间" << "\t" << "完成时间" << endl; for (int i = 0; i < num; i++) { cout << job[i].name << "\t" << job[i].Tarrive << "\t\t" << job[i].Tservice << "\t\t" << job[i].Taccomplish << endl; } } void display(int num) { int ch = 0; cout << "—————————————————————————" << endl; cout << "——————————1、FCFS算法 —————————" << endl; cout << "——————————2、SJF算法——————————" << endl; cout << "——————————3、RR算法 ——————————" << endl; cout << "——————————4、优先级算法 ————————" << endl; cout << "——————————5、退出 ———————————" << endl; cout << "—————————————————————————" << endl; do { cout << "请选择你想要的算法:" << endl; cin >> ch; switch (ch) { case 1: Arrive_sort(num); fcfs(num); print(num); break; case 2: //Arrive_Short_sort(num); sjf(num); print(num); break; case 3: RR(num); break; case 4: priority(num); break; case 5: exit; default: cout << "输入错误,请重新输入!" << endl; break; } } while (ch != 5); } int main() { int num; char jname; int arrive; int service; int accomplish; cout << "请输入进程个数:" << endl; cin >> num; for (int i = 0; i < num; i++) { cout << "请输入进程名、到达时间、服务时间" << endl; cin >> jname; job[i].name = jname; cin >> arrive; job[i].Tarrive = arrive; cin >> service; job[i].Tservice = service; } display(num); return 0; } 
     
    
  

运行结果如下:

进程调度算法--c语言实现

 觉得不错的小伙伴可以赞一下?

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/213330.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午6:05
下一篇 2026年3月18日 下午6:05


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号