操作系统概论实践作业.docx
- 文档编号:17850970
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:32
- 大小:23.66KB
操作系统概论实践作业.docx
《操作系统概论实践作业.docx》由会员分享,可在线阅读,更多相关《操作系统概论实践作业.docx(32页珍藏版)》请在冰点文库上搜索。
操作系统概论实践作业
章节作业
第1章Shell命令操作实践作业
(1)在当前登录用户的主目录下创建子目录mysub,进入mysub目录。
答:
mkdirmysub &&cdmysub
(2)显示当前目录路径。
答:
pwd
(3)显示用户名和用户主目录
答:
echo$HOME$USER
(4)将用户主目录添加到可执行文件搜索路径
答:
exportPATH=$PATH:
$HOME
(5)显示添加后的可执行文件搜索路径
答:
echo$PATH
(6)列出主目录下所有以”.ba”或“.pr”打头的文件名及其属性并将其存入my1文件中
答:
ls-l$HOME/*.ba$HOME/*.pr>my1
(7)列出进程状态信息中含'tty'的进程,并将其存入my2文件中
答:
ps-ef|greptty >my2
(8)将my1和my2串联成一个新文件my3
答:
catmy1my2>my3
(9)将当前目录下的所有文件压缩归档到myf.tar.gz文件中
答:
tarcvfmyf.tar.gz *
(10)将my3移动到上级目录中
答:
mv my3../
(11)删除文件my1和my2
答:
rmmy1my2
(12)启动vi文本编辑程序
答:
vi
(13)在vi中输入(3)~(11)步的操作命令,并将其存入文件mysh
答:
按i进入编辑模式,按esc退出编辑模式,按:
输入命令:
savemysh,输入命令:
wq保存退出
(14)将vi放入后台运行
答:
vi&
(15)将文件mysh访问权限改为文件主可执行
答:
chmod+xmysh
(16)将文件mysh复制到上级目录中
答:
cp mysh../
(17)令vi返回前台,从中追加睡眠1分钟和返回前台的命令,从vi保存退出
答:
fg 后面追加sleep60&&fg
(18)以后台运行方式启动mysh
答:
mysh&
(19)找到执行睡眠命令的的进程号
答:
ps-fu$USER|grep mysh|awk'{print$2}'
(20)用发送信号命令向睡眠命令进程号发送终止信号,让mysh停止执行。
答:
kill-15 pid
第2章与处理器管理有关的系统功能调用实践作业
参照“强化实践能力培养课程内容”中“进程创建和执行的实践能力培养考核选例”和“线程的创建及线程间管道通信实践能力培养考核选例”程序,编写一个能建立两个子进程的程序(父进程),让这三个进程并发执行完成以下二元函数的计算:
其中由父进程完成:
f(x,y)=f(x)+f(y)
由子进程1完成阶乘计算:
f(x)=f(x-1)*x(x>1)
f(x)=1(x=1)
由子进程2完成非波纳奇序列:
f(y)=f(y-1)+f(y-2)(y>2)
f(y)=1(y=1,2)
答:
#include
intfx(intx);
intfy(inty);
voidmain()
{
intx,y;
printf("pleaseinputx:
");
scanf("%d",&x);
intffx,ffy;
ffx=fx(x);
printf("pleaseinputy:
");
scanf("%d",&y);
ffy=fy(y);
intz;
z=ffx+ffy;
printf("%d",z);
}
intfx(intx)
{
intffx;
if(x==1)
ffx=1;
else
ffx=fx(x-1)*x;
returnffx;
}
intfy(inty)
{
intffy;
if(y==1||y==2)
ffy=1;
elseif(y>2)
ffy=fy(y-1)+fy(y-2);
returnffy;
}
第3章与存储管理有关的操作系统算法实践作业
参照“强化实践能力培养课程内容”中“内存页面置换算法实践能力培养考核选例”程序,编写一个能演示LRU内存页面置换算法的程序,它可根据给定的一组页面引用序列号和实存页数,显示LRU置换页的过程,能统计和报告LRU置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。
答:
#include"stdio.h"
#include"stdlib.h"
voidCopyL(intSour[],intDist[],intx);//数组Sour复制到数组Dist,复制到x个数
voidSetDI(intDiscL[]); //随机生成磁道数
voidPrint(intPri[],intx); //打印输出数组Pri
voidDelInq(intSour[],intx,inty); //数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y)
voidFCFS(intHan,intDiscL[]); //先来先服务算法(FCFS)
voidSSTF(intHan,intDiscL[]); //最短寻道时间优先算法(SSTF)
intSCAN(intHan,intDiscL[],intx,inty); //扫描算法(SCAN)
voidCSCAN(intHan,intDiscL[]); //循环扫描算法(CSCAN)
//voidN_Step_SCAN(intHan1,intDiscL[]); //N步扫描算法(NStepScan)
voidPaiXu(); //寻道长度由低到高排序
voidPri();
intNAll=0;
intBest[5][2];//用作寻道长度由低到高排序时存放的数组
intLimit=0;//输入寻找的范围磁道数i
intJage;
floatAver=0;
intmain()
{
inti;
intDiscLine[10]; //声明准备要生成的随机磁道号的数组
intHand; //磁道数
intCon=1;
intn;
while(Con==1)
{
Jage=0;
printf("\n请输入初始的磁道数(0 "); scanf("%d",&Hand); printf("\n+输入寻找的范围: "); scanf("%d",&Limit); if(Limit>65536){ printf("超出范围! "); } else{ printf(" *********************************************\n"); printf(" ****************磁盘调度算法******************\n"); printf(" *********************************************\n"); printf(" * 1.先来先服务算法(FCFS) *\n"); printf(" * 2.最短寻道时间优先算法(SSTF) *\n"); printf(" * 3.扫描算法(SCAN) *\n"); printf(" * 4.循环扫描算法(CSCAN) *\n"); printf(" *********************************************\n"); scanf("%d",&n); if(n==0)exit(0); printf("\n"); switch(n) { case1: SetDI(DiscLine); //随机生成磁道数 FCFS(Hand,DiscLine);//先来先服务算法(FCFS) break; case2: SetDI(DiscLine); //随机生成磁道数 SSTF(Hand,DiscLine);//最短寻道时间优先算法(SSTF) break; case3: SetDI(DiscLine); //随机生成磁道数 SCAN(Hand,DiscLine,0,9); //扫描算法(SCAN) break; case4: SetDI(DiscLine); //随机生成磁道数 CSCAN(Hand,DiscLine);//循环扫描算法(CSCAN) break; case5: SetDI(DiscLine); //随机生成磁道数 SetDI(DiscLine); //随机生成磁道数 FCFS(Hand,DiscLine);//先来先服务算法(FCFS) SSTF(Hand,DiscLine);//最短寻道时间优先算法(SSTF) SCAN(Hand,DiscLine,0,9);//扫描算法(SCAN) CSCAN(Hand,DiscLine); //循环扫描算法(CSCAN) PaiXu(); //寻道长度由低到高排序 printf("\n\n+寻道长度由低到高排序: "); for(i=0;i<5;i++) { printf("%4d",Best[i][0]); } break; } printf("\n\n+是否继续(按0结束,按1继续)? "); scanf("%5d",&Con); } } } //数组Sour复制到数组Dist,复制到x个数 voidCopyL(intSour[],intDist[],intx) { inti; for(i=0;i<=x;i++) { Dist[i]=Sour[i]; } } //打印输出数组Pri voidPrint(intPri[],intx) { inti; for(i=0;i<=x;i++) { printf("%5d",Pri[i]); } } //随机生成磁道数 voidSetDI(intDiscL[]) { inti; for(i=0;i<=9;i++) { DiscL[i]=rand()%Limit;//随机生成10个磁道号 } printf("+需要寻找的磁道号: "); Print(DiscL,9); //输出随机生成的磁道号 printf("\n"); } //数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) voidDelInq(intSour[],intx,inty) { inti; for(i=x;i { Sour[i]=Sour[i+1]; x++; } } //先来先服务算法(FCFS) voidFCFS(intHan,intDiscL[]) { intRLine[10]; //将随机生成的磁道数数组Discl[]复制给数组RLine[] inti,k,All,Temp; //Temp是计算移动的磁道距离的临时变量 All=0; //统计全部的磁道数变量 k=9; //限定10个的磁道数 CopyL(DiscL,RLine,9); //复制磁道号到临时数组RLine printf("\n+按照FCFS算法磁道的访问顺序为: "); All=Han-RLine[0]; for(i=0;i<=9;i++) { Temp=RLine[0]-RLine[1];//求出移动磁道数,前一个磁道数减去后一个磁道数得出临时的移动距离 if(Temp<0) Temp=(-Temp);//移动磁道数为负数时,算出相反数作为移动磁道数 printf("%5d",RLine[0]); All=Temp+All;//求全部磁道数的总和 DelInq(RLine,0,k);//每个磁道数向前移动一位 k--; } Best[Jage][1]=All;//Best[][1]存放移动磁道数 Best[Jage][0]=1;//Best[][0]存放算法的序号为: 1 Jage++;//排序的序号加1 Aver=((float)All)/10;//求平均寻道次数 printf("\n+移动磁道数: <%5d>",All); printf("\n+平均寻道长度: *%0.2f*",Aver); } //最短寻道时间优先算法(SSTF) voidSSTF(intHan,intDiscL[]) { inti,j,k,h,All; intTemp; //Temp是计算移动的磁道距离的临时变量 intRLine[10]; //将随机生成的磁道数数组Discl[]复制给数组RLine[] intMin; All=0; //统计全部的磁道数变量 k=9; //限定10个的磁道数 CopyL(DiscL,RLine,9); //复制磁道号到临时数组RLine printf("\n+按照SSTF算法磁道的访问顺序为: "); for(i=0;i<=9;i++) { Min=64000; for(j=0;j<=k;j++)//内循环寻找与当前磁道号最短寻道的时间的磁道号 { if(RLine[j]>Han) //如果第一个随机生成的磁道号大于当前的磁道号,执行下一句 Temp=RLine[j]-Han; //求出临时的移动距离 else Temp=Han-RLine[j]; //求出临时的移动距离 if(Temp { Min=Temp; //Temp临时值赋予Min h=j; //把最近当前磁道号的数组下标赋予h } } All=All+Min; //统计一共移动的距离 printf("%5d",RLine[h]); Han=RLine[h]; DelInq(RLine,h,k); //每个磁道数向前移动一位 k--; } Best[Jage][1]=All;//Best[][1]存放移动磁道数 Best[Jage][0]=2;//Best[][0]存放算法的序号为: 2 Jage++;//排序序号加1 Aver=((float)All)/10;//求平均寻道次数 printf("\n+移动磁道数: <%5d>",All); printf("\n+平均寻道长度: *%0.2f*",Aver); } //扫描算法(SCAN) intSCAN(intHan,intDiscL[],intx,inty) { intj,n,k,h,m,All; intt=0; intTemp; intMin; intRLine[10];//将随机生成的磁道数数组Discl[]复制给数组RLine[] intOrder; Order=1; k=y; m=2; //控制while语句的执行,即是一定要使当前磁道向内向外都要扫描到 All=0; //统计全部的磁道数变量 CopyL(DiscL,RLine,9); //复制磁道号到临时数组RLine printf("\n+按照SCAN算法磁道的访问顺序为: "); Min=64000; for(j=x;j<=y;j++) //寻找与当前磁道号最短寻道的时间的磁道号 { if(RLine[j]>Han) //如果第一个随机生成的磁道号大于当前的磁道号,执行下一句 Temp=RLine[j]-Han; //求出临时的移动距离 else Temp=Han-RLine[j]; //求出临时的移动距离 if(Temp { Min=Temp; //Temp临时值赋予Min h=j; //把最近当前磁道号的数组下标赋予h } } All=All+Min; printf("%5d",RLine[h]); if(RLine[h]>=Han){ //判断磁道的移动方向,即是由里向外还是由外向里 Order=0; t=1; } Han=RLine[h]; DelInq(RLine,h,k); //每个磁道数向前移动一位 k--; while(m>0) { if(Order==1) //order是判断磁盘扫描的方向标签,order是1的话,磁道向内移动 { for(j=x;j<=y;j++) { h=-1; Min=64000; for(n=x;n<=k;n++) //判断离当前磁道最近的磁道号 { if(RLine[n]<=Han) { Temp=Han-RLine[n]; if(Temp { Min=Temp; //Temp临时值赋予Min h=n; //把最近当前磁道号的数组下标赋予h } } } if(h! =-1) { All=All+Min; //叠加移动距离 printf("%5d",RLine[h]); Han=RLine[h];//最近的磁道号作为当前磁道 DelInq(RLine,h,k); k--; } } Order=0; //当完成向内的移动,order赋予0,执行else语句,使磁道向外移动 m--; //向内完成一次,m减一次,保证while循环执行两次 } else //order是0的话,磁道向外移动 { for(j=x;j<=y;j++) { h=-1; Min=64000; for(n=x;n<=k;n++) //判断离当前磁道最近的磁道号 { if(RLine[n]>=Han) { Temp=RLine[n]-Han; if(Temp { Min=Temp; //Temp临时值赋予Min h=n; //把最近当前磁道号的数组下标赋予h } } } if(h! =-1) { All=All+Min; //叠加移动距离 printf("%5d",RLine[h]); Han=RLine[h]; //最近的磁道号作为当前磁道 DelInq(RLine,h,k); k--; } } Order=1; //当完成向内的移动,order赋予0,执行else语句,使磁道向外移动 m--; //向内完成一次,m减一次,保证while循环执行两次 } } NAll=NAll+All; if((y-x)>5) { Best[Jage][1]=All;//Best[][1]存放移动磁道数 Best[Jage][0]=3;//Best[][0]存放算法的序号为: 3 Jage++;//排序序号加1 Aver=((float)All)/10;//求平均寻道次数 printf("\n+移动磁道数: <%5d>",All); printf("\n+平均寻道长度: *%0.2f*",Aver); } if(t==1)printf("\n+磁道由内向外移动"); elseprintf("\n+磁道由外向内移动"); return(Han); } //循环扫描算法(CSCAN) voidCSCAN(intHan,intDiscL[]) { intj,h,n,Temp,m,k,All,Last,i; intRLine[10]; //将随机生成的磁道数数组Discl[]复制给数组RLine[] intMin; inttmp=0; m=2; k=9; All=0; //统计全部的磁道数变量 Last=Han; CopyL(DiscL,RLine,9); //复制磁道号到临时数组RLine printf("\n+按照CSCAN算法磁道的访问顺序为: "); while(k>=0) { for(j=0;j<=9;j++) //从当前磁道号开始,由内向外搜索离当前磁道最近的磁道号 { h=-1; Min=64000; for(n=0;n<=k;n++) { if(RLine[n]>=Han) { Temp=RLine[n]-Han; if(Temp { Min=Temp; h=n; } } } if(h! =-1) { All=All+Min; //统计一共移动的距离 printf("%5d",RLine[h]); Han=RLine[h]; Last=RLine[h]; DelInq(RLine,h,k); k--; } } if(k>=0) {tmp=RLine[0]; for(i=0;i { if(tmp>RLine[i])tmp=RLine[i]; } Han=tmp;//把最小的磁道号赋给Han Temp=Last-tmp;//求出最大磁道号和最小磁道号的距离差 All=All+Temp; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 概论 实践 作业