第一范文网 - 专业文章范例文档资料分享平台

操作系统课程设计-进程调度模拟

来源:用户分享 时间:2025/7/31 5:00:23 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

成都理工大学

ShowPcb(); //展示所需执行进程信息 int choose = 0 ; while(1) {

cout<<\请选择需要模拟的CPU调度算法!***\

cout<<\ 1: 可强占的优先进程调度 ***\ cout<<\ 2: 先到先调度 ***\ cout<<\ 3: 退出系统 ***\ cout<<\ 请选择 : \ cin>>choose ; cout<

case 1:

break; case 2: break;

default:return; //结束程序 }

cout<

//按进程提交时间排序的比较函数 bool cmp(ProcessPcb a,ProcessPcb b) {

if(a.time_submit

//判断是否数字 int isnumber(char a[]) {

int len=strlen(a); int i,num=0;

if(a[0]>'0'&&a[0]<='9') num=a[0]-'0';

12

PriModel(); //可强占的优先进程方式

FcfsModel(); //先到先服务调度方式

成都理工大学

else return -1; for(i=1;i

if(a[i]>='0'&&a[i]<='9') num=num*10+a[i]-'0'; else return -1; }

return num; }

//进程输入函数 bool CpuModel::GetPcb() {

char num[10];

cout<<\ *** 进程调度模拟程序 ***\\n\ cout<<\ *** 计算机科学与技术三班 ***\\n\ cout<<\ *** 孙清茂 ***\\n\ cout<<\请输入你想建立的进程个数: \ cin>>num; //输入进程个数 pcbnum=isnumber(num);

if(pcbnum<=0) {cout<<\输入有错***\\n\ int i;

for(i=0;i

cout<<\请依次输入第\个进程的信息***\

cout<<\名字:\ cin>>PcbList[i].pro_name ; cout<<\提交时间:\ cin>>num;

PcbList[i].time_submit=isnumber(num);

if(PcbList[i].time_submit<=0){cout<<\输入有错***\\n\ cout<<\执行时间:\ cin>>num;

PcbList[i].time_exe=isnumber(num);

if(PcbList[i].time_exe<=0) {cout<<\输入有错***\\n\ PcbList[i].time_left=PcbList[i].time_exe; //设置剩余执行时间 PcbList[i].pro_state=UNREADY; //设置状态为未就绪 PcbList[i].pro_priority=100-PcbList[i].time_exe; //设置优先级,

优先级=100-执行时间

13

成都理工大学

cout<

sort(PcbList,PcbList+pcbnum,cmp); //按提交时间排序

for(i=0;i

PcbList[i].pro_id=i+1; //设置Id,根据提交时间 return 1; }

//展示所需执行进程信息 void CpuModel::ShowPcb() {

int i;

cout<<\所需执行的进程信息如下***\\n\ for(i=0;i

cout<<\ 进程编号: \ 进程名字: \

<

//可强占的优先进程调度模式 void CpuModel::PriModel() {

cout<<\可强占的优先进程调度过程如下********\\n\ freetime=0; //初始化系统空闲时间为0 int time=0; //时间 int nextid=0;

int pnum=0; //已就绪进程数目 ProcessPcb *head; //就绪队列 ProcessPcb *pcb,*pcb1,*pcb2;

head=(ProcessPcb*)malloc(sizeof(ProcessPcb));

head->next=NULL; //head 指针不用,head->next开始为就绪队列 //模拟cpu开始工作

while(head->next!=NULL||pnum

Sleep(1000);

time++; //时间片为1

cout<<\第\秒\ //打印

// 进程就绪(查看未就绪的进程中在该时间片是否可以进入就绪队列)

14

<<\ 优先级数:\

成都理工大学

while(pnum

//进入就绪队列

{

*pcb=PcbList[pnum++];

pcb->next=head->next; //插在head之后 head->next=pcb; }

{

cout<<\ 没有可运行的进程\

freetime++; } else {

pcb2=head; pcb=head->next; pcb1=head->next;

//查找当前优先级最高的就绪进程 while(pcb1->next!=NULL) {

if(pcb->pro_priority<=pcb1->next->pro_priority)

{

pcb2=pcb1;

pcb=pcb1->next;

}

pcb1=pcb1->next; }

//运行优先级最高的进程

if(pcb->time_left==pcb->time_exe) //该进程是否已开始

pcb->time_start=time; //设置开始时间 pcb->pro_state=EXECUTE; //设置状态为执行 pcb->pro_priority=pcb->pro_priority-3; //优先级数减3 {

//查找在time时间片应该运行的进程

if(head->next==NULL)

}

pcb->time_left--; //剩余执行时间减去时间片1

15

搜索更多关于: 操作系统课程设计-进程调度模拟 的文档
操作系统课程设计-进程调度模拟.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c9kx763ccg28ojis8frgv_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top