操作系统概论实践作业_第1页
操作系统概论实践作业_第2页
操作系统概论实践作业_第3页
操作系统概论实践作业_第4页
操作系统概论实践作业_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、章节作业第 1 章 Shell 命令操作实践作业(1)在当前登录用户的主目录下创建子目录mysub,进入mysub目录。答 :mkdirmysub?&&cdmysub(2)显示当前目录路径。答 :pwd(3)显示用户名和用户主目录答 :echo$HOME$USER(4)将用户主目录添加到可执行文件搜索路径答 :exportPATH=$PATH:$HOME(5)显示添加后的可执行文件搜索路径答 :echo$PATHmy1 文件中(6)列出主目录下所有以" .ba”或“ .pr”打头的文件名及其属性并将其存入答 :ls-l$HOME/*.ba$HOME/*.pr>m

2、y1列出进程状态信息中含tty'的进程,并将其存入my2文件中答 :ps-ef|greptty?>my2(8)将 my1 和 my2 串联成一个新文件my3答 :catmy1my2>my3(9)将当前目录下的所有文件压缩归档到文件中答 :tarcvf?*(10)将 my3 移动到上级目录中答 :mv?my3./(11)删除文件my1 和 my2答 :rmmy1my2(12)启动vi 文本编辑程序(13)在vi 中输入(3)(11)步的操作命令,并将其存入文件mysh答 :按 i 进入编辑模式,按esc 退出编辑模式,按:输入命令:savemysh, 输入命令 :wq 保存退

3、出(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-

4、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<stdio.h>intfx(

5、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;elseffx=fx(x-1)*x;returnffx;intfy(int

6、y)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

7、(intSour,intDist口,intx);/数组 Sour 复制到数组 Dist,复制到 x 个数voidSetDI(intDiscL);?/ 随机生成磁道数?voidPrint(intPri,intx);?/ 打印输出数组PrivoidDelInq(intSour,intx,inty);?数组Sour把x位置的数删除,并把 y前面的数向前移动,y后的数保持不变 (即会出现2 个 y)?voidFCFS(intHan,intDiscL);?/ 先来先服务算法(FCFS)voidSSTF(intHan,intDiscL);?/ 最短寻道时间优先算法(SSTF)intSCAN(intHan,

8、intDiscL,intx,inty);?/ 扫描算法(SCAN)voidCSCAN(intHan,intDiscL);?/ 循环扫描算法(CSCAN)/voidN_Step_SCAN(intHan1,intDiscL);?/N 步扫描算法(NStepScan)voidPaiXu();?/ 寻道长度由低到高排序voidPri();intNAll=0;intBest52;/ 用作寻道长度由低到高排序时存放的数组?intLimit=0;/ 输入寻找的范围磁道数iintJage;floatAver=0;intmain()?inti;?intDiscLine10;?/ 声明准备要生成的随机磁道号的数组

9、?intHand;?/ 磁道数?intCon=1;?intn;?while(Con=1)?Jage=0;?printf("n 请输入初始的磁道数(0<n<65536):");?scanf("%d",&Hand);?printf("n+ 输入寻找的范围:");?scanf("%d",&Limit);?if(Limit>65536)?printf(" 超出范围!");?elseprintf("?*n");printf("?*磁盘调度算法

10、*n");?printf("?*n");?printf(" *?1.先来先服务算法(FCFS)?*n");?printf("?*?2. 最短寻道时间优先算法(SSTF)?*n");?printf("?*?3. 扫描算法(SCAN)?*n");?printf("?*?4. 循环扫描算法(CSCAN)?*n");?printf("?*?scanf("%d",&n);?if(n=0)exit(0);?printf("n");?swit

11、ch(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);/ 循

12、环扫描算法(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("nn+ 寻道长度由低到高排序:");?for(i=0;i&

13、lt;5;i+)?printf("%4d",Besti0);?break;?printf("nn+ 是否继续(按 0 结束 ,按 1 继续 )?");?scanf("%5d",&Con);?/数组Sour复制到数组 Dist,复制到x个数voidCopyL(intSour,intDist,intx)?inti;?for(i=0;i<=x;i+)?Disti=Souri;?/ 打印输出数组PrivoidPrint(intPri,intx)?inti;?for(i=0;i<=x;i+)?printf("%5d

14、",Prii);?/ 随机生成磁道数voidSetDI(intDiscL)?inti;?for(i=0;i<=9;i+)?DiscLi=rand()%Limit;/ 随机生成10 个磁道号?printf("+ 需要寻找的磁道号:");?Print(DiscL,9);?/ 输出随机生成的磁道号?printf("n");/ 数组 Sour 把 x 位置的数删除,并把y 前面的数向前移动,y 后的数保持不变(即会出现2 个 y)?voidDelInq(intSour,intx,inty)?inti;?for(i=x;i<y;i+)?Sou

15、ri=Souri+1;?x+;?/ 先来先服务算法(FCFS)voidFCFS(intHan,intDiscL)?intRLine10;?/ 将随机生成的磁道数数组Discl 复制给数组RLine?inti,k,All,Temp;?/Temp 是计算移动的磁道距离的临时变量?All=0;?/ 统计全部的磁道数变量?k=9;?/ 限定 10 个的磁道数?CopyL(DiscL,RLine,9);?/ 复制磁道号到临时数组RLine?printf("n+按照FCFS算法磁道的访问顺序为:");?All=Han-RLine0;?for(i=0;i<=9;i+)?Temp=R

16、Line0-RLine1;/ 求出移动磁道数,前一个磁道数减去后一个磁道数得出临时的移动距离?if(Temp<0)?Temp=(-Temp);/ 移动磁道数为负数时,算出相反数作为移动磁道数?printf("%5d",RLine0);?All=Temp+All;/ 求全部磁道数的总和?DelInq(RLine,0,k);/ 每个磁道数向前移动一位?k-;?BestJage1=All;/Best1 存放移动磁道数?BestJage0=1;/Best0 存放算法的序号为:1?Jage+;/ 排序的序号加1?Aver=(float)All)/10;/ 求平均寻道次数?pri

17、ntf("n+ 移动磁道数:<%5d>",All);?printf("n+ 平均寻道长度:*%0.2f*",Aver);/ 最短寻道时间优先算法(SSTF)voidSSTF(intHan,intDiscL)?inti,j,k,h,All;?intTemp;?/Temp 是计算移动的磁道距离的临时变量?intRLine10;?/ 将随机生成的磁道数数组Discl 复制给数组RLine?intMin;?All=0;?/ 统计全部的磁道数变量?k=9;?/ 限定 10 个的磁道数?CopyL(DiscL,RLine,9);?/ 复制磁道号到临时数组

18、RLine?printf("n+ 按照 SSTF 算法磁道的访问顺序为:");?for(i=0;i<=9;i+)?Min=64000;?for(j=0;j<=k;j+)/ 内循环寻找与当前磁道号最短寻道的时间的磁道号?if(RLinej>Han)?/ 如果第一个随机生成的磁道号大于当前的磁道号,执行下一句?Temp=RLinej-Han;?/ 求出临时的移动距离?else?Temp=Han-RLinej;?/ 求出临时的移动距离?if(Temp<Min)?如果每求出一次的移动距离小于Min,执行下一句?Min=Temp;?/Temp 临时值赋予Min

19、?h=j;?/ 把最近当前磁道号的数组下标赋予?All=All+Min;?/ 统计一共移动的距离?printf("%5d",RLineh);?Han=RLineh;?DelInq(RLine,h,k);?/ 每个磁道数向前移动一位?k-;?BestJage1=All;/Best1 存放移动磁道数?BestJage0=2;/Best0 存放算法的序号为:2?Jage+;/ 排序序号加1?Aver=(float)All)/10;/ 求平均寻道次数?printf("n+ 移动磁道数:<%5d>",All);?printf("n+ 平均寻道

20、长度:*%0.2f*",Aver);/ 扫描算法(SCAN)intSCAN(intHan,intDiscL,intx,inty)?intj,n,k,h,m,All;?intt=0;?intTemp;?intMin;?intRLine10;/ 将随机生成的磁道数数组Discl 复制给数组RLine?intOrder;?Order=1;?k=y;?m=2;?/ 控制 while 语句的执行,即是一定要使当前磁道向内向外都要扫描到?All=0;?/ 统计全部的磁道数变量?CopyL(DiscL,RLine,9);?/ 复制磁道号到临时数组RLine?printf("n+ 按照 S

21、CAN 算法磁道的访问顺序为:");?Min=64000;?for(j=x;j<=y;j+)?/ 寻找与当前磁道号最短寻道的时间的磁道号?if(RLinej>Han)?/ 如果第一个随机生成的磁道号大于当前的磁道号,执行下一句?Temp=RLinej-Han;?/ 求出临时的移动距离?else?Temp=Han-RLinej;?/ 求出临时的移动距离?if(Temp<Min)?Min=Temp;?/Temp 临时值赋予Min?h=j;?/ 把最近当前磁道号的数组下标赋予h?All=All+Min;?printf("%5d",RLineh);?if

22、(RLineh>=Han)?/ 判断磁道的移动方向,即是由里向外还是由外向里?Order=0;?t=1;?Han=RLineh;?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(RLinen<=Han)?Temp=Han-RLinen;?if(Temp<Min)?Min=

23、Temp;?/Temp 临时值赋予Min?h=n;?/ 把最近当前磁道号的数组下标赋予h?if(h!=-1)?All=All+Min;?/ 叠加移动距离?printf("%5d",RLineh);?Han=RLineh;/ 最近的磁道号作为当前磁道?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=6400

24、0;?for(n=x;n<=k;n+)?/ 判断离当前磁道最近的磁道号?if(RLinen>=Han)?Temp=RLinen-Han;?if(Temp<Min)?Min=Temp;?/Temp 临时值赋予Min?h=n;?/把最近当前磁道号的数组下标赋予h?if(h!=-1)?All=All+Min;?/ 叠加移动距离?printf("%5d",RLineh);?Han=RLineh;?/ 最近的磁道号作为当前磁道?DelInq(RLine,h,k);?k-;?Order=1;?/ 当完成向内的移动,order 赋予0,执行else 语句,使磁道向外移动

25、?m-;?/ 向内完成一次,m 减一次,保证while 循环执行两次?NAll=NAll+All;?if(y-x)>5)?BestJage1=All;/Best1 存放移动磁道数?BestJage0=3;/Best0 存放算法的序号为:3?Jage+;/ 排序序号加1?Aver=(float)All)/10;/ 求平均寻道次数?printf("n+ 移动磁道数:<%5d>",All);?printf("n+ 平均寻道长度:*%0.2f*",Aver);?if(t=1)printf("n+ 磁道由内向外移动");?el

26、seprintf("n+ 磁道由外向内移动");?return(Han);/ 循环扫描算法(CSCAN)voidCSCAN(intHan,intDiscL)?intj,h,n,Temp,m,k,All,Last,i;?intRLine10;?/ 将随机生成的磁道数数组Discl 复制给数组RLine?intMin;?inttmp=0;?m=2;?k=9;?All=0;?/ 统计全部的磁道数变量?Last=Han;?CopyL(DiscL,RLine,9);?/ 复制磁道号到临时数组RLine?printf("n+ 按照 CSCAN 算法磁道的访问顺序为:"

27、;);?while(k>=0)?for(j=0;j<=9;j+)?/ 从当前磁道号开始,由内向外搜索离当前磁道最近的磁道号?h=-1;?Min=64000;?for(n=0;n<=k;n+) ?if(RLinen>=Han)?Temp=RLinen-Han;?if(Temp<Min)?Min=Temp;?h=n;?if(h!=-1)?All=All+Min;?/ 统计一共移动的距离?printf("%5d",RLineh);?Han=RLineh;?Last=RLineh;?DelInq(RLine,h,k);?k-;?if(k>=0)?

28、tmp=RLine0;?for(i=0;i<k;i+)/ 算出剩下磁道号的最小值?if(tmp>RLinei)tmp=RLinei;?Han=tmp;/ 把最小的磁道号赋给Han?Temp=Last-tmp;/ 求出最大磁道号和最小磁道号的距离差?All=All+Temp;?BestJage1=All;/Best1 存放移动磁道数?BestJage0=4;/Best0 存放算法的序号为:4?Jage+;/ 排序序号加1?Aver=(float)All)/10;/ 求平均寻道次数?printf("n+ 移动磁道数:<%5d>",All);?printf

29、("n+ 平均寻道长度:*%0.2f*",Aver);voidPaiXu()?inti,j,Temp;?for(i=0;i<5;i+)?for(j=0;j<4;j+)?if(Bestj1>Bestj+11)?/ 如果前一个算法的移动磁道距离大于后一个移动磁道数,执行下面语句?Temp=Bestj+11;?/ 从这起下三行执行冒泡法将移动距离大小排序,排完后则执行每个算法的排序?Bestj+11=Bestj1;?Bestj1=Temp;?Temp=Bestj+10;?/ 将每个算法的序号用冒泡法排序?Bestj+10=Bestj0;?Bestj0=Temp;

30、?第 4章与文件管理有关的系统功能调用实践作业参照“强化实践能力培养课程内容”中“文件操作实践能力培养考核选例”程序,请构造一个能管理文本文件的学生成绩表的简单数据库管理系统。设文本文件的学生成绩表中每条学生成绩记录有3个字段构成:学号20个字节,姓名20个字节,成绩10个字节,字段间用空格分割对齐。简单数据库管理系统具有基本的功能有:追加一条记录,(仅允许文件主)按学号读出一条记录,按学号升序列出所有记录.(提示:可建立一个学生成绩表文件和一个以学号为主键的索引文件。)答: #include<malloc.h>#include<stdio.h>#include<

31、stdlib.h>#defineLENsizeof(structscore)#defineDEBUG #include<string.h>typedefstructscore?charno20;/ 记录号?charnumber20;/* 学号 */?charname20;/* 姓名 */?chargrades10;/ 成绩?structscore*next;/ 下一个节点score;intm,n;score*load(score*head)?score*p1,*p2;?intm=0;?charfilepn10;?FILE*fp;?printf(" 请输入文件路径机文

32、件名n");?scanf("%s",filepn);?if(fp=fopen(filepn,"r+")=NULL)?printf("不能打开文件 n");?exit(0);?p1=(score*)malloc(LEN);?head=NULL;?while(!feof(fp)?n=n+1;?if(n=1)head=p1;?elsep2->next=p1;?p2=p1;?p1=(score*)malloc(LEN);?fscanf(fp,"%s%s%s%s",p1->no,p1->numbe

33、r,p1->name,p1->grades);?p2->next=p1;?p1->next=NULL;?n+;?fclose(fp);?returnhead;/ 追加score*append(score*head)?score*p1,*p2,*p3;?p3=(score*)malloc(LEN);?printf(" 输入学生信息:n");?printf(" 记录号学号姓名成绩n");?scanf("%s%s%s%s",p3->no,p3->number,p3->name,p3->grad

34、es);?p1=head;?if(head=NULL)?/如果链表为空 ?head=p3;?p3->next=NULL;? ?else ?if(p1->next=NULL) ? ?p1->next=p3;?p3->next=NULL;?else?while(p1->next!=NULL)/ 若是还没有到尾端的话? ?p2=p1;?p1=p1->next;? ?p1->next=p3;?p3->next=NULL;? ? ?n+;?returnhead;第 5章与设备管理有关的操作系统算法实践作业 参照“强化实践能力培养课程内容”中“磁盘移臂调度算

35、法实践能力培养考核选例”程序编写一个能演示“最短寻找时间优先算法 Sstf ”的程序。 s 该程序能分析出“ ,即能统计和报告出“最短寻找时间优先算法”下磁头响应请求的顺序、移臂的总量和掉头的次数。: #include"stdio.h"include"stdlib.h"oidCopyL(intSour口,intDist口,intx);/ 数组 Sour复制到数组 Dist,复制到 x 个数oidSetDI(intDiscL);/ 随机生成磁道数oidPrint(intPri,intx);/ 打印输出数组PrioidDelInq(intSour口,intx

36、,inty);/数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2 个 y)oidSSTF(intHan,intDiscL);/最短寻道时间优先算法(SSTF)voidPaiXu();/寻道长度由低到高排序 voidPri();intNAll=0;ntBest52;/用作寻道长度由低到高排序时存放的数组intLimit=0;/ 输入寻找的范围磁道数iintJage;floatAver=0;ntmain()nti;ntDiscLine10;/声明准备要生成的随机磁道号的数组intHand;/磁道数intCon=1;intn;hile(Con=1)age=0;pri

37、ntf("n 请输入初始的磁道数(0<n<65536):");scanf("%d",&Hand);printf("n+ 输入寻找的范围:");scanf("%d",&Limit);if(Limit>65536)rintf(" 超出范围!");lserintf("*n");rintf("I*磁盘调度算法*n");rintf("I*n");rintf("*2. 最短寻道时间优先算法(SSTF)*n

38、");printf("I*n");scanf("%d",&n);if(n=0)exit(0);rintf("n");witch(n)ase2: etDI(DiscLine);/ 随机生成磁道数STF(Hand,DiscLine);最短寻道时间优先算法(SSTF) reak;rintf("nn+ 是否继续(按 0 结束,按1 继续 )?");canf("%5d",&Con);/数组Sour复制到数组Dist,复制到x个数oidCopyL(intSour,intDist,i

39、ntx)nti;or(i=0;i<=x;i+) isti=Souri;/打印输出数组PrivoidPrint(intPri,intx) nti;or(i=0;i<=x;i+) rintf("%5d",Prii);/随机生成磁道数voidSetDI(intDiscL) nti;or(i=0;i<=9;i+)iscLi=rand()%Limit;/ 随机生成10个磁道号rintf("+ 需要寻找的磁道号:");rint(DiscL,9);输出随机生成的磁道号printf("n");/数组Sour把x位置的数删除,并把y前

40、面的数向前移动,y后的数保持不变(即会出现2个 y)oidDelInq(intSour,intx,inty)nti;or(i=x;i<y;i+)ouri=Souri+1;+;/最短寻道时间优先算法(SSTF)voidSSTF(intHan,intDiscL)nti,j,k,h,All;ntTemp;/Temp是计算移动的磁道距离的临时变量ntRLine10;将随机生成的磁道数数组 Discl复制给数组RLine口ntMin;11=0;/统计全部的磁道数变量=9;/限定10个的磁道数opyL(DiscL,RLine,9);复制磁道号到临时数组RLine rintf("n+按照SSTF算法磁道的访问顺序为:");or(i=0;i<=9;i+)in=64000;or(j=0;j<=k;j+)/ 内循环寻找与当前磁道号最短寻道的时间的磁道号f(RLinej>Han)/ 如果第一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论