操作系统上机资料整合 FIFOLRUFCFSSJF算法都有 C语言 已调试.docx
《操作系统上机资料整合 FIFOLRUFCFSSJF算法都有 C语言 已调试.docx》由会员分享,可在线阅读,更多相关《操作系统上机资料整合 FIFOLRUFCFSSJF算法都有 C语言 已调试.docx(15页珍藏版)》请在冰豆网上搜索。
操作系统上机资料整合FIFOLRUFCFSSJF算法都有C语言已调试
一、20个命令,选8个。
1.shutdown
设置1分钟后重启
#shutdown-r分钟数,例如#shutdown–r2为两分钟后重启
设置定时关机
#shutdown-hhh:
mm,例如#shutdown–h19:
31为19点31分关机
2.ls
查看/home/test目录下文件情况
#ls/home/test
3.cp
将foo.txt文件拷贝到/home/test2目录下,命名为foo2.txt
#cp/home/test/foo.txt/home/test2/foo2.txt
4.rm
将Finished子目录及子目录中所有档案删除:
#rm-rFinished
5.mv
将foo.txt文件移动到/home/test3目录下,命名为foo3.txt
#mvfoo.txt/home/test3/foo3.txt
6.pwd
查看当前目录
#pwd
7.cd
切换目录到/home/test
#cd/home/test
8.mkdir
创建test目录到/home目录下
#mkdir/home/test
9.rmdir
删除/home/test目录
#rmdir/home/test
10.find
/home目录里查找文件1.txt
#find/home-name1.txt
/home目录里查找所有文本文件,注意单双引号使用与否的区别
#find/home-name“*.txt”
/home目录里查找除1.txt外的文件
#find/home!
-name1.txt
11.grep
查找文件file1中以b开头的行
#grep‘^b’file1
查找文件file1中以b结尾的行
#grep’b$’file1
查找文件file1中所有以an为头两个字符的3个字符,包括any,and等。
#grep‘an.’file1
12.chown
把文件shiyan.c的所有者改为wang
#chownwangshiyan.c
把目录/his及其下的所有文件和子目录的属主改成wang,属组改成users
#chown-Rwang.users/his
13.chmod
将foo.txt文件属主增加写权限,同组用户增加执行权限,其他用户删除执行权限;
$chmodu+w/home/usr1/foo.txt
$chmodg+x/home/usr1/foo.txt
$chmodo-x/home/usr1/foo.txt
14.groupadd
新建用户组grp2(简单使用)
#groupaddgrp2
创建用户组grp1(带参数使用)
#groupaddgrp1(groupadd[-ggid][-o][-r][-f]groupname)
建立一个新组,并设置组ID加入系统:
#groupadd-g2000groupname
此时在/etc/group文件中产生一个组ID(GID)是2000的项目。
15.cat
显示/home/test/foo.txt文件内容
#cat/home/test/foo.txt
用cat命令把foo2.txt和foo3.txt的内容合并到/home下的newfoo.txt
#cat/home/test2/foo2.txt/home/test3/foo3.txt>/home/newfoo.txt
16.more
分页查看新生成的newfoo.txt文件
#more/home/newfoo.txt
17.man
强制man命令在第2节文件夹中查找poll帮助内容
#man2poll
man是按照手册的章节号的顺序进行搜索的,比如:
#mansleep
只会显示sleep命令的手册,如果想查看库函数sleep,就要输入:
#man3sleep
18.date
查看当前时间。
#date
19.cal
显示当月的日历
#cal
显示当年日历
#cal-y
显示2012年的日历
#cal2012
显示2012年的6月的日历
#cal62012
20.wc
统计文件1.txt的字节数
#wc-c/home/1.txt
统计文件1.txt的行数
#wc-l/home/1.txt
统计文件1.txt的字数
#wc-w/home/1.txt
统计文件1.txt,2.txt的文本信息
#wc-lcw/home/1.txt/home/2.txt
或#wc/home/1.txt/home/2.txt
二、shell编程(循环)
①找出100以内所有7的倍数。
提示:
利用取余数运算%,当余数为0表示判断一个数是另一个数的整数倍。
#!
/bin/bash
x=1
while[$x–le100];
do
a=$(expr$x%7)
if[$a–eq0];then
echo“$x”
fi
x=$(expr$x+1)
done
题目2:
创建以下bash文件并执行
计算指定整数范围内的素数/质数的个数。
例如,#./2.sh5060将输出50和60之间的素数个数2。
(注:
素数指,只能被1和自身整除的整数。
)
#!
/bin/bash
#checkarguments
if[$#-lt2];then
echo"argumentnumbererror!
"
exit1
fi
a=$1
b=$2
#oneisnotprime
If[$a-gt1];then
a2=$a
else
a2=2
fi
num=0
x=$a2
while[$x-le$b];do
#checkxisprimeornot
flag=1
y=2
while[$y-lt$x];do
c=$(expr$x%$y)
if[$c-eq0];then
flag=0
fi
y=$(expr$y+1)
done
if[$flag-eq1];then
echo"$x"
num=$(expr$num+1)
fi
x=$(expr$x+1)
done
echo"numberofprimesin[$a,$b]is$num."
三、用C语言编程实现先来先服务(FCFS)、最短作业优先(SJF)、先进先出(FIFO)、最近最少用(LRU)算法
//FCFS
#include"stdio.h"
#include"stdlib.h"
intmain()
{
inti,num,n;
intrt[100];//运行时间
intat[100];//到达时间
intet[100];//结束时间
intct[100];//周转时间
floattotaltime,avgtime;//总时长,平均周转时长
printf("一共有几道作业:
");
scanf("%d",&n);
printf("按作业的到达顺序输入各作业需要的运行时间\n");
for(i=0;i{
printf("作业%d运行时间:
",i+1);
scanf("%d",&rt[i]);
printf("到达时间:
");
scanf("%d",&at[i]);
}
printf("FCFS;\n");
for(i=0;i{if(i==0)
et[i]=at[i]+rt[i];
else
et[i]=et[i-1]+rt[i];
ct[i]=et[i]-at[i];
printf("p%d:
rt=%d,at=%d,et=%d,ct=%d\n",i+1,rt[i],at[i],et[i],ct[i]);
}
totaltime=0.0f;
for(i=0;itotaltime+=(float)ct[i];
avgtime=totaltime/n;
printf("totalcyclingtimeofFCFSis:
%.2f.\n",totaltime);
printf("averagecyclingtimeofFCFSis:
%.2f.\n",avgtime);
return0;
}
//SJF
#include"stdio.h"
#include"stdlib.h"
intmain()
{
inti,n,j,next;
intrt[100];//运行时间
intat[100];//到达时间
intyunxingtime;//结束时间
floattotaltime,avgtime;//总时长,平均周转时长
printf("一共有几道作业:
");
scanf("%d",&n);
printf("按作业的到达顺序输入各作业需要的运行时间\n");
for(i=0;i{
printf("作业%d运行时间:
",i+1);
scanf("%d",&rt[i]);
printf("到达时间:
");
scanf("%d",&at[i]);
}
j=0;
printf("SJF;\n");
for(i=1;i{if(at[j]>at[i])
j=i;}//求出最先到达的
totaltime=0.0f;
totaltime=(float)rt[j];
yunxingtime=rt[j]+at[j];
printf("p%d:
rt=%d,at=%d,et=%d\n",j+1,rt[j],at[j],yunxingtime);
for(j=1;j{next=n+1;
for(i=0;i{if(at[i]!
=0)
{if(at[i]<=yunxingtime)
{if(next==n+1)
next=i;//在上一个作业结束之前到达的作业
elseif(rt[next]>rt[i])
next=i;//当两个作业都符合上一个作业结束之前到达,则比较它们的执行时间
}
}}
yunxingtime+=rt[next];
totaltime+=yunxingtime-at[next];
printf("p%d:
rt=%d,at=%d,et=%d\n",next+1,rt[next],at[next],yunxingtime);
at[next]=0;
}
avgtime=(float)totaltime/n;
printf("totalcyclingtimeofFCFSis:
%.2f.\n",totaltime);
printf("averagecyclingtimeofFCFSis:
%.2f.\n",avgtime);
return0;
}
//FIFO
#include"stdio.h"
intmain(intargc,char*argv[])
{
inti,j,k,k2,t;
intn1;
intn2;
intpageseq[100];
intmempages[10][2];
intn3;
intn4;
intreplacedPage;
printf("总页面:
");
scanf("%d",&n1);
if(n1<1)
{
printf("页面错误!
\n");
return1;
}
printf("pagenumber:
");
scanf("%d",&n2);
for(i=0;i{
printf("%d-thpageis:
",i+1);
scanf("%d",&t);
pageseq[i]=t;
}
n3=0;
n4=0;
for(i=0;i{
for(j=0;j{
if(mempages[j][0]==pageseq[i])
break;
}
if(j==n3&&n3mempages[n3][0]=pageseq[i];
mempages[n3][1]=i+1;
n3++;n4++;
}
elseif(j==n3){
intminv;
minv=mempages[0][1];k2=0;
for(k=1;kif(minv>mempages[k][1]){
k2=k;
minv=mempages[k][1];
}
}
replacedPage=mempages[k2][0];
mempages[k2][0]=pageseq[i];
mempages[k2][1]=i+1;
n4++;
printf("page%din,page%dout.%d-thmissingpage.\n",pageseq[i],replacedPage,n4);
}
else{
printf("page%disinmemory.\n",pageseq[i]);
}
}
printf("Totally%dmissingpages!
\n",n4);
return0;
}
//LRU
#include"stdio.h"
intmain(intargc,char*argv[])
{
inti,j,k,k2,t;
intn1;
intn2;
intpageseq[100];
intmempages[10][2];
intn3;
intn4,w;
intreplacedPage;
printf("总页面:
");
scanf("%d",&n1);
if(n1<1)
{
printf("页面错误!
");
return1;
}
printf("pagenumber:
");
scanf("%d",&n2);
for(i=0;i{
printf("%d-thpageis:
",i+1);
scanf("%d",&t);
pageseq[i]=t;
}
n3=0;
n4=0;
for(i=0;i{
for(j=0;j{
if(mempages[j][0]==pageseq[i])
break;
}
if(j==n3&&n3mempages[n3][0]=pageseq[i];
mempages[n3][1]=0;
if(j==0)
mempages[n3][1]=0;
else
for(w=0;wmempages[w][1]++;
n3++;n4++;
}
elseif(j==n3){
intminv;
minv=mempages[0][1];
k2=0;
for(k=1;kif(mempages[k][1]>minv){
k2=k;
minv=mempages[k][1];
}
}
replacedPage=mempages[k2][0];
mempages[k2][0]=pageseq[i];
mempages[k2][1]=0;
for(w=0;wif(w!
=k2)
mempages[w][1]++;
n4++;
printf("page%din,page%dout.%d-thmissingpage.\n",pageseq[i],replacedPage,n4);
}
else{mempages[j][1]=0;
for(w=0;wif(w!
=j)
mempages[w][1]++;
printf("page%disinmemory.\n",pageseq[i]);
}
}
printf("Totally%dmissingpages!
\n",n4);
return0;
}