版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、许 昌 学 院操作系统实验报告手册学号: 1101120207 姓名: 孙 萍 班级: 计科2班 成绩: 2014年02月许昌学院信息工程学院操作系统实验报告实验一 Linux操作系统的安装与配置 实验时间: 实验地点:计科楼107 成绩:【实验目的】1. 了解Linux操作系统的发展历史,熟悉Linux发行版和Linux内核的区别。2. 了解Linux操作系统安装的软硬件条件,熟悉Linux系统的安装方法,特别是如何在虚拟机上安装、配置该操作系统。3. 了解在多操作系统环境下如何本地安装(光盘安装)Linux系统。4. 了解Linux操作系统的文件系统结构及其特点,熟悉Linux系统的登入和
2、登出过程【实验内容】1、安装并配置vmware虚拟机,设置运行环境,特别要启动NAT和USB支持。2、在vmware上安装Red Hat Linux 9.0,指定最大空间为20G以上(具体视硬盘剩余空间而定)。当对虚拟磁盘空间分区时,需至少指定10G给“/”(主目录),分区格式为ext3,还需指定与内存容量相同的swap(交换)区。3、安装完Red Hat Linux 9.0系统后,需配置硬件(如网卡、显卡等)和软件(如编程开发软件等)。4、启动Linux系统和退出Linux系统【实验步骤和结果】1、启动VMware,建立Linux虚拟机,完成后的结果如下图所示。2、在vmware上安装Red
3、 Hat Linux 9.0【实验总结和体会】 通过安装虚拟机等操作让我认识到Linux这系统一些基本特点,有别于我们机器上使用的系统,发现原来通过虚拟机这个软件还可以在已有系统的基础上使用其他操作系统。这有利于我们学习。实验二 Linux操作系统的运行模式 实验时间: 实验地点:计科楼107 成绩:【实验目的】1. 熟悉Linux系统终端工作环境的使用,了解Linux命令的格式,学会利用常用的Linux命令来完成系统的管理和维护。2. 了解X-Windows的特点,熟悉Linux图形用户接口的使用,掌握GNOME桌面环境的基本操作。【实验内容】1、通过虚拟机启动并登陆Linux系统。2、打开
4、Linux的虚拟终端窗口,借助Linux的在线帮助指令man或help了解Linux系统常用的命令的功能以及格式,练习并掌握常用的Linux操作命令,如ls、who、w、pwd、ps、pstree、top等。3、在图形界面环境中,查看GNOME桌面的面板和桌面,设置GNOME,包括屏幕保护程序、更改背景和指定关联程序等。【实验步骤和结果】1、登陆2、Linux部分操作指令LSWHOWPWDPSpstreeTop3、屏幕保护程序指定关联程序更改桌面背景【实验总结和体会】 当实验中我找不到具体在那个窗口进行操作时,我继续寻找通过网络进行百度询问。通过这次的实验让我了解了Linux的强大功能,了解到
5、Linux有许多方便快捷的设置基本配置的方法,这使我更喜欢上Linux的使用,使我在以后是相关操作实验中有更浓厚的兴趣。不管是什么样的操作系统都有它的优缺点,我知道我现在对Linux还只是基础的了解,以后有更多的内容需要我学习和掌握。实验三 Linux操作系统的高级应用 实验时间: 实验地点:计科楼107 成绩:【实验目的】1. 了解OpenOffice.Org集成办公软件,掌握利用OpenOffice.Org的套件来完成文档和图片的处理。2. 了解Linux网络管理的知识,熟悉Linux网络配置的方法,掌握在Linux环境下配置Web服务器和ftp服务的方法。【实验内容】1、配置Linux系
6、统的网络环境,安装FTP和Web服务器,并配置相关的属性,练习WINDOWS和UNIX之间的文件交换。2、利用FTP程序上传自己的照片到FTP服务器,利用OpenOffice的文字处理工具OpenOffice Writer制作一份表格形式的个人简历,必须包含姓名和照片,并保存为网页格式。3、将个人简历网页设置为WEB服务器的首页,然后在客户端利用浏览器访问。【实验步骤和结果】1、2、点击编辑设置ip地址与主机相同,只端口号不同重新启动网络服务:安装ftp软件包并设置新建用户/组登陆虚拟机ftp并上传文件【实验总结和体会】 写出实验过程中遇到问题以及解决的方法和实验的收获。实验过程不管用桥的连接
7、还是NET的连接,都不能实现ftp文件的上传跟共享,到目前为止我也不是很清楚到底是哪里出了问题,即便是关了防火墙也不行,能做到地步为上图显示。实验四 Linux进程管理 实验时间: 实验地点:计科楼107 成绩:【实验目的】1. 掌握GCC编译器的用法,学会利用GCC编辑器来编辑C语言程序,学会利用GDB调试器来调试C语言程序。2. 掌握在Linux环境下观察进程运行情况和CPU工作情况的命令。3. 了解fork()系统调用,掌握利用fork()创建进程的方法。4. 了解Linux系统其他与进程相关的系统调用,如exec、wait和exit等。5. 了解Linux常用的进程通信机制。【实验内容
8、】1、利用Linux的文字编辑器编写一个计算机100个自然数和的C语言程序,并用gcc编译该程序,运行该程序。2、编写一段程序,使用系统调用fork( )创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示'a',子进程分别显示字符'b'和字符'c'。试观察记录屏幕上的显示结果,并分析原因。3、修改上述程序,每一个进程循环显示一句话。子进程显示'daughter '及'son ',父进程显示 'parent ',观察结果,分析原因。4、用
9、fork( )创建一个进程,再调用exec( )用新的程序替换该子进程的内容。5、修改步骤3中的程序,用lockf( )来给每一个进程加锁,以实现进程之间的互斥。【实验步骤和结果】使用命令建立文件1.c输入命令gcc -o test 1.c2、#include"stdio.h"main()int p1=0,p2=0;if(p1=fork() /创建子进程1printf("bn");elseif(p2=fork()/创建子进程2printf("cn"); elseprintf("an");/父进程 3、#includ
10、e"stdio.h"main()int p1=0,p2=0,i;if(p1=fork() for(i=0;i<500;i+) printf("daughter%dn",i); printf("daughter%dn",i+); printf("daughter%dn",i+2); elseif(p2=fork()for(i=0;i<500;i+) printf("son%dn",i); printf("son%dn",i+); printf("son%d
11、n",i+2); elsefor(i=0;i<500;i+) printf("parent%dn",i); printf("parent%dn",i+); printf("parent%dn",i+2); 修改后的结果如图:从上面可以看出:由于进程的并发执行的原因,同一个程序会出现不同的运行结果。4、5、由上面的运行结果可以看出在程序中使用lockf()来给每一个子进程加锁,可以实现进程之间的互斥。【实验总结和体会】进程之间存在很多可能性。实验五 进程调度模拟程序的设计与实现 实验时间: 实验地点: 计科楼107 成绩
12、:【实验目的】在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。【实验内容】1、编写程序实现进程调度调度算法先来先服务、优先级高优先和时间片轮转调度算法。(采用的编程语言不限)2、输入数据,输出运行结果。【实验步骤和结果】1、 先来先服务#include<stdio.h>float t,d;/定义两个全局变量struct/定义一个结构体数组,包括进程信息int id;float arrivetime;float requ
13、esttime;float starttime;float endtime;float runtime;float DQRuntime;int status;arraytask4;/定义初始化的结构体数组int gettask()/给结构体数组赋值,输入到达、服务时间int i;float a;for(i=0;i<4;i+) arraytaski.id=i+1; printf("input the number:"); printf("input the arrivetime of arraytask%d:",i);/用户输入进程时间,初始值为0
14、scanf("%f",&a); arraytaski.arrivetime=a; printf("input the requesttime of arraytask%d:",i); scanf("%f",&a); arraytaski.requesttime=a; arraytaski.starttime=0; arraytaski.endtime=0; arraytaski.runtime=0; arraytaski.status=0;/开始时默认标志位为0 int FCFS()/定义FCFS中寻找未执行的进程的最
15、先到达时间int i,j,w=0;/在结构体数组中找到一个未执行的进程for(i=0;i<4;i+)if(arraytaski.status=0)t=arraytaski.arrivetime;w=1;if(w=1) break; for(i=0;i<4;i+)/查找数组中到达时间最小未执行的进程if(arraytaski.arrivetime<t&&arraytaski.status=0) t=arraytaski.arrivetime;for(i=0;i<4;i+)/返回最小到达时间的数组的下标if(arraytaski.arrivetime=t)r
16、eturn i; int SJF()/定义FCFS中寻找未执行的进程的最先到达时间int i,x=0,a=0,b=0;/判断是不是第一次执行的进程float g;for(i=0;i<4;i+)if(arraytaski.status=1)g=arraytaski.endtime;x=1; if(x=0)/第一个执行的进程按FCFSt=arraytask0.arrivetime;for(i=0;i<4;i+)if(arraytaski.arrivetime<t)t=arraytaski.arrivetime;a=i;return a;elsefor(i=0;i<4;i+)
17、if(arraytaski.endtime>g)g=arraytaski.endtime; for(i=0;i<4;i+)if(arraytaski.status=0&& arraytaski.arrivetime<<=g)t=arraytaski.requesttime;a=i;b=1;/判断有没有进程在前一个进程完成前到达 if(b!=0)/有进程到达就按SJF算法for(i=0;i<4;i+)if(arraytaski.status=0&& arraytaski.arrivetime<=g&& array
18、taski.requesttime<t)t=arraytaski.requesttime;a=i;return a;else/否则就按FCFS算法for(i=0;i<4;i+)if(arraytaski.status=0)t=arraytaski.arrivetime;for(i=0;i<4;i+)if(arraytaski.status=0&& arraytaski.arrivetime<t)t=arraytaski.arrivetime;a=i;return a; new(int s)/定义执行进程后相关数据的修改int i,g=0;for(i=0;
19、i<4;i+) if(arraytaski.status=0)continue;elseg=1;break;if(g=0)/当处理的是第一个来执行的进程时执行 arraytasks.starttime=arraytasks.arrivetime; arraytasks.endtime=arraytasks.requesttime+arraytasks.arrivetime; arraytasks.runtime=arraytasks.requesttime; arraytasks.status=1; g=2; if(g=1)/当处理的不是第一个未执行的进程时执行 arraytasks.s
20、tatus=1;for(i=0;i<4;i+)if(arraytaski.status=1)d=arraytaski.endtime;for(i=0;i<4;i+)/查找最后执行的进程的完成时间 if(arraytaski.endtime>d && arraytaski.status=1)d=arraytaski.endtime;if(arraytasks.arrivetime<d)/判断修改的进程的到达的时间是否在前一个执行的进程的完成时间前面arraytasks.starttime=d;elsearraytasks.starttime=arrayta
21、sks.arrivetime; arraytasks.endtime=arraytasks.starttime+arraytasks.requesttime;arraytasks.runtime=arraytasks.endtime-arraytasks.arrivetime;arraytasks.DQRuntime=arraytasks.runtime/arraytasks.requesttime; printfresult(int j)/定义打印函数printf("%dt",arraytaskj.id);printf("%5.2ft",arrayta
22、skj.arrivetime);printf("%5.2ft",arraytaskj.requesttime);printf("%5.2ft",arraytaskj.starttime);printf("%5.2ft",arraytaskj.endtime);printf("%5.2ft",arraytaskj.runtime);printf("%5.2ft",arraytaskj.DQRuntime); main()int i,b,k,a,c=0;int d4;clrscr();printf(
23、"t F.FCFS n");printf("t S.SJF n");printf("t Q.EXIT n");for(i=0;i+)if(c)break;printf("please input the number a:n");scanf("%d",&a);swith(a)case Q:c=1;break;case F:printf("please input the different-ArriveTime of arraytaskn");gettask();pr
24、intf("*the result of FCFSn");printf("NumbertArrivetServertStarttFinishtTurnovetTake power turnover timen");for(b=0;b<4;b+)/调用两个函数改变结构体数的值k=FCFS();db=k;new(k); for(b=0;b<4;b+)printfresult(db);/调用打印函数打出结果continue;case S:printf("please input the different-RequestTime of a
25、rrayTasksn");gettask();printf("*the result of SJFn");printf("NumbertArrivetRequesttStarttEndtRuntDQRun timen"); for(b=0;b<4;b+)k=SJF();db=k;new(k); for(b=0;b<4;b+)printfresult(db);continue;default:printf("the number Error,please input another number!n");2、 优先
26、级高优先#include"stdio.h"#include"conio.h"typedef struct pcb/定义结构char name5;struct pcb *next;int needtime;int priority;char state5;Node;Node *create_process(int n)/创建队列Node *head,*s,*t;int time,i=0,j;char pname5;head=(Node *)malloc(sizeof(Node);printf("please input process name:
27、");scanf("%s",&pname);strcpy(head->name,pname);printf("please input need time:");scanf("%d",&time);head->needtime=time;printf("please input priority":);scanf("%d",&j);head->priority=j;strcpy(head->state,"ready")
28、;head->next=NULL;t=head;for(i=1;i<n;i+)s=(Node *)malloc(sizeof(Node);printf("please input process name:");getchar();gets(pname);strcpy(s->name,pname);printf("please input need time:");scanf("%d",&time);s->needtime=time;printf("please input priority&
29、quot;:);scanf("%d",&j);s->priority=j;strcpy(s->state,"ready");s->next=NULL;t->next=s;t=s;return head; pri_process(Node *p)/输出进程队列int i;Node *q;q=p->next;printf("nnametneedtimetprioritytstaten");while(q!=NULL)printf("%5st%2dt%2dt%5sn",q->n
30、ame,q->needtime,q->priority,q->state);q=q->next; Node *order(Node head_srot)/对进程的优先级进行排序Node *p,*s,*q,*head,*r,*t;int m,pr;char name5;head=head_srot;p=head->next;r=p;t=p;q=p->next;while(r!=NULL)while(q!=NULL)if(p->priority<q->priority)m=p->priority;p->priority=q->
31、priority;q->priority=m;strcmp(name,p->name)name;strcmp(q->name,name);pr=p->needtime;p->needtime=q->needtime;q->needtime=pr;p=q;q=q->next;r=r->next;p=t;q=p->next;return (head_srot); main()Node *p=NULL,*head=NULL,*m=NULL,*z=NULL,*n=NULL;int j,time,x=0;char c,pname5;clrscr
32、();printf("please enter process number:");scanf("%d",&x);p=create_process(head);getchar();while(x>0)order(head);m=head->next;strcpy(m->state,"run");if(m->priority>=2);m->priority-;m->needtime-;if(head->next!=NULL);pri_process(head);if(m->n
33、eedtime=0)head->next=m->next;printf("%s has finishedn",m->name);free(m);x-;getchar();textmode(C80);textbackground(0);textcolor(4);printf("over!");getchar();top3、 时间片轮转调度算法#include<string.h>#include<stdio.h>#include<conio.h>#include<graphics.h>#def
34、ine NULL 0typedef struct quen/定义结构体char pname8;int time1;int time2;char state;struct quen *next; Quen;main()Quen *q,*p,*head,*m;char str8,fint t,d,n;clrscr();textmode(c80);textbackground(0);textcolor(15);printf("please enter the maxnumber of nodes(n):n");/输入进程数scanf("%d",&n);
35、d=n;if(d>0)printf("enter the pname:");scanf("%s",str);printf("enter the need time:");scanf("%d",&t);head=p=(Quen *)malloc(sizeof(Quen);strcpy(p->pname,str);p->time1=t;p->time2=0;p->state='R'p->next=NULL;head=p;getchar();-d; whie(d
36、>0)/构建队列列表printf("enter the pname:");scanf("%s",str);printf("nenter the need time:");scanf("%d",&t);q=(Quen *)malloc(sizeof(Quen);strcpy(q->pname,str);q->time1=t;q->time2=0;q->state='R'q->next=NULL;p->next=q;p=q;-d;p->next=h
37、ead;q=head; printf("process name need time runned staticn");doprintf("%s%d%d%cn",q->pname,q->time1,q->time2,q->state);q=q->next;while(q!=head);printf("n");doif(head->time1>head->time2)head->time2+;if(head->time1=head->time2)head->stat
38、e='E'q=head;textbackground(0);printf("the running process is %sn",q->pname);printf("process name left time runned staticn");dotextcolor(15);printf("%s%d%d%cn",q->pname,q->time1,q->time2,q->state);q=q->next;while(q!=head);printf("n");h
39、ead=head->next;q=head;p->next=head; elseprintf("the running process is %sn",q->pname);printf("process name left time runned staticn");doprintf("%s%d%d%cn",q->pname,q->time1,q->time2,q->state);q=q->next;while(q!=head);printf("n");head=he
40、ad->next;q=head;p=p->next;printf("is it needing new process?(y or n)n");/是否加入新的进程 getchar();scanf("%c",&f);if(f='Y'|'y')getchar();printf("enter the new process pname:");scanf("%s",str);printf("nenter the new neededtime:");sc
41、anf("%d",&t);m=(Quen *)malloc(sizeof(Quen); strcpy(m->pname,str); m->time1=t; m->time2=0;m->state='R' m->next=NULL; if(q->next->state='E') p=m; head=m; p->next=head; q=head; else p->next=m; m->next=head; p=a; while(q->next->state!=
42、9;E');printf("the processes are finishedn");【实验总结和体会】通过本实验,让我对进程或作业先来先服务、高优先权和按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的了解;也初步了解了操作系统对作业处理的基本思想。实验中也遇到很多难处。实验六 常用页面置换算法模拟程序的设计与实现 实验时间: 实验地点: 计科楼107 成绩:【实验目的】1. 掌握请求分页页面置换的过程,理解请求分页虚拟内存的实现原理,加深对操作系统存储管理技术的理解。2. 掌握常用OPT、FIFO和LRU页面置换算法的思想以及原理。【实验内容】1、编写
43、程序实现请求分页中的OPT、FIFO和LRU等页面置换算法。(采用的变成语言不限)2、输入数据,输出运行结果【实验步骤和结果】#include"stdio.h"#include"stdlib.h"int msize;/定义全局变量 物理块数 int psize;/页面号引用串个数 int count;static int memery10=0;/物理块中的页号static int page100=0;/页面号引用串static int temp10010=0;/辅助数组/置换算法函数void FIFO();void LRU();void OPT();/辅
44、助函数void printf(unsigned int t);main()int i,k,code;printf("请输入物理块数M(M>0&&M<=10):");scanf("%d",&msize);printf("n请输入页面号引用串个数P(P<=100):");scanf("%d",&psize);printf("n请依次输入页面号引用串(无需隔开):");for(i=0;i<psize;i+) scanf("%1d&quo
45、t;,&pagei);printf("n输入的页面号引用串为:");for(k=0;k<=(psize-1)/20;k+)for(i=20*k;(i<psize)&&(i<20*(k+1);i+)if(i+1)%20=0|(i+1)%20)&&(i=psize-1) printf("%dn",pagei); else printf("%dt",pagei); printf("*n");printf("tt请选择页面置换算法:n");pri
46、ntf("1、先进先出(FIFO)n2、最近最久未用(LRU)n");printf("3、最佳置换算法(OPT)n4、返回上一级n5、退出n");printf("*n");doprintf("请选择操作:bb");scanf("%d",&code);switch(code)case 1:FIFO();break;case 2:LRU();break;case 3:OPT();break;case 4:printf("接下来你要返回上一级n");printf("
47、;请输入物理块数M(M>0&&M<=10):n");scanf("%d",&msize);printf("n请输入页面号引用串个数P(P<=100):");scanf("%d",&psize);printf("n请依次输入页面号引用串(无需隔开):");for(i=0;i<psize;i+) scanf("%1d",&pagei); printf("n输入的页面号引用串为:");for(k=0;k<
48、;=(psize-1)/20;k+)for(i=20*k;(i<psize)&&(i<20*(k+1);i+)if(i+1)%20=0|(i+1)%20)&&(i=psize-1) printf("%dn",pagei); else printf("%dt",pagei); break; case 5: printf("谢谢使用!n"); exit(0); default: printf("输入错误,请重新输入:"); while(code!=6);getchar();
49、void printf(unsigned int t)int i,j,k,l;int flag;for(k=0;k<=(psize-1)/20;k+)for(i=20*k;(i<psize)&&(i<20*(k+1);i+)if(i+1)%20=0|(i+1)%20)&&(i=psize-1) printf("%dn",pagei); else printf("%dt",pagei);for(j=0;j<msize;j+)for(i=20*k;(i<msize+20*k)&&(
50、i<psize);i+)if(i>=j)printf("|%d|n",tempij);elseprintf("|");for(i=msize+20*k;(i<psize)&&i<20*(k+1);i+)for(flag=0,l=0;l<msize;l+) if(tempij=tempi-1l) flag+; if(flag=msize)/页面在物理块中 printf(" ");else printf("|%d|n",tempij); /每行显示20个if(i%20=0) continue;printf("n"); printf("缺页次数:%dn",t+msize);printf("缺页率:%d/%dn",t+msize,psize);void FIFO()int memery10=0;int time10=0;/记录进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 营区安全管理责任制度
- 机关首问首办责任制度
- 桐城市农技推广责任制度
- 校区管理安全责任制度范本
- 发电保电安全生产责任制度
- 供电公司领导责任制度范本
- 冷库市场主体责任制度
- 酒店员工企业责任制度
- 乡级林区防火责任制度
- 2025年鲤城区海滨街道社区卫生服务中心招聘编外工作人员备考题库有答案详解
- 业务招待费管理标准制度
- GB/T 22576.1-2026医学实验室质量和能力的要求第1部分:通用要求
- 2026云南昆明巫家坝商业运营管理有限公司校园招聘8人考试参考题库及答案解析
- (14)普通高中音乐课程标准日常修订版(2017年版2025年修订)
- 西门子变频器技术入门及实践- 课件 第5、6章 G120变频器的基本调试、G120变频器的操作与设置
- 部编人教版3三年级《道德与法治》下册电子课本课件
- 小学数学竞赛指导
- 通用电子嘉宾礼薄
- 机器人控制技术与实践 课程标准-教学大纲
- 室内无机防火涂料施工方案
- 安全意识培训课件 38、安全意识培训
评论
0/150
提交评论