文档库

最新最全的文档下载
当前位置:文档库 > 操作系统实验报告

操作系统实验报告

常州大学

操作系统课程实验报告

姓名xxx

专业班级计算机科学与技术

学号xxxxxx

指导老师xxx

成绩

实验时间2012年4月23日——2012年5月7日

实验一 Windows XP 系统管理

一实验目的

1) 了解和学习Windows系统管理工具及其使用;

2) 熟悉Windows系统工具的内容和应用;

3)熟悉Windows操作系统的应用环境。

二实验环境

需要准备一台运行Windows XP操作系统的计算机。

三背景知识

Windows XP的“管理工具”中集成了许多系统管理工具,利用这些工具,管理员可以方便地实现各种系统维护和管理功能。这些工具都集中在“控制面板”的“管理工具”选项下,用户和管理员可以很容易地对它们操作和使用。在默认情况下,只有一些常用工具——如服务、计算机管理、事件查看器、数据源 (ODBC) 、性能和组件服务等——随Windows XP 系统的安装而安装。

四实验内容与步骤

为了帮助用户管理和监视系统,Windows XP提供了多种系统管理工具,其中最主要的有计算机管理、事件查看器和性能监视等。

步骤1:登录进入Windows XP。

步骤2:在“开始”菜单中单击“设置”-“控制面板”命令,双击“管理工具”图标。

在本地计算机“管理工具”组中,有哪些系统管理工具,基本功能是什么:

1) 本地安全策略:查看和修改本地安全策略,如用户权限和审核策略

2) Internet信息服务:管理 IIS,Internet 和 Intranet 站点的 WEB服务器

3) 服务:启动和停止服务

4)计算机管理:管理磁盘以及使用其他系统工具来管理本地或远程的计算机

5)事件查看器:显示来自于 Windows 和其他程序的监视与排错消息

6)数据源ODBC:添加、删除、以及配置 ODBC 数据源和驱动程序

7)性能:显示系统性能图表以及配置数据日志和警报

8)组件服务:配置和管理 COM+ 应用程序

1. 计算机管理

使用“计算机管理”可通过一个合并的桌面工具来管理本地或远程计算机,它将几个Windows XP管理实用程序合并到一个控制台目录树中,使管理员可以轻松地访问特定计算机的管理属性和工具。

步骤3:在“管理工具”窗口中,双击“计算机管理”图标。

“计算机管理”使用的窗口与“Windows资源管理器”相似。在用于导航和工具选择的控制台目录树中有“系统工具”、“存储”及“服务和应用程序”等节点,窗口右侧“名称”窗格中显示了工具的名称、类型或可用的子工具等。它们是:

1) 系统工具,填入表1-3中。

操作系统实验报告

2) 存储,填入表1-4中。

操作系统实验报告

3) 服务和应用程序,填入表1-5中。

操作系统实验报告

2. 事件查看器

事件查看器不但可以记录各种应用程序错误、损坏的文件、丢失的数据以及其他问题,而且还可以把系统和网络的问题作为事件记录下来。管理员通过查看在事件查看器中显示的系统信息,可以迅速诊断和纠正可能发生的错误和问题。

步骤4:在“管理工具”窗口中,双击“事件查看器”图标。

在Windows XP事件查看器中,管理员可以查看到三种类型的本地事件日志,请填入表1-6中。

表1-6 实验记录

操作系统实验报告

步骤5:在事件查看器中观察“应用程序日志”:

本地计算机中,共有367个应用程序日志事件。

步骤6:单击“查看”菜单中的“筛选”命令,系统日志包括的事件类型有:

1) 信息(I)

2) 警告(W)

3) 错误(O)

4) 成功审核(S)

5) 失败审核(L)

3. 性能监视

“性能”监视工具通过图表、日志和报告,使管理员可以看到特定的组件和应用进程的资源使用情况。利用性能监视器,可以测量计算机的性能,识别以及诊断计算机可能发生的错误,并且可以为某应用程序或者附加硬件制作计划。另外,当资源使用达到某一限定值时,也可以使用警报来通知管理员。

步骤7:在“管理工具”窗口中,双击“性能”图标。

“性能”窗口的控制台目录树中包括的节点有:

1) 性能监视器

2) 性能日志和警报,其中的子节点填入表1-7中。

操作系统实验报告

4. 服务

步骤8:在“管理工具”窗口中,双击“服务”图标。

在你的本地计算机中,管理着100个系统服务项目。

通过观察,重点描述你所感兴趣的5个系统服务项目:

1) World Wide Web Publishing:通过Internet信息服务管理单元提供Web连接和管理

2) Windows Image Acquisition:为扫描仪和照相机提供图像捕获

3) Security Accounts Manager:存储本地用户账号的安全信息

4) Security Center:监视系统安全设置和配置

5)Shell Hardware Detection:为自动提供硬件事件提供通知

5. 数据源 (ODBC)

ODBC,即开放数据库连接。通过ODBC可以访问来自多种数据库管理系统的数据。例如,ODBC数据源会允许一个访问SQL数据库中数据的程序,同时访问Visual FoxPro数据库中的数据。为此,必须为系统添加称为“驱动程序”软件组件。

步骤9:在“管理工具”窗口中,双击“数据源 (ODBC) ”图标,打开“ODBC数据源管理器”对话框,请描述其中各选项卡的功能,填入表1-8中。

操作系统实验报告

步骤10:单击“驱动程序”选项卡,试分析,系统为哪些数据源缺省安装了ODBC驱动程序:

1) MSORCL32.DLL

2) SQLSRV32.DLL

实验二 Windows任务管理器的进程管理

一实验目的

1)在Windows 任务管理器中对程序进程进行响应的管理操作;

2)熟悉操作系统进程管理的概念;

3)学习观察操作系统运行的动态性能。

二实验环境

需要准备一台运行Windows XP操作系统的计算机。

三背景知识

Windows XP的任务管理器提供了用户计算机上正在运行的程序和进程的相关信息,也显示了最常用的度量进程性能的单位。使用任务管理器,可以打开监视计算机性能的关键指示器,快速查看正在运行的程序的状态,或者终止已停止响应的程序。也可以使用多个参数评估正在运行的进程的活动,以及查看CPU 和内存使用情况的图形和数据。

四实验内容与步骤

启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。

当前机器中由你打开,正在运行的应用程序有:

1) 实验二 Windows任务管理器的进程管理

2) 管理工具

Windows“任务管理器”的窗口由5个选项卡组成,分别是:

1) 应用程序

2) 进程

3) 性能

4)联网

5)用户

当前“进程”选项卡显示的栏目分别是 (可移动窗口下方的游标/箭头,或使窗口最大化进行观察) :

1) 映像名称

2) 用户名

3) CPU

4) 内存使用

1. 使用任务管理器终止进程

步骤1:单击“进程”选项卡,一共显示33个进程。请试着区分一下,其中:

系统 (SYSTEM) 进程有19个,填入表2-1中。

操作系统实验报告

操作系统实验报告

服务 (SERVICE) 进程有4个,填入表2-2中。

操作系统实验报告

操作系统实验报告

用户进程有9个,填入表2-3中。

操作系统实验报告

步骤2:单击要终止的进程,然后单击“结束进程”按钮。

终止进程,将结束它直接或间接创建的所有子进程。例如,如果终止了电子邮件程序(如Outlook 98) 的进程树,那么同时也终止了相关的进程,如MAPI后台处理程序mapisp32.exe。

请将终止某进程后的操作结果与原记录数据对比,发生了什么:

终止后,原窗口被关闭,进程不再运行,未经保持的数据都将失去。

2. 显示其他进程记数器

在“进程”选项卡上单击“查看”菜单,然后单击“选择列”命令。单击要增加显示为列标题的项目,然后单击“确定”。

为对进程列表进行排序,可在“进程”选项卡上单击要根据其进行排序的列标题。而为了要反转排序顺序,可再次单击列标题。

经过调整,“进程”选项卡现在显示的项目分别是:

映像名称,用户名,CPU,内存使用。

通过对“查看”菜单的选择操作,可以在“任务管理器”中更改显示选项:

·在“应用程序”选项卡上,可以按详细信息、大图标或小图标查看。

·在“性能”选项卡上,可以更改CPU记录图,并显示内核时间。“显示内核时间”选项在“CPU使用”和“CPU使用记录”图表上添加红线。红线指示内核操作占用的CPU资源数量。

3. 更改正在运行的程序的优先级

要查看正在运行的程序的优先级,可单击“进程”选项卡,单击“查看”菜单,单击“选择列”-“基本优先级”命令,然后单击“确定”按钮。

为更改正在运行的程序的优先级,可在“进程”选项卡上右键单击您要更改的程序,指向“设置优先级”,然后单击所需的选项。

更改进程的优先级可以使其运行更快或更慢 (取决于是提升还是降低了优先级) ,但也可能对其他进程的性能有相反的影响。

记录操作后所体会的结果

当进程的优先级提高后,该进程的执行速度比其他进程的速度快了,操作起来不卡,优先级被降低的进程,运行速度明显变慢。

在多处理器计算机上,用户还可以给处理器指派进程,将程序或进程的执行限制在选定的处理器上,但这有可能导致总体性能的下降。

实验三 Windows XP 虚拟内存管理

一实验目的

1) 了解存储器管理以及虚拟存储器管理的基本原理

2)了解和学习Windows系统管理工具中关于内存管理的设置和使用;

二实验环境

需要准备一台运行Windows XP操作系统的计算机。

三背景知识

虚拟存储器技术是当代计算机中广泛采用的内存管理方案,在Windows XP中合理的进行虚拟内存的设置,可以更有效的提高系统的工作效率。利用系统自带的系统监视器可以查看虚拟内存的使用情况,根据使用情况可以灵活的进行虚拟内存的管理。

四实验内容与步骤

启动并进入Windows环境,单击Ctrl + Alt + Del键,或者右键单击任务栏,在快捷菜单中单击“任务管理器”命令,打开“任务管理器”窗口。

步骤1:当前机器中由你打开,正在运行的应用程序有:

1)实验五_Windows_XP_虚拟内存管理-Microsoft Word

步骤2:单击“进程”选项卡,一共显示了33个进程。请试着区分一下,其中:

系统 (SYSTEM) 进程有19个,填入表2-1中。

操作系统实验报告

操作系统实验报告

服务 (SERVICE) 进程有4个,填入表2-2中。

操作系统实验报告

用户进程有9个,填入表2-3中。

操作系统实验报告

操作系统实验报告

步骤3:查看本机的物理内存容量为 2096304K ,点击任务管理器中性能标签,再查看一下,物理内存可用数,核心内存总数 64072K ,核心内存为操作系统所占的内存,可将以上表格中所填写的各进程所占内存数与步骤3中填写的数字做下比较。

步骤4:用鼠标右键点击“我的电脑”,选择“属性”,弹出系统属性窗口,选择“高级”标签,点击“性能”下面的“设置”按钮,再选择高级标签,查看本机的虚拟内存大小为 2046MB ,点击更改按钮,本系统所用的虚拟内存设置在 C 分区,初始大小2046MB ,最大值 4092 MB,当前已分配 2046MB ,页面大小 2046-4092MB 。

步骤5:请在Windows2000(XP)目录下查找一个名为pagefile.sys的系统文件(Windows98下为Win386.swp),它的大小经常自己发生变动,小的时候可能只有几十兆,大的时候则有数百兆,pagefile.sys是Windows下的一个虚拟内存,请观察一下目前该文件大小为 2046M 。

步骤6:观察虚拟内存的使用情况,并进行重新设置

1)在控制面板中的管理工具中打开性能监视器,展开左侧的性能日志和警报,并点击选择记数器日志,在右侧的面板中空白处点击鼠标右键,选择新建日志设置,并命名为Pagefile,然后回车确认。

2)在常规选项卡下,点击添加记数器按钮,在新弹出的窗口的性能对象下拉菜单中选择Paging File,并选择“从列表选择记数器”,然后点击% Usage Peak,在范例中选择“_Total”,并接着点击“添加”按钮。

3)然后关闭这个窗口,并点击图三中的“确定”按钮。点击“是”创建日志文件。接着打开“日志文件”选项卡,在日志文件类型下拉菜单中选则“文本文件(逗号分隔)”,然后记住“例如”框中显示的日志文件的路径。 C:\PerfLogs\Pagefile_000002.csv 4)这样,点击确定后这个记数器已经开始运行了,你可以在电脑上进行你的日常操作,并尽可能多的打开和关闭各种经常使用的应用程序和游戏。经过一段时间的使用,基本上记数器已经可以对你的使用情况做出一个完整的评估。

5)停止这个记数器的运行,同样是在记数器日志窗口中,选中我们新建的Page File 记数器,然后右键点击,并且选择停止。用记事本打开日志文件,并将日志文件的内容复制在下面

日志文件:

"(PDH-CSV 4.0) ()(-480)","\\c08\Paging File(_Total)\% Usage Peak"

"05/07/2012 20:06:54.046","5.6266419232649074"

"05/07/2012 20:07:09.046","5.6266419232649074"

注意:在日志中的数值并不是分页文件的使用量,而是使用率。也就是说,根据日志文件的显示,该系统一般情况下的分页文件只使用了25%左右,而系统当前设置的分页文件足有2GB,那么为了节省硬盘空间,完全可以把分页文件最大值缩小为512MB大小。而对于最小值,可以先根据日志中的占用率求出平均占用率,然后再与最大值相乘,就可以得到了。

6)请根据实验数据,重新设置虚拟内存的大小,并尝试将虚拟内存设置在其他分区,观察一下pagefile.sys文件有什么变化

pagefile.sys文件的大小会发生变化,在每个盘里都会生成一个pagefile.sys文件。

步骤7:注意观察性能监视器,请自己调查一下监视器中三条不同颜色线条分别代表什么含义,性能监视器除了可以查看这些性能以外,还可以通过设置进行哪些性能监视,举例说明一下。

①在Windows XP中,系统监视器默认会装入三个性能计数器:“Pages/sec”(内存分页/秒)、“Avg. Disk Queue Length”(磁盘访问序列的平均值)和“% Processor Time”(处理器执行有效线程时间的百分比)。它们分别以黄、蓝、绿三种颜色的线条来表示。在窗口右边的图表中可以看到实时的计数器曲线图表(单击工具栏中的按钮切换成直方图或者报表显示),图表中的红色竖线在不断向右移动,它表示图表的更新过程。

a.黄色线:“Pages/sec”(内存分页/秒):主要用来表示平均每秒从虚拟内存中进行读取和写入的内存分页数。应用程序运行时,并没有把全部内容都加载到内存中,而是当内存中没有所需信息时才会到硬盘中调用。调用的内存分页越多、越频繁,系统性能就越差。

b.蓝色线:“Avg. Disk Queue Length”(磁盘访问序列的平均值):这个计数器的功能实际上用于多个物理磁盘共存的时候,此时磁盘性能会超过单个硬盘的性能,如果你安装有多块硬盘,那么这个计数器有时会显示出100%(甚至更高)的状态。

c.绿色线:“%Processor Time”(处理器执行有效线程时间的百分比):它反映的是CPU实际花费在有效线程执行和请求服务处理上的时间,用100%减去该计数器的读数就是系统处于空闲状态的时间。CPU不像收款员,它不会干坐在那里等待下一个任务的到来,而必须总有一些事情去做。就像我们打开电脑,不管是否进行操作,它的电源线上始终有电流流过,为了保证CPU始终有事可做,当它没有其他任务时,Windows便为它准备了另一件事,就是调用“空闲进程”(也就是我们以前曾经介绍过的“System Idle Process”,在系统没有什么操作时,它常常会显示为99%或100%)。实际上,系统在计算处理器时间时,并不是对每个不同的线程运行时间进行统计,而只是对空闲进程的运行时间进行计算,然后只要简单地用100%减去空闲进程的时间,就得到了“%Processor Time”。

操作系统实验报告

②点击“属性”按钮,添加计数器,可添加“分布式事务处理协调器”等进行性能监视。

操作系统实验报告

实验四进程调度

1.目的和要求

进程调度是处理机管理的核心内容。本实验要求用C语言编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。

2.实验内容

①设计进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算法。

②建立进程就绪队列。对两种不同算法编制入链子程序。

③编制两种进程调度算法:1)优先数调度;2)循环轮转调度

3.实验环境

①PC兼容机

②Windows、DOS系统、Turbo c 2.0

③C语言

4.实验提示

①本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。

②为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。

③在优先数算法中,优先数可以先取值为50-进程执行时间,进程每执行一次,优先数减3。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。

④对于遇到优先数一致的情况,采用FIFO策略解决。

5.实验程序

#include

#include

#include

#include

#include

#define P_NUM 3

#define P_TIME 50

enum state{

ready,

execute,

block,

finish

};

struct pcb{

char name[4];

int priority;

int cputime;

int needtime;

int count;

int round;

enum state process;

struct pcb * next;

};

struct pcb * get_process();

struct pcb * get_process(){

struct pcb *q;

struct pcb *t;

struct pcb *p;

int i=0;

printf("input name and needtime,please input 3 processes\n");

while (i

q=(struct pcb *)malloc(sizeof(struct pcb));

scanf("%s", &(q->name) );

scanf( "%d", &(q->needtime));

q->cputime=0;

q->priority=P_TIME-q->needtime;

q->process=ready;

q->next=NULL;

if (i==0){

p=q;

t=q;

}

else{

t->next=q;

t=q;

}

i++;

}/*while*/

return p;

}

void display(struct pcb *p){

printf("name cputime needtime priority state\n");

while(p){

printf("%s", p->name);

printf(" ");

printf("%d", p->cputime);

printf(" ");

printf("%d", p->needtime);

printf(" ");

printf("%d", p->priority);

printf(" ");

switch(p->process){

case ready:

printf("ready\n");

break;

case execute:

printf("execute\n");

break;

case block:

printf("block\n");

break;

case finish:

printf("finish\n");

break;

}

p=p->next;

}

}

int process_finish(struct pcb *q){ int bl=1;

while(bl&&q){

bl=bl&&q->needtime==0;

q=q->next;

}

return bl;

}

void cpuexe(struct pcb *q){

struct pcb *t=q;

int max_priority=0;

while(q){

if (q->process!=finish){

q->process=ready;

if(q->needtime==0){

q->process=finish;

}

}

if(max_prioritypriority&&q->process!=finish){

max_priority=q->priority;

t=q;

}

q=q->next;

}

if(t->needtime!=0){

t->priority-=3;

t->needtime--;

t->process=execute;

t->cputime++;

}

}

void priority_cal(){

struct pcb * p;

int cpu =0;

p=get_process();

while(!process_finish(p)){

cpu++;

printf( "cputime:%d\n" ,cpu);

cpuexe(p);

display(p);

}

printf("All processes have finished,press any key to exit");

getch();

}

void display_menu(){

printf("CHOOSE THE ALGORITHM:\n" );

printf("1 PRIORITY\n" );

printf("2 ROUNDROBIN\n" );

printf("3 EXIT\n" );

}

struct pcb * get_process_round(){

struct pcb *q;

struct pcb *t;

struct pcb *p;

int i=0;

printf("input name and time,please input 3 processes\n");

while (i

q=(struct pcb *)malloc(sizeof(struct pcb));

scanf( "%s", &(q->name));

scanf( "%d", &(q->needtime));

q->cputime=0;

q->round=0;

q->count=0;

q->process=ready;

q->next=NULL;

if (i==0){

p=q;

t=q;

}

else{

t->next=q;

t=q;

}

i++;

} /*while*/

return p;

}

void cpu_round(struct pcb *q){

q->cputime+=2;

q->needtime-=2;

if(q->needtime<0) {

q->needtime=0;

}

q->count++;

q->round++;

q->process=execute;

}

struct pcb * get_next(struct pcb * k,struct pcb * head){ struct pcb * t;

t=k;

do{

t=t->next;

}

while (t && t->process==finish);

if(t==NULL){

t=head;

while (t->next!=k && t->process==finish){

t=t->next;