操作系统手册.docx

上传人:b****5 文档编号:12088179 上传时间:2023-04-17 格式:DOCX 页数:32 大小:990.35KB
下载 相关 举报
操作系统手册.docx_第1页
第1页 / 共32页
操作系统手册.docx_第2页
第2页 / 共32页
操作系统手册.docx_第3页
第3页 / 共32页
操作系统手册.docx_第4页
第4页 / 共32页
操作系统手册.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

操作系统手册.docx

《操作系统手册.docx》由会员分享,可在线阅读,更多相关《操作系统手册.docx(32页珍藏版)》请在冰豆网上搜索。

操作系统手册.docx

操作系统手册

许昌学院

《操作系统》实验指导手册

 

学号:

姓名:

班级:

成绩:

2013年06月

实验一Linux操作系统的安装

实验时间:

实验地点:

成绩:

【实验目的】

1.熟悉Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。

2.掌握Linux系统的安装方法,特别是如何在虚拟机上安装、配置该操作系统。

3.了解在多操作系统环境下如何本地安装(光盘安装)Linux系统。

4.熟悉Linux系统的文件系统结构。

【实验内容】

1.安装并配置vmware虚拟机,制定运行环境,特别要启动NAT和USB支持。

2.在vmware上安装RedHatLinux9.0,指定最大空间为20G以上(具体视硬盘剩余空间而定)。

当对虚拟磁盘空间分区时,需至少指定10G给“/”(主目录),分区格式为ext3,还需指定与内存容量相同的swap(交换)区。

3.安装完RedHatLinux9.0系统后,需配置硬件(如网卡、显卡等)和软件(如编程开发软件等)。

【实验步骤和结果】

1、启动VMware,点击图中的CreateaNewVirtualMachine图标,会弹出一个对话框,在对话框中勾选Typical点击Next:

2、在弹出如下对话框中勾选最后一项,点击Next,在新弹出的对话框中选择linux,点击Next。

3、在下图对话框中输入虚拟机的名字XX,修改适当的存储位置,然后点击Next即可。

4、弹出如下对话框,并按下图所示为虚拟机分配磁盘空间,单独存储,然后点击Next,在新出现的对话框中点击finish即可。

5、如下选择安装路径

6、在出现下图所示的界面中,单击skip键。

8、之后,会弹出如下界面,

9、单击是之后安装成功。

【实验总结和体会】

通过本实验,我熟悉了Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。

掌握了Linux系统的安装方法,特别是如何在虚拟机上安装、配置该操作系统。

了解了在多操作系统环境下如何本地安装(光盘安装)Linux系统。

熟悉了Linux系统的文件系统结构。

实验二Linux操作系统的使用与管理

实验时间:

实验地点:

成绩:

【实验目的】

1.熟悉Linux系统终端工作方式的使用,掌握常用的Linux命令。

2.熟悉Linux窗口工作方式的使用,掌握GNOME桌面环境的基本操作,

3.学会使用OpenOffice.Org中的套件来完成文档和图片的处理。

4.了解Linux网络管理的知识,掌握在Linux环境下配置Web服务器和ftp服务的方法。

【实验内容】

1.熟悉开机后登录Linux系统和退出系统的过程;

2.熟悉Linux字符界面—虚拟终端窗口和shell以及图形界面—X-Window(如gnome或KDE);练习并掌握常用的Linux操作命令,如ls、cat、ps、df、find、grep、cd、more、cp、rm、kill、at、vi、cc、man、help、control+d/c、等;熟悉常用shell的提示符;熟悉字符窗口与图形界面之间的切换。

3.学习使用Linux的在线求助系统,如man和help命令等。

4.启动OpenOffice.org应用软件,利用其中的套件制作一个图文并茂的个人简历,并保存为不同的格式,掌握OpenOffice.Org相关套件的功能及用法。

5.在Linux系统中配置好网络以及防火墙,安装WEB和FTP服务器软件,并进行测试,体会Linux的网络管理功能。

【实验步骤和结果】

1、登录Linux系统和退出系统的过程。

开机后登录Linux系统后,输入root后,接着输入password(登录密码),进入Linux界面后,可以打开终端,进行查询和编程。

退出系统操作可在界面中操作与windxp环境下相似,或在终端输入命令shutdown系列命令:

-f:

重启系统时不执行fsck。

-F:

重启时执行fsck。

-h:

将系统关闭,在某种程度上功能与halt命令相当。

-k:

只是送出信息给所有用户,但不会真正关机。

-n:

不调用init程序关机,而是由shutdown自己进行(一般关机程序是由shutdown调用init来实现关机动作的),使用此参数将加快关机速度,但是不建议用户使用此种关机方式。

-r:

shutdown之后重新启动系统。

-c:

取消一个shutdown命令。

例如,当执行一个“shutdown-h15:

30”的命令时,只要按“Ctrl+C”组合键就可以中断关机的命令;而执行如“shutdown-h15:

30&”的命令时,就将shutdown转到后台运行了,此时就需要用“shutdown-c”将前一个shutdown命令取消。

-t<秒数>:

送出警告信息和关机信号之间要延迟多少秒。

[时间]:

设置多久后执行shutdown命令。

时间参数有hh:

mm或+m两种模式。

hh:

mm格式表示在几点几分执行shutdown命令。

例如“shutdown16:

50”表示将在16:

50执行shutdown,+m表示m分钟后执行shutdown。

比较特别的用法是以now表示立即执行shutdown。

值得注意的是这部分参数不能省略。

2、以下为Linux下常用操作命令。

(1)Ls命令打印出当前目录下的清单(如根目录root下),Ls-a不隐藏任何以.字符开始的项目,Ls-l使用较长格式列出信息,Ls–la:

Ls–a与Ls–l的功能和:

(2)cd命令切换目录:

(3)Cat显示文本文件的内容,more显示文件内容:

(4)Vi编辑器,可编写C语言程序:

(5)mkdir建立目录rmdir删除目录:

(6)touch建立文件,rm删除文件,rm-rf删除文件或目录的所有内容,mv移动文件/更改文件名,cp复制一个文件到另一个文件下:

(7)grep在文本中查询含有某些字符的字符串:

(8)find查找文件及目录:

(9)Cc显示当前编辑器错误的输出信息:

(10)>重定向命令(覆盖写)

(11)Help的用法:

3、启动OpenOffice.org应用软件,利用其中的套件制作一个图文并茂的个人简历,如下图所示:

4、配置服务器

(1)执行命令:

serviceiptablesstop关闭linux虚拟机中的防火墙。

主机的防火墙也需要关闭。

(2)配置网络:

首先,VM->Settings->NetworkAdaptor,选择Bridged。

如下图所示:

然后,Edit->VirtualNetworkEditor,如下图

(2)所示。

需要添加VMnet0、VMnet1、VMnet8且按其默认设置。

将VMnet1、VMnet8的“UselocalDHCPservicetodistributeaddresstoVMs”前的复选框勾去掉。

再然后,如下图所示,系统设置->网络,出现下图2,选择“编辑”如下图3所示,ip与物理主机的ip在一个网段,且子网掩码、默认网关相同。

保存设置,并点击图2中的“激活(A)”,这些工作完成后,执行命令servicenetworkstart,开启网络功能。

最后执行ping命令测试网络的连通性。

【实验总结和体会】

5.通过本实验,我熟悉了Linux系统终端工作方式的使用,掌握常用的Linux命令。

熟悉了Linux窗口工作方式的使用,掌握GNOME桌面环境的基本操作,学会了使用OpenOffice.Org中的套件来完成文档和图片的处理。

了解Linux网络管理的知识,掌握了在Linux环境下配置Web服务器和ftp服务的方法。

 

实验三Linux进程管理

实验时间:

实验地点:

成绩:

【实验目的】

1.掌握GCC编译器的用法,学会利用GCC编辑器来编辑C语言程序,学会利用GDB调试器来调试C语言程序。

2.掌握在Linux环境下观察进程运行情况和CPU工作情况的命令

3.了解fork()系统调用,掌握利用fork()创建进程的方法

4.了解Linux系统其他与进程相关的系统调用,如exec、wait和exit等。

5.了解Linux常用的进程通信机制。

【实验内容】

1.利用Linux下的进程管理命令ps观察进程的运行信息。

2.编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行,父亲进程执行时屏幕显示“Iamfather”,儿子进程执行时屏幕显示“Iamson”,女儿进程执行时屏幕显示“Iamdaughter”。

3.编写程序模拟实现生产者和消费者问题。

【实验步骤和结果】

1、利用进程管理命令ps观察进程的运行信息。

2、编写一C语言程序,实现在程序运行时通过系统调用fork()创建两个子进程,使父、子三进程并发执行。

可通过桌面方式和命令方式打开编辑器,桌面方式为:

菜单->附件->文本编辑器。

命令方式如下,gedit文件名,编辑界面如下图。

结果显示为:

3、编写程序模拟实现生产者和消费者问题.

程序代码如下:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#defineFIFO"myfifo"

#defineN5

intlock_var;

time_tend_time;

charbuffer[100];

sem_tmutex,full,empty;

intfd;

voidproductor(void*arg);

voidconsumer(void*arg);

intmain()

{

pthread_tid1,id2;

pthread_tmon_th_id;

intret;

end_time=time(NULL)+30;

//创建有名管道

if(mkfifo(FIFO,0777)<0&&(errno!

=EEXIST))

printf("cannotcreatefifoserver\n");

memset(buffer,0,sizeof(buffer));//内存初始化

//打开管道

fd=open(FIFO,O_RDWR|O_NONBLOCK,0);

if(fd==-1)

{

perror("Open");

exit

(1);

}

//初始化信号量

ret=sem_init(&mutex,0,1);

ret=sem_init(&empty,0,N);

ret=sem_init(&full,0,0);

if(ret!

=0)

{

perror("sem_init");

}

//创建线程

ret=pthread_create(&id1,NULL,(void*)productor,NULL);

if(ret!

=0)

{

perror("pthreadcreateid1!

");

}

ret=pthread_create(&id2,NULL,(void*)consumer,NULL);

if(ret!

=0)

{

perror("pthreadcreateid2!

");

}

pthread_join(id1,NULL);

pthread_join(id2,NULL);

return0;

}

//生产者线程

voidproductor(void*arg)

{

intI,nwrite;

while(time(NULL)

{

sem_wait(&empty);

sem_wait(&mutex);

//生产者写入数据

if((nwrite=write(fd,"hello",5))==-1)

{

if(errno==EAGAIN)

printf("TheFIFOhasnotbeenreadyet,pleasetrylater\n");

}

else

printf("writehellototheFIFO\n");

sem_post(&full);

sem_post(&mutex);

sleep

(1);

}

}

//消费者线程

voidconsumer(void*arg)

{

intnolock=0;

intret,nread;

while(time(NULL)

{

//P操作信号量

sem_wait(&full);

sem_wait(&mutex);

memset(buffer,0,sizeof(buffer));

if((nread=read(fd,buffer,100))==-1)

{

if(errno==EAGAIN)

printf("Nodatayet!

\n");

}

else

{

printf("read%sfromFIFO.\n",buffer);

}

//V操作信号量

//sem_post(&full);

sem_post(&empty);

sem_post(&mutex);

sleep

(1);

}

}

结果截图为:

【实验总结和体会】

掌握了GCC编译器的用法,学会利用GCC编辑器来编辑C语言程序,学会利用GDB调试器来调试C语言程序。

掌握了在Linux环境下观察进程运行情况和CPU工作情况的命令了解fork()系统调用,掌握了利用fork()创建进程的方法了解Linux系统其他与进程相关的系统调用,如exec、wait和exit等。

了解了Linux常用的进程通信机制。

 

实验四进程调度模拟程序的设计

实验时间:

实验地点:

成绩:

【实验目的】

1.通过编写程序模拟进程调度算加深学生对处理器调度原理的理解。

2.掌握常用进程调度算法的原理与思想。

【实验内容】

1.在Window下利用C或者C++编写程序实现进程调度调度算法先来先服务、优先级高优先和时间片轮转调度算法。

2.输入数据,输出运行结果

【实验步骤和结果】

1、先来先服务算法的流程图如下:

程序代码如下:

#include"stdio.h"

#include"stdlib.h"

//#include"string"

typedefstructPCB//定义进程控制块

{

charID[3];//进程号

charname[10];//进程名

charstate;//运行状态

intarrivetime;//到达时间

intstarttime;//进程开始时间

intfinishtime;//进程结束时间

intservicetime;//服务时间

floatturnaroundtime;//周转时间

floatweightedturnaroundtime;//带权周转时间

structPCB*next;//指向下个进程

}pcb;

inttime;//计时器

intn;//进程个数

pcb*head=NULL,*p,*q;//进程链表指针

voidrun_fcfs(pcb*p1)//运行未完成的进程

{

time=p1->arrivetime>time?

p1->arrivetime:

time;

p1->starttime=time;

printf("\n现在时间是%d,开始运行作业%s\n",time,p1->name);

time+=p1->servicetime;

p1->state='T';

p1->finishtime=time;

p1->turnaroundtime=float(p1->finishtime-p1->arrivetime);

p1->weightedturnaroundtime=p1->turnaroundtime/p1->servicetime;

printf("ID到达时间开始时间服务时间完成时间周转时间带权周转时间\n");

printf("%s%6d%10d%10d%8d%10.1f%10.2f\n",

p1->ID,p1->arrivetime,p1->starttime,p1->servicetime,p1->finishtime,

p1->turnaroundtime,p1->weightedturnaroundtime);

}

voidfcfs()//找到当前未完成的进程

{

inti,j;

p=head;

for(i=0;i

{

if(p->state=='F')

{

q=p;//标记当前未完成的进程

run_fcfs(q);

}

p=p->next;

}

}

voidgetInfo()//获得进程信息并创建进程

{

intnum;

printf("\n作业个数:

");

scanf("%d",&n);

for(num=0;num

{

p=(pcb*)malloc(sizeof(pcb));

printf("依次输入:

\nID进程名到达时间服务时间\n");

scanf("%s\t%s\t%d\t%d",&p->ID,&p->name,&p->arrivetime,&p->servicetime);

if(head==NULL){head=p;q=p;time=p->arrivetime;}

if(p->arrivetimearrivetime;

q->next=p;

p->starttime=0;

p->finishtime=0;

p->turnaroundtime=0;

p->weightedturnaroundtime=0;

p->next=NULL;

p->state='F';

q=p;

}

}

voidmain()

{

printf("先来先服务算法模拟");

getInfo();

p=head;

fcfs();

}

进程输入如下:

进程执行结果如下:

2、时间片轮转调度算法程序代码:

#include

#include

#include

typedefstructnode

{

charname[10];/*进程名*/

intprio;/*进程优先级*/

intround;/*循环轮转法进程每次轮转的时间片*/

intcputime;/*进程累计消耗的CUP时间*/

intneedtime;/*进程到完成还需要的CUP时间*/

intcount;/*循环轮转法一个时间片内进程运行时间*/

charstate;/*进程的状态:

'R':

运行,'W':

等待,'F':

结束*/

structnode*next;/*指向下一个进程的链指针*/

}PCB;

PCB*finish,*ready,*tail,*run;//tail为就绪队列的队尾指针

intN;/*定义进程的数目*/

voidReadyToRun();//调度就绪队列的第一个进程投入运行;

voidPrint();//打印每执行一次算法后所有的进程的状态信息

voidInsertReady(PCB*q);//在轮转法中,将执行了一个时间片单位(为2),但尚未完成的进程的PCB,插到就绪队列的队尾;

voidRoundInit();//循环轮转法初始化将就绪队列保存为FIFO队列

voidRoundRun();//循环轮转法总算法

intmain()//主函数

{

fflush(stdin);

printf("\tR.循环轮转算法模拟\n\n");

RoundInit();

RoundRun();

return0;

}

voidReadyToRun()//调度就绪队列的第一个进程投入运行;

{

run=ready;

ready=ready->next;

run->state='R';

run->next=NULL;

}

voidPrint()//打印每执行一次算法后就绪进程的状态信息

{

PCB*p;

printf("namecputimeneedtimecountroundstate\n");

p=ready;

while(p!

=NULL)

{

printf("%s\t%d\t%d\t%d\t%d\t%c\n",p->name,p->cputime,p->needtime,p->count,p->round,p->state);

p=p->next;

}

if(ready==NULL)

p=run;

while(p!

=NULL)

{printf("%s\t%d\t%d\t%d\t%d\t%c\n",p->name,p->cputime,p->needtime,p->count,p->round,p->state);

p=p->next;

}

}

voidInsertReady(PCB*q)//在轮转法中,将执行了一个时间片单位(为2),但尚未完成的进程的PCB,插到就绪队列的队尾;

{

tail->next=q;

tail=q;

q->next=NULL;

}

voidRoundInit()/*循环轮转法初始化将就绪队列保存为FIFO队列*/

{

PCB*p;

inti,time;

charna[10];

ready=NULL;

finish=NULL;

run=NULL;

//printf("\t\t循环轮转算法模拟全过程\n\n");

printf("输入进程的个数N:

\n");

scanf("%d",&N);

for(i=0;i

{

p=(PCB*)malloc(sizeof(PCB));

printf("输入第%d个进程名\n",i+1);

scanf("%s",na);

strcpy(p->name,na);

printf("完成进程需要的时间片数\n");

scanf("%d"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1