广工操作系统实验

2026/1/16 19:44:02

p1->next=p2;

p2->state=\就绪中\ p2->name=p->name; p2->run=p->rest;

p2->queue=(p->queue)+1; p2->rest=p->rest; p2->fragement=2; p2->next=NULL; }

:5: 实验效果:

:6:实验总结:

如上图所示,进程在一个时间片执行完后进程,剩余时间为0,退出队列,进程2在执行完一个时间片后仍然未完成,进入就绪队列末尾,以此类推,直至三个进程都完成,这个时间片轮转算法比较简单,只需要处理好把未完成的进程插入就绪队列末尾即可,把已完成的从就绪队列中释放。调试过程中总是会出现bug,但需要我们耐心一个个解决。

第三个:多级队列反馈算法::

3:实验方法,步骤:

其思想是:当一个新进程进入内存后,首先将它放入第一个队列的末尾,按fcfs的原则排队等待,当轮到该进程执行,如能在该时间片内完成,则撤出系统,倘若在时间片内未完成,则放进第二个队列的末尾,按同样的fcfs原则等待执行。

首先用create()函数创建链表并对其初始化,然后把链表放进processing()函数中进行处理,若任然未完成,则把该进程放进insert()函数中插入下 一队列。

4:流程图

:4:重要的函数和数据结构:

struct PCB对进程结构体进行定义 Create()函数进行链表的初始化

Insert()函数把未完成的进程插入下一个就绪队列的末尾 Processing()函数对链表循环进行处理 Disp()函数对结果进行显示

Insert()函数把进程插入下一个就绪队列 void insert(struct PCB *p){ struct PCB *p1,*p2; p2=p1=p;

p2=(struct PCB *)malloc(sizeof(struct PCB)); while(p1->next)p1=p1->next; p1->next=p2;

p2->state=\就绪中\ p2->name=p->name;

p2->run=p->rest;

p2->queue=(p->queue)+1; p2->rest=p->rest;

p2->fragement=2*(p->fragement); p2->next=NULL; }

void processing(struct PCB *head){ //对占有cpu时间的进程进行系列的处理 struct PCB *p1,*p2,*p3; int n=0; p1=head; while(p1){

p1->rest=p1->rest-p1->fragement; if(p1->rest<0)p1->rest=0; p1->state=\运行中\ disp(p1);

if(p1->rest==0)

printf(\进程%d已完成\\n\ if(p1->rest>0)insert(p1); p1=p1->next; } }

5:实验效果:


广工操作系统实验.doc 将本文的Word文档下载到电脑
搜索更多关于: 广工操作系统实验 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219