ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:579.02KB ,
资源ID:2248608      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2248608.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言版.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言版.docx

1、C语言版目 录课题1 进程调度算法的模拟 1设计目的。4 2. 任务及要求。4-6 3. 算法及数据结构。6-17 4. 实验结果及分析。17-20课题2 系统动态分配资源的模拟 1设计目的。21 2. 任务及要求。21-22 3. 算法及数据结构。23-31 4. 实验结果及分析。31-33课题3 编程序实现磁盘调度算法 1设计目的。34 2. 任务及要求。34-35 3. 算法及数据结构。35-41 4. 实验结果及分析。41-44 课题1 进程调度算法的模拟1设计目的通过这个课程设计,对进程的调度进行模拟。加深学生对重要算法的理解,同时通过用C语言编程实现这些算法,或Windows,让学

2、生更好地掌握操作系统中进程调度的原理及实现方法,提高综合运用各专业课知识的能力。2. 任务及要求 1用语言来实现对n个进程采用不同调度算法的进程调度。2每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3。(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。(4)进程总共需要运行时间Alltime,利用随机函数产生。(5)进程状态,0:就绪态;1:运行态;2:阻塞态。(6

3、)队列指针next,用来将多个进程控制块PCB链接为队列。3优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1。(2)进程每运行一个时间片,优先数减3。4在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。3. 算法及数据结构算法的总体思想:建立主函数,主函数分别调用四个算法函数进行对就绪队列进行存储。进程的到达时间在这里设定为同时到达。因为单个程序时,不存在调度顺序的问题,所以只考虑了多个进程同时在就绪队列中的情况程序的结构图:3.1数据结构:typedef struct PCBNode int ID; int Pri

4、ority; int CPUtime; int Alltime; int Arrivetime; int state; int counter; struct PCBNode *next;PCB;/定义数据结构PCB *run;PCB *ready;PCB *over;PCB *head;/定义指针方便使用3.2所用到的算法: 3.2.1功能:创建和显示进程状态 算法: PCB *CreatPCB(int n) int i; PCB *p,*q; head=(PCB*)malloc(sizeof(PCB); head-next=NULL; p=head; for(i=1;iID=i; q-CP

5、Utime=0; q-Alltime=rand()%200; q-Priority=rand()%10; q-state=Ready; q-Arrivetime=0; p-next=q; p=q; q-next=NULL; head-next-Priority=0; return head;/创建pcb块void Display(PCB *head) PCB *p; p=head-next; printf(ID Arrivetime CPUtime(已占用) Alltime Priority state n); while(p) printf(%d ,p-ID); printf(%d ,p-A

6、rrivetime); printf(%d ,p-CPUtime); printf(%d ,p-Alltime); printf(%d ,p-Priority); printf(%d n,p-state); p=p-next; /显示PCB块3.2.2 FCFS功能:根据进程到达的顺序进行调度,先到达的进程先执行。在就绪队列中排的越靠前越先执行算法:void FCFS(PCB *head,PCB *over) PCB *p,*q; int j=0; int n=0,s=0; double m; ready=head; p=ready-next; q=over; while(p) p-state

7、=Running; ready-next=p-next; n=p-Alltime+n; p-CPUtime=p-Alltime; p-Alltime=0; s=s+n; p-next=NULL; q-next=p; p-state=Over; q=q-next; q-next=NULL; p=head-next; j+; printf(第%d次执行算法后的就绪队列:n,j); Display(head); m=(double)s/j; printf(完成顺寻为:n); Display(over); printf(n); printf(每个进程等待的平均时间为:%lfn,m); printf(所

8、有进程等待的总时间为:%d,s);3.2.3 SJF功能:从就绪队列中选出剩余执行时间最短的就绪进程进行执行。执行结束后继续从就绪队列中选出剩余执行时间最短的。直到所有进程都被执行完。算法:void SJF(PCB *head,PCB *over)/sjf算法 PCB *p,*q,*b,*o;/b 用来记录该块的地址 int s;/记录块号 int m,n,h=0,d=0,j=0; double f; p=head-next; q=over; o=head; printf(完成顺寻为:n); m=p-ID; n=p-Alltime; s=Min(head); b=p-next; printf(

9、%d:n,s); while(head-next) while(s!=p-ID) o=p; p=p-next; d=p-Alltime+d; p-CPUtime=p-Alltime; p-Alltime=0; h=d+h; b=p; q-next=b; o-next=p-next; p=head-next; b-next=NULL; o=head; q=q-next; s=Min(head); j+; printf(第%d次执行算法后的就绪队列:n,j); Display(head); f=(double)h/j; printf(完成顺寻为:n); Display(over); printf(

10、每个进程等待的平均时间为:%lfn,f); printf(所有进程等待的总时间为:%d,h);3.2.4 Prio功能:从就绪队列中选出优先级别最高的进程进行执行。重复进行。直到所有的所有的进程执行完毕。算法:void Prio(PCB *head,PCB *over) PCB *p,*q,*b,*o;/b 用来记录该块的地址 int s;/记录块号 int m,n,h=0,d=0,j=0; double f; p=head-next; o=head; q=over; printf(当前拥有最大优先级的块号为:n); m=p-ID; n=p-Alltime; s=Max(head); b=p-

11、next; printf(%d:n,s); while(head-next) while(s!=p-ID) o=p; p=p-next; d=p-Alltime+d; p-CPUtime=p-Alltime; p-Alltime=0; h=d+h; b=p; q-next=b; o-next=p-next; p=head-next; b-next=NULL; o=head; q=q-next; s=Max(head); j+; printf(第%d次执行算法后的就绪队列:n,j); Display(head); f=(double)h/j; printf(完成顺寻为:n); Display(o

12、ver); printf(每个进程等待的平均时间为%lfn,f); printf(所有进程等待的总时间为:%d,h);3.2.5 RR功能:根据时间片的大小,对每个进程依次执行。时间片用完之后进程进入阻塞的状态,重新得到时间片后接着执行。直到完成。算法:void RR(PCB *head,PCB *over,int t,int k)/时间片轮转法 /k用来记录剩余要执行的进程数目 PCB *p,*q,*r,*o,*tail;/o用来记录当前块的地址 int n=0,s=0,f; double h; f=k; p=head-next; while(p-next) tail=p; p=p-next; printf(执行顺序为:n); tail=p; o=p;/前驱 tail-next=head-next; p=head-next; q=over; while(k0) r=head-next; if(p-Alltimet)/该进程还未执行完成 p-Alltime=p-Alltime-t; n=n+t; s=s+n; o=p; printf(执行进程%d ,p-ID); printf(该进程的Alltime变为%dn,p-Alltime); p=p-next; else/该进程可以完成了

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1