《操作系统概论实践作业.docx》由会员分享,可在线阅读,更多相关《操作系统概论实践作业.docx(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上章节作业第1章 Shell命令操作实践作业(1)在当前登录用户的主目录下创建子目录mysub,进入mysub目录。答: mkdir mysub & cd mysub(2)显示当前目录路径。 答: pwd(3)显示用户名和用户主目录答: echo $HOME $USER(4)将用户主目录添加到可执行文件搜索路径答: export PATH=$PATH:$HOME(5)显示添加后的可执行文件搜索路径答: echo $PATH(6)列出主目录下所有以”.ba”或“.pr”打头的文件名及其属性并将其存入my1文件中答: ls -l $HOME/*.ba $HOME/*.pr
2、my1(7)列出进程状态信息中含tty的进程,并将其存入my2文件中答: ps -ef | grep tty my2(8)将my1和my2串联成一个新文件my3答: cat my1 my2 my3(9)将当前目录下的所有文件压缩归档到myf.tar.gz文件中答: tar cvf myf.tar.gz *(10)将my3移动到上级目录中答: mv my3 ./(11)删除文件my1和my2答: rm my1 my2(12)启动vi文本编辑程序答: vi(13)在vi中输入(3) (11)步的操作命令,并将其存入文件mysh答: 按 i 进入编辑模式,按esc退出编辑模式,按 : 输入命令 :s
3、ave mysh, 输入命令 :wq保存退出(14)将vi放入后台运行答: vi &(15)将文件mysh访问权限改为文件主可执行答: chmod +x mysh(16)将文件mysh复制到上级目录中答: cp mysh ./(17)令vi返回前台,从中追加睡眠1分钟和返回前台的命令,从vi保存退出答: fg 后面追加 sleep 60 & fg(18)以后台运行方式启动mysh答: mysh &(19)找到执行睡眠命令的的进程号答: ps -fu $USER | grep mysh | awk print $2(20)用发送信号命令向睡眠命令进程号发送终止信号,让mysh停止执行。答: ki
4、ll -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)答: #includeint fx(in
5、t x);int fy(int y);void main() int x,y; printf(please input x:); scanf(%d,&x); int ffx,ffy; ffx=fx(x); printf(please input y:); scanf(%d,&y); ffy=fy(y); int z; z=ffx+ffy; printf(%d,z);int fx(int x) int ffx; if(x=1) ffx=1; else ffx=fx(x-1)*x; return ffx;int fy(int y) int ffy; if(y=1|y=2) ffy=1; else
6、if(y2) ffy=fy(y-1)+fy(y-2); return ffy;第3章 与存储管理有关的操作系统算法实践作业参照“强化实践能力培养课程内容”中“内存页面置换算法实践能力培养考核选例”程序,编写一个能演示LRU内存页面置换算法的程序,它可根据给定的一组页面引用序列号和实存页数,显示LRU置换页的过程,能统计和报告LRU置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。答: #includestdio.h#includestdlib.hvoid CopyL(intSour,int Dist ,int x); /数组Sour复制到数组Dist,复制到x个数void SetDI
7、(intDiscL); /随机生成磁道数void Print(intPri,int x); /打印输出数组Privoid DelInq(int Sour,intx,int y); /数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y)void FCFS(int Han,intDiscL); /先来先服务算法(FCFS)void SSTF(int Han,intDiscL); /最短寻道时间优先算法(SSTF)int SCAN(int Han,intDiscL,int x,int y); /扫描算法(SCAN)void CSCAN(int Han,intDis
8、cL); /循环扫描算法(CSCAN)/void N_Step_SCAN(intHan1,int DiscL); /N步扫描算法(NStepScan)void PaiXu(); /寻道长度由低到高排序void Pri();int NAll=0;int Best52; /用作寻道长度由低到高排序时存放的数组int Limit=0; /输入寻找的范围磁道数iint Jage;float Aver=0;int main()int i;int DiscLine10; /声明准备要生成的随机磁道号的数组int Hand;/磁道数int Con=1;int n;while(Con=1) Jage=0; p
9、rintf(n 请输入初始的磁道数(0n65536) printf(超出范围!); elseprintf( *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)case 1: SetDI(DiscLine); /随机生成
10、磁道数 FCFS(Hand,DiscLine); /先来先服务算法(FCFS) break;case 2: SetDI(DiscLine); /随机生成磁道数 SSTF(Hand,DiscLine); /最短寻道时间优先算法(SSTF) break;case 3: SetDI(DiscLine); /随机生成磁道数 SCAN(Hand,DiscLine,0,9); /扫描算法(SCAN) break;case 4: SetDI(DiscLine); /随机生成磁道数 CSCAN(Hand,DiscLine); /循环扫描算法(CSCAN) break;case 5: SetDI(DiscLin
11、e); /随机生成磁道数 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;i5;i+) printf(%4d ,Besti0); break; printf(nn+ 是否继续(按0结束,按1继
12、续)?); scanf(%5d,&Con); /数组Sour复制到数组Dist,复制到x个数void CopyL(intSour,int Dist ,int x)int i;for(i=0;i=x;i+) Disti=Souri;/打印输出数组Privoid Print(intPri,int x)int i;for(i=0;i=x;i+) printf(%5d,Prii);/随机生成磁道数void SetDI(intDiscL)int i;for(i=0;i=9;i+) DiscLi=rand()%Limit;/随机生成10个磁道号printf(+ 需要寻找的磁道号:);Print(DiscL
13、,9); /输出随机生成的磁道号printf(n);/数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y)void DelInq(intSour,int x,int y)int i;for(i=x;iy;i+) Souri=Souri+1; x+;/先来先服务算法(FCFS)void FCFS(int Han,intDiscL)int RLine10;/将随机生成的磁道数数组Discl复制给数组RLineint i,k,All,Temp; /Temp是计算移动的磁道距离的临时变量All=0;/统计全部的磁道数变量k=9; /限定10个的磁道数CopyL(Di
14、scL,RLine,9); /复制磁道号到临时数组RLine printf(n+ 按照FCFS算法磁道的访问顺序为:);All=Han-RLine0;for(i=0;i=9;i+) Temp=RLine0-RLine1;/求出移动磁道数,前一个磁道数减去后一个磁道数得出临时的移动距离 if(Temp0) Temp=(-Temp);/移动磁道数为负数时,算出相反数作为移动磁道数 printf(%5d,RLine0); All=Temp+All;/求全部磁道数的总和 DelInq(RLine,0,k);/每个磁道数向前移动一位 k-;BestJage1=All;/Best1存放移动磁道数BestJ
15、age0=1; /Best0存放算法的序号为:1Jage+;/排序的序号加1Aver=(float) All)/10;/求平均寻道次数printf(n+ 移动磁道数: ,All);printf(n+ 平均寻道长度:*%0.2f* ,Aver);/最短寻道时间优先算法(SSTF)void SSTF(int Han,intDiscL)int i,j,k,h,All;int Temp;/Temp是计算移动的磁道距离的临时变量int RLine10; /将随机生成的磁道数数组Discl复制给数组RLineint Min;All=0;/统计全部的磁道数变量k=9; /限定10个的磁道数CopyL(Dis
16、cL,RLine,9); /复制磁道号到临时数组RLine printf(n+ 按照SSTF算法磁道的访问顺序为:);for(i=0;i=9;i+) Min=64000; for(j=0;jHan) /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句 Temp=RLinej-Han; /求出临时的移动距离 else Temp=Han-RLinej; /求出临时的移动距离 if(TempMin) /如果每求出一次的移动距离小于Min,执行下一句 Min=Temp;/Temp临时值赋予Min h=j;/把最近当前磁道号的数组下标赋予h All=All+Min;/统计一共移动的距离 print
17、f(%5d,RLineh); Han=RLineh; DelInq(RLine,h,k); /每个磁道数向前移动一位 k-;BestJage1=All;/Best1存放移动磁道数BestJage0=2;/Best0存放算法的序号为:2Jage+;/排序序号加1Aver=(float)All)/10;/求平均寻道次数printf(n+ 移动磁道数: ,All);printf(n+ 平均寻道长度:*%0.2f* ,Aver);/扫描算法(SCAN)int SCAN(int Han,intDiscL,int x,int y) int j,n,k,h,m,All;int t=0;int Temp;in
18、t Min;int RLine10; /将随机生成的磁道数数组Discl复制给数组RLineint Order;Order=1;k=y;m=2; /控制while语句的执行,即是一定要使当前磁道向内向外都要扫描到All=0;/统计全部的磁道数变量CopyL(DiscL,RLine,9); /复制磁道号到临时数组RLine printf(n+ 按照SCAN算法磁道的访问顺序为:);Min=64000;for(j=x;jHan) /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句 Temp=RLinej-Han; /求出临时的移动距离 else Temp=Han-RLinej; /求出临时的
19、移动距离 if(Temp=Han) /判断磁道的移动方向,即是由里向外还是由外向里 Order=0; t=1;Han=RLineh;DelInq(RLine,h,k); /每个磁道数向前移动一位k-;while(m0) 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(TempMin) Min=Temp; /Temp临时值赋予Min h=n; /把最近当前
20、磁道号的数组下标赋予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=64000; for(n=x;n=Han) Temp=RLinen-Han; if(Temp5) BestJage1=All;/Be
21、st1存放移动磁道数BestJage0=3;/Best0存放算法的序号为:3 Jage+;/排序序号加1 Aver=(float)All)/10;/求平均寻道次数 printf(n+ 移动磁道数: ,All); printf(n+ 平均寻道长度:*%0.2f* ,Aver);if(t=1) printf(n+ 磁道由内向外移动);else printf(n+ 磁道由外向内移动);return(Han);/循环扫描算法(CSCAN)void CSCAN(int Han,intDiscL)int j,h,n,Temp,m,k,All,Last,i;int RLine10;/将随机生成的磁道数数组D
22、iscl复制给数组RLineint Min;int tmp=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=Han) Temp=RLinen-Han; if(Temp=0) tmp=RLine0; for(i=0;iRLinei) tmp=RLinei; Han=tmp;/
23、把最小的磁道号赋给Han Temp=Last-tmp;/求出最大磁道号和最小磁道号的距离差 All=All+Temp; BestJage1=All;/Best1存放移动磁道数BestJage0=4;/Best0存放算法的序号为:4Jage+;/排序序号加1Aver=(float)All)/10;/求平均寻道次数printf(n+ 移动磁道数: ,All);printf(n+ 平均寻道长度:*%0.2f* ,Aver);void PaiXu()int i,j,Temp;for(i=0;i5;i+) for(j=0;jBestj+11) /如果前一个算法的移动磁道距离大于后一个移动磁道数,执行下面
24、语句 Temp=Bestj+11; /从这起下三行执行冒泡法将移动距离大小排序,排完后则执行每个算法的排序 Bestj+11=Bestj1; Bestj1=Temp; Temp=Bestj+10; /将每个算法的序号用冒泡法排序 Bestj+10=Bestj0; Bestj0=Temp; 第4章 与文件管理有关的系统功能调用实践作业参照“强化实践能力培养课程内容”中“文件操作实践能力培养考核选例”程序,请构造一个能管理文本文件的学生成绩表的简单数据库管理系统。设文本文件的学生成绩表中每条学生成绩记录有3个字段构成:学号20个字节,姓名20个字节,成绩10个字节,字段间用空格分割对齐。简单数据库
25、管理系统具有基本的功能有: 追加一条记录,(仅允许文件主) 按学号读出一条记录, 按学号升序列出所有记录. (提示:可建立一个学生成绩表文件和一个以学号为主键的索引文件。)答:#include #include #include #define LEN sizeof(struct score)#define DEBUG#include typedef struct score charno20;/记录号 charnumber20;/*学号*/ charname20;/*姓名*/ chargrades10;/成绩 structscore *next;/下一个节点score;int m,n;sco
26、re* load(score *head) score*p1,*p2; intm=0; charfilepn10; FILE*fp; printf(请输入文件路径机文件名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
27、 %s ,p1-no,p1-number,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-grades); p1=head; if(head=NULL) /如果链表为空 head=p3;
28、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章 与设备管理有关的操作系统算法实践作业参照“强化实践能力培养课程内容”中“磁盘移臂调度算法实践能力培养考核选例”程序编写一个能演示“最短寻找时间优先算法Sstf”的程序。s该程序能分析出“ ,即能统计和报告出“最短寻找时间优先算法”下磁头响应请求的顺序、移臂的总量和掉头的次数
29、。答:#include stdio.h #include stdlib.h void CopyL(int Sour,int Dist ,int x); /数组Sour复制到数组Dist,复制到x个数 void SetDI(int DiscL); /随机生成磁道数 void Print(int Pri,int x); /打印输出数组Pri void DelInq(int Sour,int x,int y); /数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) void SSTF(int Han,int DiscL); /最短寻道时间优先算法(SSTF) v
30、oid PaiXu(); /寻道长度由低到高排序 void Pri(); int NAll=0; int Best52; /用作寻道长度由低到高排序时存放的数组 int Limit=0; /输入寻找的范围磁道数i int Jage; float Aver=0; int main() int i; int DiscLine10; /声明准备要生成的随机磁道号的数组 int Hand; /磁道数 int Con=1; int n; while(Con=1) Jage=0; printf(n 请输入初始的磁道数(0n65536) printf(超出范围!); else printf( *n); pr
31、intf( * 磁盘调度算法 *n); printf( *n); printf( * 2.最短寻道时间优先算法(SSTF) *n); printf( *n); scanf(%d,&n); if(n=0) exit(0); printf(n); switch(n) case 2: SetDI(DiscLine); /随机生成磁道数 SSTF(Hand,DiscLine); /最短寻道时间优先算法(SSTF) break; printf(nn+ 是否继续(按0结束,按1继续)?); scanf(%5d,&Con); /数组Sour复制到数组Dist,复制到x个数 void CopyL(int Sour,int Dist ,int x) int i; for(i=0;i=x;i+) Disti=Souri; /打印输出数组Pri void Print(int Pri,int x) int i; for(i=0;i=x;i+) printf(%5d,Prii); /随机生成磁道数 void SetDI(int DiscL) int i; for(i=0