欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    操作系统概论实践作业(共26页).docx

    • 资源ID:15099807       资源大小:28.32KB        全文页数:26页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统概论实践作业(共26页).docx

    精选优质文档-倾情为你奉上章节作业第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 > 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退出编辑模式,按 : 输入命令 :save 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停止执行。答: 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<stdio.h>int fx(int 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 if(y>2) ffy=fy(y-1)+fy(y-2); return ffy;第3章 与存储管理有关的操作系统算法实践作业参照“强化实践能力培养课程内容”中“内存页面置换算法实践能力培养考核选例”程序,编写一个能演示LRU内存页面置换算法的程序,它可根据给定的一组页面引用序列号和实存页数,显示LRU置换页的过程,能统计和报告LRU置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。答: #include"stdio.h"#include"stdlib.h"void CopyL(intSour,int Dist ,int x); /数组Sour复制到数组Dist,复制到x个数void SetDI(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,intDiscL);  /循环扫描算法(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;  printf("n 请输入初始的磁道数(0<n<65536):");     scanf("%d",&Hand);   printf("n+ 输入寻找的范围:");  scanf("%d",&Limit);  if(Limit>65536)   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);  /随机生成磁道数  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(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<5;i+)     printf("%4d ",Besti0);    break;   printf("nn+ 是否继续(按0结束,按1继续)?");  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,9);  /输出随机生成的磁道号 printf("n");/数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) void DelInq(intSour,int x,int y) int i; for(i=x;i<y;i+)    Souri=Souri+1;  x+; /先来先服务算法(FCFS)void FCFS(int Han,intDiscL) int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine int i,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=RLine0-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;/求平均寻道次数  printf("n+ 移动磁道数:<%5d> ",All); printf("n+ 平均寻道长度:*%0.2f* ",Aver);/最短寻道时间优先算法(SSTF)void SSTF(int Han,intDiscL) int i,j,k,h,All; int Temp; /Temp是计算移动的磁道距离的临时变量 int RLine10;   /将随机生成的磁道数数组Discl复制给数组RLine int Min; 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(RLinej>Han)  /如果第一个随机生成的磁道号大于当前的磁道号,执行下一句    Temp=RLinej-Han;  /求出临时的移动距离   else    Temp=Han-RLinej;  /求出临时的移动距离   if(Temp<Min)  /如果每求出一次的移动距离小于Min,执行下一句       Min=Temp; /Temp临时值赋予Min    h=j; /把最近当前磁道号的数组下标赋予h       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+ 平均寻道长度:*%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; int Min; int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine  int Order; 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(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(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=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=64000;    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语句,使磁道向外移动      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+ 磁道由内向外移动"); else printf("n+ 磁道由外向内移动"); return(Han);/循环扫描算法(CSCAN)void CSCAN(int Han,intDiscL)  int j,h,n,Temp,m,k,All,Last,i; int RLine10; /将随机生成的磁道数数组Discl复制给数组RLine  int 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<=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)  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("n+ 平均寻道长度:*%0.2f* ",Aver); void PaiXu() int i,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;      第4章 与文件管理有关的系统功能调用实践作业参照“强化实践能力培养课程内容”中“文件操作实践能力培养考核选例”程序,请构造一个能管理文本文件的学生成绩表的简单数据库管理系统。设文本文件的学生成绩表中每条学生成绩记录有3个字段构成:学号20个字节,姓名20个字节,成绩10个字节,字段间用空格分割对齐。简单数据库管理系统具有基本的功能有: 追加一条记录,(仅允许文件主) 按学号读出一条记录, 按学号升序列出所有记录. (提示:可建立一个学生成绩表文件和一个以学号为主键的索引文件。)答:#include <malloc.h>#include <stdio.h>#include <stdlib.h>#define LEN sizeof(struct score)#define DEBUG#include <string.h>typedef struct score         charno20;/记录号         charnumber20;/*学号*/         charname20;/*姓名*/         chargrades10;/成绩         structscore *next;/下一个节点score;int m,n;score* 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 %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;                   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该程序能分析出“ ,即能统计和报告出“最短寻找时间优先算法”下磁头响应请求的顺序、移臂的总量和掉头的次数。答:#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) void 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 请输入初始的磁道数(0<n<65536):"); scanf("%d",&Hand); printf("n+ 输入寻找的范围:"); scanf("%d",&Limit); if(Limit>65536) printf("超出范围!"); else printf(" *n"); printf(" * 磁盘调度算法 *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

    注意事项

    本文(操作系统概论实践作业(共26页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开