计算机操作系统规程,计算机操作系统实验指导书

《操作系统管理》实验指导书

Reserved Reserved Reserved Reserved 2)从上述输出结果,对照分析清单5-2的程序,请简单描述程序运行的流程: ____________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________

2. 虚拟内存的分配与释放

能正确使用系统函数GetMeoryStatus()和数据结构MEMORY_STATUS了解系统内存和虚拟存储空间使用情况,会使用VirsualAlloc()函数和VirsualFree()函数分配和释放虚拟内存空间。

// GetMemoryStatus.cpp : Defines the entry point for the console application.

//

#include \

#include \

#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

void GetMemSta(void);

//The one and only application object CWinApp theApp; using namespace std;

int _tmain(int argc,TCHAR * argv[],TCHAR * envp[]) {

int nRetCode=0; LPVOID BaseAddr; char *str;

GetMemSta();

printf(\

BaseAddr=::VirtualAlloc(NULL,1024*1024*32,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);//分配虚拟内存

if (BaseAddr==NULL) printf(\

str=(char *)malloc(1024*1024*2); //分配内存 GetMemSta(); printf(\

if (::VirtualFree(BaseAddr,0,MEM_RELEASE)==0) //释放虚拟内存 printf(\

free(str); //释放内存

38

《操作系统管理》实验指导书

GetMemSta(); return nRetCode;

}

void GetMemSta(void) {

MEMORYSTATUS MemInfo; GlobalMemoryStatus(&MemInfo);

printf(\

printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ printf(\ }

步骤1:在VC 6.0环境下选择Win32 Console Application建立一个控制台工程文件,选择An application that Supports MFC。

步骤2:编辑并编译完成后,单击“Build”菜单中的“Build GetMemoryStatus.exe”命令,建立GetMemoryStatus.exe可执行文件。

操作能否正常进行?如果不行,则可能的原因是什么?

____________________________________________________________________ ________________________________________________________________________ 步骤3:在工具栏单击“Execute Program”按钮,执行GetMemoryStatus.cpp.exe程序。 分析程序GetMemoryStatus.cpp的运行结果

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

________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ 2) 根据运行输出结果,若要改变分配和回收的虚拟内存和物理内存的大小,要改变程序代码的语句,分别为:

________________________________________________________________________ ________________________________________________________________________

3) 根据运行输出结果,对照分析4-2程序,可以看出程序运行的流程吗?请简单描述: ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________

39

《操作系统管理》实验指导书

实验四 设备管理

[1] 磁盘I/O API函数应用

背景知识

相关的API 介绍

1.获取磁盘的基本信息的磁盘I/O API函数DeviceIoControl格式如下:

BOOL DeviceIoControl( HANDLE hDevice, DWORD dwioControlCode, LPVOID lplnBuffer, DWORD nlnBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize,

LPDWORD lpBytesReturned,LPOVERLAPPED lpOverlapped ); .hDevice:所要进行操作的设备的句柄,它通过调用CreateFile函数来获得。

.dwIoControlCode:指定操作的控制代码。这个值用来辨别将要执行的指定的操作,以及对哪一种设备进行操作。对磁盘应设置为IOCTL_DISK_GET_DRIVE_GEOMETRY。

.lpInBuffer:操作所要的输入数据缓冲区指针,NULL表示不需要输入数据。 .nInBufferSize:指定lpInBuffer所指向的缓冲区的大小(以字节为单位)。

.lpOutBuffer:接收操作输出的数据缓冲区指针,NULL表示操作没有产生输出数据。输出数据的缓冲区要足够大,对磁盘它采用固定的数据结构DISK_GEOMETRY,格式如下:

struct DISK_GEOMETRY {

unsigned bytesPerSector; unsigned sectorsPerTrack; unsigned heads; unsigned cylinders; }

.nOutBufferSize:指定lpOutBuffer所指向的缓冲区的大小(以字节为单位)。 .lpBytesReturned:指向一个变量,它接收lpOutBuffer所指的缓冲区储存的数据个数。 .lpOverlapped:指向一个OVERLAPPED结构。

返回值:如果函数调用成功,返回值是一个非0值。如果函数调用失败GetLastError函数来获得相关的错误信息。

2.建立文件或打开一个已存在文件API函数CreateFile

该函数用来创建或打开下列对象(文件、管道、目录、邮件插口、控制台、通信资源、磁盘设备等)并返回一个用于读取该对象的句柄。

HANDLE CreateFile ( LPCTSTR lpFilename , DWORD dwDesiredAccess ,

DWORD dwShareMode ,LPSECURITY_ATTRIBUTES lpSecurityAttributes , DWORD dwCreationDisposition , DWORD dwFlagsAndAttributes , HANDLE hTemplateFile );

.lpFileName:指向一个以NULL结束的字符串的指针,该字符串用于创建或打开对象、指定对象名。

.dwDesiredAccess:指定对对象的访问类型,一个应用程序可以得到读、写、读写或设备查询访问等类型,此参数可以为下列值的任意一个组合值:

.0:指定对象的查询访问权限,一个应用程序可以不通过访问设备来查询设备属性。 .GENERIC_READ:指定对象的读访问,可以读文件的数据且可移动文件中的指针。

.GENERIC_WRITE:指定对象的写访问,可以写文件的数据且可以移动文件指针,写访问GENERIC_WRITE要与GENERIC_READ联合使用。 .dwShoreMode:设成NULL即可。

.lpSecurityAttributes:设成NULL即可。

40

《操作系统管理》实验指导书

.dwCreationDisposition:指定对存在的文件采取哪种措施,且当文件不存在时采用哪种措施,此函数必须是下列值中的一个:

.CREAT_NEW:创建一个新文件,如果文件存在,则函数调用失败。

.CREAT_ALWAYS:创建一个新文件,如果文件存在,函数重写文件且清空现有属性。 .OPEN_EXISTING:打开文件,如果文件不存在,则函数调用失败。

.OPEN_ALWAYS:如果文件存在,则打开文件。如果文件不存在,则创建一个新文件。 .TRUNCATE_EXISTING:打开文件,一旦文件打开,就被删截掉,从而使文件的大小为0字节,调用函数必须用GENERIC_WRITE访问来打开文件,如果文件不存在,则函数调用失败。 .dwFlagsAndAttributes:指定文件属性和标志,该参数可取很多种组合,以下示三种: .FILE_FLAG_OVERLAPPED:指导系统对对象进行初始化,以便操作有足够的时间来处理返回ERROR_IO_PENDING,当完成操作时,指定事件被设置为发信号状态。

.FILE_FLAG_NO_BUFFERING:引导系统打开没有瞬间缓冲或缓存的文件,当与FILE_FLAG_0VERLAPPED结合时,标志给出最大的按时间顺序的操作,因为I/O不依靠内存管理器的时间顺序的操作,但是,因为数据没有在缓存中,一些I/O操作将长一些。

.FILE_FLAG_SEQUENTIAL_SCAN:表明文件从开头到结尾按顺序被访问。使用它,系统可 优化文件缓存。访问方式读大文件的应用程序,指定此标志可以增加它的性能。 .hTemplateFile:设成NULL即可。

返回值:如果函数调用成功,返回值为指向指定文件的打开句柄;如果函数调用失败,返回值为INVALID_HANDLE_VALUE。 实验目的

本实验着重于了解磁盘的物理组织,以及如何通过用户态的程序直接调用磁盘I/O API函数(DeviceIoControl)根据输入的驱动器号读取驱动器中磁盘的基本信息,在Windows2000环境进行。

实验内容与参考源代码:

SoftDiskIo-1.cpp

#include #include #include #include

struct Disk //关于Disk结构的定义 {

HANDLE handle;

DISK_GEOMETRY disk_info; };

Disk disk;

HANDLE Floppy; static _int64 sector; bool flag;

Disk physicDisk(char driverLetter);

void main(void)

41

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验室安全操作规程的建立流程主要包括以下几个步骤: 1.明确规程的目标和范围:在制定实验室安全操作规程之前,需要明确规程的目标和适用范围。例如,规程是针对某个特定实验室还是适用于整个实验室管理体系。 2.确定制定规程的责任人:制定实验室安全操作规程需要明确责任人,负责规程的起草、审核和修改。一般来说,实验室主管或者安全管理人员会承担这一职责。 3.收集和整理相关资料:规程的制定需要收集和整理实验室安全管理方面的相关资料,如安全标准、安全操作流程、应急处理方案等等。 4.起草规程:在收集和整理相关资料之后,可以根据实验室的具体情况起草实验室安全操作规程规程的内容应该包括实验室内的危险物品、危险操作、应急措施等内容。 5.审核规程:起草好实验室安全操作规程之后,需要由实验室主管或者安全管理人员进行审核,确保规程的内容准确、完整、可操作。 6.发布和实施规程:通过规程的审核之后,需要将规程发布给实验室内所有相关人员,并且进行相应的培训和操作指导。同时,需要对规程进行定期的检查和更新,以确保规程一直能够保持有效性和适用性。 综上所述,实验室安全操作规程的建立流程需要经过明确规程目标和范围、确定责任人、收集和整理相关资料、起草规程、审核规程、发布和实施规程等多个步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值