1、 elsen 请创建第%d个进程,shumu);n 请输入新进程的 pidn scanf(%d,&neicunshumu.pid);n 请输入新的进程的优先级nneicunshumu.youxian);n 请输入新的进程的大小nneicunshumu.daxiao);n 请输入新的进程的消息nneicunshumu.msg); neicunshumu.live=1; shumu+; return neicunshumu-1.live;void viewrun() int vpid;n 请输入想显示第几个创建的进程nvpid); if(vpid0&vpidpid1neicunpid2.youxi
2、an) waicun.pid=neicunpid1.pid; waicun.youxian=neicunpid1.youxian; waicun.daxiao=neicunpid1.daxiao; waicun.msg=neicunpid1.msg; neicunpid1.pid=neicunpid2.pid; neicunpid1.youxian=neicunpid2.youxian; neicunpid1.daxiao=neicunpid2.daxiao; neicunpid1.msg=neicunpid2.msg; neicunpid2.pid=waicun.pid; neicunpid
3、2.youxian=waicun.youxian; neicunpid2.daxiao=waicun.daxiao; neicunpid2.msg=waicun.msg;n 替换完成nn 被替换进程的pid是:,waicun.pid);n 被替换进程的youxian是:,waicun.youxian);n 被替换进程的daxiao是:,waicun.daxiao);n 被替换进程的msg是:,waicun.msg);n进程优先级不够大 所查看运行进程不存在请按回车退出换出进程n c=getche();void kill() int kpid;n 请输入要撤销第几个创建的进程nkpid); if
4、(kpidkpidsuper)(ready-super) /*优先级最大者,插入队首 */ p-link=ready; ready=p; else /* 进程比较优先级,插入适当的位置中*/ first=ready; second=first-link; while(second!=NULL) if(p-(second-super) /*若插入进程比当前进程优先数 大,*/ /*插入到当前进程前面*/ p-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first- secon
5、d=second- if(insert=0) first- void input() /* 建立进程控制块函数*/ int i,num;n请输入进程数量:num); for(i=1;iname);n 输入进程优先数:p-super);n 输入进程运行时间:ntime);rtime=0;state=w;link=NULL; sort(); /* 调用sort函数*/ int space() int l=0; PCB* pr=ready; while(pr! l+; pr=pr- return(l);void show()nqnametstatetsupertndtimetruntimenvoid
6、 disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ %st,pr- %ctstate); %dtrtime);void check() /* 建立进程查看函数 */ PCB* pr;n*当前正在运行的进程是: /*显示当前运行进程*/ show(); disp(p); pr=ready; if(pr=NULL)n*当前就绪队列为空! else printf(n*当前就绪队列状态为: /*显示就绪队列状态*/ show(); while(pr! disp(pr); pr=pr- void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ n 进程%s
7、已完成.n free(p);void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用destroy函数*/ (p-super)-; /*调用sort函数*/ void main() /*主函数*/ int len,h=0; char ch; input(); len=space(); while(len!=0)&(ready!=NULL) ch=getchar(); h+;n 当前运行次数为:%d n,h); p=ready; ready=p-R check(); ru
8、nning();n 按任一键继续.nn 进程已经完成.n ch=getchar();任务三、基本存储器管理一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现与主存储器的管理方式有关的,通过本实验帮助学生理解在不同的存储管理方式下怎样实现主存的分配和回收从下两种存储管理方式的主存分配和回收中,选择一种管
9、理方式来实现本次实验任务:1、在可变(动态)分区管理方式下,采用最先适应算法2、在分页式管理方式下,采用位示图来表示主存的分配情况和回收情况#includeaddr,q-size); q=q-next;-n return;void printtab() int i; int flag=0; for (i=0;flag=0;i+) if (tabi.flag=1)flag=1; if (flag=0)n 无进程! return;n 进程编号 进程起始地址 进程内存大小n-n20; if (tabi.flag=1) %d %d %dn,i,tabi.addr,tabi.size);-nvoid a
10、llocm()n 输入进程编号:n);n 输入进程内存大小:l); if (tabn.flag=1)n 该进程被创建! tabn.flag=1;tabn.size=l; q=PL; p=PL; while (q! if (q-size=l) tabn.addr=q-addr; p1=q; if (p1=PL) PL=q- else p-next=q- free(p1); return;sizel) q-size=q-size-l; q-addr=q-addr+l; p=q; q=q- tabn.flag=0;n 没有内存剩余!void freem() if(tabn.flag=0)n 不是该进
11、程! addr=tabn.addr; length=tabn.size;if (q=NULL)|(addr+lengthaddr) p1=(struct linkk *)malloc(sizeof(struct linkk); p1-size=length;addr=addr;next=q; PL=p1;return;if(addr+length=q-addr)size+length;p=q;while (q!if(p-addr+p-size=addr)p-size=p-if (addr+length=q-size+q-size;p1=q; p-free(p1); if(addr+lengthaddr=0;n输入内存大小:size=n; for(int i=0; tabi.jno=i; tabi.flag=0; t=0; don-n 1-分配内存 2-释放内存n 3-链接进程号 4-输出_TAB n 5-Quitn Select bbm); switch(m) case 1: allocm(); case 2: freem(); case 3: printlink(); case 4: printtab(); case 5: t=1;while (!t);任务四、请求分页存储管理(虚拟存储)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1