搜档网
当前位置:搜档网 › 模拟文件系统的设计与实现

模拟文件系统的设计与实现

模拟文件系统的设计与实现
模拟文件系统的设计与实现

中北大学

操作系统课程设计

说明书

学院、系:软件学院

专业:软件工程

学生姓名:xxx 学号:xxx

设计题目:模拟文件系统的设计与实现

起迄日期: 2015年12月28日- 2016年1月8日指导教师:xxx

2016 年1月8日

1需求分析

通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力;掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,并了解操作系统的发展动向和趋势。

模拟二级文件管理系统的课程设计目的是通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。

2总体设计

结合数据结构、程序设计、计算机原理等课程的知识,设计一个二级文件系统,进一步理解操作系统。

文件的创建: create 文件关闭:close 文件的打开:open

文件的读:read 文件的写:write 文件关闭:close

删除文件:delete 创建子目录:mkdir 删除子目录:rmdir

列出文件目录:dir 退出:exit

系统执行流程图

3.详细设计

主要数据结构:

#define MEM_D_SIZE 1024*1024 //总磁盘空间为1M

#define DISKSIZE 1024 //磁盘块的大小1K

#define DISK_NUM 1024 //磁盘块数目1K

#define FATSIZE DISK_NUM*sizeof(struct fatitem) //FAT表大小

#define ROOT_DISK_NO FATSIZE/DISKSIZE+1 //根目录起始盘块号#define ROOT_DISK_SIZE sizeof(struct direct) //根目录大小

#define DIR_MAXSIZE 1024 //路径最大长度为1KB

#define MSD 5 //最大子目录数5

#define MOFN 5 //最大文件深度为5

#define MAX_WRITE 1024*128 //最大写入文字长度128KB

struct fatitem /* size 8*/

{

int item; /*存放文件下一个磁盘的指针*/

char em_disk; /*磁盘块是否空闲标志位 0 空闲*/

};

struct direct

{

/*-----文件控制快信息-----*/

struct FCB

{

char name[9]; /*文件/目录名 8位*/

char property; /*属性 1位目录 0位普通文件*/

int size; /*文件/目录字节数、盘块数)*/

int firstdisk; /*文件/目录起始盘块号*/

int next; /*子目录起始盘块号*/

int sign; /*1是根目录 0不是根目录*/

}directitem[MSD+2];

};

struct opentable

{

struct openttableitem

{

char name[9]; /*文件名*/

int firstdisk; /*起始盘块号*/

int size; /*文件的大小*/

}openitem[MOFN];

int cur_size; /*当前打文件的数目*/

};

管理文件的主要代码:

int create(char *name)

{

int i,j;

if(strlen(name)>8) /*文件名大于 8位*/

return(-1);

for(j=2;j

if(!strcmp(cur_dir->directitem[j].name,name))

break;

}

if(j

return(-4);

for(i=2;i

{

if(cur_dir->directitem[i].firstdisk==-1)

break;

}

if(i>=MSD+2) /*无空目录项*/

return(-2);

if(u_opentable.cur_size>=MOFN) /*打开文件太多*/

return(-3);

for(j=ROOT_DISK_NO+1;j

if(fat[j].em_disk=='0')

break;

}

if(j>=DISK_NUM)

return(-5);

fat[j].em_disk = '1'; /*将空闲块置为已经分配*/

/*-----------填写目录项-----------------*/

strcpy(cur_dir->directitem[i].name,name);

cur_dir->directitem[i].firstdisk = j;

cur_dir->directitem[i].size = 0;

cur_dir->directitem[i].next = j;

cur_dir->directitem[i].property = '0';

/*---------------------------------*/

fd = open(name);

return 0;

}

int open(char *name)

{

int i, j;

for(i=2;i

{

if(!strcmp(cur_dir->directitem[i].name,name))

break;

}

if(i>=MSD+2)

return(-1);

/*--------是文件还是目录-----------------------*/

if(cur_dir->directitem[i].property=='1')

return(-4);

/*--------文件是否打开-----------------------*/ for(j=0;j

{

if(!strcmp(u_opentable.openitem[j].name,name))

break;

}

if(j

return(-2);

if(u_opentable.cur_size>=MOFN) /*文件打开太多*/

return(-3);

/*--------查找一个空闲用户打开表项-----------------------*/

for(j=0;j

{

if(u_opentable.openitem[j].firstdisk==-1)

break;

}

/*--------------填写表项的相关信息------------------------*/

u_opentable.openitem[j].firstdisk = cur_dir->directitem[i].firstdisk; strcpy(u_opentable.openitem[j].name,name);

u_opentable.openitem[j].size = cur_dir->directitem[i].size;

u_opentable.cur_size++;

/*----------返回用户打开表表项的序号--------------------------*/

return(j);

}

int close(char *name)

{

int i;

for(i=0;i

{

if(!strcmp(u_opentable.openitem[i].name,name))

break;

}

if(i>=MOFN)

return(-1);

/*-----------清空该文件的用户打开表项的内容---------------------*/

strcpy(u_opentable.openitem[i].name,"");

u_opentable.openitem[i].firstdisk = -1;

u_opentable.openitem[i].size = 0;

u_opentable.cur_size--;

return 0;

}

int write(int fd, char *buf, int len)

{

char *first;

int item, i, j, k;

int ilen1, ilen2, modlen, temp;

/*----------用 $ 字符作为空格 # 字符作为换行符-----------------------*/ char Space = 32;

char Endter= '\n';

for(i=0;i

{

if(buf[i] == '$')

buf[i] = Space;

else if(buf[i] == '#')

buf[i] = Endter;

}

/*----------读取用户打开表对应表项第一个盘块号-----------------------*/ item = u_opentable.openitem[fd].firstdisk;

/*-------------找到当前目录所对应表项的序号-------------------------*/

for(i=2;i

{

if(cur_dir->directitem[i].firstdisk==item)

break;

}

temp = i; /*-存放当前目录项的下标-*/

/*------找到的item 是该文件的最后一块磁盘块-------------------*/

while(fat[item].item!=-1)

{

item =fat[item].item; /*-查找该文件的下一盘块--*/

}

/*-----计算出该文件的最末地址-------*/

first = fdisk+item*DISKSIZE+u_opentable.openitem[fd].size%DISKSIZE;

/*-----如果最后磁盘块剩余的大小大于要写入的文件的大小-------*/

if(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE>len)

{

strcpy(first,buf);

u_opentable.openitem[fd].size = u_opentable.openitem[fd].size+len;

cur_dir->directitem[temp].size = cur_dir->directitem[temp].size+len;

}

else

{

for(i=0;i<(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE);i++)

{/*写一部分内容到最后一块磁盘块的剩余空间(字节)*/

first[i] = buf [i];

}

/*-----计算分配完最后一块磁盘的剩余空间(字节) 还剩下多少字节未存储-------*/

ilen1 = len-(DISKSIZE-u_opentable.openitem[fd].size%DISKSIZE);

ilen2 = ilen1/DISKSIZE;

modlen = ilen1%DISKSIZE;

if(modlen>0)

ilen2 = ilen2+1; /*--还需要多少块磁盘块-*/

for(j=0;j

{

for(i=ROOT_DISK_NO+1;i

{

if(fat[i].em_disk=='0')

break;

}

if(i>=DISK_NUM) /*--如果磁盘块已经分配完了-*/

return(-1);

first = fdisk+i*DISKSIZE; /*--找到的那块空闲磁盘块的起始地址-*/

if(j==ilen2-1) /*--如果是最后要分配的一块-*/

{

for(k=0;k

k++)

first[k] = buf[k];

}

else/*-如果不是要最后分配的一块--*/

{

for(k=0;k

first[k] =buf[k];

}

fat[item].item = i; /*--找到一块后将它的序号存放在上一块的指针中-*/

fat[i].em_disk = '1'; /*--置找到的磁盘快的空闲标志位为已分配-*/

fat[i].item = -1; /*--它的指针为 -1 (即没有下一块)-*/ }

/*--修改长度-*/

u_opentable.openitem[fd].size = u_opentable.openitem[fd].size+len;

cur_dir->directitem[temp].size = cur_dir->directitem[temp].size+len;

}

return 0;

}

int read(int fd, char *buf)

{

int len = u_opentable.openitem[fd].size;

char *first;

int i, j, item;

int ilen1, modlen;

item = u_opentable.openitem[fd].firstdisk;

ilen1 = len/DISKSIZE;

modlen = len%DISKSIZE;

if(modlen!=0)

ilen1 = ilen1+1; /*--计算文件所占磁盘的块数-*/

first = fdisk+item*DISKSIZE; /*--计算文件的起始位置-*/

for(i=0;i

{

if(i==ilen1-1) /*--如果在最后一个磁盘块-*/

{

for(j=0;j

buf[i*DISKSIZE+j] = first[j];

}

else /*--不在最后一块磁盘块-*/

{

for(j=0;j

buf[i*DISKSIZE+j] = first[j];

item = fat[item].item; /*-查找下一盘块-*/

first = fdisk+item*DISKSIZE;

}

}

return 0;

}

int del(char *name)

{

int i,cur_item,item,temp;

for(i=2;i

{

if(!strcmp(cur_dir->directitem[i].name,name))

break;

}

cur_item = i; /*--用来保存目录项的序号,供释放目录中-*/

if(i>=MSD+2) /*--如果不在当前目录中-*/

return(-1);

if(cur_dir->directitem[cur_item].property!='0') /*--如果删除的(不)是目录-*/

return(-3);

for(i=0;i

{

if(!strcmp(u_opentable.openitem[i].name,name))

return(-2);

}

item = cur_dir->directitem[cur_item].firstdisk;/*--该文件的起始盘块号-*/ while(item!=-1) /*--释放空间,将FAT表对应项进行修改-*/

{

temp = fat[item].item;

fat[item].item = -1;

fat[item].em_disk = '0';

item = temp;

}

/*-----------------释放目录项-----------------------*/

cur_dir->directitem[cur_item].sign = 0;

cur_dir->directitem[cur_item].firstdisk = -1;

strcpy(u_opentable.openitem[cur_item].name,"");

cur_dir->directitem[cur_item].next = -1;

cur_dir->directitem[cur_item].property = '0';

cur_dir->directitem[cur_item].size = 0;

return 0;

}

主函数:

int main()

{

FILE *fp;

char ch;

char a[100];

char code[11][10];

char name[10];

int i,flag,r_size;

char *contect;

contect = (char *)malloc(MAX_WRITE*sizeof(char));

if((fp=fopen("disk.dat","rb"))==NULL)

{

printf("You have not format,Do you want format?(y/n)");

scanf("%c",&ch);

if(ch=='y')

{

initfile();

printf("Successfully format! \n");

}

else

{

return 0;

}

}

enter();

print();

show();

strcpy(code[0],"exit");

strcpy(code[1],"create");

strcpy(code[2],"open");

strcpy(code[3],"close"); strcpy(code[4],"write"); strcpy(code[5],"read");

strcpy(code[6],"del");

strcpy(code[7],"mkdir"); strcpy(code[8],"rmdir"); strcpy(code[9],"dir");

strcpy(code[10],"cd");

while(1)

{

scanf("%s",a);

for(i=0;i<11;i++)

{

if(!strcmp(code[i],a))

break;

}

switch(i)

{

case 0: //退出文件系统

free(contect);

halt();

return 0;

case 1: //创建文件

scanf("%s",name);

flag = create(name);

if(flag==-1)

{

printf("Error: \n The length is too long !\n");

}

else if(flag==-2)

{

printf("Error: \n The direct item is already full !\n");

}

else if(flag==-3)

{

printf("Error: \n The number of openfile is too much !\n");

}

else if(flag==-4)

{

printf("Error: \n The name is already in the direct !\n");

}

else if(flag==-5)

{

printf("Error: \n The disk space is full!\n");

}

else

{

printf("Successfully create a file! \n");

}

show();

break;

case 2://打开文件

scanf("%s",name);

fd = open(name);

if(fd == -1)

{

printf("Error: \n The open file not exit! \n");

}

else if(fd == -2)

{

printf("Error: \n The file have already opened! \n");

}

else if(fd == -3)

{

printf("Error: \n The number of open file is too much! \n");

}

else if(fd == -4)

{

printf("Error: \n It is a direct,can not open for read or write! \n");

}

else

{

printf("Successfully opened! \n");

}

show();

break;

case 3://关闭文件

scanf("%s",name);

flag = close(name);

if(flag == -1)

{

printf("Error:\n The file is not opened ! \n");

}

else

{

printf("Successfully closed! \n");

}

show();

break;

case 4://写文件

if(fd ==-1)

{

printf("Error:\n The file is not opened ! \n");

}

else

{

printf("Please input the file contect:");

scanf("%s",contect);

flag=write(fd,contect,strlen(contect));

if(flag == 0)

{

printf("Successfully write! \n");

}

else

{

printf("Error:\n The disk size is not enough! \n");

}

}

show();

break;

case 5://读文件

if(fd ==-1)

{

printf("Error:\n The file is not opened ! \n");

}

else

{

flag = read(fd,contect);

if(flag == 0)

{

for(i=0;i

{

printf("%c",contect[i]);

}

printf("\t\n");

}

}

show();

break;

case 6://删除文件

scanf("%s",name);

flag = del(name);

if(flag == -1)

{

printf("Error:\n The file not exit! \n");

}

else if(flag == -2)

{

printf("Error:\n The file is opened,please first close it ! \n");

}

else if(flag == -3)

{

printf("Error:\n The delete is not file ! \n");

}

else

{

printf("Successfully delete! \n");

}

show();

break;

}

}

}

程序运行截图:

(完整版)操作系统毕业课程设计说明书-基于Linux的模拟文件系统的设计与实现

中北大学 操作系统课程设计 说明书 学院、系:软件学院 专业:软件工程 学生姓名:徐春花学号: 设计题目:基于Linux的模拟文件系统的设计与实现 起迄日 期: 2014年6月14日- 2014年6月26日指导教薛海丽

师: 2014 年 6月 26 日 前言 简单地说,Linux是一套免费使用和自由传播的类Unix操作系统,它主要用于基于Intel x86系列CPU的计算机上。这个系统是由世界各地的成千上万的程序员设计和实现的。其目的是建立不受任何商品化软件的版权制约的、全世界都能自由使用的Unix兼容产品。 Linux不仅为用户提供了强大的操作系统功能,而且还提供了丰富的应用软件。用户不但可以从Internet上下载Linux及其源代码,而且还可以从Internet上下载许多Linux的应用程序。可以说,Linux本身包含的应用程序以及移植到Linux上的应用程序包罗万象,任何一位用户都能从有关Linux的网站上找到适合自己特殊需要的应用程序及其源代码,这样,用户就可以根据自己的需要下载源代码,以便修改和扩充操作系统或应用程序的功能。这对Windows NT、Windows98、MS-DOS或OS2

等商品化操作系统来说是无法做到的。 Linux具有:稳定、可靠、安全的优点,并且有强大的网络功能。其中有对读、 写进行权限控制、审计跟踪、核心授权等技术,这些都为安全提供了保障。在相关软 件的支持下,可实现WWW、FTP、DNS、DHCP、E-mail等服务,还可作为路由器 使用,利用IPCHAINSIPTABLE网络治理工具可构建NAT及功能全面的防火墙。 Linux是在GNU公共许可权限下免费获得的,是一个符合POSIX标准的操作系 统。Linux操作系统软件包不仅包括完整的Linux操作系统,而且还包括了文本编辑 器、高级语言编译器等应用软件。它还包括带有多个窗口管理器的X-Windows图形 用户界面,如同我们使用Windows NT一样,允许我们使用窗口、图标和菜单对系 统进行操作。 目录 1需求分析 (3) 1.1 功能介绍 (3) 1.2 目的及意义 (5) 1.2.1 目的 (5) 1.2.2 意义 (6) 1.3 设计成果 (7) 2总体设计 (8) 2.1功能介绍 (8) 2.2模块关联 (9) 3详细设计 (12)

ONEStor分布式存储系统介绍

ONEStor 分布式存储系统介绍 关于ONEStor 分布式存储系统介绍,小编已在金信润天 容: 技术特点 H3C ONEStor 存储系统采用分布式设计,可以运行在通用 x86服务器上,在部署该软件时, 会把所有服务器的本地硬盘组织成一个虚拟存储资源池,对上层应用提供块存储功能。 H3C ONEStor 分布式存储软件系统具有如下特点: 领先的分布式架构 H3CONEStor 存储软件的采用全分布式的架构: 分布式管理集群,分布式哈希数据分布算法, 分布式无状态客户端、分布式Cache 等,这种架构为存储系统的可靠性、 可用性、自动运维、 高性能等方面提供了有力保证。其系统架构组成如下图所示: jyionitors 上图中,ONEStor 逻辑上可分为三部分: OSD Monitor 、Client 。在实际部署中,这些逻辑 Get 到了部分资料,整理出以下内 QSDs CliEnt£ Object I/O V* Failure reporting, v ------ map distribution

组件可灵活部署,也就是说既可以部署在相同的物理服务器上,也可以根据性能和可靠性等方面的考虑,部署在不同的硬件设备上。下面对每一部分作一简要说明。 OSD:Object-based Storage Device OSD由系统部分和守护进程(OSD deamon两部分组成。OSD系统部分可看作安装了操作系统和文件系统的计算机,其硬件部分包括处理器、内存、硬盘以及网卡等。守护进程即运行在内存中的程序。在实际应用中,通常将每块硬盘(SSD或HDD对应一个OSD并将其视 为OSD的硬盘部分,其余处理器、内存、网卡等在多个OSD之间进行复用。ONEStor存储集群中的用户都保存在这些OSD中。OSDdeamon负责完成OSD的所有逻辑功能,包括与monitor 和其他OSD(事实上是其他OSD的deamon)通信以维护更新系统状态,与其他OSD共同完成数据的存储和维护,与client 通信完成各种数据对象操作等等。 Monitor : Monitor 是集群监控节点。Monitor 持有cluster map 信息。所谓Cluster Map ,粗略的说就是关于集群本身的逻辑状态和存储策略的数据表示。ONEStor Cluster Map包括Monitor map osd map pg map crush map等,这些map构成了集群的元数据。总之,可以认为Monitor 持有存储集群的一些控制信息,并且这些map信息是轻量级的,只有在集群的物理设备(如主机、硬盘)和存储策略发生变化时map信息才发生改变。 Client : 这里的Client可以看出外部系统获取存储服务的网关设备。client通过与OSD或者Monitor 的交互获取cluster map然后直接在本地进行计算,得出数据的存储位置后,便直接与对应的OSD 通信,完成数据的各种操作。在此过程中,客户端可以不依赖于任何元数据服务器,不进行任何查表操作,便完成数据访问流程。这一点正是ONEStor分布式存储系统可以实现扩展性的重要保证。 客户的数据到达Clie nt后,如何存储到OSD上,其过程大致如下图所示:

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

操作系统实验报告实验名称:文件管理 专业班级:网络工程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;

分布式存储系统的一些理解和实践

分布式存储系统的一些理解和实践 张建伟 一、分布式存储系统介绍 1.简介 互联网数据规模越来越大,并发请求越来越高,传统的关系数据库,在很多使用场景下并不能很好的满足需求。分布式存储系统应运而生。它有良好的扩展性,弱化关系数据模型,甚至弱化一致性要求,以得到高并发和高性能。按功能分类,主要有以下几种: ?分布式文件系统 hdfs ceph glusterfs tfs ?分布式对象存储 s3(dynamo) ceph bcs(mola) ?分布式表格存储 hbase cassandra oceanbase ?块存储 ceph ebs(amazon) 分布式存储系统,包括分布式系统和单机存储两部分;不同的系统,虽在功能支持、实现机制、实现语言等方面是有差异的,但其设计时,关注的关键问题是基本相同的。单机存储的主流实现方式,有hash引擎、B+树引擎和LSM树(Log Structured Merge Tree)三种,不展开介绍。本文第二章节,主要结合hbase、cassandra和ceph,讲下分布式系统设计部分,需要关注的关键问题。 2.适用场景 各分布式存储系统功能定位不尽相同,但其适用和不适用的场景,在一定程度上是相同的,如下。

1)适用 大数据量(大于100T,乃至几十PB) key/value或者半结构化数据 高吞吐 高性能 高扩展 2)不适用 Sql查询 复杂查询,如联表查询 复杂事务 二、分布式存储系统设计要点 1.数据分布 分布式存储,可以由成千甚至上万台机器组成,以实现海量数据存储和高并发。那它最先要解决的就是数据分布问题,即哪些数据存储在哪些机器(节点)上。常用的有hash类算法和用meta表映射两种方式。一般完全分布式的设计(无master节点),会用hash类算法;而集中式的设计(有master节点)用meta表映射的方式。两者各有优缺点,后面讲到具体问题时再做比较。 1)一致性hash 将存储节点和操作的key(key唯一标识存储的object,有时也叫object name)都hash到0~2的32次方区间。映射到如下环中的某个位置。沿操作key的位置顺时针找到的第一个节点即为此key的primary存储节点。如下图所示:

操作系统课程设计-模拟文件系统

目录 第1章需求分析 (1) 第2章概要设计 (1) 系统的主要功能 (1) 系统模块功能结构 (1) 运行环境要求 (2) 数据结构设计 (2) 第3章详细设计 (3) 模块设计 (3) 算法流程图 (3) 第4章系统源代码 (4) 第5章系统测试及调试 (4) 运行结果及分析 (4) 系统测试结论 (5) 第6章总结与体会 (6) 第7章参考文献 (6) 附录 (7)

第1章需求分析 通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力;掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,并了解操作系统的发展动向和趋势。 模拟二级文件管理系统的课程设计目的是通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。 第2章概要设计 系统的主要功能 1) 系统运行时根据输入的用户数目创建主目录 2) 能够实现下列命令: Login 用户登录 Create 建立文件 Read 读取文件 Write 写入文件 Delete 删除文件 Mkdir 建立目录 Cd 切换目录 Logout 退出登录 系统模块功能结构

运行环境要求 操作系统windows xp ,开发工具vc++ 数据结构设计 用户结构:账号与密码结构 typedef struct users { char name[8]; char pwd[10]; }users; 本系统有8个默认的用户名,前面是用户名,后面为密码,用户登陆时只要输入正确便可进入系统,否则提示失败要求重新输入。 users usrarray[8] = { "usr1","usr1", "usr2","usr2", "usr3","usr3", "usr4","usr4",

操作系统课程设计文件系统管理)

操作系统课程设计Array文件系统管理 学院计算机学院 专业计算机科学与技术 班级 姓名 学号 2013年1月8日 广东工业大学计算机学院制 文件系统管理 一、实验目的 模拟文件系统的实现的基本功能,了解文件系统的基本结构和文件系统的管理方法看,加深了解文件系统的内部功能的实现。通过高级语言编写和实现一个简单的文件系统,模拟文件管理的工作过程,从而对各种文件操作系统命令的实质内容和执行过程有比较深入的了解。 二、实验内容和要求 编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。在用户程序中通过使用文件系统提供的create,open,read,write,close,delete等文件命令,对文件进行操作。 以下报告主要包括: 1.可行性分析 2.需求分析 3.概要设计

4.详细设计 5.测试 6.总结 三、可行性分析 1、技术可行性 对于图形编程还不了解,但是经过本学期的三次实验的练习,可以设计好命令操作界面。利用大二期间学习的数据结构可以模拟出此课程设计的要求。 2、经济可行性 课程设计作为本课程的练习及进一步加深理解。与经济无关,可以不考虑。(零花费,零收益) 3.法律可行性 自己编写的程序,仅为练习,不作其他用途,与外界没什么联系,可行。 四、需求分析 编写程序实现文件系统,主要有以下几点要求: 1、实现无穷级目录管理及文件管理基本操作 2、实现共享“别名” 3、加快了文件检索 五、概要设计 为了克服单级目录所存在的缺点,可以为每一位用户建立一个单独的用户文件目录UFD(User File Directory)。这些文件目录可以具有相似的结构,它由用户所有文件的文件控制块组成。此外,在系统中再建立一个主文件目录MFD (Master File Directory);在主文件目录中,每个用户目录文件都占有一个目

中科分布式存储系统技术白皮书V2.0

LINGHANG TECHNOLOGIES CO.,LTD 中科分布式存储系统技术白皮书 北京领航科技 2014年04

目录 1、产品介绍 (3) 1.1 云时代的政府/企业烦恼 (3) 1.2 产品服务与定位 (3) 2、中科分布式存储应用场景 (4) 2.1 目标用户 (4) 2.2 产品模式 (4) 2.2.1高性能应用的底层存储 (4) 2.2.2企业级海量数据存储平台 (5) 2.2.3容灾备份平台 (5) 2.3 使用场景 (5) 2.3.1企业级数据存储 (5) 2.3.2私有云计算 (6) 2.3.3海量数据存储 (6) 2.3.4大数据分析 (7) 2.3.5 容灾备份 (7) 3、中科分布式存储核心理念 (8) 4、中科分布式存储功能服务 (9) 4.1 存储系统功能介绍 (9) 4.2 WEB监控管理端功能介绍 (11) 5、系统技术架构 (12) 5.1 系统总体架构 (12) 5.2 系统架构性特点 (12) 5.3 技术指标要求 (14) 5.4 系统软硬件环境 (15)

1、产品介绍 1.1云时代的政府/企业烦恼 ?政府、企事业单位每天产生的大量视频、语音、图片、文档等资料,存在 哪里? ?政府、企事业单位各个部门、各个子系统之间强烈的数据共享需求如何满 足? ?大数据如何高效处理以达到统一存取、实时互动、价值传播、长期沉淀? ?您是否为单位电子邮箱充斥大量冗余数据还要不断扩容而烦恼? ?政府、企事业单位的私有云平台为什么操作和数据存取这么慢? ?政府、企事业单位的存储平台数据量已接近临界值需要扩容,但上面有重 要业务在运行,如何能在线扩展存储空间? ?公司的每一个子公司都有重要客户数据,要是所在的任何一个城市发生大 规模灾难(比如地震)数据怎么办? ?政府、企事业单位有一些历史数据平时比较少用到,但又不能丢掉,占用 了大量的高速存储资源,能否移到更廉价的存储设备上去? 1.2产品服务与定位 大数据时代已经来临! 面对数据资源的爆炸性增长,政府、企事业单位每天产生的海量视频、语音、图片、文档和重要客户数据等资料如何有效存取?政府多个部门之间、公司和子公司之间、公司各个部门之间强烈的数据共享需求如何满足?如果

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

简单文件系统的设计及实现 一、实验目的: 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)实验时按两人一组进行分组,将本组认为效果较好的程序提交检查。

分布式存储系统设计方案——备份容灾

分布式存储系统设计方案——备份容灾 在分布式存储系统中,系统可用性是最重要的指标之一,需要保证在机器发生故障时,系统可用性不受影响,为了做到这点,数据就需要保存多个副本,并且多个副本要分布在不同的机器上,只要多个副本的数据是一致的,在机器故障引起某些副本失效时,其它副本仍然能提供服务。本文主要介绍数据备份的方式,以及如何保证多个数据副本的一致性,在系统出现机器或网络故障时,如何保持系统的高可用性。 数据备份 数据备份是指存储数据的多个副本,备份方式可以分为热备和冷备,热备是指直接提供服务的备副本,或者在主副本失效时能立即提供服务的备副本,冷备是用于恢复数据的副本,一般通过Dump的方式生成。 数据热备按副本的分布方式可分为同构系统和异步系统。同构系统是把存储节点分成若干组,每组节点存储相同的数据,其中一个主节点,其他为备节点;异构系统是把数据划分成很多分片,每个分片的多个副本分布在不同的存储节点,存储节点之间是异构的,即每个节点存储的数据分片集合都不相同。在同构系统中,只有主节点提供写服务,备节点只提供读服务,每个主节点的备节点数可以不一样,这样在部署上会有更大的灵活性。在异构系统中,所有节点都是可以提供写服务的,并且在某个节点发生故障时,会有多个节点参与故障节点的数据恢复,但这种方式需要比较多的元数据来确定各个分片的主副本所在的节点,数据同步机制也会比较复杂。相比较而言,异构系统能提供更好的写性能,但实现比较复杂,而同构系统架构更简单,部署上也更灵活。鉴于互联网大部分业务场景具有写少读多的特性,我们选择了更易于实现的同构系统的设计。 系统数据备份的架构如下图所示,每个节点代表一台物理机器,所有节点按数据分布划分为多个组,每一组的主备节点存储相同的数据,只有主节点能提供写服务,主节点负责把数据变更同步到所有的备节点,所有节点都能提供读服务。主节点上会分布全量的数据,所以主节点的数量决定了系统能存储的数据量,在系统容量不足时,就需要扩容主节点数量。在系统的处理能力上,如果是写能力不足,只能通过扩容主节点数来解决;而在写能力不足时,则可以通过增加备节点来提升。每个主节点拥有的备节点数量可以不一样,这在各个节点的数据热度不一样时特别有用,可以通过给比较热的节点增加更多的备节点实现用更少的资源来提升系统的处理能力。

操作系统文件管理_答案

第六部分文件管理 1、文件系统的主要目的就是( )。 A、实现对文件的按名存取 B、实现虚拟存储 C、提供外存的读写速度 D、用于存储系统文件 2、文件系统就是指( )。 A、文件的集合 B、文件的目录集合 C、实现文件管理的一组软件 D、文件、管理文件的软件及数据结构的总体 3、文件管理实际上就是管理( )。 A、主存空间 B、辅助存储空间 C、逻辑地址空间 D、物理地址空间 4、下列文件的物理结构中,不利于文件长度动态增长的文件物理结构就是( )。 A、顺序文件 B、链接文件 C、索引文件 D、系统文件 5、下列描述不就是文件系统功能的就是( )。 A、建立文件目录 B、提供一组文件操作 C、实现对磁盘的驱动调度 D、实现从逻辑文件到物理文件间的转换 6、文件系统在创建一个文件时,为它建立一个( )。 A、文件目录 B、目录文件 C、逻辑结构 D、逻辑空间 7、索引式(随机)文件组织的一个主要优点就是( )。 A、不需要链接指针 B、能实现物理块的动态分配 C、回收实现比较简单 D、用户存取方便 8、面向用户的文件组织机构属于( )。 A、虚拟结构 B、实际结构 C、逻辑结构 D、物理结构 9、按文件用途来分,编译程序就是( )。 A、用户文件 B、档案文件 C、系统文件 D、库文件 10、将信息加工形成具有保留价值的文件就是( )。 A、库文件 B、档案文件 C、系统文件 D、临时文件 11、文件目录的主要作用就是( )。 A、按名存取 B、提高速度 C、节省空间 D、提高外存利用率 12、如果文件系统中有两个文件重名,不应采用( )。 A、一级目录结构 B、树型目录结构 C、二级目录结构 D、A与C 13、文件系统采用树型目录结构后,对于不同用户的文件,其文件名( )。 A、应该相同 B、应该不同 C、可以不同,也可以相同 D、受系统约束 14、文件系统采用二级文件目录可以( )。 A、缩短访问存储器的时间 B、实现文件共享 C、节省内存空间 D、解决不同用户间的文件命名冲突

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

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

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

分布式存储系统的要点

汉柏科技 分布式存储系统要点 王智民 汉柏科技有限公司

分布式存储系统 分布式存储系统,有块存储、对象存储、文件存储,有不同的开源项目如Ceph、GlusterFS、Sheepdog、Swift,还有不同的商业实现如Google、AWS、微软、金山、七牛、又拍、阿里云还有Qingcloud 首先对象存储和文件存储的区别是不大的,存储的都是一样的东西,只是抛弃了统一 的命名空间和目录树的结构,使得扩展起来桎梏少一些。 独立的互联网存储服务一般都是做对象存储的,因为块存储是给计算机用的,对象存 储是给浏览器等HTTP客户端用的。

分布式存储系统的三个问题 ?对于一套分布式存储的方案,怎样评估它是好还是不好? ?如何对分布式存储的不同实现进行分类? ?分布式存储中的“数据可靠性”是如何计算的? 1.运行或在线系统需要高性能 2.离线或备份数据需要高容量,低价格 3.所有的数据都必须是可靠的,绝对不能丢 ?对于块存储,要求的访问时延是 10ms 级的,因为给虚拟机用的,传统硬盘也是 10ms 级的时延,请求尺寸都很小,但qps(iops)可能会很高,那么在这种情况下: ?异地多中心是不现实的,存储要和主机尽量接近,相应地可靠性必然会有所打折 ?强一致副本不会过多,强一致要求对时延有影响 ?对于对象存储,要求的访问时延是 100ms - 1s 级的,请求一般是中到大尺寸,低 qps 的,在这种情况下 ?可以用更多的分散副本数来换取更高的可靠性,但过多副本增加维持一致性的难度,需要折衷

分布式存储系统的三个问题 ?对于一套分布式存储的方案,怎样评估它是好还是不好? ?如何对分布式存储的不同实现进行分类? ?分布式存储中的“数据可靠性”是如何计算的? 按照存储接口来划分 1.对象存储: 也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展,如七牛、又拍、Swift、S3 2.块存储: 这种接口通常以QEMU Driver或者Kernel Module的方式存在,这种接口 需要实现Linux的Block Device的接口或者QEMU提供的Block Driver接口,如Sheepdog,AWS的EBS,青云的云硬盘和阿里云的盘古系统,还有Ceph的RBD(RBD是Ceph面向块存储的接口) 3.文件存储: 通常意义是支持POSIX接口,它跟传统的文件系统如Ext4是一个类型的,但区别在于分布式存储提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存储的接口),但是有时候又会把GFS,HDFS这种非POSIX接口的类文件存储接口归入此类。

文件系统课程设计报告

操作系统课程设计报告 题目:文件系统 专业:软件工程 院系:信息管理学院 年级:大三软件Q1141 学号: 11150132 姓名:王毅 指导教师:李红艳 职称:副教授 湖北经济学院教务处制

目录 操作系统课程设计报告 一实验内容 (2) 二设计的基本概念和原理 (2) 三总体设计 (2) 2-1 文件的组织结 构............................................................. (2) 2-2 磁盘空间的管 理............................................................. (2) 2-3 目录结 构 (3) 2-4文件操 作 (4) 四详细设计 (4) 4-1 建立文件(create_file)流程 图 (4) 4-2 打开文件(open_file)流程 图 (6) 4-3读文件(read_file)流程 图 (7) 4-4 写文件(write_file)流程

图 (8) 4-5 关闭文件(close_file)流程 图 (9) 4-6 删除文件(delete_file)流程 图 (10) 4-7 显示文件内容(typefile)流程 图 (11) 4-8 建立目录(md)流程 图 (12) 4-9显示目录内容流程 图 (13) 五详细代码 (14) 六运行结果截图 (40) 七总结 (44) 八参考文献 (45) 一、实验内容 要求设计一个简单的文件系统,用文件模拟磁盘,实现以下功能: (1)支持多级目录结构; (2)实现的命令包括建立目录、列目录、删除空目录、建立文件、删除文件、显示文件内容、打开文件、读文件、写文件、关闭文件、改变文件属性。

免费分布式存储系统

基于Hadoop构建对象存储系统 By云深作者:Terry/Alen/Adam/SeymourZ 转载请注明出处前言 ●云计算领域目前有两大代表性系统:Google和Amazon,它们各自的存储系 统为Google GFS和Amazon S3,都提供高可靠性、高性能、高可扩展性的存储能力 ●Hadoop HDFS就是Google GFS存储系统的开源实现,主要应用场景是作为 并行计算环境(MapReduce)的基础组件,同时也是Bigtable(如HBase、HyperTable)的底层分布式文件系统。Hadoop HDFS也有自身的局限性,虽然作为分布式文件系统称谓,但它并不适合所有的应用场合。如:单点 namespace问题,小文件问题等,早有阐述。 https://www.sodocs.net/doc/9814009330.html,/blog/2009/02/ ●Amazon S3作为一个对象存储系统运营,为客户提供1到5G任意大小的对 象(文件)存储,从有限的资料来看,S3没有采用GFS的类似的体系架构,也不对外提供完整的文件系统呈现,更多的是一种对象存储访问的形式。 ●既然Hadoop HDFS适合处理和存储大块的文件,我们是否也可以把HDFS 作为一种容器看待,通过上层抽象,对外提供类似Amazon S3一样的对象存储功能呢?答案我想是肯定的,下面就讨论基于Hadoop开源项目,构建一个高可靠,高性能、高扩展性的对象存储系统,实现类似Amazon S3的用户接口。 系统架构

图-1 系统架构 系统组成: 对象访问接口层(Access Edge) ?提供客户端Lib,供上层应用调用; ?提供REST和SOAP接口,支持web业务的访问。 对象元数据存储层(MetaData Storage) ?实现对象操作业务逻辑,包括: 1.Bucket创建; 2.Bucket删除; 3.Bucket信息查询; 4.对象创建; 5.对象元数据信息查询;

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

昆明理工大学信息工程与自动化学院学生实验报告 (201 —201 学年第二学期) 课程名称:操作系统开课实验室:年月日 一、实验目的 用C或C++语言编写和调试一个简单的文件系统,模拟文件管理的基本功能。从而 对各种文件操作命令的实质内容和执行过程有比较深入的了解。 二、实验原理及基本技术路线图(方框原理图) 用C模拟实现文件系统的管理;要求设计一个多级目录结构的文件系统,能正确描述文件控制块,采用合理的外存分配方式,能实现基本的目录及文件的操作,包括创建、删除、重命名、复制、移动等功能,并对文件有一定的存取权限控制。 功能设计: Help 显示命令帮助 dir 显示当前目录下的文件和文件夹 exit 退出系统 create [文件名] 创建文本文件 cdir [目录名] 创建文件夹 read [文件名] 读取一个文件最多可同时读取五个 close[文件名] 关闭一个文件 edit [文件名] 编辑一个文件 cd [目录名] 进子目录或者上级目录 attr [文件名] 显示该文件的属性 del [文件名] 删除文件 rename [文件名] 重命名

编辑功能流程图

删除文件流程图创建文件流程图 核心算法: bool Format(void); //格式化 bool install(void); //装载虚拟硬盘的数据 void login(void); /用户登陆

void showMenu(void);//显示功能菜单 bool onAction(void);//用户选择功能并执行 void createFile(string str);//创建文件 bool read(string str);//读取文件 void editFile(string str);//编辑文件 void Delete(string str);//删除一个文件 数据结构: /*---------常变量------*/ const unsigned int BLOCK_SIZE=512; //块长 const unsigned int DATA_BLOCK_NUM=512; //数据块数量 const unsigned int DINODE_START=4*BLOCK_SIZE; //inode起始位置 const unsigned int DINODE_SIZE=512; //inode大小 const unsigned int DINODE_NUM=32; //inode数量 const unsigned int DATASTART=(2+DINODE_NUM)*BLOCK_SIZE; //数据区的开始地址 const unsigned int ACCOUNT_NUM=10; //用户数量 /*inode结构体*/ struct inode{ unsigned short di_tag; /*inode标识*/ unsigned short di_number; /*关联文件数,当为0时表示删除文件,如一个目录至少 包含两个文件:"."和".."*/ unsigned short di_mode; /*存取模式:0为目录,1为文件*/ unsigned short di_userID; /*当前inode所属用户0为根目录ID,一次下去是管理员目

操作系统课程设计模拟文件系统

操作系统课程设计模拟文 件系统 Newly compiled on November 23, 2020

目录第1章需求分析 (1) 第2章概要设计 (1) 系统的主要功能 (1) 系统模块功能结构 (1) 运行环境要求 (2) 数据结构设计 (2) 第3章详细设计 (3) 模块设计 (3) 算法流程图 (3) 第4章系统源代码 (4) 第5章系统测试及调试 (4) 运行结果及分析 (4) 系统测试结论 (5) 第6章总结与体会 (6) 第7章参考文献 (6) 附录 (7) 第1章需求分析 通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力;掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,并了解操作系统的发展动向和趋势。

模拟二级文件管理系统的课程设计目的是通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。 第2章概要设计 系统的主要功能 1) 系统运行时根据输入的用户数目创建主目录 2) 能够实现下列命令: Login 用户登录 Create 建立文件 Read 读取文件 Write 写入文件 Delete 删除文件 Mkdir 建立目录 Cd 切换目录 Logout 退出登录 系统模块功能结构 运行环境要求 操作系统windows xp ,开发工具vc++ 数据结构设计 用户结构:账号与密码结构 typedef struct users { char name[8]; char pwd[10]; }users;

计算机操作系统第七章-文件管理资料

第七章文件管理 第一节文件和文件系统 一、文件系统的引入 1、用户在使用计算机的过程中遇到的有关软件资源的两个基本问题: ●产生了新的资源时:怎样长期存放; ●使用系统中现有资源时:怎样检索,如何使用; 解决的方法:把信息以一种单元--文件--的形式存储在磁盘或其他外部存储介质上。文件由操作系统来统一管理,包括:文件的结构,命名,存取,使用,保护,以及实现方法。 2、现代OS中引入文件系统的目的 ●管理系统和用户的软件资源,让用户实现对信息的“按名存取”; ●提供信息的存储、检索、更新、共享和文件保护等一系列文件操作,使用户能方便有效地使用和操作文件; ●文件系统给用户带来的好处是:使用方便、数据安全、接口统一 3、文件系统的功能 ●统一管理文件的存储空间(外存空间),实施存储空间的分配与回收●实现文件的按名存取:名字空间映射存储空间 ●实现文件信息的共享,并提供文件的保护和保密措施 ●向用户提供一个方便使用的接口 ●系统维护及向用户提供有关信息 ●提供与I/O的统一接口 文件系统在操作系统接口中占的比例最大,用户使用操作系统的

感觉在很大程度上取决于对文件系统的使用效果。 二、文件系统中的相关概念 1、数据项:构成文件内容的基本单位 ●基本数据项。这是用于描述一个对象的某种属性的字符集,是数据组织中可以命名的最小逻辑数据单位,即原子数据,又称为数据元素或字段。它的命名往往与其属性一致。 ●组合数据项。它是由若干个基本数据项组成的,简称组项。 2、记录:是一组相关数据项的集合,用于描述一个对象在某方面的一组属性。 3、关键字:是能唯一标识一个记录的数据项。记录的关键字可以不止一个;关键字可以是一个基本数据项,也可以是一个组合数据项。 4、文件:是指由创建者所定义的、具有文件名的一组相关信息的集合,可分为有结构文件和无结构文件两种。 在有结构的文件中,文件由若干个相关记录组成(是记录的序列);而无结构文件则被看成是一个字符(字节)流。 文件是文件系统中一个最大的数据单位,它描述了一个对象集。 图7-1文件、记录和数据项之间的层次关系

分布式存储平台的设计与实现

分布式存储平台的设计与实现 曹挹芬 (湖南大学计算机与通信学院湖南长沙410219)科学论坛 q●I [摘要]在数字信息爆炸的时代,社会对于信息的存储需求量急剧增加,本文针对传统单机存储方式的不足,提出了设计分布式存储平台的思路,以此为高效的存储和获取信息提供又一途径。主要介绍了分布式存储平台的优势与设计原理、平台的整体设计和关键算法及其主要模块交互与关键流程的实现。 [关键词]分布式并行计算存储平台 中图分类号:0246文献标识码:A文章编号:1009—914X(2009)9(b)一0117—02 人类正进入一个数字信息爆炸的时代,信息的存储将成为最基本的手段和目的。首先,计算机技术的进步,尤其是廉价的存储设各的出现,为海量信息存储提供了物理基础:其次,社会信息化进程的加快,政府机关、企业、教育、医疗等机构大量的数据正在或者已经被信息化,这是数字信息量激增的源动力:再次,人类获取有效的信息已成为信息时代的基本要求,而其基础是必须高效存储有效信息。在数字信息量激增、存储价格低廉、网络迅猛发展、获取有效信息需求急剧增加的大背景下,分布式存储平台的设计与实现为高效的存储和获取信息提供了又一种途径。 1分布式存储平台的优势与设计原理 目前流行的数据管理系统如关系数据库、文件系统、搜索引擎等,各有不足,尚不能完全满足数据快速查找需求。关系数据库的查询太过复杂,数据模式约束过于严格,可伸缩性较差:而文件系统只支持浏览功能;搜索引擎则只支持关键词检索,不支持浏览功能。所以,有效的数据管理和查找方法是一个迫切需要解决的研究课题。 分布式计算是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台独立计算机构成的集群。 分布式存储系统(DFS:distributedfilesystem),就是将数据分散存储在多台独立的设备上。对外提供统一的接口:包括文件上传、获取等一系列操作。对于上层用户,数据的分布是透明的,这样傲的目的就是为了存储的可扩展性,以及提高数据存储和获取的速度。 图1分布式文件系统硬件拓扑 图2分布式文件系统架构 并行计算支撑平台底层存储组件一分布式文件系统(DFS)的设计原理是:并行计算框架的所有数据文件,经过等大小切分以后,全部存储在分布式文件系统(DFS)之中。数据文件的上传、命名、存储、获取和删除等一系列操作,皆是采用了DFS提供的接口。 分布式文件系统具有以下特点:一是系统具有优异的性能和吞吐率。系统各部分负载均衡,不存在明显的性能瓶颈。二是系统具有较高的稳定性。尽量减少系统关键点,避免“单点失败”,而且必须具有快速恢复的能力。三是良好的可扩展性。能够方便的进行存储和计算能力的扩容。 2分布式存储平台的奠体设计和关曩算法 2.1整体设计 如下图1,图2所示,存储子系统包括一个全局的元数据服务器(MDS)、多个文件系统接口机(FSI)、多个存储节点(SN)组成。文件接口机(FSI)为应用提供文件访问接口:元数据服务器(MDS)维护文档分配表(DAT)、热点文件列表(HL)等其它元数据,并负责整个系统的负载均衡:存储节点(sN)的功能是存储文件。根据sN的可靠性、存储能力,sN被分成不同存储类型,如可靠的小文件sN类型,不可靠的大文件sN类型等。元数据DAT和HL被复制到所有的FSI上,因此大部分的文件访问操作都由FSI直接和对应的sN来完成,而不需要MDS参与。 2.2关键算法 如图3所示,64位的Docld空间划分成大小相等的216个Bucket,每个Bucket用一个16位的唯一BucketID来标识。每个Bucket都足够大,能够容纳248个文档。Bucket到SN之间的映射关系记录在酴T中,Bucket和sN是多对多的对应关系。如果不存在复制,Bucket的存储类型等于其对应sN的存储类型。 复制:为了提高可用性和读数据效率,系统支持Bucket级别的复制。修改DAT使得~个Bucket被映射到多台sN。读取操作可以在任何一个Bucket副本上进行,更新操作必须使用类分布式事务方法,使得所有副本都保持同步。 热点数据Cache:因为热点数据通常是有数据读取操作引起的,因此系统通过FsI缓存热点文件来解决热点数据造成的访问瓶颈。每台sN定时(如一个小时)统计最近访问次数最多的文档,形成文档访问统计信息。MDS定时汇总sN上的文档访问统计信息,确定系统的热点文件。 3分布式存储平台的主要横块交互与关键漉程实现 3.1主要模块交互 如图4所示,整个分布式存储平台(DFS)的工作流程主要包括存储节点(SN)、客户端模块(FsI)和元数据服务器(MDS)三方之间的交互。 存储节点(SN):分布式文件系统的存储节点主要是负责维护存储的数据,即负责具体执行FSI模块和MDS模块的操作指令,统计当前的操作信息,并定期向MDS模块发送心跳协议消息等,具体流程如下: 当存储节点(SN)与客户端模块(FSI)发生交互,主要包含读入、执行和发出几种操作:读入信息:由FSI发出的文件读、写、更新、删除等操作请 图3文档ID(DoclD)与目录的映射算法 科技博览I 117万方数据

相关主题