操作系统概论实践作业

上传人:hao****an 文档编号:96854588 上传时间:2022-05-26 格式:DOC 页数:21 大小:72.51KB
收藏 版权申诉 举报 下载
操作系统概论实践作业_第1页
第1页 / 共21页
操作系统概论实践作业_第2页
第2页 / 共21页
操作系统概论实践作业_第3页
第3页 / 共21页
资源描述:

《操作系统概论实践作业》由会员分享,可在线阅读,更多相关《操作系统概论实践作业(21页珍藏版)》请在装配图网上搜索。

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 my1(7)列出进程状态信

2、息中含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, 输入命

3、令 :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章

4、 与处理器管理有关的系统功能调用实践作业 参照“强化实践能力培养课程内容”中“进程创建和执行的实践能力培养考核选例”和“线程的创建及线程间管道通信实践能力培养考核选例”程序,编写一个能建立两个子进程的程序(父进程),让这三个进程并发执行完成以下二元函数的计算:其中由父进程完成: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(int x);int fy(in

5、t 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(y2) ffy=fy(

6、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(intDiscL); /随机

7、生成磁道数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); /循环扫描算法(CS

8、CAN)/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 请输入初始的磁

9、道数(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); /随机生成磁道数 FCFS(Hand,D

10、iscLine); /先来先服务算法(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); /随机生成磁道数 Se

11、tDI(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继续)?); scanf(%5d

12、,&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); /输出随机生成的磁道

13、号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(DiscL,RLine,9); /

14、复制磁道号到临时数组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存放移动磁道数BestJage0=1; /Best0存

15、放算法的序号为: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(DiscL,RLine,9); /复制

16、磁道号到临时数组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;/统计一共移动的距离 printf(%5d,RLineh); H

17、an=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;int Min;int RLine10

18、; /将随机生成的磁道数数组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; /求出临时的移动距离 if(Temp=Han)

19、 /判断磁道的移动方向,即是由里向外还是由外向里 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; /把最近当前磁道号的数组下标赋予h if(h!

20、=-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;/Best1存放移动磁道数BestJag

21、e0=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;/将随机生成的磁道数数组Discl复制给数组RLineint

22、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;/把最小的磁道号赋给Han Temp=

23、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) /如果前一个算法的移动磁道距离大于后一个移动磁道数,执行下面语句 Temp=Bestj+11; /

24、从这起下三行执行冒泡法将移动距离大小排序,排完后则执行每个算法的排序 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;score* load(score *hea

26、d) 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-numbe

27、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-grades); p1=head; if(head=NULL) /如果链表为空 head=p3; p3-next=NULL; else

28、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

29、#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(); /寻道长度由低

30、到高排序 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); printf( * 磁盘调度算法 *n);

31、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) i

32、nt 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;i=9;i+) DiscLi=rand()%Limit;/随机生成10个磁道号 printf(+ 需要寻找的磁道号:); Print(DiscL,9); /输出随机生成的磁道号 printf(n); /数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现

33、2个y) void DelInq(int Sour,int x,int y) int i; for(i=x;iy;i+) Souri=Souri+1; x+; /最短寻道时间优先算法(SSTF) void SSTF(int Han,int DiscL) 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 p

34、rintf(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; /统计一共移动的距离 printf(%5d,RLineh); Han=RLineh; D

35、elInq(RLine,h,k); /每个磁道数向前移动一位 k-; BestJage1=All;/Best1存放移动磁道数 BestJage0=2;/Best0存放算法的序号为:2 Jage+;/排序序号加1 Aver=(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) /如果前一个算法的移动磁道距离大于后一个移动磁道数,执行下面语句 Temp=Bestj+11;

36、/从这起下三行执行冒泡法将移动距离大小排序,排完后则执行每个算法的排序 Bestj+11=Bestj1; Bestj1=Temp; Temp=Bestj+10; /将每个算法的序号用冒泡法排序 Bestj+10=Bestj0; Bestj0=Temp; 第6章 与并发进程有关的系统功能调用实践作业参照“强化实践能力培养课程内容”中“进程的同步与互斥实践能力培养考核选例”程序和“文件操作实践能力培养考核选例”程序,请在计算机上实现教材第6章习题6要求的功能。答:这四个进程实际上是两个生产者R1,R2和两个消费者W1,W2.各自生成的不同产品中各自的消费对象去消费,他们共享一个的缓冲器。由于缓冲器

37、只能存放一个数,所以,R1和R2在存放时必须互斥。而R1和W1、R2和W2之间存在同步。为了协调他们之间的工作可定义三个信号量:S: 表示能否把数存入缓冲器B,初始值为1。S1:表示R1是否已向缓冲器存入从键盘上读入的一个数,初始值为0,S2:表示R2是否已向缓冲器存入从磁盘上读入的一个数,初始值为0。beginS,S1,S2:semaphore;S:=1;S1:=S2:=0;cobeginprocess R1x1:integer;beginL1:从键盘读入一个数;x1:=读入的数;P(S);B:=x1;V(S1);goto L1;end;process R2x2:integer;beginL2:从磁盘读入一个数;X2:=读入的数;P(S);B:=x2;V(S2);goto L2;end;process W1y:integer;beginL3:P(S1);y:=B;V(S);打印y中的数;goto L3;end;process W2z:integer;beginL4:P(S2);z:=B;V(S);打印z中的数;goto L4;end;coend;end.

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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