计算机操作系统实验讲义(共34页)_第1页
计算机操作系统实验讲义(共34页)_第2页
计算机操作系统实验讲义(共34页)_第3页
计算机操作系统实验讲义(共34页)_第4页
计算机操作系统实验讲义(共34页)_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上计算机操作系统实验指导书曲阜师范大学计算机学院内容简介    操作系统是计算机教学中最重要的环节之一,也是计算机专业学生的一门重要的专业课程。操作系统质量的好坏,直接影响整个计算机系统的性能和用户对计算机的使用。一个精心设计的操作系统能极大地扩充计算机系统的功能,充分发挥系统中各种设备的使用效率,提高系统工作的可靠性。由于操作系统涉及计算机系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性。要学好这门课程,必须把理论与实践紧密结合,才能取得较好的学习效果。培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重

2、要的环节。通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操作系统、设计、构造和开发现代操作系统的基本能力。 本书通过操作系统编程接口,提供一些编程指导,以此加深学生对操作系统工作原理的领会和对操作系统实现方法的理解,并且使学生在操作系统层面的程序设计得到基本的训练。    本书提供了操作系统的安装与使用、生产者和消费者的问题、银行家调度算法、操作系统内存结构、简单文件系统的实现以及操作系统构成实验等6

3、个实验。    本书的使用对象是曲阜师范大学计算机科学与技术专业(本科)的学生,也可作为普通高等院校操作系统实验教学的指导书。实验一 操作系统的安装与使用1实验目的(1)巩固课程中讲授的WINDOWS 2000的使用知识,提高学生的WINDOWS 2000、WINDOWS XP或WINDOWS SEVER 2003等操作系统的实战演练水平。(2)熟悉Windows 2000等操作系统系统的定制安装过程,明确各安装部件的作用。要求学生掌握图形用户接口元素和图形用户接口元素的基本操作;熟悉控制面板中各组件的作用及设置;能够了解Windows系统对各种软件资源

4、和硬件资源管理的策略。(3)结合教材绪论,让学生对WINDOWS系统进程管理、处理机的调度与死锁、存储器管理、设备管理、文件管理以及系统接口有一个感性的认识并熟悉相关操作。2实验预备知识(1)阅读教材第一章(操作系统引论),熟悉操作系统的目标、作用和层次;了解操作系统的发展过程;熟悉操作系统实现的功能(存储器管理功能、处理机管理功能、设备管理功能、文件管理功能以及用户接口);了解操作系统的发展的历史和未来的发展趋势。(2)完成一本WINDOWS操作系统技术书籍的阅读(根据个人情况任选)。(3)学习微软认证(MCSE)中有关WINDOWS 2000 操作系统的知识(通过课堂补充教授、阅读有关书籍

5、或网上资料)。3实验环境(1)PC计算机;(2)WINDOWS 2000、WINDOWS XP或WINDOWS SEVER 2003等操作系统的安装盘。4实验时间:2个机时。5实验内容 (1)了解安装WINDOWS 2000(或WINDOWS XP、 WINDOWS SEVER 2003)的硬件需求;熟悉安装过程。熟悉安装过程中各种组件的选择;设置操作系统双重启动;熟悉各种物理设备驱动程序的安装。(2)熟悉WINDOWS 2000的用户界面。重点掌握各类操作系统的各类用户接口;掌握资源管理器的使用。(3)掌握对操作系统的配置和维护,掌握控制面板的使用。掌握安装和删除硬件设备的方法,熟练对打印机

6、、鼠标、键盘、网卡、显示卡、声卡等硬件设备进行配置。(4)了解网络的配置和网络协议的原理和设置,熟练对计算机进行网络设置。(5)熟练掌握WINDOWS 2000的管理工具。利用“计算机管理”选项对计算机进行设置。“计算机管理工具”为用户提供六种系统工具:“事件查看器”,“系统信息”、“性能日志和警报”,“共享文件夹”、设备管理器“和”本地用户和组。(6)了解WINDOWS 2000活动目录。目录是一个存储对象信息的分层结构,要求学生掌握配置活动目录的方法。(7)掌握WINDOWS 2000的存储管理。要求学生掌握以下内容:WINDOWS 2000的基本存储和动态存储;智能镜像、存储工具、视图的

7、设置和硬盘转换、动态磁盘中的卷以及相关卷的操作、磁盘碎片整理程序。(8)熟悉用WINDOWS任务管理器来观察计算机的应用程序列表、进程列表以及系统的处理机使用情况、内存分配和使用情况、句柄数、线程数等等。6思考WINDOWS操作系统中如何实现了处理机管理、内存管理、设备管理、文件管理和磁盘管理?如何操作?有条件的同学可参阅有关LINUX书籍和上机实践,思考和了解在LINUX操作系统中是如何实现了处理机管理、内存管理、设备管理、文件管理和磁盘管理? 实验二 生产者和消费者的问题1 实验目的(1)加深对进程概念的理解,明确进程和程序的区别。(2)进一步认识并发执行的实质。(3)验证用信号量机制实现

8、进程互斥的方法。(4)验证用信号机制实现进程同步的方法。2实验预备内容(1)阅读课本有关进程管理以及进程同步的有关章节,对临界区和临界资源概念要清晰,充分理解信号信号量机制。(2)阅读几种经典进程同步问题的算法并理解。熟练掌握生产者消费者的算法思想。3实验环境(1)一台运行Windows 2000 professional操作系统的计算机。(2)选用turbo c、visual c+、Delphi、c+ builder或visual basic等任何一种语言。4实验时间:4个机时。5实验内容问题描述:考虑有一些生产者和消费者进程,生产者进程生产信息并把它们放入缓冲池中,消费者从缓冲池中取走信息

9、。生产者消费者问题是相互合作的进程关系的一种抽象,如在输入时,输入进程是生产者,计算进程是消费者;而在输出时,则计算进程是生产者,打印进程是消费者。请使用信号量机制来解决生产者消费者问题。缓冲区互斥关系:(I)设缓冲池有n个单元。(II)当n个单元装满时,生产者必须等待。(III)当缓冲池空时,消费者必须等待。6参考算法 Var mutex,empty,full:semaphore:=1,n,0; buffer:array0,n-1 of item; in,out:integer:=0,0;生产者进程:repeatproduce an item in nextp wait(empty); wa

10、it(mutex); buffer(in):=nextp; in:=(in+1) mod n; signal(mutex); signal(full);until false;消费者进程:repeatwait(full); wait(mutex); nextc:=buffer(out); out:=(out+1) mod n; signal(mutex); signal(empty); consume the item in nextcwait(S)操作:S=S-1;若S>=0,则进程继续运行。若S<0,则该进程被阻塞,并将它插入该信号量的等待队列中。Signal(S)操作:S=S

11、+1;若S>0,则进程继续执行;若S<=0,则从信号量等待队列中移处第一个进程,使其变为就绪状态,然后再返回原进程继续执行。7实验要求在程序编制中,应有数据显示,最好采用图形界面显示。生产者和消费者的进程采用程序模拟的方法运行。实验三 银行家调度算法1实验目的(1)使学生加深对死锁的理解,理解预防死锁的思想和方法,使学生明确系统安全状态的概念。(2)使学生能利用银行家调度算法实现避免死锁。2实验预备内容 阅读死锁的基本概念,产生死锁的原因、产生死锁的必要条件以及处理死锁的基本方法,重点阅读关于死锁避免的章节。3实验环境(1)一台运行Windows 2000 professional

12、操作系统的计算机。(2)选用turbo c、visual c+、delphi、c+ builder或visual basic等任何一种语言,建议用c+。4实验时间:4个机时。5实验内容(1)设置银行家算法中的数据结构(a)可利用资源向量Available 它是一个含有m个元素的数组,其中的每一个元素代表一类可利用资源的数目,其初始值是系统中所配置该类全部可用资源数目。其数值随该类资源的分配和回收而动态地改变。如果Availablej=k表示系统中现有类资源k个。 (b)最大需求矩阵Max 这是一个的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max(i,j)=k,表示进

13、程i需要类资源的最大数目为k。 (c)分配矩阵Allocation 这是一个的矩阵,它定义了系统中每一类资源当前已分配该每一进程的资源数。如果Allocation(i,j)=k,表示进程i当前已分得类资源的数目为k。 (d)分配矩阵Need 这是一个的矩阵,用以表示每一个进程尚需的各类资源数。如果Need(i,j)=k表示进程i还需要类资源k个,方能完成其任务。上述三个矩阵存在如下关系:Need(i,j)=Max(i,j)-Allocation(i,j)(2)银行家算法 设是进程的请求向量。如果 j=k,表示进程需要k个类的资源。当发出资源请求后,系统按下述步骤进行检查: 如果,则转向步骤;否

14、则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。 如果,则转向步骤;否则,表示系统中尚无足够的的资源,必须等待。系统试探把要求的资源分配给进程,并修改下面数据结构中的数值:AvailableAvailable- ;系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程等待。(3)安全性算法系统所执行的安全性算法描述如下:设置两个向量(a)工作向量Work。它表示系统可提供给进程继续运行所需要的各类资源数目,它含有m个元素,执行安全算法开始时,Work:=Available。(b

15、)Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finishi :=false;当有足够资源分配给进程时,令 Finishi :=true。从进程集合中找到一个能满足下列条件的进程: (a) Finishi:=false (b) 如找到,执行步骤;否则执行步骤。当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work:=Work+Allocationi; Finishi:=true; go to step (2) 如果所有进程的Finishi:=true,则表示系统处于安全状态;否则,系统处于不安全状态。6参考算法#include<

16、;iostream.h>#include<fstream.h>#include<stdlib.h>#include "windows.h"#define MAX_PROCESS 32              /最大进程数#define MAX_COURCE 64             

17、 /最大资源类别int MAX_FACT_PROCESS;              /实际总进程数int MAX_FACT_COURCE;               /实际资源类别数int AvailableMAX_COURCE;        

18、         /可利用资源向量int MaxMAX_PROCESSMAX_COURCE;          /最大需求矩阵int AllocationMAX_PROCESSMAX_COURCE;   /分配矩阵int NeedMAX_PROCESSMAX_COURCE;         /需求矩阵int Request_PR

19、OCESS;                       /发出请求的进程int Request_COURCE;                      &#

20、160; /被请求资源类别int Request_COURCE_NEMBER;                 /请求资源数struct COMPint value;int num;int next;int flag=0;void Read_Initiate(void)              &

21、#160;              /读入初始化文档ifstream infile("Initiate.txt");   if(!infile)cout<<"不能打开输入文件:"<<"Initiate.txt"<<'n'exit(1);cout<<"开始读入初始化文档"<<'n

22、9;int ch;int ArrayMAX_PROCESS*MAX_COURCE*2;int num=0;while(infile>>ch)    Arraynum+=ch;num=0;   MAX_FACT_COURCE=Arraynum+;   for(int j=0;j<MAX_FACT_COURCE;j+)Availablej=Arraynum+;   MAX_FACT_PROCESS=Arraynum+;for(int i=0;i<MAX_FACT_PROCESS;i+)

23、for(int j=0;j<MAX_FACT_COURCE;j+)Maxij=Arraynum+;infile.close();void Write_Initiate(void)                                  /写入初始化文档(

24、分配资源ofstream outfile("Initiate.txt");if(!outfile)cout<<"不能打开初始化文档:"<<'n'exit(1);int ArrayMAX_PROCESS*MAX_COURCE*2;int num=0;Arraynum+=MAX_FACT_COURCE;   for(int i=0;i<MAX_FACT_COURCE;i+)Arraynum+=Availablei;Arraynum+=MAX_FACT_PROCESS;for(i=0;i<

25、MAX_FACT_PROCESS;i+)for(int j=0;j<MAX_FACT_COURCE;j+)Arraynum+=Maxij;num=0;outfile<<Arraynum+<<" "for(i=0;i<MAX_FACT_COURCE;i+)outfile<<Arraynum+<<" "outfile<<'n'<<Arraynum+<<endl;for(i=0;i<MAX_FACT_PROCESS;i+)for(int j=0

26、;j<MAX_FACT_COURCE;j+)outfile<<Arraynum+<<" "outfile<<endl;DWORD m_delay=3000;Sleep(m_delay);outfile.close();cout<<"修改初始化文档成功!"<<endl;void Allocated_list(void)              

27、0;          /读入已分配资源列表ifstream infile("Allocated_list.txt");   if(!infile)cout<<"不能打开输入文件:"<<"Allocated_list.txt"<<'n'exit(1);cout<<"开始读入已分配资源列表"<<'n'int ch,nu

28、m=0;int ArrayMAX_PROCESS*MAX_COURCE;while(infile>>ch)Arraynum+=ch;num=0;for(int i=0;i<MAX_FACT_PROCESS;i+)for(int j=0;j<MAX_FACT_COURCE;j+)Allocationij=Arraynum+;infile.close();void Set_Need(void)               &#

29、160;        /设置需求矩阵cout<<"设置需求矩阵"<<'n'for(int i=0;i<MAX_FACT_PROCESS;i+)for(int j=0;j<MAX_FACT_COURCE;j+)Needij=Maxij-Allocationij;void Read_Request(void)            

30、60;              /读入请求向量ifstream infile("Request_list.txt");   if(!infile)cout<<"不能打开输入文件:"<<"Request_list.txt"<<'n'exit(1);   cout<<"开始读入请求向量"

31、<<'n'int Array3;int num=0,ch;while(infile>>ch)    Arraynum+=ch;   Request_PROCESS=Array0;   Request_COURCE=Array1;   Request_COURCE_NEMBER=Array2;infile.close();void Write_Allocation(void)        

32、;                 /修改资源分配列表(资源分配)ofstream outfile("Allocated_list.txt");if(!outfile)cout<<"不能打开资源分配列表:"<<'n'exit(1);for(int i=0;i<MAX_FACT_PROCESS;i+)for(int j=0;j<MAX_FACT_C

33、OURCE;j+)outfile<<Allocationij<<" "outfile<<endl;   DWORD m_delay=3000;Sleep(m_delay);cout<<"修改资源分配列表成功!"<<endl;outfile.close();void Allocate_Source(void)              &#

34、160;        /开始分配(已通过扫描和安全性检测)cout<<'n'<<"开始给第"<<Request_PROCESS<<"个进程分配第"<<Request_COURCE<<"类资源"<<Request_COURCE_NEMBER<<"个"<<endl;Write_Initiate();Write_Allocati

35、on();DWORD m_delay=3000;Sleep(m_delay);cout<<'n'<<"祝贺您,资源分配已成功!"<<endl;void Test_Safty()                         /安全性检测cout<<'n'&l

36、t;<"进入安全性检测!"<<endl;   int WorkMAX_COURCE;for(int i=0;i<MAX_FACT_COURCE;i+)Worki=Availablei;   bool FinishMAX_PROCESSMAX_COURCE;for(i=0;i<MAX_FACT_PROCESS;i+)for(int j=0;j<MAX_FACT_COURCE;j+)Finishij=false;COMP Array32;for(i=0;i<MAX_FACT_PROCESS;i+)

37、Arrayi.value=NeediRequest_COURCE-1;       Arrayi.num=i;for(i=0;i<MAX_FACT_PROCESS;i+)for(int j=i+1;j<MAX_FACT_PROCESS;j+)if(Arrayi.value>=Arrayj.value)int t;t=Arrayj.value;               Arra

38、yj.value=Arrayi.value;Arrayi.value=t;t=Arrayj.num;               Arrayj.num=Arrayi.num;               Arrayi.num=t;else continue;DWORD m_delay=3000;Sleep(m_dela

39、y);/*for(i=0;i<MAX_FACT_PROCESS;i+)for(int j=0;j<MAX_FACT_COURCE;j+)cout<<Needij<<'t'cout<<endl;*/if(FinishRequest_PROCESS-1Request_COURCE-1=false&&NeedRequest_PROCESS-1Request_COURCE-1<=WorkRequest_COURCE-1)WorkRequest_COURCE-1=WorkRequest_COURCE-1+Allocat

40、ionRequest_PROCESS-1Request_COURCE-1;       FinishRequest_PROCESS-1Request_COURCE-1=true;elsecout<<"未通过安全性测试,不与以分配"<<endl;exit(0);   for(i=0;i<MAX_FACT_PROCESS;i+)if(Arrayi.num=Request_PROCESS-1)continue;if(Arrayi.num!=Request_PROCESS-

41、1&&FinishArrayi.numRequest_COURCE-1=false&&NeedArrayi.numRequest_COURCE-1<=WorkRequest_COURCE-1)WorkRequest_COURCE-1=WorkRequest_COURCE-1+AllocationArrayi.numRequest_COURCE-1;               FinishArrayi.numReque

42、st_COURCE-1=true;   for(i=0;i<MAX_FACT_PROCESS;i+)if(FinishiRequest_COURCE-1=true)continue;elsecout<<"未通过安全性测试,不与以分配"<<endl;   exit(0);cout<<'n'<<"找到一个安全序列:"<<"P"<<Request_PROCESS<<"->"

43、;   for(i=0;i<MAX_FACT_PROCESS;i+)if(Arrayi.num=Request_PROCESS)continue;elsecout<<"P"<<Arrayi.num<<"->"cout<<'n'<<"已通过安全性测试!"<<endl;Allocate_Source();void RUN(void)       

44、60;                                /执行银行家算法   cout<<"*"<<'n'<<"点击1执行!"<<'n'

45、<<"点击2退出!"<<'n'<<"*"<<endl;cin>>flag;if(flag=2)exit(0);if(flag=1)cout<<"开始扫描请求信息!"<<endl;DWORD m_delay=3000;Sleep(m_delay);if(Request_COURCE_NEMBER>NeedRequest_PROCESS-1Request_COURCE-1)cout<<'n'<<

46、"第"<<Request_PROCESS<<"个进程请求第"<<Request_COURCE<<"类资源"<<Request_COURCE_NEMBER<<"个"<<endl;       cout<<"可是已超出该进程尚需的该类资源的最大数量,所以不予以分配!"<<endl;exit(0);if(Request_COURCE_N

47、EMBER>AvailableRequest_COURCE-1)cout<<'n'<<"第"<<Request_PROCESS<<"个进程请求第"<<Request_COURCE<<"类资源"<<Request_COURCE_NEMBER<<"个"<<endl;       cout<<"可是系统中尚无足够

48、的资源,所以进入等待队列!"<<endl;exit(0);   elseAvailableRequest_COURCE-1=AvailableRequest_COURCE-1-Request_COURCE_NEMBER;       AllocationRequest_PROCESS-1Request_COURCE-1=AllocationRequest_PROCESS-1Request_COURCE-1+Request_COURCE_NEMBER;   

49、0;   NeedRequest_PROCESS-1Request_COURCE-1=NeedRequest_PROCESS-1Request_COURCE-1-Request_COURCE_NEMBER;cout<<"扫描通过"<<endl;Sleep(m_delay);Test_Safty();else cout<<"输入错误,请重新输入!"<<'n'RUN(); void main(void)   Read_Initiate();cou

50、t<<MAX_FACT_COURCE<<'t'for(int i=0;i<MAX_FACT_COURCE;i+)cout<<Availablei<<'t'cout<<endl<<MAX_FACT_PROCESS<<endl;for(i=0;i<MAX_FACT_PROCESS;i+)for(int j=0;j<MAX_FACT_COURCE;j+)cout<<Maxij<<'t'cout<<endl;DWORD

51、 m_delay=3000;Sleep(m_delay);cout<<"读入成功"<<'n'Allocated_list();for(i=0;i<MAX_FACT_PROCESS;i+)for(int j=0;j<MAX_FACT_COURCE;j+)cout<<Allocationij<<'t'cout<<endl;Sleep(m_delay);cout<<"读入成功"<<'n'Set_Need(); 

52、;  for(i=0;i<MAX_FACT_PROCESS;i+)for(int j=0;j<MAX_FACT_COURCE;j+)cout<<Needij<<'t'cout<<endl;   Sleep(m_delay);cout<<"设置成功"<<'n'   Read_Request();cout<<'n'<<"第"<<Request_PROCES

53、S<<"个进程请求第"<<Request_COURCE<<"类资源"<<Request_COURCE_NEMBER<<"个"<<endl;cout<<'n'<<"读入成功"<<'n'RUN();注:数组ArrayI表示第I+1个实际意义量需要创建三个txt文本。1.Initiate.txt文本3 3 3 2      /共有3类

54、资源,Available0=3; Available1=3; Available2=25             /当前系统中有个进程7 5 3         / Max00=73 2 2          /Max11=39 0 22 2 2 4 3 32.Allocated_list.txt文本0 1

55、0         /Allocation01=12 0 03 0 22 1 10 0 23.Request_list.txt文本2 1 1       /第2个进程请求第1类资源1个Request10=1本程序假设当前时刻只有一个进程请求某一类资源n个.若要满足某个进程当前时刻同时请求不止一类资源,则需要为最大需求矩阵Max,分配矩阵Allocation和需求矩阵Need增加维数,当然代码量也将大大增加,但是算法逻辑本身并无变化.实验四 操作系统内存结构

56、1实验目的(1)通过实验了解操作系统内存的使用,学习如何在应用程序中管理内存,体会Windows应用程序内存的简单性和自我保护能力。(2)了解Windows 2000的内存结构和虚拟内存的管理,进而了解进程堆和Windows为使用内存而提供的一些扩展功能。2实验预备知识(1)阅读教材关于存储器管理和虚拟存储器管理的内容。(2)熟悉Visual C+的简单使用。(3) Windows 2000是32位的操作系统,它使计算机CPU可以用32位地址对32位内存块进行操作。内存中的每一个字节都可以用一个32位的指针来寻址,这样,最大的存储空间就是字节4000兆字节(4GB),在Windows下运行的每

57、一个应用程序都认为能独占4GB 内存了。显然,Windows在幕后将虚拟内存(virtual memory,VM)地址映射到了各进程的物理内存上。而所谓物理内存是指计算机的RAM和由Windows分配到用户驱动器根目录上的换页文件。物理内存完全由系统管理。(4) Windows提供了一个API,即GetSystemInfo(),以便用户能检查系统中虚拟内存的一些特性。(5)MSDN的使用。3实验环境(1)一台运行Windows 2000 professional操作系统的计算机。(2)选用turbo c、visual c+、Delphi、c+ builder或visual basic等任何一种

58、语言,建议用visual c+。4实验时间:2个机时。5实验内容实验步骤如下:(1) 登陆操作系统(Windows 2000、Windows XP或Windows Sever 2003)(2) 运行Visual C+6.0(或Visual C+.NET)(3) 在工具栏击“Filenewprojects”,选择”Win32 Console Application”,并添上“Project name”,选择“OK”,然后选择“A simple application”,选择“Finish”。(4) 编写程序,然后程序进行编译,并运行。(5) 试记录以下结果:虚拟内存每页容量是多少?最小应用地址是

59、多少?最大应用地址是多少?当前可供应用程序使用的内存空间是多少?当前计算机的实际内存是多大?提示:可供应用程序使用的内存空间实际上已经减去了开头与结尾两个64KB的保护区。虚拟内存空间的64KB保护区是防止编程错误的一种Windows方式。任何对内存中这一区域的访问(读、写、执行)都将引发一个错误陷阱,从而导致错误并终止程序的执行。也就是说,假如用户有一个NULL指针(地址为0),但仍试图在此之前很近的地址处使用另一个指针,这将因为试图从更低的保留区域读写数据,从而产生意外错误并终止程序的执行。6参考算法#include "stdafx.h"#include<wind

60、ows.h>#include<iostream>#include<shlwapi.h>#include<iomanip>#pragma comment(lib,"shlwapi.lib")int main()/首先获得系统信息SYSTEM_INFO si;:ZeroMemory(&si,sizeof(si);:GetSystemInfo(&si);/使用外壳辅助程序对一些尺寸进行格式化TCHAR szPageSizeMAX_PATH;:StrFormatByteSize(si.dwPageSize,szPageSiz

61、e,MAX_PATH);DWORD dwMemSize=(DWORD)si.lpMaximumApplicationAddress-(DWORD)si.lpMinimumApplicationAddress;TCHAR szMemSizeMAX_PATH;:StrFormatByteSize(dwMemSize,szMemSize,MAX_PATH);/将内存信息显示出来std:cout<<"Virtual memory page size:"<<szPageSize<<std:endl;std:cout.fill('0'

62、);std:cout<<"Minimum application address:0X"<<std:hex<<std:setw(8) <<(DWORD)si.lpMinimumApplicationAddress<<std:endl;std:cout<<"Maximum application address:0X"<<std:hex<<std:setw(8) <<(DWORD)si.lpMaximumApplicationAddress<&

63、lt;std:endl;std:cout<<"Total available virtual memory"<<szMemSize<<std:endl; 参考结果如下:Virtual memory page size:4.00 KBMinimum application address:0XMaximum application address:0X7ffeffffTotal available virtual memory1.99 GB实验五 简单文件系统的实现1实验目的通过一个简单的文件系统的设计,加深对文件系统存储空间的管理、文件的

64、结构、目录结构和文件操作等内部功能和实现过程的理解。2实验预备内容(1)操作系统教材中有关文件管理的章节。(2)了解DOS操作系统有关文件的操作。(3)数据结构中有关队列的内容。3实验环境(1)一台运行Windows 2000 professional操作系统的计算机。(2)选用turbo c、visual c+、Delphi、c+ builder或visual basic等任何一种语言,建议用visual c+。4实验时间:2个机时。5实验内容(1)模仿DOS操作系统设计一个文件系统,能实现一些功能:cd 进入文件目录,并置为当前目录create 创建文件del 删除文件dir 文件和目录列

65、表lsall 显示从根目录开始的所有目录和文件及其层次结点md 创建目录rd 删除目录ren 文件更名exit 退出文件系统(2)列目录时要列出目录名和文件名,文件名要列出文件名和文件占用字节数。(3)要求格式参考DOS操作系统文件显示格式,对这些内容感兴趣的同学,可在系统要求的基础上进行扩充。6参考算法 filesys.h#include<stdio.h>#include"string.h"#include"stdlib.h"#define MaxSize 100/目录和文件的结构定义struct DirectoryNodechar nam

66、e50;/目录或文件名字int type;/0代表目录,1代表普通文件struct DirectoryNode *next;/指向下一个兄弟结点的指针struct DirectoryNode *preDirFile;/指向父结点的指针struct DirectoryNode *subFile;/指向第一个子结点的指针int size;/在lsall函数中要用到的相应的队列的数据结构struct DataTypeDirectoryNode *DirFile;char name50;/包含一个指向目录的指针和名字/*队列定义*/struct Tp/队列结构的实现DataType dataMaxSi

67、ze;int front,rear;/分别表示队列的头结点和尾结点;void InitCycQueue(Tp *sq)/队列初始化sq->front=0;sq->rear=0;int EncycQueue(Tp *sq,DataType data)/在队列中增加元素if(sq->rear+1)%MaxSize=sq->front)printf("%sQueue is full!");return 0;elsesq->rear=(sq->rear+1)%MaxSize;sq->datasq->rear=data;return 1

68、;DataType OutCycQueue(Tp *sq)/从队列中删除一个元素if(sq->front=sq->rear)printf("%sQueue is empty!");elsesq->front=(sq->front+1)%MaxSize;return(sq->datasq->front+1);int Empty(Tp *sq)/判断队列是否为空,返回if(sq->front=sq->rear)return 0;else return 1;/*队列定义结束*/DirectoryNode *workDirFile;/当前工作目录DirectoryNode root;/根目录char path50="pkutest"/path info/filesys.cpp#include "stdafx.h"#include"filesys.h"#include

温馨提示

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

最新文档

评论

0/150

提交评论