操作系统课程设计_第1页
操作系统课程设计_第2页
操作系统课程设计_第3页
操作系统课程设计_第4页
操作系统课程设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

湖南科技大学计算机科学与工程学院

操作系统课程设计报告

学号:********姓名:**班级:***指导老师:***完毕时间:****.**.**目录实验一Windows进程管理实验二Linux进程管理实验三互斥与同时实验四银行家算法的模拟与实现实验五内存管理实验六磁盘调度实验七进程间通信实验一Windows进程管理实验目的学会使用VC编写基本的Win32ConsolApplication(控制台应用程序)。

2)通过创立进程、观察正在运行的进程和终止进程的程序设计和调试操作,进一步熟悉操作系统的进程概念,理解Windows进程的“一生”。

3)通过阅读和分析实验程序,学习创立进程、观察进程、终止进程以及父子进程同时的基本程序设计办法。二、实验内容和环节(1)编写基本的Win32ConsolApplication

环节1:登录进入Windows系统,启动VC++6.0。

环节2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32ConsolApplication”,然后在“Projectname”处输入工程名,在“Location”处输入工程目录。创立一种新的控制台应用程序工程。

环节3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++SourceFile”,然后在“File”处输入C/C++源程序的文献名。

环节4:将清单1-1所示的程序清单复制到新创立的C/C++源程序中。编译成可执行文献。

环节5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序,列出运行成果(如果运行不成功,则可能的因素是什么?)如果运行不成功可能是途径有问题或者没有通过编译。

(2)创立进程

本实验显示了创立子进程的基本框架。该程序只是再一次地启动本身,显示它的系统进程ID和它在进程列表中的位置。

环节1:创立一种“Win32ConsolApplication”工程,然后拷贝清单1-2中的程序编译成可执行文献。

环节2:在“命令提示符”窗口运行环节1中生成的可执行文献,列出运行成果。按下ctrl+alt+del,调用windows的任务管理器,统计进程有关的行为属性。运行成果:

环节3:在“命令提示符”窗口加入参数重新运行生成的可执行文献,列出运行成果。按下ctrl+alt+del,调用windows的任务管理器,统计进程有关的行为属性。运行成果:

环节4:nclone为线程开始运行的编号,当nclone的值不不大于或者等于c_nCloneMax时程序运行一次即跳出;变量的定义和初始化办法(位置)对程序的执行成果有影响;(3)父子进程的简朴通信及终止进程环节1:创立一种“Win32ConsolApplication”工程,然后拷贝清单1-3中的程序,编译成可执行文献。环节2:在VC的工具栏单击“ExecuteProgram”(执行程序)按钮,或者按Ctrl+F5键,或者在“命令提示符”窗口运行环节1中生成的可执行文献,列出运行成果。

环节3:按源程序中注释中的提示,修改源程序1-3,编译执行(执行前请先保存已经完毕的工作),列出运行成果。在程序中加入跟踪语句,或调试运行程序,同时参考MSDN中的协助文献CreateProcess()的使用办法,理解父子进程如何传递参数。给出程序执行过程的大概描述。通过main(intargc,char*argv[]?)1程

环节4:按源程序中注释中的提示,修改源程序1-3,编译执行,列出运行成果。

环节5:参考MSDN中的帮助文件CreateMutex()、OpenMutex()、ReleaseMutex()和WaitForSingleObject()的使用办法,理解父子进程如何运用互斥体进行同时的。给出父子进程同时过程的一种大概描述。CreateMutex()创立互斥体,OpenMutex()打开互斥体,ReleaseMutex()释放互斥体,WaitForSingleObject()检测hHandle事件的信号状态,通过这些办法可实现现在只有一种进程被创立或使用,实现进程的同时。首先,进程创立一种互斥体,打开互斥体,如碰到互斥,则进行解决,解决完后,释放互斥体,下面便是进程等待一种要解决的项目实验心得与体会每个进程都从调用CreateProcess()?API函数开始,该函数的任务是在对象管理器子系统内初始化进程对象。每一进程都以调用ExitProcess()或TerminateProcess()API函数终止。普通应用程序的框架负责调用?ExitProcess()函数。进程都是有始有终,其中有中断,尚有解决进程间互斥的函数,已达成进程的完毕后自然终止。实验二Linux进程管理实验目的通过进程的创立、撤销和运行加深对进程概念和进程并发执行的理解,明确进程和程序之间的区别。背景知识在Linux中创立子进程要使用fork()函数,执行新的命令要使用exec()系列函数,等待子进程结束使用wait()函数,结束终止进程使用exit()函数。

fork()原型以下:pid_tfork(void);

fork建立一种子进程,父进程继续运行,子进程在同样的位置执行同样的程序。对于父进程,fork()返回子进程的pid,对于子进程,fork()返回0。出错时返回-1。

exec系列有6个函数,原型以下:

externchar**environ;

intexeclp(constchar*file,constchar*arg,...);

intexecle(constchar*path,constchar*arg,...,char*constenvp[]);

intexecv(constchar*path,char*constargv[]);

intexecve(constchar*filename,char*constargv[],char*constenvp[]);

intexecvp(constchar*file,char*constargv[]);

exec系列函数用新的进程映象置换现在的进程映象.这些函数的第一种参数是待执行程序的途径名(文献名)。这些函数调用成功后不会返回,其进程的正文(text),数据(data)和栈(stack)段被待执行程序程序覆盖。但是进程的PID和全部打开的文献描述符没有变化,同时悬挂信号被去除,信号重置为缺省行为。

在函数execl,execlp,和execle中,constchar*arg以及省略号代表的参数可被视为arg0,arg1,...,argn。它们合起来描述了指向NULL结尾的字符串的指针列表,即执行程序的参数列表。作为商定,第一种arg参数应当指向执行程序名本身,参数列表必须用NULL指针结束。

execv和execvp函数提供指向NULL结尾的字符串的指针数组作为新程序的参数列表。作为商定,指针数组中第一种元素应当指向执行程序名本身。指针数组必须用NULL指针结束。

execle函数同时阐明了执行进程的环境(environment),它在NULL指针背面规定一种附加参数,NULL指针用于结束参数列表,或者说,argv数组。这个附加参数是指向NULL结尾的字符串的指针数组,它必须用NULL指针结束。其它函数从目迈进程的environ外部变量中获取新进程的环境。

execlp和execvp可根据path搜索适宜的程序运行,其它则需要给出程序全途径。

execve()类似execv(),但是加上了环境的解决。

wait(),waitpid()可用来等待子进程结束。函数原型:

#include<sys/wait.h>

pid_twait(int*stat_loc);

pid_twaitpid(pid_tpid,int*stat_loc,intoptions);当进程调用wait,它将进入睡眠状态直到有一种子进程结束。wait函数返回子进程的进程id,stat_loc中返回子进程的退出状态。

waitpid的第一种参数pid的意义:

pid>0:等待进程id为pid的子进程。

pid==0:等待与自己同组的任意子进程。pid==-1:等待任意一种子进程

pid<-1:等待进程组号为-pid的任意子进程。

因此,wait(&stat)等价于waitpid(-1,&stat,0),waitpid第三个参数option能够是0,WNOHANG,WUNTRACED或这几者的组合。三、实验内容与环节(1)进程的创立任务规定:编写一段程序,使用系统调用fork()创立两个子进程。当此程序行在系统中有一种父进程和两个子进程活动。让每一种进程在屏幕上显示一种字符:父进程显示字符“a”;两子进程分别显示字符“b”和字符“c”。

环节1:使用vi或gedit新建一种fork_demo.c程序,然后拷贝清单2-1中的程序,使用cc或者gcc编译成可执行文献fork_demo。例如,能够使用gcc–ofork_demofork_demo.c完毕编译。

环节2:在命令行输入./fork_demo运行该程序。子进程执行新任务任务规定:编写一段程序,使用系统调用fork()创立一种子进程。子进程通过系统调用exec更换自己原有的执行代码,转去执行Linux命令/bin/ls(显示现在目录的列表),然后调用exit()函数结束。父进程则调用waitpid()等待子进程结束,并在子进程结束后显示子进程的标记符,然后正常结束。程序执行过程如图2-1所示。

环节1:使用vi或gedit新建一种exec_demo.c程序,然后拷贝清单2-2中的程序(该程序的执行如图2-1所示),使用cc或者gcc编译成可执行文献exec_demo。例如,能够使用gcc–oexec_demoexec_demo.c完毕编译。

环节2:在命令行输入./exec_demo运行该程序。

环节3:观察该程序在屏幕上的显示成果,并分析。图2-1exec_demo.c程序的执行过程实验心得及体会这个课题的实验让我学会了Windows系统下虚拟机中的基本程序的编写,第一次在虚拟级的环境中编写了这一种程序。并通过进程的创立。撤销和运行加深对进程概念和进程并发执行的理解,明确了进程和程序之间的区别。实验三互斥与同时一、实验目的1)回想操作系统进程、线程的有关概念,加深对Windows线程的理解。2)理解互斥体对象,运用互斥与同时操作编写生产者-消费者问题的并发程序,加深对P(即semWait)、V(即semSignal)原语以及运用P、V原语进行进程间同时与互斥操作的理解。二、实验内容和环节1)生产者消费者问题环节1:创立一种“Win32ConsolApplication”工程,然后拷贝清单3-1中的程序,编译成可执行文献。

环节2:在“命令提示符”窗口运行环节1中生成的可执行文献,列出运行成果。

环节3:认真阅读源程序,找出创立线程的WINDOWSAPI函数,回答下列问题:线程的第一种执行函数是什么(从哪里开始执行)?它位于创立线程的API函数的第几个参数中?答:第一种执行函数是Producer;位于创立线程API函数的第三个参数中

环节4:修改清单3-1中的程序,调节生产者线程和消费者线程的个数,使得消费者数目大与生产者,看当作果有何不同。察看运行成果,从中你能够得出什么结论?当生产者数目不不大于消费者时,生产者需要等待消费者;当消费者数目不不大于生产者时,消费者要经常等待.

环节5:修改清单3-1中的程序,按程序注释中的阐明修改信号量EmptySemaphore的初始化办法,看当作果有何不同。

环节6:根据环节4的成果,并查看MSDN,回答下列问题:

1)CreateMutex中有几个参数,各代表什么含义。有三个参数;1)2)3)

2)CreateSemaphore中有几个参数,各代表什么含义,信号量的初值在第几个参数中。有四个参数;1)表达采用不允许继承的默认描述符;2)设立信号机的初始计数;3)设立信号机的最大计数;指定信号机对象的名称.3)程序中P、V原语所对应的实际WindowsAPI函数是什么,写出这几条语句。CreateMutex能用CreateSemaphore替代吗?尝试修改程序3-1,将信号量Mutex完全用CreateSemaphore及有关函数实现。写出要修改的语句。能够;Mutex=CreateSemaphore(NULL,1,1,NULL);P:WaitForSingleObject(Mutex,INFINITE);V:ReleaseSemaphore(Mutex,1,NULL);实验总结这次实验加深了对Windows线程的理解,理解互斥体对象,通过对生产者消费者等进程间同时与互斥典型算法的实现,加深对P、V原语以及运用P、V原语进行进程间同时与互斥操作的理解,将信号量看做生产或消费的一种对象,将信号量的生成和销毁操作犹如P操作和V操作同样,生成者消费者问题模拟的就是对信号量的生成和销毁,其中牵涉了信号量的同时,这也是该问题为什么成为同时的典型问题的因素。实验四银行家算法的模拟与实现一、实验目的(1)进一步理解进程的并发执行。

(2)加强对进程死锁的理解,理解安全状态与不安全状态的概念。

(3)掌握使用银行家算法避免死锁问题。二、实验基本知识与原理1)基本概念死锁:多个进程在执行过程中,由于竞争资源会造成互相等待的局面。如果没有外力作用,这些进程将永远无法向前推动。此时称系统处在死锁状态或者系统产生了死锁。

安全序列:系统按某种次序并发进程,并使它们都能达成获得最大资源而次序完毕的序列为安全序列。

安全状态:能找到安全序列的状态称为安全状态,安全状态不会造成死锁。

不安全状态:在现在状态下不存在安全序列,则系统处在不安全状态。银行家算法银行家算法顾名思义是来源于银行的借贷业务,一定数量的本金要满足多个客户的借贷周转,为了避免银行家资金无法周转而倒闭,对每一笔贷款,必须考察其与否能限期偿还。

在操作系统中研究资源分派方略时也有类似问题,系统中有限的资源要供多个进程使用,必须确保得到的资源的进程能在有限的时间内偿还资源,以供其它进程使用资源。如果资源分派不当,就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。

当一进程提出资源申请时,银行家算法执行下列环节以决定与否向其分派资源:

1)检查该进程所需要的资源与否已超出它所宣布的最大值。

2)检查系统现在与否有足够资源满足该进程的请求。

3)系统试探着将资源分派给该进程,得到一种新状态。具体设计(1)数据构造资源总量向量Resource,m维,表达m种资源的总量。可用资源向量Available,m维,表达未分派的多个可用资源数量。需求矩阵Claim,n*m矩阵,表达n个进程对m类资源的最大需求。分派矩阵Allocation,n*m矩阵,表达n个进程已分派的多个资源数.(2)编程实现/*安全性检查函数*/intchkerr()//在假定分派资源的状况下检查系统的安全性{intWORK[N],FINISH[M],temp[M];//temp[]用来统计进程安全执行的次序inti,j,m,k=0,count;for(i=0;i<M;i++)FINISH[i]=FALSE;for(j=0;j<N;j++)WORK[j]=AVAILABLE[j];//把可运用资源数赋给WORK[]for(i=0;i<M;i++){count=0;for(j=0;j<N;j++)if(FINISH[i]==FALSE&&NEED[i][j]<=WORK[j])count++;if(count==N)//当进程各类资源都满足NEED<=WORK时{for(m=0;m<N;m++)WORK[m]=WORK[m]+ALLOCATION[i][m];FINISH[i]=TRUE;temp[k]=i;//统计下满足条件的进程k++;i=-1;}}for(i=0;i<M;i++)if(FINISH[i]==FALSE){printf("系统不安全!!!本次资源申请不成功!!!\n");return1;}printf("\n");printf("经安全性检查,系统安全,本次分派成功。\n");printf("\n");printf("本次安全序列:");for(i=0;i<M;i++)//打印安全系统的进程调用次序{printf("进程");printf("%d",temp[i]);if(i<M-1)printf("->");}printf("\n");return0;}/*资源向量变化*/voidrstordata(intk){intj;for(j=0;j<N;j++){AVAILABLE[j]=AVAILABLE[j]+Request[j];ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j];NEED[k][j]=NEED[k][j]+Request[j];}}/*系统对进程请求响应,资源向量变化*/voidchangdata(intk){intj;for(j=0;j<N;j++){AVAILABLE[j]=AVAILABLE[j]-Request[j];ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];NEED[k][j]=NEED[k][j]-Request[j];}}成果与分析实验心得与体会设计重要由两部分构成。第一部分:银行家算法(扫描)如果Request<=Need,则转2;否则,出错如果Request<=Available,则转向3,否则等待系统试探分派请求的资源给进程4.系统执行安全性算法第二部分重要是进行资源的修改。在这里能够修改资源的可用资源和资源还需求资源。多个进程同时运行时,系统根据各类系统资源的最大需求和各类系统的剩余资源为进程安排安全序列,使得系统能快速且安全地运行进程,不至发生死锁。银行家算法是避免死锁的重要办法,其思路在诸多方面都非常值得我们来学习借鉴。实验五内存管理一、实验目的(1)通过对Windowsxp“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调节Windows的内存性能,加深对操作系统内存管理、虚拟存储管理等理论知识的理解。

(2)理解Windowsxp的内存构造和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。二、实验内容和环节(1)观察和调节WindowsXP的内存性能。环节1:阅读“背景知识”,请回答:

1)什么是“分页过程”?当Windows求助于硬盘以获得虚拟内存时,这个过程被称为分页(paging)。分页就是将信息从主内存移动到磁盘进行临时存储的过程。

2)什么是“内存共享”?应用程序经常需要彼此通信和共享信息。从性能的角度来看,共享内存的能力大大减少了应用程序使用的内存数量。运行一种应用程序的多个副本时,每一种实例都能够使用相似的代码和数据,这意味着不必维护所加载应用程序代码的单独副本并使用相似的内存资源。无论正在运行多少个应用程序实例,充足支持应用程序代码所需求的内存数量都相对保持不变。

3)什么是“未分页合并内存”和“分页合并内存”?未分页合并内存:包含必须驻留在内存中的占用代码或数据,这些程序在系统重新启动或关闭之前始终驻留在内存的特定部分中。内存中包含的进程保存在主内存中,并且不能交换到磁盘上物理内存的这个部分用于内核模式操作(例如,驱动程序)和必须保存在主内存中才干有效工作的其它进程。没有主内存的这个部分,内核组件就将是可分页的,系统本身就有变得不稳定的危险。分页合并内存:存储迟早需要的可分页代码或数据的内存部分,即使能够将分页合并内存中的任何系统进程交换到磁盘上,但是它临时存储在主内存的这一部分,以防系统立刻需要它。在将系统进程交换到磁盘上之前,Windows会交换其它进程。

Windowsxp中,未分页合并内存的最大限制是多少?最大限制为256MBWindowsxp分页文献默认设立的最小容量和最大容量是多少?环节2:登录进入Windowsxp。

环节3:查看包含多个实例的应用程序的内存需求。

1)启动想要监视的应用程序,例如Word。

2)右键单击任务栏以启动“任务管理器”。

3)在“Windows任务管理器”对话框中选定“进程”选项卡。

4)向下滚动在系统上运行的进程列表,查找想要监视的应用程序。

请在表5-3中统计:

表5-3实验统计映像名称PIDCPUCPU时间内存使用dwn.exe1640000:00:0816996KQQ.exe*323548000:00:082048KWps.exe*325836020:00:3859264K

“内存使用”列显示了该应用程序的一种实例正在使用的内存数量。

5)启动应用程序的另一种实例并观察它的内存需求。请描述使用第二个实例占用的内存与使用第一种实例时的内存对比状况。环节4:未分页合并内存估算未分页合并内存大小的最简朴办法是使用“任务管理器”。未分页合并内存的预计值显示在“任务管理器”的“性能”选项卡的“核心内存”部分。

总数(K):8122*_1024分页数:328*1024未分页(K):116*1024还能够使用“任务管理器”查看一种独立进程正在使用的未分页合并内存数量和分页合并内存数量。操作环节以下:1)单击“Windows任务管理器”的“进程”选项卡,然后从“查看”菜单中选择“选择列”命令,显示“进程”选项卡的可查看选项。

2)在“选择列”对话框中,选定“页面缓冲池”选项和“非页面缓冲池”选项旁边的复选框,然后单击“拟定”按钮。返回WindowsXp“任务管理器”的“进程”选项卡时,将看到其中增加显示了各个进程占用的分页合并内存数量和未分页合并内存数量。仍以刚刚打开观察的应用程序(例如Word)为例,请在表5-4中统计:

表5-4实验统计映像名称PIDCPUCPU时间内存使用dwn.exe1640000:00:1217248KQQ.exe*323548000:00:1073888KWps.exe*325836020;01;1467088K从性能的角度来看,未分页合并内存越多,能够加载到这个空间的数据就越多。拥有的物理内存越多,未分页合并内存就越多。但未分页合并内存被限制为256MB,因此添加超出这个限制的内存对未分页合并内存没有影响。环节5:提高分页性能。

在Windowsxp的安装过程中,将使用持续的磁盘空间自动创立分页文献(pagefile.sys)。顾客能够事先监视变化的内存需求并对的配备分页文献,使得当系统必须借助于分页时的性能达成最高。

即使分页文献普通都放在系统分区的根目录下面,但这并不总是该文献的最佳位置。要想从分页获得最佳性能,应当首先检查系统的磁盘子系统的配备,以理解它与否有多个物理硬盘驱动器。

1)在“开始”菜单中单击“设立”–“控制面板”命令,双击“管理工具”图标,再双击“计算机管理”图标。

2)在“计算机管理”窗口的左格选择“磁盘管理”管理单元来查看系统的磁盘配备。请在表5-5中统计:表5-5实验统计卷布局类型文献系统容量状态简朴基本4.88GB状态良好(OEM分区)C:简朴基本NTFS100.00GB状态良好(系统,启动,页面文献)D:简朴基本NTFS30.00GB状态良好(逻辑驱动器)E:简朴基本NTFS30.00GB状态良好(逻辑驱动器)F:简朴基本NTFS100.00GB状态良好(逻辑驱动器)如果系统只有一种硬盘,那么建议应当尽量为系统配备额外的驱动器。这是由于:Windowsxp最多能够支持在多个驱动器上分布的16个独立的分页文献。为系统配备多个分页文献能够实现对不同磁盘I/O请求的并行解决,这将大大提高I/O请求的分页文献性能。

环节6:计算分页文献的大小。

要想更改分页文献的位置或大小配备参数,可按下列环节进行:

1)右键单击桌面上的“我的电脑”(Win7为计算机)图标并选定“属性”(Win7为高级系统设立)。

2)在“高级”选项卡上单击“性能选项”按钮。

3)单击对话框中的“虚拟内存”区域中的“更改”按钮。

请统计:

所选驱动器(C:)的页面文献大小:

驱动器:C:;可用空间:56362MB

初始大小(MB):最大值(MB):所选驱动器(D:)的页面文献大小:(如果有的话)

驱动器:D:可用空间:30622MB

全部驱动器页面文献大小的总数:30622MB

允许的最小值:16MB推荐:12183MB现在已分派:8122MB

4)要想将另一种分页文献添加到现有配备,在“虚拟内存”对话框中选定一种还没有分页文献的驱动器,然后指定分页文献的初始值和最大值(以兆字节表达),单击“设立”,然后单击“拟定”。

5)要想更改现有分页文献的最大值和最小值,可选定分页文献所在的驱动器。然后指定分页文献的初始值和最大值,单击“设立”按钮,然后单击“拟定”按钮。

6)在“性能选项”对话框中单击“拟定”按钮。

7)单击“拟定”按钮以关闭“系统特性”对话框。(2)理解和检测进程的虚拟内存空间。

环节1:创立一种“Win32ConsolApplication”工程,然后拷贝清单5-1中的程序,编译成可执行文献。

环节2:在VC的工具栏单击“ExecuteProgram”(执行程序)按钮,或者按Ctrl+F5键,或者在“命令提示符”窗口运行环节1中生成的可执行文献。

环节3:根据运行成果,回答下列问题

虚拟内存每页容量为:4.00KB最小应用地址:0x00010000最大应用地址:0x7ffeffff现在可供应用程序使用的内存空间为:1.99GB提示:可供应用程序使用的内存空间事实上已经减去了开头与结尾两个64KB的保护区。虚拟内存空间中的64KB保护区是避免编程错误的一种Windows方式。任何对内存中这一区域的访问(读、写、执行)都将引发一种错误陷阱,从而造成错误并终止程序的执行。按committed、reserved、free等三种虚拟地址空间分别统计实验数据。其中“描述”是指对该组数据的简朴描述,例如,对下列一组数据:

00010000–0001<8.00KB>Committed,READWRITE,Private

可描述为:含有READWRITE权限的已调配私有内存区。

将系统现在的自由区(free)虚拟地址空间按表5-6格式统计。表5-6实验统计地址大小虚拟地址空间类型访问权限描述(60.0KB)FreeNOACCESS(60.0KB)FreeNOACCESS00294000-002a0000(48.0KB)FreeNOACCESS002a1000-002b0000(60.0KB)FreeNOACCESS(36.0KB)FreeNOACCESS(60.0KB)FreeNOACCESS(40.0KB)FreeNOACCESS(636KB)FreeNOACCESS(0.98MB)FreeNOACCESS(704KB)FreeNOACCESS提示:具体统计实验数据在实验活动中是必要的,但想想与否能够简化统计的方法?将系统现在的已调配区(committed)虚拟地址空间按表5-7格式统计。表5-7实验统计地址大小虚拟地址空间类型访问权限描述(64.0KB)CommittedREADWRITEMapped(4.00KB)CommittedREADWRITEPrivate(4.00KB)CommittedREADONLYImage00089000-0008c000(12.0KB)CommittedREADWRITEPrivate(16.0KB)CommittedREADWRITEPrivate00089000-0008c000(12.0KB)CommittedREADWRITEPrivate(16.0KB)CommittedREADWRITEPrivate(12.0KB)CommittedREADWRITEPrivate(16.0KB)CommittedREADONLYMapped002a0000-002a1000(4.00KB)CommittedREADWRITEPrivate将系统现在的保存区(reserved)虚拟地址空间按表5-8格式统计。表5-8实验统计地址大小虚拟地址空间类型访问权限描述(228KB)reservedREADONLYPrivate00090000-0028c000(1.98MB)ReservedREADONLYPrivat(124KB)ReservedREADONLYPrivate00593000-005a0000(52.0KB)ReservedREADONLYPrivate00656000-006d0000(488KB)ReservedREADONLYPrivate(1.44MB)ReservedREADONLYMapped(20.0KB)ReservedREADONLYMapped(840KB)ReservedREADONLYPrivate00bf4000-01f10000(19.1MB)ReservedREADONLYMapped(60.0KB)ReservedREADONLYImage实验总结通过对Windowsxp“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调节Windows的内存性能,加深对操作系统内存管理、虚拟存储管理等理论知识的理解。

理解Windowsxp的内存构造和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。实验六磁盘调度实验目的(1)理解磁盘构造以及磁盘上数据的组织方式。(2)掌握磁盘访问时间的计算方式。(3)掌握惯用磁盘调度算法及其有关特性。二、实验基本知识及原理1)磁盘数据的组织磁盘上每一条物理统计都有唯一的地址,该地址涉及三个部分:磁头号(盘面好)、柱面号(磁道号)和扇区号。给定这三个量就能够唯一地拟定一种地址。2)磁盘访问时间的计算方式磁盘在工作室以恒定的速率旋转。为确保读或写,磁头必须移动到所规定的磁道上,当所规定的扇区的开始位置旋转到磁头下时,开始读或写数据。对磁盘的访问时间涉及:寻道时间、旋转延迟时间和传输时间。3)磁盘调度算法磁盘调度的目的是要尽量减少磁盘的寻道时间,以提高磁盘I/O系统的性能。先进先出算法:按访问请求达成的先后次序进行调度。最短服务时间优先算法:优先选择使磁头臂从现在位置开始移动最少的磁盘I/O请求进行调度。SCAN(电梯算法):规定磁头臂先沿一种方向移动,并在途中满足全部未完毕的请求,直到它达成这个方向上的最后一种磁道。或者在这个方向上没有别的请求为止,后一种改善有时候称作LOOK方略。然后倒转服务方向,沿相反方向扫描,同样按次序完毕全部请求。

C-SCAN(循环扫描)算法:在磁盘调度时,把扫描限定在一种方向,当沿某个方向访问到最后一种磁道时,磁头臂返回到磁盘的另一端,并再次开始扫描。具体设计//SCAN(电梯算法)voidSCAN(intarray[],intm){intnow;inttemp;inti,j;intsum=0;floatavg;for(i=0;i<m;i++){for(j=i+1;j<m;j++)//对磁道号进行从小到大排列{if(array[i]>array[j])//两磁道号之间比较{temp=array[i];array[i]=array[j];array[j]=temp;}}}for(i=0;i<m;i++)//输出排序后的磁道号数组printf("%d",array[i]);printf("\n请输入现在的磁道号:");scanf("%d",&now);printf("磁道方向:沿磁道增大的方向");printf("\nSCAN调度成果:");for(i=0;i<m;i++){if(now<=array[i]){printf("%d",array[i]);sum=array[i]-now+sum;now=array[i];}else{j=i;temp=array[i];}}for(i=j;i>=0;i--){printf("%d",array[i]);sum=now-array[i]+sum;now=array[i];}avg=(float)sum/m;printf("\n移动的总道数:%d\n",sum);printf("平均寻道长度:%f\n",avg);}//C-SCAN(循环扫描)算法voidCSCAN(intarray[],intm){intnow;inttemp;inti,j;intsum=0;floatavg;for(i=0;i<m;i++){for(j=i+1;j<m;j++)//对磁道号进行从小到大排列{if(array[i]>array[j])//两磁道号之间比较{temp=array[i];array[i]=array[j];array[j]=temp;}

温馨提示

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

评论

0/150

提交评论