嵌入式网络存储系统及其方法

文档序号:7761477阅读:277来源:国知局

专利名称::嵌入式网络存储系统及其方法
技术领域
:本发明涉及的嵌入式网络存储系统包括NFS客户端和NFS服务器端,其中NFS客户端和NFS服务器端相连传输网络报文信息和请求信息。所述的NFS客户端包括NFS模块和RPC客户模块,其中NFS模块与RPC客户模块相连传输用户的读写文件请求信息,RPC客户模块与NFS服务器端相连传输RPC请求报文信息。所述的NFS服务器端包括接收请求模块、处理请求模块、FCB管理模块和RPC服务模块,其中RPC服务模块与NFS客户端相连传输RPC请求报文信息,RPC服务模块与接收请求模块相连传输NFS请求报文信息,接收请求模块与处理请求模块相连传输NFS请求报文信息,处理请求模块与FCB管理模块相连传输文件信息,处理请求模块与RPC服务模块相连传输RPC应答报文信息。本发明涉及的上述嵌入式网络存储系统的存储方法,包括以下步骤第一步,NFS服务器端根据已知的文件名F,为文件F分配N1大小的连续空间,并向文件F写入Nl个空字符"NULL"。第二步,NFS服务器端进入只写不读的应用情景,启动NFS服务,输出共享目录D,此时NFS服务器端的接收请求模块和RPC服务模块处于运行状态,监听NFS客户端的请求。第三步,当NFS客户端向NFS服务器端发送RPC请求,请求挂载NFS服务器端输出的共享目录D至本地文件系统,NFS服务器端的接收请求模块将该请求放入请求队列,而NFS服务器端的处理请求模块从请求队列中取出该请求并进行处理。第四步,NFS客户端挂载共享目录D成功后,再次向NFS服务器端发送RPC请求,请求写该目录中的文件F,NFS服务器端的接收请求模块将该请求放入请求队列,而NFS服务器端的处理请求模块从请求队列中取出该请求,从而完成NFS服务器端处理写文件的请求,NFS客户端收到NFS服务器端的写文件的应答报文。所述的NFS服务器端处理写文件的请求,具体步骤为1)处理请求模块调用FCB管理模块根据文件句柄查找FCB数组,当找到FCB结构后,执行3);否则执行2);2)处理请求模块将文件句柄转换为文件名,并调用FCB管理模块创建一个该文件的FCB结构,放入FCB数组中;3)处理请求模块调用FCB管理模块打开FCB,若文件未打开过,进行本地系统调用open()打开文件,并将文件描述符存放到FCB中,若文件已打开,直接获取其文件描述符;4)处理请求模块根据文件描述符对该文件进行写操作,若写入文件大小超过第一步中预分配的文件范围,使用文件系统自动为其分配的空间,写完后不关闭文件,调用RPC服务模块将结果封装成RPC应答报文返回给NFS客户端。第五步,NFS服务器端进入只读不写的应用情景,用户在NFS服务器端获取文件真实大小后,进行本地系统调用执行ftruncate操作对文件重新设置大小。所述的获取文件真实大小,具体步骤为1)设定置信长度N2,并设定一个低端L和高端H用于限定查找范围,L的初始值为文件头,即第1个字节,H的初始值为文件尾,即第Nl个字节;2)判断Nl与置信长度N2的大小,当Nl小于N2时,从文件末尾起向前扫描文件直到第一个非"NULL"字符作为文件真实大小的末端;当N1大于N2时,找到(L,H)的中间字符,即第(Nl+1)/2个字节或第Nl/2个字符;3)判断该字符是否是"NULL";4)当该字符为非"NULL",则将L置为该字符之后的一个字节,找到(L,H)的中间字符,返回3);当字符为"NULL",则从该字符起向前扫描,统计前面的连续"NULL"字符的数量N3,若N3达到置信长度N2,停止统计;5)判断N3与置信长度N2的大小,当N3等于置信长度N2,则将H置为该字符之前的一个字节,找到(L,H)的中间字符,返回3);当N3小于置信长度N2,则从该字符起向后扫描,统计后面的连续"NULL"字符的数量N4,若N3+N4达到置信长度N2,停止统计;6)判断N3+N4与置信长度N2的大小,当N3+N4小于置信长度N2,则将L置为该字符之后的一个字节,找到(L,H)的中间字符,返回3);当N3+N4等于置信长度N2,则从该字符起向前扫描文件直到第一个非"NULL"字符作为文件真实大小的末端。第六步,NFS客户端向NFS服务器端发送RPC请求,请求读目录D中的文件F,NFS服务器端的接收请求模块将该请求放入请求队列,NFS服务器端的处理请求模块从请求队列中取出该请求并进行处理,从而完成NFS服务器端处理读文件的请求,NFS客户端收到NFS服务器端的读文件的应答报文。所述的NFS服务器端处理读文件的请求,具体步骤为1)处理请求模块调用FCB管理模块根据文件句柄查找FCB数组,当找到FCB结构时,执行3);当没有找到FCB结构时,执行2);2)处理请求模块将文件句柄转换为文件名,并调用FCB管理模块创建一个该文件的FCB结构,放入FCB数组中;3)处理请求模块调用FCB管理模块打开FCB,若该文件未打开过,进行本地系统调用open()打开文件,并将文件描述符存放到FCB中;若文件已打开,直接获取其文件描述符;4)处理请求模块根据文件描述符对该文件进行读操作,读完后不关闭文件,调用RPC服务模块将结果封装成RPC应答报文返回给NFS客户端。与现有技术相比,本发明的有益效果是NFS服务器端在处理读写文件请求时减少了打开和关闭文件的次数,同时有效减少了磁盘寻道时间和旋转等待时间,降低了嵌入式网络存储系统的CPU开销,提高了NFS系统的吞吐量。图1为本发明的系统组成示意图。具体实施例方式以下结合附图对本发明的方法进一步描述本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。实施例如图1所示,本实施例涉及的嵌入式网络存储系统包括NFS客户端和NFS服务器端,其中NFS客户端和NFS服务器端相连传输网络报文信息和请求信息。所述的NFS客户端包括NFS模块和RPC客户模块,其中NFS模块与RPC客户模块相连传输用户的读写文件请求信息,RPC客户模块与NFS服务器端相连传输RPC请求报文信息。所述的NFS服务器端包括接收请求模块、处理请求模块、FCB管理模块和RPC服务模块,其中RPC服务模块与RPC客户模块相连传输RPC请求报文信息,RPC服务模块与接收请求模块相连传输NFS请求报文信息,接收请求模块与处理请求模块相连传输NFS请求报文信息,处理请求模块与FCB管理模块相连传输文件信息,处理请求模块与RPC服务模块相连传输RPC应答报文信息。本实施例涉及的上述嵌入式网络存储系统的存储方法,包括以下步骤第一步,NFS服务器端根据已知的文件名foo,为文件foo分配20480字节大小的连续空间,并向文件foo写入20480个空字符"NULL"。第二步,NFS服务器端进入只写不读的应用情景,启动NFS服务,输出共享目录bar,此时NFS服务器端的接收请求模块和RPC服务模块处于运行状态,监听NFS客户端的请求。第三步,当NFS客户端向NFS服务器端发送RPC请求,请求挂载NFS服务器端输出的共享目录bar至本地文件系统,NFS服务器端的接收请求模块将该请求放入请求队列,而NFS服务器端的处理请求模块从请求队列中取出该请求并进行处理。第四步,NFS客户端挂载共享目录bar成功后,再次向NFS服务器端发送RPC请求,请求向该目录中的文件foo的开头写入10240个字节,NFS服务器端的接收请求模块将该请求放入请求队列,而NFS服务器端的处理请求模块从请求队列中取出该请求,从而完成NFS服务器端处理写文件的请求,NFS客户端收到NFS服务器端的写文件的应答报文。所述的NFS服务器端处理写文件的请求,具体步骤为1)由于这是一个写文件请求,处理请求模块调用FCB管理模块根据文件句柄查找FCB数组,由于这是第一个写文件请求,FCB数组目前为空,找不到对应的FCB结构;2)处理请求模块将文件句柄转换为文件名,并调用FCB管理模块创建一个文件foo的FCB结构,放入FCB数组中;3)处理请求模块调用FCB管理模块打开FCB,文件foo未打开过,进行本地系统调用open()打开文件,并将文件描述符存放到FCB中;4)处理请求模块根据文件foo的文件描述符对该文件进行写操作,向该文件写入10240字节大小的数据,写完后不关闭文件,调用RPC服务模块将结果封装成RPC应答报文返回给NFS客户端。第五步,NFS服务器端进入只读不写的应用情景,用户在NFS服务器端获取文件foo真实大小后,进行本地系统调用执行ftruncate操作对文件重新设置大小。所述的获取文件foo真实大小,具体步骤为1)设定置信长度4096字节大小,并设定一个低端L和高端H用于限定查找范围,L的初始值为文件头,即第1个字节,H的初始值为文件尾,即第20480个字节;2)判断foo文件大小20480字节与置信长度4096字节的大小,foo文件大于置信长度,找到(1,20480)的中间字符,即第10240个字节;3)判断该字符是否是"NULL";4)该字符为非"NULL",则将L置为画l,找到(10241,20480)的中间字符,即第15360个字符,该字符为"NULL",则从该字符起向前扫描,统计前面的连续"NULL"字符的数量,一共是2560个;5)由于2560小于4096,从该字符起向后扫描,统计后面的连续"NULL"字符,统计到1536个为止,这样前后一共统计了4096个"NULL"字符;6)由于4096等于置信长度,则从该字符起向前扫描文件直到第一个非"NULL"字符,即第10240个字节,作为文件有效范围的末端,文件的真实大小就是10240字节,获取文件真实大小之后,进行本地系统调用执行ftruncate操作对文件重新设置大小为10240字节。第六步,NFS客户端向NFS服务器端发送RPC请求,请求读目录bar中的文件foo开头起2560个字节,NFS服务器端的接收请求模块将该请求放入请求队列,NFS服务器端的处理请求模块从请求队列中取出该请求并进行处理,从而完成NFS服务器端的读文件请求,NFS客户端收到NFS服务器端的读文件的应答报文。所述的NFS服务器端处理读文件的请求,具体步骤为1)由于这是一个读文件请求,处理请求模块调用FCB管理模块根据文件句柄查找FCB数组,找到FCB结构;2)处理请求模块调用FCB管理模块打开FCB,由于foo文件已打开,直接获取其文件描述符;3)处理请求模块根据文件foo的文件描述符对该文件进行读操作,读完后不关闭文件,调用RPC服务模块将结果封装成RPC应答报文返回给NFS客户端,NFS客户端收到NFS服务器端的应答报文。采用本实施例方法和现有技术从NFS客户端向NFS服务器端拷贝一个大小为120MB的文件,所花时间以及写文件速度的对比数值如表1所示,从表1中可以发现,本实施例方法大大提高了NFS服务器端读写文件的性能。表18<table>tableseeoriginaldocumentpage9</column></row><table>权利要求一种嵌入式网络存储系统,其特征在于,包括NFS客户端和NFS服务器端,其中NFS客户端和NFS服务器端相连传输网络报文信息和请求信息;所述的NFS客户端包括NFS模块和RPC客户模块,其中NFS模块与RPC客户模块相连传输用户的读写文件请求信息,RPC客户模块与NFS服务器端相连传输RPC请求报文信息;所述的NFS服务器端包括接收请求模块、处理请求模块、FCB管理模块和RPC服务模块,其中RPC服务模块与NFS客户端相连传输RPC请求报文信息,RPC服务模块与接收请求模块相连传输NFS请求报文信息,接收请求模块与处理请求模块相连传输NFS请求报文信息,处理请求模块与FCB管理模块相连传输文件信息,处理请求模块与RPC服务模块相连传输RPC应答报文信息。2.—种根据权利要求1所述的嵌入式网络存储系统的存储方法,其特征在于,包括以下步骤第一步,NFS服务器端根据已知的文件名F,为文件F分配N1大小的连续空间,并向文件F写入Nl个空字符"NULL";第二步,NFS服务器端进入只写不读的应用情景,启动NFS服务,输出共享目录D,此时NFS服务器端的接收请求模块和RPC服务模块处于运行状态,监听NFS客户端的请求;第三步,当NFS客户端向NFS服务器端发送RPC请求,请求挂载NFS服务器端输出的共享目录D至本地文件系统,NFS服务器端的接收请求模块将该请求放入请求队列,而NFS服务器端的处理请求模块从请求队列中取出该请求并进行处理;第四步,NFS客户端挂载共享目录D成功后,再次向NFS服务器端发送RPC请求,请求写该目录中的文件F,NFS服务器端的接收请求模块将该请求放入请求队列,而NFS服务器端的处理请求模块从请求队列中取出该请求,从而完成NFS服务器端处理写文件的请求,NFS客户端收到NFS服务器端的写文件的应答报文;第五步,NFS服务器端进入只读不写的应用情景,用户在NFS服务器端获取文件真实大小后,进行本地系统调用执行ftruncate操作对文件重新设置大小;第六步,NFS客户端向NFS服务器端发送RPC请求,请求读目录D中的文件F,NFS服务器端的接收请求模块将该请求放入请求队列,NFS服务器端的处理请求模块从请求队列中取出该请求并进行处理,从而完成NFS服务器端处理读文件的请求,NFS客户端收到NFS服务器端的读文件的应答报文。3.根据权利要求2所述的嵌入式网络存储方法,其特征是,所述的NFS服务器端处理写文件的请求,具体步骤为1)处理请求模块调用FCB管理模块根据文件句柄查找FCB数组,当找到FCB结构后,执行3);否则执行2);2)处理请求模块将文件句柄转换为文件名,并调用FCB管理模块创建一个该文件的FCB结构,放入FCB数组中;3)处理请求模块调用FCB管理模块打开FCB,若文件未打开过,进行本地系统调用open()打开文件,并将文件描述符存放到FCB中,若文件已打开,直接获取其文件描述符;4)处理请求模块根据文件描述符对该文件进行写操作,若写入文件大小超过第一步中预分配的文件范围,使用文件系统自动为其分配的空间,写完后不关闭文件,调用RPC服务模块将结果封装成RPC应答报文返回给NFS客户端。4.根据权利要求2所述的嵌入式网络存储方法,其特征是,所述的获取文件真实大小,具体步骤为1)设定置信长度N2,并设定一个低端L和高端H用于限定查找范围,L的初始值为文件头,即第1个字节,H的初始值为文件尾,即第Nl个字节;2)判断N1与置信长度N2的大小,当N1小于N2时,从文件末尾起向前扫描文件直到第一个非"NULL"字符作为文件真实大小的末端;当N1大于N2时,找到(L,H)的中间字符,即第(Nl+1)/2个字节或第N1/2个字符;3)判断该字符是否是"NULL";4)当该字符为非"NULL",则将L置为该字符之后的一个字节,找到(L,H)的中间字符,返回3);当字符为"NULL",则从该字符起向前扫描,统计前面的连续"NULL"字符的数量N3,若N3达到置信长度N2,停止统计;5)判断N3与置信长度N2的大小,当N3等于置信长度N2,则将H置为该字符之前的一个字节,找到(L,H)的中间字符,返回3);当N3小于置信长度N2,则从该字符起向后扫描,统计后面的连续"NULL"字符的数量N4,若N3+N4达到置信长度N2,停止统计;6)判断N3+N4与置信长度N2的大小,当N3+N4小于置信长度N2,则将L置为该字符之后的一个字节,找到(L,H)的中间字符,返回3);当N3+N4等于置信长度N2,则从该字符起向前扫描文件直到第一个非"NULL"字符作为文件真实大小的末端。5.根据权利要求2所述的嵌入式网络存储方法,其特征是,所述的NFS服务器端处理读文件的请求,具体步骤为1)处理请求模块调用FCB管理模块根据文件句柄查找FCB数组,当找到FCB结构时,执行3);当没有找到FCB结构时,执行2);2)处理请求模块将文件句柄转换为文件名,并调用FCB管理模块创建一个该文件的FCB结构,放入FCB数组中;3)处理请求模块调用FCB管理模块打开FCB,若该文件未打开过,进行本地系统调用open()打开文件,并将文件描述符存放到FCB中;若文件已打开,直接获取其文件描述符;4)处理请求模块根据文件描述符对该文件进行读操作,读完后不关闭文件,调用RPC服务模块将结果封装成RPC应答报文返回给NFS客户端。全文摘要一种网络应用
技术领域
的嵌入式网络存储系统及其方法,系统包括NFS客户端和NFS服务器端,其中NFS服务器端包括接收请求模块、处理请求模块、FCB管理模块和RPC服务模块;方法包括NFS服务器端在处理读写请求时,使用FCB管理模块来缓存已打开文件的状态信息,包括文件描述符等,有效减少了服务器本地文件系统打开和关闭文件的次数,并通过预分配文件空间的方法来为文件获取连续的磁盘空间,消除了数据读写过程中的额外的磁头移动,从而减少了NFS服务器端的CPU开销,提高了读写性能。文档编号H04L29/08GK101789976SQ20101030079公开日2010年7月28日申请日期2010年1月27日优先权日2010年1月27日发明者战科宇,李小勇,郑涔申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1