搜档网
当前位置:搜档网 › 文件系统 实验

文件系统 实验

文件系统 实验
文件系统 实验

实验快速文件系统

一.实验目的

通过对3种文件读写模式的模拟,了解快速文件系统是怎样操作的;并掌握文件读写对应的API。

二.实验要求

设计三个函数int filter(char source,char*denst),其中

source:源文件,即从哪个文件读。

sink:目标文件,即写到哪个文件。

分别用三种方法来实现一个对文件的操作:

1)无缓冲方式:表示用的标志位是FILE_FLAG_NO_BUFFERING。

2)缓冲方式:表示用的标志位是FILE_FLAG_SEQUENTIAL_SCAN。

3)异步方式:表示用的标志位是FILE_FLAG_OVERLAPPED。

filter函数的作用是从源文件中读数据,将数据写入denst文件中去。通过记录各种操作模式的读写时间,分析其结果。

三.背景知识

正如我们所知道的:CPU运算速度最快,外部设备最慢。如果CPU的每次操作都必须等待外设完成,那么CPU宝贵的运行时间就会大大浪费。下面就介绍两种Windows 2000中解决这个不匹配问题的方法:高速缓存和异步传输。

1.文件高速缓存

文件高速缓存是CPU访问外设的一个“中间设备”。说是设备,其实它不是真正的物理“设备”,而是一种核心级内存映像机制。由于它被设置在内存中,因此速度非常快,可以部分解决CPU与硬盘速度差异的问题。

文件高速缓存的原理:进程顺序读取:读了文件的第一个字节,读第二个、一直到读出所有的字节。利用这个原理可以进行“预取”,也就是说,在进程没请求读磁盘之前就先把文件读出来并放到高速缓存中。在第一次读入后,将文件数据保存在高速缓存中。这样,下次再读时就不必再从硬盘而可以从缓存中读取。LRU(LeastRecently Used,最近最少使用)的原则,可以将不常使用的文件从缓存中删除以节省高速缓存空间。

文件高速缓存“事后写”机制:进程写磁盘——写的内容交给高速缓存——寻找CPU空闲的时间写到磁盘上要写磁盘的进程就可以不必等待磁盘写完毕以后再继续工作,这也就节省了整个进程的执行时间。文件内容的一致性:如果有另外一个进程要访问还没有被写入磁盘的文件时,高速缓存管理程序可以使这个进程直接读高速缓存里面新的即将要写入的文件内容,而不是磁盘上的旧内容。

2.异步传输

文件的异步传输是一种改变指令执行顺序的机制。

如果CPU遇到一条访盘指令,那么它就必须等待缓慢的磁盘访问结束以后才能进行后续的工作。如果它后面的指令并不依赖于访盘操作时,这个等待就显得很没有必要。Windows 中使用了一种异步传输的机制来解决这个问题。它通过设置打开文件时的一个标志位来使进程不等待读写文件操作而继续执行。当后续指令必须用到磁盘访问的结果数据时,它再通过一条Wait指令进行等待。访盘指令和等待指令之间的指令就可以与磁盘访问同时进行了,从而大大加快速度

以下对文件读写的一些API函数进行简单的介绍:

函数GeTickCount(),获取当时相对于系统内定某个时间点的毫秒数,通过2次的时间差可以计算出所用时间,用以记录读写时间。

函数CreateFile():

CreateFile(source,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,NULL );

其中source为文件名,返回的是其对应句柄。具体参数请参考MSDN文档。

函数ReadFile():用于读文件的函数。具体参数请参考MSDN文档。

函数WriteFile():用于写文件的函数。具体参数请参考MSDN文档。

四.实现过程

1)建立三个filter函数:filter_nobuffer、filter_sequen、filter_overlp;并自己做一个源

文件(文件大小至少为512K):file_0.txt。每个模式都要经过10步读写操作,使得

file_1到file_10十个文件都写入了文件file_0的内容。记录整个过程的时间。

2)每个filter函数内先是用CreateFile函数分别打开读文件source和写文件denst。然

后根据不同的模式(即上面提到的普通模式,有缓冲区模式和异步传输模式)读写

文件。

3)filter_nobuffer用的是普通模式,即一般的读写文件;

filter_sequen用的是有缓冲方式,读写都用了缓冲;

filter_overlp用的异步传输模式。

因为这个过程的时间由许多不确定的因素构成,所以,需要经过多次反复实验才能得到最终数据。把实验做10次,记录每次的时间并求出最终平均时间。如果分析结果与预期不一至,查找资料并分析可能的原因(适用环境)。

五.API 函数

1、CreateFile

(1) 功能:

CreateFile 函数创建或打开下列对象,并返回一个可以用来访问这些对象的句柄。

1) 文件

2) pipes

3) 邮槽

4) 通信资源

5) 磁盘驱动器(仅适用于windowsNT)

6) 控制台

7) 文件夹(仅用于打开)。

(2) 函数原型:

HANDLE CreateFile(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile)

(3) 参数说明:

1) lpFileName:指向一个空结尾字符串。该参数指定了用于创建或打开句柄的对象。如果lpFileName 的对象是一个路径,则有一个最大字符数的限制。不能超过常量(MAX_PATH).这个限制指示了CreateFile 函数如何解析路径。

2) dwDesiredAccess 指定对象的访问方式,程序可以获得读访问权,写访问权,读写访问权或者是询问设备("device query") 访问权。这个参数可以是下列值的任意组合:

a) 0:指定询问访问权.程序可以在不直接访问设备的情况下查询设备的属性。

b) GENERIC_READ:指定读访问权.可以从文件中读取数据,并且移动文件指针.可以和GENERIC_WRITE 组合成为"读写访问权"。

c) GENERIC_WRITE:指定写访问权.可以从文件中写入数据,并且移动文件指针.可以GENERIC_READ 组合成为"读写访问权"。

3) dwShareMode

4) 设置位标志指明对象如休共享.如果参数是0, 对象不能够共享。后续的打开对象的操作将会失败,直到该对象的句柄关闭。使用一个或多个下列值的组合来共享一个对象。

a) FILE_SHARE_DELETE:WINDOWS NT:后续的仅仅请求删除访问权的打开操作将会成功。

b) FILE_SHARE_READ:后续的仅仅请求读访问权的打开操作将会成功。

c) FILE_SHARE_WRITE:后续的仅仅请求写访问权的打开操作将会成功。

5) lpSecurityAttributes:指向一个SECURITY_ATTRIBUTES 结构的指针用于确定如何在子进程中继承这个句柄.如果这个参数是NULL,则该句柄不可继承。

6) dwCreationDisposition:指定当文件存在或者不存在时如何动作。关于这个参数更多的信息,参考批注部分。这个参数必须是一个或多个下列值。

a) CREATE_NEW:创建一个新文件. 如果该文件已经存在函数则会失败。

b) CREATE_ALWAYS:创建一个新文件.如果该文件已经存在,函数将覆盖已存在的文件并清除已存在的文件属性。

c) OPEN_EXISTING:打开一个文件,如果文件不存在函数将会失。如查你使用CreateFile函数为设备装载控制台.请查看批注中的"为什么使用OPEN_EXISTING标志"的部分。

d) OPEN_ALWAYS :果文件存在, 打开文件. 如果文件不存在, 并且参数中有CREATE_NEW 标志,则创建文件。

e) TRUNCATE_EXISTING:打开一个文件,每次打开,文件将被截至0 字节.调用进程必须用GENERIC_WRITE 访问模式打开文件.如果文件不存在则函数就会失败。

7) dwFlagsAndatributes:文件指定属性和标志位该参数可以接收下列属性的任意组合。除非其它所有的文件属性忽略FILE_ATTRIBUTE_NORMAL。

a) FILE_ATTRIBUTE_ARCHIVE:件将被存档,程序使用此属性来标志文件去备份或移除

b) FILE_ATTRIBUTE_HIDDEN:文件被隐藏,它不会在一般文件夹列表中被装载.

c) FILE_ATTRIBUTE_NORMAL:文件没有被设置任何属性。

d) FILE_ATTRIBUTE_OFFLINE:文件的数据没有被立即用到。指出正在脱机使用该文件。

e) FILE_ATTRIBUTE_READONLY :这个文件只可读取.程序可以读文件,但不可以在上面写入内容,也不可删除。

f) FILE_ATTRIBUTE_SYSTEM:文件是系统的一部分,或是系统专用的.

g) FILE_ATTRIBUTE_TEMPORARY:文件被使用后,文件系统将努力为(文件的)所有数据的迅迅访问保持一块内存。临时文件应当在程序不用时及时删除。

8) dwFlagAndAttributes:受下列标志的任意组合。

a) FILE_FLAG_WRITE_THROUGH:示系统通过快速缓存直接写入磁盘,

b) FILE_FLAG_OVERLAPPED:系统初始化对象, 此操作将对进程设置一个引用计数并返回ERROR_IO_PENDING。处理完成后, 指定对象将被设置为信号状态。当你指定FILE_FLAG_OVERLAPPED 时,读写文件的函数必须指定一个OVERLAPPED 结构。并且,当FILE_FLAG_OVERLAPPED 被指定, 程序必须执行重叠参数( 指向OVERLAPPED 结构)去进行文件的读写。这个标志也可以有超过一个操作去执行。

c) FILE_FLAG_NO_BUFFERING :指示系统不使用快速缓冲区或缓存,当和FILE_FLAG_OVERLAPPED 组合,该标志给出最大的异步操作量, 因为I/O 不依赖内存管理器的异步操作.然而,一些I/O 操作将会运行得长一些,因为数据没有控制在缓存中。当使用FILE_FLAG_NO_BUFFERING 打开文件进行工作时,程序必须达到下列要求:

文件的存取开头的字节偏移量必须是扇区尺寸的整倍数。

文件存取的字节数必须是扇区尺寸的整倍数.例如,如果扇区尺寸是512 字节程序就可以读或者写512,1024 或者2048 字节,但不能够是335,981 或者7171 字节。进行读和写操作的地址必须在扇区的对齐位置,在内存中对齐的地址是扇区尺寸的整倍数。一个将缓冲区与扇区尺寸对齐的途径是使用VirtualAlloc 函数. 它分配与操作系统内存页大小的整倍数对齐的内存地址.因为内存页尺寸和扇区尺寸--2 都是它们的幂。这块内存在地址中同样与扇区尺寸大小的整倍数对齐。程序可以通过调用GetDiskFreeSpace 来确定扇区的尺寸。

d) FILE_FLAG_RANDOM_ACCESS:指定文件是随机访问,这个标志可以使系统优化文件的缓冲.

e) FILE_FLAG_SEQUENTIAL_SCAN:指定文件将从头到尾连续地访问.这个标志可以提示系统优化文件缓冲. 如果程序在随机访问文件中移动文件指针,优化可能不会发生;然而,正确的操作仍然可以得到保证。指定这个标志可以提高程序以顺序访问模式读取大文件的性能, 性能的提高在许多程序读取一些大的顺序文件时是异常明显的.但是可能会有小范围的字节遗漏。

f) FILE_FLAG_DELETE_ON_CLOSE:指示系统在文件所有打开的句柄关闭后立即删除文件. 不只有你可以指定FILE_FLAG_DELETE_ON_CLOSE ,如果没有使用FILE_SHARE_DELETE,后续的打开文件的请求将会失败。

g) FILE_FLAG_BACKUP_SEMANTICS:WINDOWS NT 指示系统为文件的打开或创建执行一个备份或恢复操作。系统保证调用进程忽略文件的安全选项,倘若它必须有一个特权.则相关的特权则是SE_BACKUP_NAME 和SE_RESTORE_NAME。你也可以使用这个标志获得一个文件夹的句柄,一个文件夹句柄能够象一个文件句柄一样传给某些Win32 函数。

h) FILE_FLAG_POSIX_SEMANTICS:指明文件符合POSIX 标准.这是在

MS-DOS 与16位Windows 下的标准。

i) FILE_FLAG_OPEN_REPARSE_POINT:指定这个标志制约NTFS 分区指针.该标志不能够和CREAT_ALWAYS 一起使用。

j) FILE_FLAG_OPEN_NO_RECALL:指明需要文件数据,但是将继续从远程存储器中接收.它不会将数据存放在本地存储器中。这个标志由远程存储系统或等级存储管理器系统使用。

9) hTemplateFile:为GENERIC_READ 访问的模式指定一个句柄到模板文件.模板文件在文件开始创建后提供文件属性和扩展属性。

10) 返回值:如果函数成功,返回一个打开的指定文件的句柄.如果指定文件在函数调用前已经存在并且dwCreation 参数是CREATE_ALWAYS 或者OPEN_ALWAYS,调用GetLastError就会返回ERROR_ALREADY_EXISTS(表示函数成功). 如果函数文件在调用前不存在则会返回0。如果函数失败,返会值会是INV ALID_HANDLE_V ALUE. 更多的错误信息可以调用GetLastError 来获得。

2、ReadFile

(1) 功能:

从一个文件读取数据。

(2) 函数原型:

BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer,

DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead,

LPOVERLAPPED lpOverlapped)

(3) 参数说明:

a) hFile:要读取的文件指针。文件指针必须有GENERIC_READ 创建。

b) lpBuffer:读取文件的缓冲区指针。

c) nNumberOfBytesToRead:要读取的字节(bytes)数。

d) lpNumberOfBytesRead:读取字节数的指针。

e) lpOverlapped:OVERLAPPED 结构体的指针。当hFile 由FILE_FLAG_OVERLAPPED 创建则此结构是必须的。

WriteFile

功能:

将数据写到一个文件中。

函数原型:

BOOL WriteFile(HANDLE hFile, LPCVOID lpBuffer,DWORD nNumberOfBytesToWrite,LPDWORD lpNumberOfBytesWritten,LPOVERLAPPED lpOverlapped)

参数说明:

a) hFile:写文件的句柄。文件句柄必须由GENERIC_WRITE 创建。

b) lpBuffer:写到文件数据的缓冲区指针。

c) nNumberOfBytesToWrite:写入的字节(bytes)数。

d) lpNumberOfBytesWritten:写字节数指针。

e) lpOverlapped:OVERLAPPED 结构体的指针。当hFile 由FILE_FLAG_OVERLAPPED 创建则此结构是必须的。

操作系统文件管理实验报告

操作系统实验报告实验名称:文件管理 专业班级:网络工程1301 学号: 姓名: 2015 年6 月16 日

实验一文件管理 一、实验目的 文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、预备知识 1.VS2010的使用 2.C#的学习 3.文件主目录与子目录的理解 三、实验容与步骤 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10 个用户的文件系统,每次用户可保存10 个文件,一次运行用户可以打开5 个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write 等命令。 所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 程序流程图:

逻辑设计: 使用线性数组表表示MFD,泛型数组表示UFD,每个元素包括用户ID、保存的文件数、再使用线性表表示文件信息,每个元素包括文件名,文件属性(保护码),文件的状态等信息。 物理设计: //主目录 private FileUser[] mfd; //当前用户 private FileUser currentuser; ///

/// 文件 /// public class FileObject { public string filename; public int size=20; public int read=0; public int write = 0; public string author; } /// /// 文件系统用户 /// public class FileUser { public string username;

《Linux操作系统》实验三-权限和文件系统管理

《Linux操作系统》 实验报告 实验三:权限和文件系统管理

一、实验目的 1.Unix/Linux权限和文件管理命令; 2.Unix/Linux文件系统的使用; 3.与文件系统管理相关的其它命令。 二、实验环境 Linux操作系统 三、实验内容与实验过程及分析 (l)权限的字符串表示 使用ls -了-d 文件名查询相关文件权限 结果图为: (2) umask值与umask命令 使用命令:umask或umask –p 或 umask –S查看当前的umask值,使用umask 四位八进制数字或者符合修改umask值。 结果图为:

(3)使用权限管理命令chmod进行权限设置 为目录a1、a2修改权限(每完成一步操作都要用ls –l检查文件属性,并进行记录):

为目录a1、a2增加所有人的可进入和读写权限:chmod o+rx a1、a2 为目录a1加入同组人的写权限:chmod go+w a1 将目录a1的其他人权限递归方式设为不可读可不写不可执行:chmod -R o-rwx /root/a1 将目录a1的其他人权限递归方式设为可读可写可执行:chmod -R 777 /root/a1 结果图为:

(4)使用chown,chgrp等进行权限设置 使用权限管理命令chown,chgrp等进行权限设置(每完成一步操作都要用ls –l检查文件属性,并进行记录): 将目录a1用户主设为chown lm a1 将目录a1的组设为chgrp lm a1 将目录a1及其所有子目录的用户主设为lm,组设为chown -R lm:bin a1 结果图为:

操作系统简单文件系统设计及实现

简单文件系统的设计及实现 一、实验目的: 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解 2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二、实验内容: 1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作 4、算法与框图 ?因系统小,文件目录的检索使用了简单的线性搜索。 ?文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 ?程序中使用的主要设计结构如下:主文件目录和用户文件目录( MFD、UFD); 打开文件目录( AFD)(即运行文件目录) 文件系统算法的流程图如下

三、工具/准备工作: 在开始本实验之前,请回顾教科书的相关内容。并做以下准备: 1) 一台运行Windows 2000 Professional或Windows 2000 Server的操作系统的计算机。 2) 计算机中需安装Visual C++ 6.0专业版或企业版 四、实验要求: (1)按照学校关于实验报告格式的要求,编写实验报告(含流程图); (2)实验时按两人一组进行分组,将本组认为效果较好的程序提交检查。

实验六 文件系统设计结果

实验六文件系统设计 1.目的和要求 本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 2.实验内容 为DOS系统设计一个简单的二级文件系统,可以实现下列几条命令DIR 列文件目录 CREATE 创建文件 DELETE 删除文件 MODIFY 修改文件 OPEN 打开文件 CLOSE 关闭文件 列目录时要列出文件名,物理地址,保护码和文件长度。 3.实验环境 ①PC兼容机 ②Windows、DOS系统、Turbo c 2.0 ③C语言 4.实验提示 ①首先应确定文件系统的数据结构:主目录、活动文件等。主目录文件的形式存放于磁盘,这样便于查找和修改。 主目录结构: Ufdname 用户名 Ufdfile 指向用户的活动文件 活动文件结构: Fpaddr 文件物理地址 Flength 文件长度 Fmode 文件属性(file mode:0-Read Only;1-Write Only;2-Read and Write(default)) Fname 文件名称 ②用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2…并

以编号作为物理地址,在目录中进行登记。

③本程序需要在c:下建一个名为osfile的目录及一个名为file的子目录,在利用程序创建了文件系统后,可以在这个文件夹下查看到相关的内容。5.实验程序 #include "stdio.h" #include "string.h" #include "conio.h" #include "stdlib.h" #define MAXNAME 25 /*the largest length of mfdname,ufdname,filename*/ #define MAXCHILD 50 /*the largest child*/ #define MAX (MAXCHILD*MAXCHILD) /*the size of fpaddrno*/ typedef struct /*the structure of OSFILE*/ { int fpaddr; /*file physical address*/ int flength; /*file length*/ int fmode; /*file mode:0-Read Only;1-Write Only;2-Read and Write(default);*/ char fname[MAXNAME]; /*file name*/ } OSFILE; typedef struct /*the structure of OSUFD*/ { char ufdname[MAXNAME]; /*ufd name*/ OSFILE ufdfile[MAXCHILD]; /*ufd own file*/ }OSUFD; typedef struct /*the structure of OSUFD'LOGIN*/ { char ufdname[MAXNAME]; /*ufd name*/ char ufdpword[8]; /*ufd password*/ } OSUFD_LOGIN; typedef struct /*file open mode*/ { int ifopen; /*ifopen:0-close,1-open*/ int openmode; /*0-read only,1-write only,2-read and write,3-initial*/ }OSUFD_OPENMODE; OSUFD *ufd[MAXCHILD]; /*ufd and ufd own files*/ OSUFD_LOGIN ufd_lp;

操作系统实验5文件系统:Linux文件管理

实验5 文件系统:Linux文件管理 1.实验目的 (1)掌握Linux提供的文件系统调用的使用方法; (2)熟悉文件和目录操作的系统调用用户接口; (3)了解操作系统文件系统的工作原理和工作方式。 2.实验内容 (1)利用Linux有关系统调用函数编写一个文件工具filetools,要求具有下列功能:*********** 0. 退出 1. 创建新文件 2. 写文件 3. 读文件 4. 复制文件 5. 修改文件权限 6. 查看文件权限 7. 创建子目录 8. 删除子目录 9. 改变当前目录到指定目录 10. 链接操作 *********** 代码: #include #include #include #include #include #include #include #include void menu(void); void openfile(void); void writefile(void); void readfile(void); void copyfile(void); void chmd(void); void ckqx(void); void cjml(void); void scml(void); void ggml(void); void ylj(void); int main() { int choose; int suliangjin=1;

menu(); scanf("%d",&choose); while(choose!=0) { switch(choose) { case 1:openfile();break; case 2:writefile();break; case 3:readfile();break; case 4:copyfile();break; case 5:chmd();break; case 6:ckqx();break; case 7:cjml();break; case 8:scml();break; case 9:ggml();break; case 10:ylj();break; } menu(); scanf("%d",&choose); } return 0; } void menu(void) { printf("文件系统\n"); printf("1.创建新文件\n"); printf("2.写文件\n"); printf("3.读文件\n"); printf("4.复制文件\n"); printf("5.修改文件权限\n"); printf("6.查看文件权限\n"); printf("7.创建子目录\n"); printf("8.删除子目录\n"); printf("9.改变目前目录到指定目录\n"); printf("10.链接操作\n"); printf("0.退出\n"); printf("请输入您的选择...\n"); } void openfile(void) { int fd; if((fd=open("/tmp/hello.c",O_CREAT|O_TRUNC|O_RDWR,0666))<0) perror("open");

(完整版)linux文件系统管理-权限管理实验4报告

实验报告 课程Linux系统应用与开发教程实验名称linux文件系统管理-权限管理(高级设置) 一、实验目的 1、掌握Linux文件系统权限的设置 2、掌握linux用户帐号与组管理 3、掌握linux 文件共享的设置方法 4、掌握linux 文件共享的权限设置方法 二、实验内容 1、使用root帐号通过系统提供的6个虚拟控制台登陆到linux,或在x-windows开启一个终端。 2、完成以下的实验内容 (1)、假设你是系统管理员:现要在公司linux服务器系统中新增一些用户与一个用户组。 ?使用groupadd account 添加一个名为account的组 ?使用useradd -G account acc-user1,(该命令将添加一个用户名为acc-user1的用户, 同时会建立一个与用户名同名的私有组(该私有组为用户的默认组,这个组中只有一个用户名),并把该用户将加入account的标准组,同时,按同样的方法建立acc-user2、acc-user3、acc-user4。 ?建立用户后,请使用x-window中的用户与组管理工具查看用户与组建立情况,检查用户与组的归属情况。 (2)、开启多个控制台,分别使用acc-user1、acc-user2、acc-user3登陆系统(可以在控制台分别登陆,也可以在X-windows中多开几个终端程序,默认使用root登陆,然后使用su命令通过切换用户的方式登陆,其语法为“su - user-name”,提示可以在登陆成功后运行命令“id”查看当前登陆的用户属于哪些组,当前的默认组是什么?) (3)、为account组建立一个公共共享目录/home/account-share,满足以下的权限设定要求,以及设置何种的umask: ?该目录的拥有者为acc-user1,所属组为account。 ?在该目录下建立一个/home/account-share/full-share的子目录,修改该目录的权限,使得account组的成员均能在对该目录有完全控制权限,account组外的其他用户没有任何权限,即account组的成员都可以在该目录下建立文件,同时在该子目录full-share下建立的文件,只有文件建立者有权限删除,并且每个用户在该子目录full-share下建立的文件也能自动与该account组成员可读共享。 ?在/home/account-share/为每个用户建立一个与用户名同名的子目录(如/home/account-share/acc-user1为用户acc-user1的目录,其拥有者为acc-user1,所在的组为account),配置该子目录的拥有者有完全控制权限,而同组用户只能读取,同时在用户在该目录下建立的文件,可供同组用户读。 (4)、考虑完成以上的共享目录权限设置,应注意哪些设置。包括目录的权限,目录的拥有者,目录所在的组,具体文件的权限,umask设置等。 (5)、实验报告应体现出使用不同身份的用户对所配置目录的访问测试过程。 三、实验环境 安装有vmware或visual pc软件的window主机,系统中有提供turbolinux或redhat的硬盘

实验四 文件系统实验

实验四文件系统实验 一 . 目的要求 1、用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。 2、要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。 二 . 例题: 1、设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2、程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。另外,为打开文件设置了运行文件目录(AFD)。 3、为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 4、算法与框图: ①因系统小,文件目录的检索使用了简单的线性搜索。 ②文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。 ③程序中使用的主要设计结构如下: 主文件目录和用户文件目录( MFD、UFD) 打开文件目录( AFD)(即运行文件目录)

文件系统算法的流程图如下: 三 . 实验题: 1、增加 2~3个文件操作命令,并加以实现。(如移动读写指针,改变文件属 性,更换文件名,改变文件保护级别)。 #include #include #include #define getpch(type) (type*)malloc(sizeof(type)) int userNum=0; struct mdf {

实验二:NTFS文件系统设置实验

实验二 NTFS文件系统设置实验 一、实验目的 1、掌握NTFS文件系统的基本概念 2、掌握NTFS文件系统进行本地安全权限设置的操作 3、掌握磁盘配额等操作 二、实验要求 1、设备要求:1台装有Windows Server 2012操作系统并装有Hyper-V的计算机 2、每组1人,独立完成 三、实验基础 实验在Hyper-V虚拟机完成,掌握Hyper-V的基本操作,理解NTFS文件系统与权限设置的基本操作。 四、实验要求与步骤 任务1: 1)选择Windows 2008/2012虚拟机; 2)添加1个虚拟磁盘(3G容量)-(建议使用SCSI控制器); 3)启动Windows 2008虚拟机,用计算机管理-存储-磁盘管理,将磁盘联机并初始化; 4)新建3个简单卷,空间大小为1G, 分别设置驱动器号为F、G、H,并格式化F盘文件系统为FAT32;G、H盘文件系统为NTFS

任务2: 创建用户S1、S2、S3等,在G盘中建立文件夹G:\DOC,用记事本存放文件111.txt ,222.txt等, 在H盘中建立文件夹H:\S1、H:\S2、H:\S3 操作实现以下设置要求,并验证: 1) G:\DOC中存放着公司重要的资料,只有S1、S2普通用户对其只拥有读取权 限,Administrator对其拥有完全控制权限 2)H盘以S1、S2、S3命名的个人文件夹,对应用户拥有完全控制权限,其它用户无任何权限(如:H:\S1文件夹,S1用户拥有完全控制权限,其他用户无任何权限)

4)文件或文件夹的复制和移动对NTFS权限的影响,实验操作并观察属性的变化 5)在H盘上启用磁盘配额: 把S1 账户的配额设置为:磁盘空间限制为20MB,警告等级为18MB 把S2 账户的配额设置为:磁盘空间限制为30MB,警告等级为28MB 切换到S1 账户,向H:\S1复制一些文件,当复制到一定程度时会出现什么问题?

Linux文件系统实验

实验编号与实验名称: 文件系统实验 实验目的: 熟悉文件和目录的基本操作;了解Linux的/proc文件系统 实验内容及要求(详见实验讲义与实验指导书): 内容: 1)在/usr目录下创建一个目录usr_test和文本文件test,并建立一个test文件的链接 test02。通过修改test文件中的内容查看test和test02中内容的情况,并分析原因。 2)编写程序,从/proc文件中抽取内核参数(任意的2个参数即可,如CPU时钟速度信 息等) 3)实现文件的拷贝,即把一个文件内容复制到另一个文件 要求: 对于内容1),给出操作步骤和结果分析,需回顾第二次实验中练习过的Shell命令和教材中的文件和目录操作系统调用 对于内容2)和3)给出完整C语言代码或者代码截图和代码执行结果,可参考本文件“实验预读”中相关内容和教材P.149/266图4-5相关代码 实验用到的软件(:) VMware 实验内容及关键步骤(代码)Q2(60分) 1)在/usr目录下创建一个目录usr_test和文本文件test,并建立一个test文件的链接 test02。通过修改test文件中的内容查看test和test02中内容的情况,并分析原因。

分析:在linux系统中通过link连接就可以通过第三方的查询,通过link函数后test01被绑定给test02中,所以可以通过test02去查询。 2.编写程序,从/proc文件中抽取内核参数(任意的2个参数即可,如CPU时钟速度信息等)

3.实现文件的拷贝,即把一个文件内容复制到另一个文件

实验过程中遇到的问题解决办法与实验体会Q3(10分)得分: 评阅教师特殊评语: 评阅教师: 日期:

操作系统实验---文件系统

实验报告 实验题目:文件系统 姓名: 学号: 课程名称:操作系统 所在学院:信息科学与工程学院 专业班级:计算机 任课教师:

实验项目名称文件系统 一、实验目的与要求: 1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及其内部实现。 2、熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。 3、通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。 4、通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。 二、实验设备及软件: 一台PC(Linux系统) 三、实验方法(原理、流程图) 试验方法 (1)首先应当确定文件系统的数据结构:主目录、子目录以及活动文件等。主目录和子 目录都以文件的形式存放于磁盘,这样便于查找和修改。 (2)用户创建文件,可以编号存储于磁盘上。如file0,file1,file2…并以编号作为物理地 址,在目录中登记。 文件系统功能流程图 图1.文件系统总体命令分析

图 2.登录流程图图 3. ialloc流程图 图4.balloc流程图图5.密码修改流程图

图6.初始化磁盘 图 7.显示所有子目录 dir/ls 操作流程图

图8.创建文件 creatfile 、创建目录 mkdir 流程图 图9.改变当前路径 cd 操作流程图

实验原理 1.文件操作 ◆mkdir 创建目录文件模块,输入 mkdir 命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。在该创建过程中首先要判断该目录中有没有同名的文件,如果有的话就创建失败,还要判断在该目录下有没有创建文件的权限,有权限才可以创建。具体流程图查看第二节,系统流程图设计部分。 ◆del 删除文件模块,输入 del命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了,还要判断在该目录下有没有删除文件的权限,有权限才可以删除。具体流程图查看第二节,系统流程图设计部分。 ◆ls 显示当前目录下所有目录的模块,输入 ls 命令,回车 ,即会在屏幕上显示当前目录下的所有目录。在该过程中要判断该目录中是否为空,如果为空就没有必要执行该操作了。执行操作时,要调用 readdir (INode inode )函数 ,先读入文件内容到 content 里面,然后直接输出。如果子目录里面还有子目录,则通过递归,一并输出来。具体流程图查看第二节,系统流程图设计部分。 ◆chmod 改变文件权限模块,输入 chmod 命令,回车,输入文件名,回车,即会根据不同类别的用户在屏幕上提示要改变哪一类用户的权限。如果是文件拥有者执行该操作,他可以选择修改自己、其他用户的权限;如果是文件所属组成员执行该操作,他可以选择修改自己、其他用户的权限;如果是其他用户执行该操作,他只能选择修改自己的权限;在该过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了。执行操作时,要判断对该文件有没有执行写操作的权利,没有就不能进行。具体流程图查看第二节,系统流程图设计部分。 ◆cd 改变当前所在目录的模块。输入 cd,回车,相应的字符串,回车,则会根据输入字符串的不同跳转到不同的目录下。如果字符串是‘ .’ ,则到当前目录;如果字符串是‘ ..’ ,则到父目录;如果字符串是‘/’ ,则到根目录;如果字符串是当前目录下的子目录,则到该子目录;如果字符串是一个决定路径,则到该绝对路径。当然在执行的时候要判断有没有该子目录或者该绝对路径,如果没有的话,就不能执行。具体流程图查看第二节,系统流程图设计部分。 2. 用户操作 ◆login 用户注销模块,输入 login ,回车,当前用户就退出了,需要重新登录。 ◆pw 用户修改口令模块,输入 pw ,回车,则会提示输入原始密码,输入正确了才可以提示输入新密码,并且要求新密码输入两次,两次一样了才能通过修改密码成功。具体流程图查看第二节,系统流程图设计部分。 ◆logout 用户退出系统模块,输入 logout ,回车,系统自动退出。

文件系统实验报告

实验二文件系统实验报告

一.实验简介 本实验要求在假设的I/O 系统之上开发一个简单的文件系统,这样做既能让实验者对文件系统有整体了解,又避免了涉及过多细节。用户通过create, open, read 等命令与文件系统交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0 至L-1。I/O 系统利用内存中的数组模拟磁盘。 实际物理磁盘的结构是多维的:有柱面、磁道、扇区等概念。I/O 系统的任务是隐藏磁盘的结构细节,把磁盘以逻辑块的面目呈现给文件系统。逻辑块顺序编号,编号取值范围为0 至L .. 1,其中L 表示磁盘的存储块总数。实验中,我们可以利用字符数组ldisk[L][B] 构建磁盘模型,其中 B 表示每个存储块的长度。I/O 系统从文件系统接收命令,根据命令指定的逻辑块号把磁盘块的内容读入命令指定的内存区域,或者把命令指定的内存区域内容写入磁盘块。 我设计的文件系统拥有三个用户。 二.具体说明 1.文件系统的组织:磁盘的前k 个块是保留区,其中包含如下信息:位图和文件描述符。位图用来描述磁盘块的分配情况。位图中的每一位对应一个逻辑块。创建或者删除文件,以及文件的长度发生变化时,文件系统都需要进行位图操作。前k 个块的剩余部分包含一组文件描述符。每个文件描述符包含如下信息: ?文件长度,单位字节 ?文件分配到的磁盘块号数组。该数组的长度是一个系统参数。在实验中我们可以把它设置为一个比较小的数,例如3。 2.目录:我们的文件系统中仅设置一个目录,该目录包含文件系统中的所有文件。除了不需要显示地创建和删除之外,目录在很多方面和普通文件相像。目录对应0 号文件描述符。初始状态下,目录中没有文件,所有,目录对应的描述符中记录的长度应为0,而且也没有分配磁盘块。每创建一个文件,目录文件的长度便增加一分。目录文件的内容由一系列的目录项组成,其中每个目录项由如下内容组成: ?文件名 ?文件描述符序号 3.对文件的操作: 文件系统需提供如下函数;create, destroy, open, read, write。 ?create(filename): 根据指定的文件名创建新文件。 ?destroy(filename): 删除指定文件。 ?open(filename): 打开文件。该函数返回的索引号可用于后续的read, write, lseek, 或close 操作。 ?close(index): 关闭制定文件。 ?read(index, mem_area, count): 从指定文件顺序读入count 个字节mem_area 指定的内存位

操作系统实验文件管理C 代码

#include #include #include #include #include using namespace std; #define BLKSIZE 512 // 数据块的大小 #define BLKNUM 512 // 数据块的块数 #define INODESIZE 32 // i节点的大小 #define INODENUM 32 // i节点的数目 #define FILENUM 8 // 打开文件表的数目//用户 typedef struct { char user_name[10]; // 用户名 char password[10]; // 密码 } User; //i节点 typedef struct { short inum; // 文件i节点号 char file_name[10]; // 文件名

char type; // 文件类型 char user_name[10]; // 文件所有者 short iparent; // 父目录的i节点号 short length; // 文件长度 short address[2]; // 存放文件的地址 } Inode; //打开文件表 typedef struct { short inum; // i节点号 char file_name[10]; // 文件名 short mode; // 读写模式(1:read, 2:write, // 3:read and write) } File_table; // 申明函数 void login(void); void init(void); int analyse(char *); void save_inode(int); int get_blknum(void); void read_blk(int); void write_blk(int);

福建工程学院实验5 linux文件系统

实验五(1) Linux文件系统实验 实验目的 学习Linux中文件系统的使用,理解链接、权限的概念和使用;掌握常用的文件系统的系统调用,加深对文件系统界面的理解。 实验内容 1.学习文件链接的概念和使用(步骤一、步骤二) 2.学习文件权限的概念和管理机制,并学会使用(步骤三) 3.学习和文件相关的系统调用和库函数,进行若干编程练习(步骤四,至少完成两例) 实验步骤 一、文件链接与复制(hard link) 1.使用vi a创建一个文件a Vi a

2.使用ln a b命令创建一个链接

使用cp a c创建一个复制版本 观察3个文件的大小、时间、属主(owner)等属性

3.修改文件a 4.观察文件b的内容,观察文件c的内容,观察3个文件的大小、时间、属主(owner)等属性 5. 6.使用ls –li命令,观察文件a, b, c的inode编号 7.使用rm a删除文件a 8.观察文件b, c是否仍然存在,内容如何 b、c依然存在,b为a改变的内容,c内容不变

9.使用rm b删除文件b,再观察文件b, c是否存在 b不存在,c存在 二、符号链接(软链接)symbolic link / soft link 1.创建文件a 2.使用ln –s a b创建符号一个链接 3.执行上述步骤3-8,观察有什么异同 三、不同用户之间的硬链接和符号链接 1.在用户stu下创建文件a 注意使用chmod命令,将主目录(~stu)权限改为所有其它用户可访问(r-x)(如果不知道chmod命令的用法,可以使用man chmod来查阅) chmod o+rx ~

实验5添加一个文件系统

实验5 添加一个文件系统 实验目的 文件系统是操作系统中最直观的部分,因为用户可以通过文件直接地和操作系统交互,操作系统也必须为用户提供数据计算、数据存储的功能。本实验通过添加一个文件系统,进一步理解Linux中的文件系统原理及其实现。 深入理解操作系统文件系统原理 学习理解Linux的VFS文件系统管理技术 学习理解Linux的ext2文件系统实现技术 设计和实现自定义文件系统 实验内容 添加一个类似于ext2的自定义文件系统myext2。实验主要内容: 添加一个和ext2完全相同的文件系统myext2 修改myext2的magic number 修改文件系统操作 添加文件系统创建工具 实验指导 1. 问题描述

本实验的内容是要添加一个类似于ext2的自定义文件系统myext2。myext2文件系统的描述如下: 1、myext2文件系统的物理格式定义与ext2基本一致,除了myext2的magic number 是0x6666,而ext2的magic number是0xEF53。 2、myext2是ext2的定制版本,它只支持原来ext2文件系统的部分操作,以及修改了部分操作。 2. 实验步骤 提示:下面的操作步骤以3.6.6版本的内核为例,2.6.15版本的内核请参照教材,其它版本内核可能会有所区别。 2.1 添加一个和ext2完全相同的文件系统myext2 要添加一个与ext2完全相同的文件系统myext2,首先是确定实现ext2文件系统的内核源码是由哪些文件组成。Linux源代码结构很清楚地告诉我们:fs/ext2目录下的所有文件是属于ext2文件系统的。再检查一下这些文件所包含的头文件,可以初步总结出来Linux 源代码中属于ext2文件系统的有: fs/ext2/acl.c fs/ext2/acl.h fs/ext2/balloc.c fs/ext2/bitmap.c fs/ext2/dir.c

计算机操作系统实验-文件管理

哈尔滨工业大学计算机科学与技术学院 实验报告 课程名称:操作系统 课程类型:必修 实验项目名称:文件管理 实验题目:设计一个多用户的文件系统 班级:实验学院一班 学号:6040310110 姓名:张元竞 设计成绩报告成绩指导老师

一、实验目的 随着社会信息量的极大增长,要求计算机处理的信息与日俱增,涉及到社会生活的各个方面。因此,文件管理是操作系统的一个非常重要的组成部分。学生应独立用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解,掌握它们的实施方法,加深理解课堂上讲授过的知识。 二、实验要求及实验环境 用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。要求设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。系统能够检查打入命令的正确性,出错时能显示出错原因。对文件必须设置保护措施,例如只能执行,允许读等。在每次打开文件时,根据本次打开的要求,在此设置保护级别,即有二级保护。文件的操作至少有Create、delete、open、close、read、write等命令。 所编写的程序应采用二级文件目录,即设置主文件目录和用户文件目录。前者应包含文件主及它们的目录区指针;后者应给出每个文件占有的文件目录,即文件名,保护码,文件长度以及它们存放的位置等。另外为打开文件设置运行文件目录(AFD),在文件打开时应填入打开文件号,本次打开保护码和读写指针等。 三、设计思想(本程序中的用到的所有数据类型的定义,主程序的流程图及各程序模块之间的调用关系)

实验二 文件系统及磁盘管理

实验二文件系统及磁盘管理 1.文件系统管理 一、实验目的 ●掌握Linux下文件系统的创建、挂载与卸载。 ●掌握文件系统的自动挂载。 二、项目背景 某企业的Linux服务器中新增了一块硬盘/dev/sdb,请使用fdisk命令新建/dev/sdb1主分区和/dev/sdb2扩展分区,并在扩展分区中新建逻辑分区/dev/sdb5,并使用mkfs命令分别创建vfat和ext3文件系统。然后用fsck命令检查这两个文件系统;最后,把这两个文件系统挂载到系统上。 三、实验内容 练习Linux系统下文件系统的创建、挂载与卸载及自动挂载的实现。 四、实验步骤 子项目1.创建/dev/sdb1和/dev/sdb5 ●使用fdisk命令创建/dev/sdb1主分区。 ●使用fdisk命令创建/dev/sdb2扩展分区。

●使用fdisk命令创建/dev/sdb5逻辑分区。 ●输入子命令w,把设置写入硬盘分区表,退出fdisk并重新启动系统。 ●用mkfs命令在上述刚刚创建的分区上创建ext3文件系统和vfat文件系统。 ●用fsck命令检查上面创建的文件系统。 子项目2.挂载/dev/sdb1和/dev/sdb5 ●利用mkdir命令,在/mnt目录下建立挂载点,mountpoint1和mountpoint2。 ●把上述新创建的ext3分区挂载到/mnt/mountpoint1上。

●把上述新创建的vfat分区挂载到/mnt/mountpoint2上。 ●利用mount命令列出挂载到系统上的分区,查看挂载是否成功。 ●利用umount命令卸载上面的两个分区。 子项目3.实现/dev/sdb1和/dev/sdb5的自动挂载 ●编辑系统文件/etc/fstab文件,把上面两个分区加入此文件中。 ●重新启动系统,显示已经挂载到系统上的分区,检查设置是否成功。 子项目4.挂载光盘和U盘 ●取一张光盘放入光驱中,将光盘挂载到/media/cdrom目录下。查看光盘中的文件。 ●利用与上述相似的命令完成U盘的挂载与卸载。 五、实验思考题 1. 在Linux下能创建Windows 的分区吗?在Linux下能创建Windows的文件系统吗? Windows操作系统可以识别ext3文件系统吗? 2.系统挂装表的文件名?系统挂装表的作用是什么?其文件格式使什么? 3.利用mount命令挂装一个文件系统和将其写入/etc/fstab文件的区别是什么?

操作系统实验-文件系统设计

文件系统设计 1.目的和要求 本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。 实验要求: ①在系统中用一个文件来模拟一个磁盘; ②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。 ③实现这个文件系统。 ④能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。 2.实验内容 1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。 2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。另外,为打开文件设置了运行文件目录(AFD)。 3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 4)因系统小,文件目录的检索使用了简单的线性搜索。 5)文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。 6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录。 3.实验环境 VC 6.0 4.实验提示 1) format 格式化

只写打开模拟文件,初始化超级快,初始化dinode 位图 block 位图,初始化主目录,初始化etc 目录,初始化管理员admin 目录,初始化用户xiao 目录,初始化 用户passwd 文件,写入模拟硬盘文件。 2 )install 安装 读写打开模拟文件,读取dinode 位图 block 位图,读取主目录,读取etc 目录,读取管理员admin 目录,读取用户xiao 目录,读取 用户passwd 文件。 3 )login 登陆 用户输入用户名和密码,在passwd 文件中查找是否有此用户,核对密码。正确则登陆成功,当前目录设定到当前用户文件夹下。 Login 登录 结束是,登录成功 输入用户名 查找是否有改 用户名 输入密码是 否 密码是否正确 否 4 )ialloc 申请inode 空间 先检测inode 位图是否加锁,是则退出。加锁,检测inode 空间是否还有已满,是则退出。在inode 位图中顺序查找空闲的inode ,找到则返回inode 地址,block 解锁。函数结束。

兰州大学操作系统实验七存储管理题目和答案

实验七实验报告 实验名称:7 存储管理 实验目的: 1.观察系统存储器使用情况 2.观察进程使用存储器的情况 3.掌握通过内存映像文件提高性能的方法 4.掌握动态内存分配技术 实验时间 3学时 预备知识: 1.存储相关的命令 free 显示系统使用和未被使用的内存数量(可以实时执行) 输出包含的标题有 3 行信息: Mem。此行包含了有关物理内存的信息。包括以下详细内容: total。该项显示可用的物理内存总量,单位为KB。该数字小于安装的物理内存的 容量,是因为内核本身也要使用一小部分的内存。 used。该项显示了用于应用程序超速缓存数据的内存容量。 free。该项显示了此时未使用且有效的内存容量。 Shared/buffers 缓冲区/cached。这些列显示了有关内存如何使用的更为详细的信息。 -/+ buffers/cache。Linux 系统中的部分内存用来为应用程序或设备高速缓存数据。这部分内存在需要用于其他目的时可以释放。 free列显示了调整的缓冲区行,显示释放缓冲区或高速缓存时可以使用的内存容量。 Swap。该行显示有关交换内存利用率的信息。该信息包含全部、已使用和释放的可用内存容量。 vmstat 报告进程、内存、分页、IO等多类信息(使用手册页) size 列出目标文件段大小和总大小(使用手册页)

2./proc文件系统(使用手册页man 5 proc) /proc/meminfo 内存状态信息 /proc/stat 包含内存页、内存对换等信息。 /proc/$pid/stat 某个进程的信息(包含内存使用信息) /proc/$pid/maps某个进程的内存映射区信息,包括地址范围、权限、偏移量以及主次设备号和映射文件的索引节点。 /proc/$pid/statm 某个进程的内存使用信息,包括内存总大小、驻留集大小、共享页面数、文本页面数、堆栈页面数和脏页面数。 3.内存映像文件 内存映像文件是指把一个磁盘文件映像到内存中,二者存在逐字节的对应关系。这样做可以加速I/O操作,并可以共享数据。 3.1 mmap(建立内存映射) 表头文件#include #include 定义函数void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize); 函数说明mmap()用来将某个文件内容映射到内存中,对该内存区域的存取即是直接对该文件内容的读写。参数start指向欲对应的内存起始地址,通常设为NULL,代表让系统自动选定地址,对应成功后该地址会返回。参数length代表将文件中多大的部分对应到内存。 参数prot代表映射区域的保护方式有下列组合 PROT_EXEC 映射区域可被执行 PROT_READ 映射区域可被读取 PROT_WRITE 映射区域可被写入 PROT_NONE 映射区域不能存取 参数flags会影响映射区域的各种特性 MAP_FIXED 如果参数start所指的地址无法成功建立映射时,则放弃映射,不 对地址做修正。通常不鼓励用此旗标。 MAP_SHARED对映射区域的写入数据会复制回文件内,而且允许其他映射该 文件的进程共享。 MAP_PRIV A TE 对映射区域的写入操作会产生一个映射文件的复制,即私人的

相关主题