操作系统4

2020-02-20 14:04

实验原理

文件系统指文件存在的物理空间,Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。Linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。

Linux文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。

索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。

Linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。

对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。

可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。

连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点是: 硬连接:原文件名和连接文件名都指向相同的物理地址。目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)。文件在磁盘中只有一个拷贝,节省硬盘空间;由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。

符号连接:用ln -s命令建立文件的符号连接。符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。可以删除原有的文件而保存连接文件,没有防止误删除功能。 接下去我们看看本指导书将要采用的用例―FAT。作为一种文件名称,FAT(File Allocation Table,文件分配表)自1981年问世以来,已经成为一个计算机术语。由于时代的原因,包括Windows、MacOS以及多种Unix版本在内的大多数操作系统均对FAT提供支持。 这是MS-DOS和最早期的Windows 95操作系统中使用的磁盘分区格式。它采用16位的文件分配表,是目前获得操作系统支持最多的一种磁盘分区格式,几乎所有的操作系统都支持这种分区格式,从DOS、Windows 95、Windows OSR2到现在的Windows 98、Windows Me、Windows NT、Windows 2000、Windows XP都支持FAT16,但只支持2GB的硬盘分区成为了它的一大缺点。FAT16分区格式的另外一个缺点是:磁盘利用效率低(具体的技术细节请参阅相关资料)。为了解决这个问题,微软公司在Windows 95 OSR2中推出了一种全新的磁盘分区格式——FAT32。

FAT中的每个表项都对应了磁盘中每一块的分配状况,FAT的表项位数决定了最大可表示的磁盘容量。FAT16表示最多支持216个块(或簇)。FAT表项的可

能值为:

0x00:表示对应块空闲

0xFF:表示对应块为文件的最后一块 其它值:表示该文件的下一块的块号 文件目录里记录了文件的控制信息,每一个目录项(FCB)都对应一个文件,用户要操作文件时总是先查询目录找出FCB,然后才能读取文件内容。 简单文件系统示范: 1、虚拟磁盘结构

#define MAX_DISK_SIZE 256 u_char g_disk[MAX_DISK_SIZE]

定义每一个磁盘块大小为16字节,所以系统最多存放16个物理块内容。 规定FAT表总占用第0块,使用8位的FAT表项,所以第0块共有16个FAT表项,目录表占用第1至4块,每个目录项(FCB)占16个字节,因此系统最多支持4个文件。由于0~5块被系统占用,FAT的第0~5字节应为0xFF,故系统最大支持块数量为10块。

2、系统数据结构 /************************************************************* FAT结构 使用1个字节(8位)表示一个块号 cluster值: 0x00 : 空闲 0xFF : 文件的最后一块 其它值 : 文件的下一块块号 *************************************************************/ typedef struct _tagfat { /*********************************************************** 文件控制块结构(16字节) f_name 长7个字符 f_size : 文件长度 f_firstblock : 文件的起始块号 ********************************************************/ typedef struct _tagfcb { char f_name[8]; int f_size; : 文件名,最长8个字符,注意要留一个字符保存’\\0’,故文件名最u_char cluster; } FAT,*PFAT,**PPFAT; int f_firstblock; } FCB,*PFCB,**PPFCB;

3、文件删除原理。删除一个文件时需要做两件事:

(1)把文件占用的块号对应的FAT项清0x00。例如被删除的文件占用了第7块物理块,那么要将FAT的第7字节置0x00(原本为0xFF)

(2)把目录表中的相应项中的文件名第一个字节置0xE5

由此看出,使用FAT的文件系统删除文件时并不清除文件占用的物理块内容,这也给反删除文件带来了可能。在目录项中,文件名的第一个字节很关键,如果是0xE5的话则说明该目录项空闲可以存放一个文件信息,否则说明已被占用。

实验内容

在内存中模拟一简单的文件系统,可以完成文件的创建和索引功能。问题的描述如下:

1、遵循FAT格式使用内存模拟一个文件系统,并实现以下命令接口: (1)新建文件,格式:mkfile filename filecontent filename:文件名 filecontent:文件内容(字符) 实现按FAT格式写FAT表和目录表,以及文件内容。 (2)列出文件,格式:dir 列出目录里所有的文件信息和虚拟磁盘信息。 (3)显示文件内容,格式:type filename filename:文件名 在目录项中查找文件名所在块号,并把文件内容打印在屏幕上。

(4)删除文件:del filename filename:文件名 将文件删除,回收虚拟磁盘空间。

(5)退出文件系统:quit

2、本指书仅将给出一个文件系统格式范例,同学们可以在此基础上进行改进,如:可以使用文件来模拟文件系统,可以实现多级的目录结构,模拟ext2格式的Linux文件系统等。

实验代码如下:

#include #include #include #include #include

using namespace std;

const int BLOCKNUM_SIZE=2; const int BLOCK_SIZE=1024;

//盘块号大小

//一个盘块大小数

const int BLOCK_NUM=10001; //盘块数量 //磁盘大小 const int DISK_SIZE=1024*1000*10;

const int LIST_SIZE=32; const int MAP_SIZE=10001; const int FATNUM=125; const int FATLIST=512; const int DATABEG=128;

struct FCB { char fname[8]; char exname[3]; short fnum; int length;

};

struct fatid{ short id[FATNUM*FATLIST]; }*FAT;

struct map{ bitset maplist; }*MAP;

struct DIR {

struct FCB list[LIST_SIZE+1]; }*filedir;

int currentid=128; int currentdir=128;

char *file; char *FilePath=\ FILE *fp; //目录项大小 //MAP 长度

//FAT的盘块数 第块没有用

//每个盘口FAT的记录数

//数据项开始FAT号

//文件名 //扩展名 //首块号

//文件大小, 目录则文件大小为;

//FAT 大小512个记录 一块

//当前FAT号

//当前目录块号初始化是+1 由于第个单元没有使用 //磁盘的首地址

//window文件保存地址 //window 文件地址

string CURRENT=\ char cmd[30];

//当前路径 //输入指令

char command[16]; /*

*对文件存储器进行格式化 *创建根目录 * */

void findBit(struct map *MAP) {

}

void init(struct fatid *FAT) { int i; for(i=1;iDATABEG) FAT->id[i]=0;

else

FAT->id[i]=-1; }

}

void format() {

FAT=(struct fatid *)(file+BLOCK_SIZE);

//第块 不使用 //当前FAT地址


操作系统4.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:基于PIC16F887单片机的数字钟完整c程序代码

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: