操作系统实验报告.实验一_WINDOWS进程初识

操作系统实验报告.实验一_WINDOWS进程初识
操作系统实验报告.实验一_WINDOWS进程初识

操作系统教程

实验指导书

实验一WINDOWS进程初识

1、实验目的

(1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。

(2)掌握WINDOWS API的使用方法。

(3)编写测试程序,理解用户态运行和核心态运行。

2、实验内容和步骤

(1)编写基本的Win32 Consol Application

步骤1:登录进入Windows,启动VC++ 6.0。

步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。

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

步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。

步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe

运行结果 (如果运行不成功,则可能的原因是什么?) :

答:运行成功,结果:

(2)计算进程在核心态运行和用户态运行的时间

步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。

步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。

步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。

E:\课程\os课\os实验\程序\os12\debug>time TEST.exe

步骤4:运行结果 (如果运行不成功,则可能的原因是什么?)

因为此程序是个死循环,所以运行时间为无穷大。_______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ _______________________________________________________________________________ __________________________________________________________________________

步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。

屏蔽i循环:

_______________________________________________________________________________

屏蔽j循环:

_______________________________________________________________________________

调整循环变量i的循环次数:

_______________________________________________________________________________

调整循环变量j的循环次数:

_______________________________________________________________________________ 3、实验结论

通过实验可以得知运行一个程序CPU的使用情况是不同的,同时与循环的次数无关,和当前计算的复杂情况有关。实验得出的数据可以可以说明这一点。

实验二进程管理

1、实验目的

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

2) 通过阅读和分析实验程序,学习创建进程、观察进程、终止进程以及父子进程同步的基本程序设计方法。

2、实验内容和步骤

(1). 创建进程

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

步骤1:创建一个“Win32 Consol Application”工程,然后拷贝清单2-1中的程序,编译成可执行文件。

步骤2:在“命令提示符”窗口运行步骤1中生成的可执行文件。运行结果:

范例:E:\课程\os课\os实验\程序\os11\debug>os21

(假设编译生成的可执行文件是os21.exe)

__________________________

__________________________________________

___________________________________________

______________________________________

___________________________________________

__________________________________________ ___

按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:

PID:3676 ,

句柄数:11

内存使用:1080K

页面错误:263

页面缓存:15K

步骤3:在“命令提示符”窗口加入参数重新运行生成的可执行文件。运行结果:

范例:E:\课程\os课\os实验\程序\os11\debug>os21 3

(假设编译生成的可执行文件是os21.exe)

按下ctrl+alt+del,调用windows的任务管理器,记录进程相关的行为属性:

PID:2821

句柄数:7

内存使用:832K

页面错误:263

页面缓存:15K

步骤4:修改清单2-1中的程序,将nClone的定义和初始化方法按程序注释中的修改方法进行修改,编译成可执行文件(执行前请先保存已经完成的工作)。再按步骤2中的方式运行,看看结果会有什么不一样。运行结果:

第一次修改:结果不变。

第二次修改:是一个死循环,不断的弹出此窗口:

从中你可以得出什么结论:

nClone的作用:_控制程序的执行,当nClone大于等于5时可跳出程序。

________________________________________________________________

_____________________________________________________________________ 变量的定义和初始化方法(位置)对程序的执行结果有影响吗?为什么?________________ ____有,nClone被修改后会对程序的结束控制产生影响

_______________________________________________________________________________

(2). 父子进程的简单通信及终止进程

步骤1:创建一个“Win32 Consol Application”工程,然后拷贝清单2-2中的程序,编译成可执行文件。

步骤2:在VC的工具栏单击“Execute Program”(执行程序) 按钮,或者按Ctrl + F5键,或者在“命令提示符”窗口运行步骤1中生成的可执行文件。运行结果:

范例:E:\课程\os课\os实验\程序\os11\debug>os22

(假设编译生成的可执行文件是os22.exe)

步骤3:按源程序中注释中的提示,修改源程序2-2,编译执行(执行前请先保存已经完成的工作)。运行结果:

不断的弹出:

在程序中加入跟踪语句,或调试运行程序,同时参考MSDN中的帮助文件CreateProcess()的使用方法,理解父子进程如何传递参数。给出程序执行过程的大概描述:通过main(int argc, char* argv[])传递参数,每次运行时先检测argc的

值,若小于1,程序运行结束,否则继续往下执行。

步骤4:填空

CreateProcess() 函数有_5_______个核心参数?本实验程序中设置的各个参数的值是:

a. ______szFilename___________________________________________;

b. ______szCmdLine___________________________________________;

c. ______NULL___________________________________________;

d. ______NULL___________________________________________;

e. ______FALSE___________________________________________;

f. _______CREA TE_NEW_CONSOLE__________________________________________;

g. _______NULL__________________________________________;

h. _______NULL__________________________________________;

i. _______si__________________________________________;

j. _______pi__________________________________________。

步骤5:按源程序中注释中的提示,修改源程序2-2,编译执行。运行结果:

步骤6:参考MSDN中的帮助文件CreateMutex()、OpenMutex()、ReleaseMutex()和WaitForSingleObject()的使用方法,理解父子进程如何利用互斥体进行同步的。给出父子进程同步过程的一个大概描述:

CreateMutex()创建互斥体,OpenMutex()打开互斥体,ReleaseMutex()释放互斥体,WaitForSingleObject()检测hHandle事件的信号状态,通过这些方法可实现当前只有一个进程被创建或使用,实现进程的同步。

3、实验结论

通过对进程的操作,如创建进程,实现对进程的简单控制。创建互斥体,解决了进程的同步问题,两者相互使用,使进程的运行情况得到了很好的管理。

实验三进程同步的经典算法

1、实验目的

1) 回顾系统进程、线程的有关概念,加深对Windows 2000线程的理解。

2) 了解互斥体对象,通过对生产者消费者等进程间同步与互斥经典算法的实现,加深对P、V原语以及利用P、V原语进行进程间同步与互斥操作的理解。

2、实验内容和步骤

(1). 生产者消费者问题

步骤1:创建一个“Win32 Consol Application”工程,然后拷贝清单3-1中的程序,编译成可执行文件。

步骤2:在“命令提示符”窗口运行步骤1中生成的可执行文件。运行结果:

范例:E:\课程\os课\os实验\程序\os11\debug>os31

(假设编译生成的可执行文件是os31.exe)

步骤3:仔细阅读源程序,找出创建线程的WINDOWS API函数,回答下列问题:线程的第一个执行函数是什么(从哪里开始执行)?它位于创建线程的API函数的第几个参数中?

答:第一个执行函数是Producer;位于第三个参数中。

步骤4:修改清单3-1中的程序,调整生产者线程和消费者线程的个数,使得消费者数目大与生产者,看看结果有何不同。运行结果:

从中你可以得出什么结论:

生产速度快,生产者经常等待消费者;反之,消费者经常等待。

步骤5:修改清单3-1中的程序,按程序注释中的说明修改信号量EmptySemaphore的

初始化方法,看看结果有何不同。运行结果:

步骤6:根据步骤4的结果,并查看MSDN,回答下列问题

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

答:有三个参数.

1. LPSECURITY_ATTRIBUTES lpMutexAttributes 代表安全属性的指针

2. BOOL bInitialOwner代表布尔bInitialOwner

3.LPCTSTR lpName代表LPCTSTR类型lpName

2)CreateSemaphore中有几个参数,各代表什么含义,信号量的初值在第几个参数中。

四个参数:1、表示采用不允许继承的默认描述符2、设置信号机的初始计数3、设置信号机的最大计数 4、指定信号机对象的名称。

3)程序中P、V原语所对应的实际Windows API函数是什么,写出这几条语句。

P:Take() V:Append()

4)CreateMutex能用CreateSemaphore替代吗?尝试修改程序3-1,将信号量Mutex 完全用CreateSemaphore及相关函数实现。写出要修改的语句:

可以

Mutex=CreateSemaphore(NULL,false,false,NULL);

(2). 读者写者问题

根据实验(1)中所熟悉的P、V原语对应的实际Windows API函数,并参考教材中读者、写者问题的算法原理,尝试利用Windows API函数实现第一类读者写者问题(读者优先)。

3、实验结论

将信号量看作生产或消费的一个对象,对信号量的生成和销毁操作如同P操作和V操作一样,生成者消费者问题模拟的就是对信号量的生成和销毁,其中牵涉了信号量的同步,这也是该问题为何称为同步的经典问题的原因。

实验四存储管理

1、实验目的

(1)通过对Windows 2000“任务管理器”、“计算机管理”、“我的电脑”属性、“系统信息”、“系统监视器”等程序的应用,学习如何察看和调整Windows的内存性能,加深对操作系统存储管理、虚拟存储管理等理论知识的理解。

(2)了解Windows 2000的内存结构和虚拟内存的管理,理解进程的虚拟内存空间和物理内存的映射关系。

2、实验内容和步骤

(1)观察和调整Windows 2000/XP的内存性能。

步骤1:阅读“背景知识”,请回答:

1) 什么是“分页过程”?

分页过程就是将信息从主内存移动到磁盘进行临时存储的过程。

2) 什么是“内存共享”?

允许访问某些内存空间而不危及它和其他应用程序的安全性和完整性

3) 什么是“未分页合并内存”和“分页合并内存”?

Windows 2000中,未分页合并内存的最大限制是多少?

未分页合并内存:分页合并内存是存储迟早需要的可分页代码或数据的内存部分。

分业合并内存: 未分页合并内存包含必须驻留在内存中的占用代码或数据。

在Windows2000中为分业合并内存的最大限制是256MB。

4) Windows 2000分页文件默认设置的最小容量和最大容量是多少?

内存数量的1.5倍作为分页文件的最小容量,这个最小容量的两倍作为最大容量。

步骤2:登录进入Windows 2000 Professional。

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

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

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

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

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

请在表4-3中记录:

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

5) 启动应用程序的另一个实例并观察它的内存需求。

请描述使用第二个实例占用的内存与使用第一个实例时的内存对比情况:

第二个实例占用内存22612K,比第一个实例占用的内存大很多。

步骤4:未分页合并内存。

估算未分页合并内存大小的最简单方法是使用“任务管理器”。未分页合并内存的估计值显示在“任务管理器”的“性能”选项卡的“核心内存”部分。

总数(K) :__96340K___________________________

分页数:_____50328___________________________

未分页(K) :__46052K_________________________

还可以使用“任务管理器”查看一个独立进程正在使用的未分页合并内存数量和分页合并内存数量。操作步骤如下:

1) 单击“Windows任务管理器”的“进程”选项卡,然后从“查看”菜单中选择“选择列”命令,显示“进程”选项卡的可查看选项。

2) 在“选择列”对话框中,选定“页面缓冲池”选项和“非页面缓冲池”选项旁边的复选框,然后单击“确定”按钮。

返回Windows 2000“任务管理器”的“进程”选项卡时,将看到其中增加显示了各个进程占用的分页合并内存数量和未分页合并内存数量。

仍以刚才打开观察的应用程序(例如Word) 为例,请在表4-4中记录:

从性能的角度来看,未分页合并内存越多,可以加载到这个空间的数据就越多。拥有的物理内存越多,未分页合并内存就越多。但未分页合并内存被限制为256MB,因此添加超出这个限制的内存对未分页合并内存没有影响。

步骤5:提高分页性能。

在Windows 2000的安装过程中,将使用连续的磁盘空间自动创建分页文件(pagefile.sys) 。用户可以事先监视变化的内存需求并正确配置分页文件,使得当系统必须借助于分页时的性能达到最高。

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

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

2) 在“计算机管理”窗口的左格选择“磁盘管理”管理单元来查看系统的磁盘配置。

如果系统只有一个硬盘,那么建议应该尽可能为系统配置额外的驱动器。这是因为:Windows 2000最多可以支持在多个驱动器上分布的16个独立的分页文件。为系统配置多个分页文件可以实现对不同磁盘I/O请求的并行处理,这将大大提高I/O请求的分页文件性能。

请在表4-5中记录:

步骤6:计算分页文件的大小。

要想更改分页文件的位置或大小配置参数,可按以下步骤进行:

1) 右键单击桌面上的“我的电脑”图标并选定“属性”。

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

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

请记录:

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

驱动器:_C:__________________________________

可用空间:________31637________________________ MB

初始大小(MB) :___________________________

最大值(MB) :_____________________________

所选驱动器(D: ) 的页面文件大小:(如果有的话)

驱动器:______D:_____________________________

可用空间:____20682____________________________ MB

初始大小(MB) :____756MB_______________________

最大值(MB) :____1512MB_________________________

所有驱动器页面文件大小的总数:

允许的最小值:___2_________________________ MB

推荐:___________1522_________________________ MB

当前已分配:________756______________________ MB

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

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

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

7) 单击“确定”按钮以关闭“系统特性”对话框。

步骤7:使用任务管理器。

可以使用“任务管理器”来简单地检查分页文件是否配置了正确容量。这样可以实时提供系统正在使用分页文件的方式以及其他重要系统信息的准确描述。

通过右键单击任务栏运行“任务管理器”,选定“性能”选项卡查看实时的系统统计数据。与分页文件大小最有关的信息位于“认可用量”区域。这一区域显示了认可“峰值”是否达到或超过了认可“限制”,以及它是否超过了系统上的物理内存数量。认可“峰值”是指系统迄今为止向进程分配的最大物理内存和虚拟内存数量。

请记录:

物理内存(K)

总数:___1039660K_____________________________

可用数:_502544K_____________________________

系统缓存:504332K____________________________

认可用量(K)

总数:____400156K____________________________

限制:____1714520K____________________________

峰值:____427648K____________________________

当系统遇到分页活动增加的情况时,提交的内存数量(“认可总数”) 就会增加。一旦它达到了“认可限制”值,系统就需要扩展分页文件。“认可限制”值指出在不必扩展分页文件的情况下可以向内存提交的虚拟内存数量。因为目标是避免扩展分页文件,所以必须保持“认可总数”和“认可限制”值相差较大。如果这两个值接近了,那么系统必须动态增加分页文件的大小。

“任务管理器”的“认可用量”区域显示的信息还说明了系统的主内存是否足以满足系

统执行的任务。如果认可“总数”值经常超过系统中的内存数量,那么系统的物理内存可能不足。

(2)了解和检测进程的虚拟内存空间。

步骤1:创建一个“Win32 Consol Application”工程,然后拷贝清单4-1中的程序,编译成可执行文件。

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

范例:E:\课程\os课\os实验\程序\os11\debug>os41

(假设编译生成的可执行文件是os41.exe)

步骤3:根据运行结果,回答下列问题

虚拟内存每页容量为:________4.00KB______________________________________ 最小应用地址:______________0x00010000_____________________________________ 最大应用地址:_____________0x7ffeffff_______________________________________ 当前可供应用程序使用的内存空间为:_____1.99GB___________________________ 当前计算机的实际内存大小为:_____0.99GB_________________________________ 理论上每个Windows应用程序可以独占的最大存储空间是:_____________

按committed、reserved、free等三种虚拟地址空间分别记录实验数据。其中“描述”是指对该组数据的简单描述,例如,对下列一组数据:

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

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

将系统当前的自由区(free) 虚拟地址空间填入表4-6中。

将系统当前的已调配区(committed) 虚拟地址空间填入表4-7中。

将系统当前的保留区(reserved) 虚拟地址空间填入表4-8中。

3、实验结论

简单描述windows进程的虚拟内存管理方案:通过对文件的操作权限,有只读,读写,不允许访问等等和不同的调度方式实现对虚拟内存的管理。

实验五文件和设备管理

1、实验目的

通过对Windows 2000提供的文件与文件夹加密、磁盘配额管理、进行磁盘清理、执行备份操作、使用CHKDSK维护文件完整性和整理磁盘碎片等功能进行操作:

1) 熟悉Windows 2000的文件系统。

2) 明确应用NTFS文件系统的积极意义。

3) 掌握优化Windows 2000磁盘子系统的基本方法。

4) 进一步理解现代操作系统文件管理知识。

2、实验内容与步骤

步骤1:阅读“背景知识”,请回答:

1) Windows 2000支持哪三种主要的文件系统:

a. ______FAT16____________________________________________________________

b. _______FAT32___________________________________________________________

c. _____ NTFS _____________________________________________________________

2) NTFS文件系统只能用于哪些操作系统环境:

Windows NT、2000和XP

步骤2:登录进入Windows 2000 Professional。

步骤3:加密文件或文件夹。

为加密文件或文件夹,可按照以下步骤进行:

1) 在“Windows资源管理器”中,右键单击想要加密的文件或文件夹,然后单击“属性”命令。

2) 在“常规”选项卡上,单击“高级”按钮。在“高级属性”对话框中,可以设置的文件属性有:

3) 选定“加密内容以便保护数据”复选框。

4) 单击“确定”按钮完成操作。

步骤4:访问RSM服务。

Windows 2000还通过一些辅助组件提供了用于额外存储的选项。可移动存储管理(Removable Storage Management,RSM) 就是一项用于管理可移动媒体 (例如磁带和光盘) 以及存储设备 (库) 的服务。RSM允许应用程序访问和共享相同的媒体资源。RSM使用户可以很容易地追踪可移动存储媒体 (例如磁带和光盘) ,并管理包含它们的库 (例如转换器和光盘机) 。

为访问RSM服务,可按以下步骤操作:

1) 在“控制面板”中双击“管理工具”图标,再双击其中的“计算机管理”图标,打开本地“计算机管理”窗口。

2) 在左窗格右键单击控制树中的“可移动存储”。

“可移动存储”可以管理和设置的项目有:

a. ________媒体____________________________________________

b. _________库___________________________________________

磁盘配额可追踪和控制卷的磁盘空间使用情况。为分配磁盘配额,可按照以下步骤进行:

1) 打开“我的电脑”。

2) 右键单击想要指定默认配额位的卷 (例如某个硬盘) ,然后单击“属性”命令。

3) 在“属性“对话框中,选定”配额“选项卡。

4) 在“属性“对话框的”配额“选项卡上,选定“启用配额管理”。

5) 选定“将磁盘空间限制为”选项,这将激活磁盘空间限制和警告级别区域。

6) 在文本框中键入数值,从下拉列表中选定一个磁盘空间限制单位,然后单击“确定”。可以使用小数值 (例如20.5MB) 。

步骤6:添加新的磁盘配额项

在启用卷的磁盘配额时,将从这一时刻开始自动追踪新用户的卷使用情况。为了对现有的卷用户应用磁盘配额,可以在“配额项”对话框中添加新的配额项。操作步骤如下:

1) 在“我的电脑”窗口中,右键单击想要添加新的磁盘配额项的卷,然后单击“属性”命令。

2) 在“属性”对话框中,选定“配额”选项卡。

3) 在“配额”选项卡上,单击“配额项”按钮。

4) 在“配额项目”窗口的“配额”菜单中单击“新建配额项”命令。

5) 在“选择用户”对话框中,单击“查找范围”列表框,选定想要从中选择用户名的域名或工作组名称。单击“添加”,然后单击“确定”按钮。

6) 在“添加新配额项”对话框中,可以对所选用户设置的配额限制项目有:

7) 单击“确定”按钮完成操作。

只能在Windows 2000中使用 NTFS格式化的磁盘卷上分配磁盘配额。如果想要管理配额,则必须是驱动器所在计算机上的Administrators组的成员。

步骤7:磁盘清理。

“磁盘清理”有助于释放硬盘驱动器空间。“磁盘清理”程序将搜索驱动器,然后显示可以安全删除的临时文件、Internet缓存文件以及不需要的程序文件。可以指示删除其中一些或所有的文件。

为打开“磁盘清理”功能,可单击“开始”按钮,单击“程序”菜单中的“附件”-“系统工具”-“磁盘清理”命令。

“磁盘清理”搜索指定的驱动器。在打开和关闭文件或者使用Interne连接时,系统会创建临时文件,这些临时性质的文件有时会继续保存在硬盘上。“磁盘清理”程序可以了解这些文件采用的形式及其在磁盘上的位置,以便安全地删除这些文件,释放宝贵的磁盘空间。步骤8:备份。

为应对故障事件,Windows 2000包括了一个功能齐全的“备份”程序,该程序使用了一些标准的备份设备。

单击“开始”菜单中“系统工具”的“备份”命令,可运行“备份”实用程序。

在“备份”程序中包括了“备份向导”和“还原向导”,这些向导简化了备份和恢复Windows 2000服务器上存储的重要数据的任务。用户也可以在“备份”选项卡和“还原”选项卡中使用“备份”和“还原”程序的手工版本。

·备份数据

要想选定要备份的数据,只需要在“备份”窗口的左窗格中单击要备份的文件或目录旁边的复选框即可。然后在窗口下方选择备份目的地,命名备份媒体,最后单击“开始备份”按钮。·恢复数据

为“还原”恢复数据,先选定想要恢复的文件和文件夹,选定恢复备份文件和文件夹的位置,设置恢复选项,然后单击“开始还原”进行恢复操作。

·计划作业

除备份和恢复数据之外,Windows 2000“备份”程序还允许计划备份作业,以便在无人干预的情况下运行.

计划备份操作可按照以下步骤进行:

1) 打开“备份”实用程序。

2) 单击“备份”选项卡,从“作业”菜单中

选择“新建”命令。

3) 单击以选定想要备份的任何驱动器、文件夹或文件的复选框。

4) 选定将作为备份目的地的文件或磁带设备,然后单击“作业”菜单中的“保存选项”命令,以保存文件和文件夹选择。

5) 在“备份媒体或文件名”文本框中,键入备份文件的路径和文件名或者选定磁带。

6) 单击“工具”菜单中的“选项”命令,选定想要使用的任何备份选项,例如备份类型和日志文件类型,然后单击“确定”按钮。

7) 单击“开始备份”,在“备份作业信息”对话框中进行所需要的任何更改。

8) 如果想要设置高级备份选项,例如数据验证或硬件压缩,则单击“高级”。选择完高级备份选项后,单击“确定”按钮。

9) 单击“备份作业信息”对话框中的“计划”。

10) 在“设置账号信息”对话框中,输入一个用户名和密码 (指定在这个账号下运行计划的备份操作) 。

11) 在“计划的作业选项”对话框中,在“作业名”文本框中键入计划的备份作业的名称。然后单击“属性”,以设置计划备份的日期、时间和频率参数。在完成后单击“确定”按钮退出操作。

步骤9:使用 CHKDSK维护文件完整性

Windows 2000的CHKDSK可以扫描FAT、FAT32和NTFS分区上的文件系统完整性,它检查丢失的簇、交叉链接文件等,还可以尝试更正它找到的任何错误。它还提供了其他许多文件系统信息。

如果Windows 2000感觉到文件系统损坏,它将在启动时自动运行CHKDSK。用户也可以手工启动这个实用程序。CHKDSK可以在5种模式中运行。第一种模式没有任何参数,这是一种只读模式,仅用于检查文件系统中的任何错误。在这种模式中,CHKDSK会报告任何错误,但是不会尝试修复错误,因此这个过程完成得非常快。其他4个选项使用以下参数:· /FILENAME 检查指定文件的碎片化情况。

· /F 尝试修复文件系统中的任何错误。

· /V 提供分区上的每一个文件的名称和完整路径。

· /R 查找分区上的坏扇区并尝试恢复可读信息。

要运行CHKDSK,可执行以下操作:

1) 在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,打开“命令提示符”窗口。

2) 在命令提示符上进入要检查的分区。例如,键入C:\ 。

3) 键入不带任何参数的CHKDSK,以便只检查文件系统错误。如果找到了任何错误,则继续进行第4) 步。

请记录系统执行CHKDSK命令过程中显示的提示信息:

CHKDSK系统检查之后,报告的磁盘信息是:

4) 运行带 /F参数的CHKDSK,以尝试修复在文件系统中找到的错误。

一般情况下,用户只有在担心系统存在着Windows 2000没有意识到的磁盘问题时才会使用这个实用程序。

步骤10:整理磁盘碎片。

Microsoft声称使用像NTFS这样有效的文件系统可以减少整理碎片的需要,但是NTFS文件系统也仍然会受碎片化的影响。Windows 2000中包括了一个“磁盘碎片整理程序”实用程序。通过整理使用FAT、FAT32或NTFS文件系统的卷的碎片,Windows 2000包括了一些用来维护磁盘性能的能力。

这个版本具有以下限制:

·只能整理本地卷的碎片。

·一次只能整理一个卷的碎片。

·在扫描一个卷时不能整理另一个卷的碎片。

·不能使用脚本。

·不能计划碎片的整理工作。

·一次只能运行一个Microsoft管理控制台 (MMC) 管理单元。

所有测试过的系统配置都表明,NTFS碎片整理可以改进性能,并且较快的系统配置从磁盘碎片整理上获得的收益比功能较弱的系统更多

为打开“碎片整理”功能,可单击“开始”按钮,单击“程序”菜单中的“附件”-“系统工具”-“碎片整理”命令。

3、实验结论

谈谈WINDOWS支持的几种文件系统的优缺点:

解答:FAT文件系统是早期文件系统之一,也是MS-DOS使用的原始文件系统。它将文件信息储存在位于卷标开头处的文件分配表中,并保存两份文件分配表,以防其中的一个遭到破坏,FAT文件系统最大的优点是MS-DOS、Windows 9x甚至OS/2都能访问FAT卷标;而其最大的弱点是随着FAT卷标尺寸的增长,最小的簇尺寸也随之增长。对于大于512MB的硬盘而言,最小的簇尺寸为16KB;对于大于2GB的硬盘,最小的簇尺寸为64KB。这就导致磁盘空间的极大浪费,因为一个文件必须占用整数个簇。因此,1KB的文件在2GB的硬盘上将占用64KB 的磁盘空间。FAT文件系统不支持尺寸大于4GB的卷标。

FAT32文件系统通过提供长文件名的支持来扩展FAT文件系统,并与FAT16兼容。FAT (16和32) 文件系统是支持可移动媒体 (例如软盘) 上的惟一的文件系统。

Windows NT文件系统 (NTFS) 包括了FAT文件系统的所有功能,同时又提供了对高级文件系统特征 (例如安全模式、压缩和加密) 的支持。它是为在大磁盘上有效地完成文件操作而设计的。与FAT和保护模式FAT文件系统不同,它的最小簇尺寸不超过4KB。但是,NTFS 卷标只能为Windows NT、2000和XP操作系统所访问。

操作系统-Linux课程实验报告

实验、 Linux Ubuntu的安装、创建新的虚拟机VMWare 实验 Shell编程 1.实验目的与内容 通过本实验,了解Linux系统的shell机制,掌握简单的shell编程技巧。 编制简单的Shell程序,该程序在用户登录时自动执行,显示某些提示信息,如“Welcome to Linux”, 并在命令提示符中包含当前时间、当前目录和当前用户名等基本信息。 2.程序源代码清单 #include<> #include int main(){ printf("Hello Linux\n"); int pid; int state; int pfd[2]; pipe(pfd); if (fork()==0){ printf("In the grep progress\n"); dup2(pfd[0],0); close(pfd[0]); close(pfd[1]); execlp("grep","grep","sh",0); perror("exelp grep error"); } esle if(fork()==0){ printf("In the ps progress\n"); dup2(pfd[1],1); close(pfd[0]); close(pfd[1]); execlp("ps","ps","-ef",0); perror("execlp ps -ef"); }

close(pfd[1]); close(pfd[0]); wait(&state); wait(&state); } 实验内核模块 实验步骤: (1).编写内核模块 文件中主要包含init_clock(),exit_clock(),read_clock()三个函数。其中init_clock(),exit_clock()负责将模块从系统中加载或卸载,以及增加或删除模块在/proc中的入口。read_clock()负责产生/proc/clock被读时的动作。 (2).编译内核模块Makefile文件 # Makefile under ifneq ($(KERNELRELEASE),) #kbuild syntax. dependency relationshsip of files and target modules are listed here. obj-m := else PWD := $(shell pwd) KVER ?= $(shell uname -r) KDIR := /lib/modules/$(KVER)/build all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: rm -rf .*.cmd *.o *. *.ko .tmp_versions *.symvers *.order endif 编译完成之后生成模块文件。 (3).内核模块源代码 #include #include #include #include #include #include #define MODULE #define MODULE_VERSION "" #define MODULE_NAME "clock" struct proc_dir_entry* my_clock; int read_clock(char* page, char** start, off_t off, int count, int* eof, void* data) { int len; struct timeval xtime;

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

操作系统实验报告一

重庆大学 学生实验报告 实验课程名称操作系统原理 开课实验室DS1501 学院软件学院年级2013专业班软件工程2 班学生姓名胡其友学号20131802 开课时间2015至2016学年第一学期 总成绩 教师签名洪明坚 软件学院制

《操作系统原理》实验报告 开课实验室:年月日学院软件学院年级、专业、班2013级软件工 程2班 姓名胡其友成绩 课程名称操作系统原理 实验项目 名称 指导教师洪明坚 教师 评语教师签名:洪明坚年月日 1.实验目的: ?进入实验环境 –双击expenv/setvars.bat ?检出(checkout)EPOS的源代码 –svn checkout https://www.360docs.net/doc/3c10957531.html,/svn/epos ?编译及运行 –cd epos/app –make run ?清除所有的临时文件 –make clean ?调试 –make debug ?在“Bochs Enhanced Debugger”中,输入“quit”退出调试 –调试指令,请看附录A 2.实验内容: ?编写系统调用“time_t time(time_t *loc)” –功能描述 ?返回从格林尼治时间1970年1月1日午夜起所经过的秒数。如果指针loc 非NULL,则返回值也被填到loc所指向的内存位置 –数据类型time_t其实就是long ?typedef long time_t; 3.实验步骤: ?Kernel space –K1、在machdep.c中,编写系统调用的实现函数“time_t sys_time()”,计算用户秒数。需要用到 ?变量g_startup_time,它记录了EPOS启动时,距离格林尼治时间1970年1午夜的秒数 ?变量g_timer_ticks

计算机操作系统实验课实验报告

实验报告 实验课程: 计算机操作系统学生姓名:XXX 学号:XXXX 专业班级:软件 2014年12月25日

目录 实验一熟悉Windows XP中的进程和线程.. 3实验二进程调度 (7) 实验三死锁避免—银行家算法的实现 (18) 实验四存储管理 (24)

实验一熟悉Windows XP中的进程和线程 一、实验名称 熟悉Windows XP中的进程和线程 二、实验目的 1、熟悉Windows中任务管理器的使用。 2、通过任务管理器识别操作系统中的进程和线程的相关信息。 3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。 三、实验结果分析 1、启动操作系统自带的任务管理器: 方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。

2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并 完成下表: 表一:统计进程的各项主要信息 3、启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。再

从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是任务管理器无法结束进程, 原因是该系统是系统进程。 4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所 有窗口最小化,看看你的计算机系统起来什么样的变化桌面上图标菜单都消失了、得到的结论explorer.exe是管理桌面图标的文件(说出explorer.exe进程的作用)。 5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进 程“explorer.exe”的各项信息,并填写下表: 进程:explorer.exe 中的各个线程

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科0901 学号: 0909090310

指导老师:宋虹

目录 课程设计内容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------6 文件系统的层次结构和功能模块 ---------------------6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录-------------------------------------------------- 12

课程设计内容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

操作系统实验报告4

《操作系统》实验报告 实验序号: 4 实验项目名称:进程控制

Printf(“child Complete”); CloseHandle(pi.hProcess); CloseHandle(pi hThread); ﹜ 修改后: #include #include int main(VOID) { STARTUPINFO si; PROCESS_INFORMA TION pi; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(!CreateProcess(NULL, "c:\\WINDOWS\\system32\\mspaint.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si,&pi)) { fprintf(stderr,"Creat Process Failed"); return -1; } WaitForSingleObject(pi.hProcess,INFINITE); printf("child Complete"); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } 在“命令提示符”窗口运行CL命令产生可执行程序4-1.exe:C:\ >CL 4-1.cpp

实验任务:写出程序的运行结果。 4.正在运行的进程 (2)、编程二下面给出了一个使用进程和操作系统版本信息应用程序(文件名为4-5.cpp)。它利用进程信息查询的API函数GetProcessVersion()与GetVersionEx()的共同作用。确定运行进程的操作系统版本号。阅读该程序并完成实验任务。 #include #include

实时操作系统报告

实时操作系统课程实验报告 专业:通信1001 学号:3100601025 姓名:陈治州 完成时间:2013年6月11日

实验简易电饭煲的模拟 一.实验目的: 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,基于多任务的模式的编程方法。锻炼综合应用多任务机制,任务间的通信机制,内存管理等的能力。 二.实验要求: 1.按“S”开机,系统进入待机状态,时间区域显示当前北京时间,默认模式“煮饭”; 2.按“C”选择模式,即在“煮饭”、“煮粥”和“煮面”模式中循环选择; 3.按“B”开始执行模式命令,“开始”状态选中,时间区域开始倒计时,倒计时完成后进入“保温”状态,同时该状态显示选中,时间区域显示保温时间; 4.按“Q”取消当前工作状态,系统进入待机状态,时间区域显示北京时间,模式为当前模式; 5.按“X”退出系统,时间区域不显示。 6.煮饭时长为30,煮粥时长为50,煮面时长为40. 三.实验设计: 1.设计思路: 以老师所给的五个程序为基础,看懂每个实验之后,对borlandc的操作有了大概的认识,重点以第五个实验Task_EX为框架,利用其中界面显示与按键扫描以及做出相应的响应,对应实现此次实验所需要的功能。 本次实验分为界面显示、按键查询与响应、切换功能、时钟显示与倒计时模块,综合在一起实验所需功能。 2.模块划分图: (1)界面显示: Main() Taskstart() Taskstartdispinit() 在TaskStartDispInit()函数中,使用PC_DispStr()函数画出界面。

(2)按键查询与响应: Main() Taskstart() 在TaskStart()函数中,用if (PC_GetKey(&key) == TRUE)判断是否有按键输入。然后根据key 的值,判断输入的按键是哪一个;在响应中用switch语句来执行对应按键的响应。 (3)切换功能: l计数“C”按 键的次数 M=l%3 Switch(m) M=0,1,2对应于煮饭,煮粥,煮面,然后使用PC_DispStr()函数在选择的选项前画上“@”指示,同时,在其余两项钱画上“”以“擦出”之前画下的“@”,注意l自增。 四.主要代码: #include "stdio.h" #include "includes.h" #include "time.h" #include "dos.h" #include "sys/types.h" #include "stdlib.h" #define TASK_STK_SIZE 512 #define N_TASKS 2 OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; INT8U TaskData[N_TASKS];

操作系统实验报告

操作系统教程 实 验 指 导 书 姓名: 学号: 班级:软124班 指导老师:郭玉华 2014年12月10日

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows“命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序: E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : 有可能是因为DOS下路径的问题 (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 因为程序是个死循环程序 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环: 屏蔽j循环: _______________________________________________________________________________调整循环变量i的循环次数:

操作系统实验报告心得体会

操作系统实验报告心得体会 每一次课程设计度让我学到了在平时课堂不可能学到的东西。所以我对每一次课程设计的机会都非常珍惜。不一定我的课程设计能够完成得有多么完美,但是我总是很投入的去研究去学习。所以在这两周的课设中,熬了2个通宵,生物钟也严重错乱了。但是每完成一个任务我都兴奋不已。一开始任务是任务,到后面任务就成了自己的作品了。总体而言我的课设算是达到了老师的基本要求。总结一下有以下体会。 1、网络真的很强大,用在学习上将是一个非常高效的助手。几乎所有的资料都能够在网上找到。从linux虚拟机的安装,到linux的各种基本命令操作,再到gtk的图形函数,最后到文件系统的详细解析。这些都能在网上找到。也因为这样,整个课程设计下来,我浏览的相关网页已经超过了100个(不完全统计)。当然网上的东西很乱很杂,自己要能够学会筛选。 不能决定对或错的,有个很简单的方法就是去尝试。就拿第二个实验来说,编译内核有很多项小操作,这些小操作错了一项就可能会导致编译的失败,而这又是非常要花时间的,我用的虚拟机,编译一次接近3小时。所以要非常的谨慎,尽量少出差错,节省时间。多找个几个参照资料,相互比较,

慢慢研究,最后才能事半功倍。 2、同学间的讨论,这是很重要的。老师毕竟比较忙。对于课程设计最大的讨论伴侣应该是同学了。能和学长学姐讨论当然再好不过了,没有这个机会的话,和自己班上同学讨论也是能够受益匪浅的。大家都在研究同样的问题,讨论起来,更能够把思路理清楚,相互帮助,可以大大提高效率。 3、敢于攻坚,越是难的问题,越是要有挑战的心理。这样就能够达到废寝忘食的境界。当然这也是不提倡熬夜的,毕竟有了精力才能够打持久战。但是做课设一定要有状态,能够在吃饭,睡觉,上厕所都想着要解决的问题,这样你不成功都难。 4、最好在做课设的过程中能够有记录的习惯,这样在写实验报告时能够比较完整的回忆起中间遇到的各种问题。比如当时我遇到我以前从未遇到的段错误的问题,让我都不知道从何下手。在经过大量的资料查阅之后,我对段错误有了一定的了解,并且能够用相应的办法来解决。 在编程中以下几类做法容易导致段错误,基本是是错误地使用指针引起的 1)访问系统数据区,尤其是往系统保护的内存地址写数据,最常见就是给一个指针以0地址 2)内存越界(数组越界,变量类型不一致等) 访问到不属于你的内存区域

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

操作系统课程设计实验报告

河北大学工商学院 课程设计 题目:操作系统课程设计 学部信息学部 学科门类电气信息 专业计算机 学号2011482370 姓名耿雪涛 指导教师朱亮 2013 年6月19日

主要内容 一、设计目的 通过模拟操作系统的实现,加深对操作系统工作原理理解,进一步了解操作系统的实现方法,并可练习合作完成系统的团队精神和提高程序设计能力。 二、设计思想 实现一个模拟操作系统,使用VB、VC、CB等windows环境下的程序设计语言,以借助这些语言环境来模拟硬件的一些并行工作。模拟采用多道程序设计方法的单用户操作系统,该操作系统包括进程管理、存储管理、设备管理、文件管理和用户接口四部分。 设计模板如下图: 注:本人主要涉及设备管理模块

三、设计要求 设备管理主要包括设备的分配和回收。 ⑴模拟系统中有A、B、C三种独占型设备,A设备1个,B设备2个,C设备2个。 ⑵采用死锁的预防方法来处理申请独占设备可能造成的死锁。 ⑶屏幕显示 注:屏幕显示要求包括:每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。 设备管理模块详细设计 一、设备管理的任务 I/O设备是按照用户的请求,控制设备的各种操作,用于完成I/O 设备与内存之间的数据交换(包括设备的分配与回收,设备的驱动管理等),最终完成用户的I/O请求,并且I/O设备为用户提供了使用外部设备的接口,可以满足用户的需求。 二、设备管理函数的详细描述 1、检查设备是否可用(主要代码) public bool JudgeDevice(DeviceType type) { bool str = false; switch (type) { case DeviceType.a: {

嵌入式实时操作系统实验报告

嵌入式实时操作系统实验报告 任务间通信机制的建立 系别计算机与电子系 专业班级***** 学生姓名****** 指导教师 ****** 提交日期 2012 年 4 月 1 日

一、实验目的 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,任务使用信号量的一般原理。掌握在基于优先级的可抢占嵌入式实时操作系统的应用中,出现优先级反转现象的原理及解决优先级反转的策略——优先级继承的原理。 二、实验内容 1.建立并熟悉Borland C 编译及调试环境。 2.使用课本配套光盘中第五章的例程运行(例5-4,例5-5,例5-6),观察运行结果,掌握信号量的基本原理及使用方法,理解出现优先级反转现象的根本原因并提出解决方案。 3.试编写一个应用程序,采用计数器型信号量(初值为2),有3个用户任务需要此信号量,它们轮流使用此信号量,在同一时刻只有两个任务能使用信号量,当其中一个任务获得信号量时向屏幕打印“TASK N get the signal”。观察程序运行结果并记录。 4. 试编写一个应用程序实现例5-7的内容,即用优先级继承的方法解决优先级反转的问题,观察程序运行结果并记录。 5.在例5-8基础上修改程序增加一个任务HerTask,它和YouTask一样从邮箱Str_Box里取消息并打印出来,打印信息中增加任务标识,即由哪个任务打印的;MyTask发送消息改为当Times为5的倍数时才发送,HerTask接收消息采用无等待方式,如果邮箱为空,则输出“The mailbox is empty”, 观察程序运行结果并记录。 三、实验原理 1. 信号量 μC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,这样μC/OS-II 才能支持信号量。

操作系统实验报告

操作系统教程实验报告 专业班级 学号 姓名 指导教师

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环:

操作系统实验报告

操作系统实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

许昌学院 《操作系统》实验报告书学号: 姓名:闫金科 班级:14物联网工程 成绩: 2016年02月

实验一Linux的安装与配置 一、实验目的 1.熟悉Linux系统的基本概念,比如Linux发行版、宏内核、微内核等。 2.掌握Linux系统的安装和配置过程,初步掌握Linux系统的启动和退出方 法。 3.熟悉Linux系统的文件系统结构,了解Linux常用文件夹的作用。 二、实验内容 1.从网络上下载VMware软件和两个不同Linux发行版镜像文件。 2.安装VMware虚拟机软件。 3.在VMware中利用第一个镜像文件完成第一个Linux的安装,期间完成网络 信息、用户信息、文件系统和硬盘分区等配置。 4.在VMware中利用第二个镜像文件完成第二个Linux的安装,并通过LILO或 者GRUB解决两个操作系统选择启动的问题。 5.启动Linux系统,打开文件浏览器查看Linux系统的文件结构,并列举出 Linux常用目录的作用。 三、实验过程及结果 1、启动VMware,点击新建Linux虚拟机,如图所示: 2、点击下一步,选择经典型,点击下一步在选择客户机页面选择 Linux,版本选择RedHatEnterpriseLinux5,如图所示: 3、点击下一步创建虚拟机名称以及所要安装的位置,如图所示: 4、点击下一步,磁盘容量填一个合适大小,此处选择默认值大小 10GB,如图所示: 5、点击完成,点击编辑虚拟机设置,选择硬件选项中的CD-ROM (IDE...)选项,在右侧连接中选择“使用ISO镜像(I)”选项,点 击“浏览”,找到Linux的镜像文件,如图所示:

操作系统实验报告

实验报告 实验课程名称:操作系统 实验地点:南主楼七楼机房 2018—2019学年(一)学期 2018年 9月至 2019 年 1 月 专业: 班级: 学号: 姓名: 指导老师:刘一男

实验一 实验项目:分时系统模拟 实验学时:2实验日期: 2018-10-25 成绩: 实验目的利用程序设计语言模拟分时系统中多个进程按时间片轮转调度算法进行进程调度的过程; 假设有五个进程A,B,C,D,E,它们的到达时间及要求服务的时间分别为:进程名 A B C D E 到达时间0 1 2 3 4 服务时间 4 3 4 2 4 时间片大小为1,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:BDACE

(1)修改时间片大小为2,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间。 轮转调度:ADBCE (2)修改时间片大小为4,利用程序模拟A,B,C,D,E五个进程按时间片轮转的调度及执行过程并计算各进程的周转时间及带权周转时间.

顺序:ABCDE 1、思考 时间片的大小对调度算法产生什么影响?对计算机的性能产生什么影响?答:通过对时间片轮转调度算法中进程最后一次执行时间片分配的优化,提出了一种改进的时间片轮转调度算法,该算法具有更好的实时性,同时减少了任务调度次数和进程切换次数,降低了系统开销,提升了CPU的运行效率,使操作系统的性能得到了一定的提高。 A B C D E 时间片为1 周转时间12 9 14 8 13 3 3 3.5 4 3.25 带权周转 时间 时间片为2 周转时间8 12 13 7 13 2 4 3.25 3.5 3.25 带权周转 时间 时间片为4 周转时间 4 6 9 10 13 1 2 2.25 5 3.25 带权周转 时间

操作系统实验一实验报告

操作系统实验一实验报告 基本信息 1.1 实验题目 进程控制实验 1.2完成人 王召德 1.3报告日期 2015-4-8 实验内容简要描述 2.1实验目标 加深对于进程并发执行概念的理解。实践并发进程的创建和控制方法。观察和 体验进程的动态特性。进一步理解进程生命期期间创建、变换、撤销状态变换的过 程。掌握进程控制的方法,了解父子进程间的控制和协作关系。练习Linux 系统中 进程创建与控制有关的系统调用的编程和调试技术。 2.2实验要求 参考以上示例程序中建立并发进程的方法,编写一个多进程并发执行程序。父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制ps 命令总在ls 命令之前执行。 2.3实验的软硬件环境

Ubuntu14.04 intelPC 报告的主要内容 3.1实验的思路 按照上面的实例,先生成一个子进程让其等待,然后生成第二个子进程,父进程等待其执行ps命令后唤醒第一个子进程执行ls即可。 3.2实验模型的描述 无 3.3主要数据结构的分析说明 无 3.4主要算法代码的分析说明 无 3.5项目管理文件的说明 无 实验过程和结果 4.1实验投入的实际学时数 1学时 4.2调试排错过程的记录 曾尝试让第二个子进程激活第一个子进程,结果发现当运行ps后,后面的代码将不再执行,所以不可行。 4.3多种方式测试结果的记录

实验结果: 父进程启动 (12239) ls子进程启动 (12240) ps子进程启动 (12241) PID TTY TIME CMD 12239 pts/27 00:00:00 born 12240 pts/27 00:00:00 born 12241 pts/27 00:00:00 ps ps子进程结束 (12241) 唤醒ls子进程 (12240) 键盘中断信号产生... ls子进程被唤醒 (12240) . born born.c~ hello.c pctl pctl.c~ pctl.o .. born.c helelo.h~ hello.c~ pctl.c pctl.h ls子进程结束 (12240) 父进程结束 (12239) 4.4实验结果的分析综合 无 实验的总结 父进程可以通过fork()函数生成子进程,子进程会从fork()函数开始执行原来的代码,当

操作系统实验报告

操作系统实验报告 银行家算法 班级:计算机()班 姓名:李君益 学号:(号) 提交日期: 指导老师: 林穗 一、设计题目 加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。 二、设计要求

内容: 编制银行家算法通用程序,并检测思考题中所给状态的安全性。 要求: (1)下列状态是否安全?(三个进程共享个同类资源) 进程已分配资源数最大需求数 (状态) (状态) (2)考虑下列系统状态 分配矩阵最大需求矩阵可用资源矩阵 问系统是否安全?若安全就给出所有的安全序列。若进程请求(),可否立即分配? 三、设计分析 一.关于操作系统的死锁 .死锁的产生 计算机系统中有许多独占资源,他们在任一时刻只能被一个进程使用,如磁带机,绘图仪等独占型外围设备,或进程表,临界区等软件资源。两个进程同时向一台打印机输出将导致一片混乱,两个进程同时进入临界区将导致数据库错误乃至程序崩溃。正因为这些原因,所有操作系统都具有授权一个进程独立访问某一辞源的能力。一个进程需要使用独占型资源必须通过以下的次序: ●申请资源 ●使用资源 ●归还资源 若申请施资源不可用,则申请进程进入等待状态。对于不同的独占资源,进程等待的方式是有差别的,如申请打印机资源、临界区资源时,申请失败将一位这阻塞申请进程;而申请打开文件文件资源时,申请失败将返回一个错误码,由申请进程等待一段时间之后重试。只得指出的是,不同的操作系统对于同一种资源采取的等待方式也是有差异的。 在许多应用中,一个进程需要独占访问多个资源,而操作系统允许多个进程并发执行共享系统资源时,此时可能会出现进程永远被阻塞的现象。这种现象称为“死锁”。 2.死锁的定义 一组进程处于死锁状态是指:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的时间,则称一组进程或系统此时发生了死锁。 .死锁的防止 .死锁产生的条件: ●互斥条件

实时操作系统实验报告2

实时操作系统实验报告 专业:11通信工程 学号:20110306136 姓名: 王帅 指导老师:申屠浩

实验二 任务管理实验 实验目的: 1、理解任务管理的基本原理,了解任务的各个基本状态及其变迁过程; 2、掌握μC/OS -II 中任务管理的基本方法(挂起、解挂); 3、熟练使用μC/OS -II 任务管理的基本系统调用。 实验要求与思路: 为了体现任务的各个基本状态及其变迁过程,本实验设计了T0、T1和T3三个任务,它们交替运行,如图2-2所示。 T0 T1 T2 T3 T4 T5 T6 T7 T8 图2-2 注意: 图中的栅格并不代表严格的时间刻度,而仅仅表现各任务启动和执行的相对先后关系。 说明: 在系统完成初始化后,可以先创建并启动优先级最低的TaskStart ,由它创建其他3个应用任务T0、T1和T2,之后整个系 T0 T2 T1 T0 T1 T2 T1 T0

统的运行流程如下: 1)优先级最高的T0开始执行,之后T0挂起自己; 2)然后系统调度选中T1开始执行,之后T1挂起自己; 3)接着系统调度选中T2,之后唤醒T0; 4)如此循环 实现提示: 在启动任务中创建三个任务后,应挂起任务1和任务2。 在每个任务恢复其它任务并挂起自己之前,显示当前三个任务的状态,并延时1秒。 函数说明: void PC_GetDateTime (char *s); 获取"YYYY-MM-DD HH:MM:SS"格式的时间字串存放在字符串s中,s的长度最少为21字节。 void PC_DispStr (INT8U x, INT8U y, INT8U *s, INT8U color); 在y行x列以color颜色值显示字串s,注意color由背景色和前景色两种颜色构成。 INT8U OSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U milli); 按时、分、秒、毫秒设置进行延时。 void OSTimeDly (INT16U ticks) 按ticks值进行延时,1 ticks一般为10ms。 INT32U OSTimeGet (void)

相关文档
最新文档