操作系统上机题全集

上传人:新** 文档编号:545215897 上传时间:2023-12-05 格式:DOCX 页数:30 大小:38.79KB
返回 下载 相关 举报
操作系统上机题全集_第1页
第1页 / 共30页
操作系统上机题全集_第2页
第2页 / 共30页
操作系统上机题全集_第3页
第3页 / 共30页
操作系统上机题全集_第4页
第4页 / 共30页
操作系统上机题全集_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《操作系统上机题全集》由会员分享,可在线阅读,更多相关《操作系统上机题全集(30页珍藏版)》请在金锄头文库上搜索。

1、、进程调度进程调度算法有FIFO,优先数调度算法,时间片轮转调度算法,分级调度算法,目前主要是考FIFO 和优先数调度算法(静态优先级)。进程调度算法的数据结构主要有:进程函数定义:建立进程函数,进程调度函数一个网友做的一个FIFO调度算法的示例:#include stdio.h#define max 100#define pfree 0 /*process end*/#define running 1 /*process running status*/#define aready 2 /*process aready status */#define blocking 3 /*proces

2、s aready blocking status*/typedef struct nodechar name;int status;int precendence;int ax,bx,cx,dx;int pc;int psw;struct node *next; /*pcb define*/pcb;pcb *createprocess(pcb *head)pcb *p,*q;int a,b,c,d,m,n;char ID;int s;q=NULL;printf(ninput the first seven status pcb:);scanf(n%c,&ID);scanf(%d%d%d%d%d

3、%d,&a,&b,&c,&d,&m,&n);while(ID!=*)p=(pcb*)malloc(sizeof(pcb);p-name=ID;p-ax=a;p-bx=b;p-cx=c;p-dx=d;p-pc=m;p-psw=n;p-precendence=pre; p-status=aready;if(head=NULL)head=p;elseq-next=p;q=p;printf(ninput the next pcb: );scanf(n%c,&ID);scanf(%d%d%d%d%d%d,&a,&b,&c,&d,&m,&n);if(q!=NULL)q-next=NULL;q=head;w

4、hile(q)printf(n peocess name. status.ax. bx. cx. dx. pc. psw.n );printf(%10c%5d%8d%5d%5d%5d%5d%5d%5d,q-name,q-status,q-precendence,q-ax,q-bx,q-cx,q- dx,q-pc,q-psw);q=q-next;return head;/*createprocess end*/void processfifo(pcb *head) /*use fifo */pcb *p;p=head;printf(n the process use fifo method.n)

5、;printf(running the frist process:n);while(p!=NULL)p-status=running;printf(nprocess name status. ax. bx. cx. dx. pc. psw.); printf(n%10c%5d%8d%5d%5d%5d%5d%5d,p-name,p-status,p-ax,p-bx,p-cx,p-dx,p-pc,p-psw); /*check process running status */p-status=0;p=p-next;printf(ncheck weatherfer the process com

6、plete: );p=head;while(p)printf(n%3c%3d,p-name,p-status); p=p-next;printf(ngame is over!n);main()pcb *head;head=NULL; head=createprocess(head); processfifo(head);.二、模拟存储管理中内存空间的管理和分配 内存空间的管理分为固定分区管理方式,可变分区管理方式,页式存储管理,段式存储管理。下面是 页式存储管理和可变分区管理的两个例子:如 2002 (?)的北京大学主考的上机试题:内存被划分成2048 块(页)。用32 位字长的字存放位示图,

7、为0 的位表示该块尚未分配,为1 的位表 示该块已分配。实习检查:1、运行程序,由检查教师给出文件名,该文件中存有内存目前状况的位示图的数据(0和1 的文件)。 (程序应做提示,界面友好)。2、你所编制的程序应读入数据,存放在相应的数据结构中。3、显示友好的用户界面,由检查教师输入内存申请(总块数)。4、根据申请和位示图状态,为用户分配内存,并建立页表。5、输出位示图和页表。我这个题目编了一个,但是还没有输进去,相信大家都能做出来。数据结构:用一个数组来表示内存状况,页表。 函数定义:内存申请函数以下是论坛上网友提供的另一道模拟内存分配与回收的试题的答案,具体试题不知道是什么:#define

8、n 10 /*假定系统允许的最大作业为,假定模拟实验中 n 值为 10*/#define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/#define minisize 100structfloat address; /*已分分区起始地址*/float length; /*已分分区长度,单位为字节*/int flag; /*已分配区表登记栏标志,用0表示空栏目*/used_tablen; /*已分配区表*/structfloat address; /*空闲区起始地址*/float length; /*空闲区长度,单位为字节*/int flag; /*空闲区表登记栏标

9、志,用0表示空栏目,用1表示未分配*/free_tablem; /*空闲区表*/allocate(J,xk)char J;float xk;/*采用最优分配算法分配 xk 大小的空间*/int i,k;float ad;k=-1;for(i=0;i=xk&free_tablei.flag=1) if(k=-1|free_tablei.lengthfree_tablek.length)k=i;if(k=-1)/*未找到可用空闲区,返回*/printf(无可用空闲区n);return;/*找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于msize大小,则空闲区全部分配; 若空闲区大小与

10、要求分配的空间差大于minisize大小,则从空闲区划出一部分分配*/ if(free_tablek.length-xk=minisize)free_tablek.flag=0;ad=free_tablek.address;xk=free_tablek.length;elsefree_tablek.length=free_tablek.length-xk; ad=free_tablek.address+free_tablek.length;/*修改已分配区表*/i=0;while(used_tablei.flag!=0&i=n) /*无表目填写已分分区*/printf(”无表目填写已分分区,错

11、误n);/*修正空闲区表*/ if(free_tablek.flag=0) /*前面找到的是整个空闲分区*/ free_tablek.flag=1;else /*前面找到的是某个空闲分区的一部分*/ free_tablek.length=free_tablek.length+xk;return;else/*修改已分配表*/ used_tablei.address=ad; used_tablei.length=xk;used_tablei.flag=J;return;/*主存分配函数结束*/reclaim(J)char J;/*回收作业名为 J 的作业所占主存空间*/int i,k,j,s,t;

12、float S,L;/*寻找已分配表中对应登记项*/s=0;while(used_tables.flag!=J|used_tables.flag=0)&s=n)/*在已分配表中找不到名字为J的作业*/ printf(”找不到该作业n);return;/*修改已分配表*/used_tables.flag=0;/*取得归还分区的起始地址S和长度L*/S=used_tables.address;L=used_tables.length;j=-1;k=-1;i=0;/*寻找回收分区的空闲上下邻,上邻表目k,下邻表目j*/while(im&(j=-1|k=-1)if(free_tablei.flag=1

13、)if(free_tablei.address+free_tablei.length=S)k=i;/* 找到上邻*/ if(free_tablei.address=S+L)j=i;/* 找到下邻*/i+;if(k!=-1)if(j!=-1)/* 上邻空闲区,下邻空闲区,三项合并*/free_tablek.length=free_tablej.length+free_tablek.length+L;free_tablej.flag=0;else/*上邻空闲区,下邻非空闲区,与上邻合并*/free_tablek.length=free_tablek.length+L;elseif(j!=-1)/*上邻非空闲区,下邻为空闲区,与下邻合并*/free_tablej.address=S;free_tablej.length=free_tablej.length+L;else/*上下邻均为非空闲区,回收区域直接填入*/*在空闲区表中寻找空栏目*/t=0;while(free_tablet.flag=1&t=m)/*空闲区表满,回收空间失败,将已分配表复原*/printf(主存空闲表没有空间,回收空间失败n);used_tables.flag=J;return; free_tablet.address=S; free_tablet.length=L;free_tablet.fl

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号