查看完整版本: 基于SOA架构的网络硬盘控制器的设计

admin 发表于 2015-4-27 23:50:35

基于SOA架构的网络硬盘控制器的设计

摘要:
        项目设计一种采用“流程+引擎+构件”的SOA三层架构的网络硬盘控制器。系统采用FPGA作为系统控制器,在FPGA内部MicroBlaze软核处理器上移植PetaLinux操作系统,加载NFS网络文件系统,将扩展Int 13H规范中定义的基本硬盘操作指令封装成原子构件,并采用VHDL硬件描述语言实现各原子构件,实现对硬盘的基本操作。设计引擎模块,根据NFS文件系统操作指令,调用相关原子操作,实现硬盘存储空间管理、文件存储操作、用户管理等功能。本文设计网络硬盘控制器可作为个人存储服务器连接到以太网,用户可通过连接网络的任意主机实现对服务器硬盘的访问管理。
       
        1 引言
        随着电子邮箱及网络硬盘的普及,用户可不用携带存储设备,而直接通过网络进行数据的上传和下载,实现个人数据的管理。然而,使用网络运营商提供的网络硬盘可用空间有限,且数据保密性不强。本项目旨在研究一种适合于个人应用的网络硬盘存储装置,该网络硬盘使用RJ45接口连接到以太网,通过以太网以TCP/IP协议,用户可用以太网上任意主机实现对网络硬盘的管理操作,与电子邮箱及网络运营商提供的网络硬盘相比,此项目设计的个人网络存储硬盘有着存储空间容量大、使用安全、可靠性较高等优点。
       
        2 系统原理与特点
        系统结构如图2-1所示。
       
       
        图2-1 系统结构
       
        用户通过连接网络的客户端PC机采用TCP/IP协议实现文件的上传和下载,上传文件时,用户通过客户端PC机向网络硬盘控制器发送上传文件指令,并发送文件数据,FPGA内以太网控制器模块接收数据并由DDR2控制器模块写入到DDR2中缓存,然后根据NFS协议将数据从DDR2中读出经硬盘控制器模块写入到硬盘中保存;客户端下载文件时,用户通过客户端PC机向硬盘控制器发送下载文件指令,FPGA内以太网控制器模块接收指令后,根据NFS协议将文件数据通过硬盘控制器模块读出并写入到DDR2缓存中,然后将数据由DDR2中读出并由以太网控制器模块,加载网络协议栈,将数据由网络发送到客户端PC。
       
        FPGA内部调用MicroBlaze处理器,移植PetaLinux操作系统,配置TCP/IP协议栈,加载NFS网络文件系统,利用VHDL语言设计Int13H规范中定义的对硬盘操作的原子构件,并设计对原子构件调用的引擎管理模块,将原子构件与引擎管理模块以用户IP核形式添加到与MicroBlaze处理器互联的PLB片内总线,FPGA内部系统模块框图如图2-2所示。
       
       
        图2-2 FPGA内功能模块
       
        3 硬盘引擎管理模块设计
        借鉴互联网分布式计算领域中网格计算、云计算技术广泛采用的SOA架构为核心设计思想,首先进行业务需求分析、根据业务用例、用例场景、业务步骤的分析过程找出对应的原子业务。根据业务原子业务映射到相应的系统需求进行系统建模,通过形式语义将场景步骤序列描述为由一系列原子构件的组合。完成“流程+引擎+构件”的三层SOA结构的文件系统设计。
       
        3.1 文件系统业务单元
        文件系统是操作系统中负责管理和存储文件信息的软件系统。主要负责对文件存储器空间进行组织和分配,文件的存储以及对存入的文件进行保护和检索。文件系统主要包括存储空间管理、文件存储操作、用户管理这三个业务单元。
       
        存储实间管理主要包括对存储空间的组织、分配和回收。文件存储操作主要包括用户对存储空间文件的基本操作,包含文件的生成、删除、打开、关闭、文件读、文件写等。用户管理主要包括用户的注册、登录以及用户权限管理等。
       
        3.2 提取业务用例
        在提取文件系统的业务用例时,主要是从业务主角——用户的角度出发,对文件系统的每一个业务单元进行分析提取业务用例。
       
        3.2.1 存储空间管理
        存储空间管理业务单元的用例视图如图3-1所示。
       
        图3-1 存储空间管理用例视图
       
        存储空间管理该业务单元主要包括如下业务用例:初始化存储空间、分配存储空间、追加存储空间、回收存储空间、查询剩余存储空间。
       
        3.2.2 文件存取操作
        文件存取操作业务单元的业务用例视图如图3-2所示。
       
        图3-2 文件存取操作用例视图
       
        文件存取操作业务单元包括如下业务用例:建立文件、打开文件、读文件、写文件、关闭文件、保存文件、删除文件、保存文件、列举文件、检索文件、复制文件等。
       
        3.2.3 用户管理
       
        用户管理用例视图如图3-3所示。
       
        图3-3 用户管理用例视图
       
        用户管理该业务单元包括的业务用例主要有填加用户、删除用户、用户登录、用户退出、设置用户权限、修改用户权限等。
       
        3.3业务用例场景
        3.3.1 划分业务用例场景
        业务用例在实际执行的进程中可能会有多种不同的情况发生,每一种情况都称为该业务用例的一个业务用例场景,也可以说业务用例场景是指实例化的用例。通过对文件系统的业务用例进行分析,划分出文件系统的业务用例场景如表1所示。
       
        表3-1 文件系统业务用例场景
                                                                                                                       业务用例
                                                                                                                        业务用例场景
                                                                                                                        说明
                                                                                                                                                        初始化存储空间
                                                                                                                        初始化存储空间
                                                                                                                        对未进行初始化设置的空间进行初始化。
                                                                                                                                                        分配存储空间
                                                                                                                        分配存储空间
                                                                                                                        为新创建的文件分配存储空间。
                                                                                                                                                        追加存储空间
                                                                                                                        追加存储空间
                                                                                                                        对现有存储空间已满的文件追加新的存储空间
                                                <div style="clear:both;">                  
        3.4.1 存储空间管理原子业务分析
        以追加存储空间为例分析业务流程。
        前置条件:文件当前存储空间不足,文件剩余存储空间中有足够的空闲空间。
        后置条件:成功为文件追加空闲存储空间。
        该业务流程由如下业务步骤组成:
        <1>.文件存储空间不足,申请新的存储空间;
        <2>.文件定位;
        <3>.追加新的存储空间。
        分析上述业务步骤,画出追加存储空间业务用例场景的业务流程图如图3-4所示。
       
        图3-4 追加存储空间活动图
       
        经分析追加存储空间该业务用例中可提取出两个原子业务:文件定位、追加存储空间。分析存储空间管理业务单元其它业务用例场景的业务流程后,得出该业务单元原子业务树状结构图如图3-5所示。
       
        图3-5 存储空间管理原子业务模型结构图
       
        3.4.2 文件存取操作原子业务分析
        以顺序读文件为例分析业务流程。
        前置条件:文件存在并且可读。
        后置条件:从文件指定位置处顺序读取指定长度内容。
        该业务流程由如下业务步骤组成:
        <1>.确定文件所在存储空间;
        <2>.打开目标文件;
        <3>.读取指定长度的文件内容;
        <4>.关闭文件。
       
        分析上述业务步骤,画出顺序读文件业务用例场景的业务流程图如图3-6所示。
       
        经分析顺序读取文件该业务用例中可提取出四个原子业务:文件定位、打开文件、顺序读文件、关闭文件。
       
        分析文件存取操作业务单元其它业务用例场景的业务流程后,提取出该业务单元原子业务树状结构图如图3-7所示。
       
       
        图3-6 顺序读取文件业务活动图
       
       
       
       
        3.4.3 用户管理原子业务分析
        以注册用户为例分析业务流程。
        前置条件:有权限成为文件系统用户。
        后置条件:注册成功,分配用户名。
        该业务流程由如下业务步骤组成:
        <1>.管理员进入存储空间;
        <2>.登记用户信息。
        分析上述业务步骤,画出注册用户业务用例场景的业务流程图如图3-8所示。经分析注册用户该业务用例中可提取出两个原子业务:用户登录、登记用户信息。
       
       
       
       
        分析用户管理业务单元其它业务用例场景的业务流程后,得出该业务单元原子业务部分树状结构图如图3-9所示。
       
        图3-9 用户管理原子业务模型结构图
       
        通过以上对文件系统各业务单元的分析,提取文件系统完整的原子业务及其描述如表3-2所示。
       
        表3-2 文件系统原子业务及其描述
                                                                                                                       序号
                                                                                                                        原子业务
                                                                                                                        描述
                                                                                                                                                        1
                                                                                                                        初始化空间(Initialize_Space)
                                                                                                                       对文件系统的存储空间容量大小和分区容量进行初始化设置。
                                                                                                                                                        2
                                                                                                                        分配空间(Allocate_Space)
                                                                                                                       为新建文件或文件夹分配存储空间
                                                                                                                                                        3
                                                                                                                        文件定位(Locate_File)
                                                                                                                       确定文件所在存储空间地址。
                                                                                                                                                        4
                                                                                                                        追加空间(Supplement_Space)
                                                                                                                       文件存储空间不足绐文件追加新的存储空间。
                                                                                                                                                        5
                                                                                                                        释放空间(Free_Space)
                                                                                                                       将存储空间改为未用。
                                                                                                                                                        6
                                                                                                                        查询分区容量(Inquiry_Space)
                                                                                                                       查询分区空闲存储空间大小。
                                                                                                                                                        7
                                                                                                                        设置文件为打开状态(Set_File_Open)
                                                                                                                       更改文件为“打开”状态
                                                                                                                                                        8
                                                                                                                        设置文件夹为打状态(Set_Folder_Open)
                                                                                                                       更改文件夹为“打开”状态
                                                                                                                                                        9
                                                                                                                        设置文件为关闭状态(Set_File_Open)
                                                                                                                       更改文件为“关闭”状态
                                                                                                                                                        10
                                                                                                                        设置文件夹为关闭状态(Set_Folder_Open)
                                                                                                                       更改文件夹为“关闭”状态
                                                                                                                                                        11
                                                                                                                        顺序读文件(Sequence_Read_File)
                                                                                                                       按顺序读取指定长度的文件内容
                                                                                                                                                        12
                                                                                                                        随机读文件(Random_Read_File)
                                                                                                                       随机读取指定长度的文件内容
                                                                                                                                                        13
                                                                                                                        写文件(Write_File)
                                                                                                                       向文件内写入指定长度文件内容
                                                                                                                                                        14
                                                                                                                        更新文件(Update_File)
                                                                                                                       文件进行读写后更改文年属性和内容
                                                                                                                                                        15
                                                                                                                        查找文件(Find_File)
                                                                                                                       在指定空间查找指定文件名的文件
                                                                                                                                                        16
                                                                                                                        列举文件(File_Enumeration)
                                                                                                                       列举指定空间的所有文件
                                                                                                                                                        17
                                                                                                                        登记用户信息(Rsgister_User_Information)
                                                                                                                       登记文件系统用户信息。
                                                                                                                                                        18
                                                                                                                        修改用户信息(Modify_User_Information)
                                                                                                                       修改已登记的用户信息
                                                                                                                                                        19
                                                                                                                        删除用户信息
                                                                        (Delete_User_Information)
                                                                                                                       删除已登记的文件系统用户信息
                                                                                                                                                        20
                                                                                                                        用户进入
                                                                        (User_Enter)
                                                                                                                       用户进入文件存储空间,查看空间内文件
                                                                                                                                                        21
                                                                                                                        用户退出
                                                                        (User_Exit)
                                                                                                                       用户退出存储空间
                                                                                                                                                        22
                                                                                                                        设置用户权限(Set_Premissions)
                                                                                                                       设置用户访问文件的权限。
                                                <div style="clear:both;">                
       
        5 IDE硬盘控制器的设计
        IDE(Integrated Drive Electronics,集成驱动电子设备)是由Compaq开发并由Western Digital公司生产的硬盘驱动器。IDE是在早期的ST506硬盘基础上改进而成的,采用40线的单组电缆进行连接,数据传输的可靠性得到了增强,硬盘制造起来变得容易,因为厂商不需要再担心自己的硬盘是否与其他厂商生产的控制器兼容,对用户而言,硬盘安装起来也更为方便。因此IDE接口实际上是系统级接口,故也称为ATA(Advanced Technology Attachment)接口,(ATA更接近于接口的协议层标准,而IDE多用于描述接口的物理结构)。其传输方式主要有PIO和DMA两种。ATA接口规范从最初的ATA-1版本已发展到ATA-7版本。
       
        5.1 硬盘接口信号
        ATA/ATAPI-6标准中定义的主机和设备端之间的通信连接信号如表5-1所示。其中,左边是对信号的描述,中间表示信号的传输方向(由主机到设备还是由设备到主机),右边表示信号的名称。
       
[*]                 CS(1:0)-:主机发送给硬盘的片选信号,实现对寄存器的选择;        
[*]                 DA(2:0):主机发送给硬盘的地址信号,用来实现对硬盘寄存器的寻址;        
[*]                 DD(15:0):主机与硬盘之间的数据连接线,当主机对硬盘寄存器进行读写时,使用该数据总线的低八位进行数据传输,当对数据寄存器进行读写时,用该总线的16位进行数据传输;        
[*]                 DIOR-:HDMARDY-:HSTROBE:复用信号,表示对寄存器读信号/Ultra DMA就绪/Ultra DMA数据输出同步信号,DIOR-表示主机对硬盘寄存器的读信号,HDMARDY-表示Ultra DMA数据输入时,主机发出的就绪信号,HSTROBE表示Ultra DMA数据输出时主机发出的时钟同步信号,双沿有效,即在该信号的上升沿和下降沿,主机将数据输出;        
[*]                 DIOW-:STOP:复用信号,表示主机写寄存器命令/主机终止Ultra DMA突发传输信号,DIOW-表示主机发出的对硬盘寄存器的写命令信号。在Ultra DMA突发传输时,主机可通过使能STOP信号来终止Ultra DMA突发传输。        
[*]                 DMACK-:在DMA开始传输时,主机对硬盘发出的DMA传输请求的应答信号;        
[*]                 DMARQ:当硬盘准备好数据收发时,给主机发出的DMA传输请求信号;        
[*]                 INTRQ:硬盘发出的中断请求信号;        
[*]                 IORDY:DDMARDY-:DSTROBE:硬盘发出的I/O通道就绪/Ultra DMA硬盘就绪/Ultra DMA数据输入同步信号。IORDY表示在PIO数据传输中,当硬盘没有准备好数据传输时,使能该信号无效以延长主机对硬盘的访问时间。DDMARDY-表示在Ultra DMA数据传输中硬盘发出的流量控制信号,该数据有效时,表示硬盘已准备好接收Ultra DMA传输数据,硬盘使能该信号无效可暂停Ultra DMA数据传输。DSTROBE表示在Ultra DMA数据传输时,硬盘发出的数据锁存信号,主机可在该信号的上升沿和下降沿接收数据;        
[*]                 RESET-:主机发出的硬盘复位信号,低电平有效。
       
        表5-1 硬盘接口信号
       
       
        5.2 硬盘接口寄存器
        主机对硬盘的访问是通过对接口寄存器的访问来实现的。ATA-6标准规定的硬盘接口寄存器如表5-2所示。这些寄存器按照功能划分为命令寄存器(Command block registers)和控制寄存器(Control block registers)。命令寄存器用来接收主机发出的各种命令和传送数据,包括数据寄存器、扇区计数寄存器等。控制寄存器用作控制硬盘操作,如使能硬盘中断、选择硬盘等。
       
        表5-2 硬盘端接口寄存器
       
       
        5.3 硬盘控制器模块设计
        硬盘控制器模块内部结构如图5-1所示。
        图5-1 硬盘控制器模块内部结构
       
        5.3.1 总线接口模块
        总线接口模块是硬盘控制器与PLB总线的连接模块,接收处理器通过PLB总线发来的操作命令及读写数据。
       
        5.3.2 硬盘复位模块
        硬盘上电后需要完成一个复位过程,即ATA/ATAPI-6标准中描述的上电及硬件复位协议。复位过程既可以通过软件编程实现也可以通过在硬盘控制器内部设计专用的逻辑来实现。系统上电后,硬盘控制器通过硬盘复位模块生成一个宽带大于25us的低电平复位信号,复位信号回到高电平2ms后,即复位操作完成。复位信号波形如图5-2所示。
       
        图5-2 复位信号波形
       
        5.3.3 PIO模块
        该模块的功能是产生读写硬盘内部寄存器的时序,该模块产生待访问的硬盘寄存器的地址线,并输出读写信号,根据数据传输方向,发送数据到数据线或从数据线上读取数据,操作完成后,释放地址、数据线。
       
        根据PIO读写时序,该模块应实现以下功能:
       
[*]                 产生访问硬盘寄存器的地址信号,并具有一定有效宽带。        
[*]                 产生相应的读写信号DIOR-/DIOW-,当为写操作时,使数据具有规定的建立和保持时间;当为读操作时,给出读数据的时机。        
[*]                 处理硬盘输入的IORDY信号,当IORDY无效时,应延长对硬盘的读写周期。
       
        5.3.4 Ultra DMA模块
        Ultra DMA模块是硬盘控制器的关键模块,其主要功能是实现Ultra DMA突发数据输出时序的控制。Ultra DMA操作可分为三个阶段,分别是初始阶段、数据传输阶段、传输中止阶段。
       
        初始阶段的时序描述为:当硬盘发出DMA请求信号DMARQ,控制器通过DMACK-进行应答,等到硬盘发出的DDMARDY-信号有效后,控制器开始输出HSTROBE信号。
       
        数据传输阶段的时序描述为:HSTROBE时钟的上升沿和下降沿都触发数据输出,在数据传输过程中,控制器可通过停止产生HSTROBE信号来暂停数据的输出,硬盘可以通过使DDMARDY-信号无效来暂停数据的接收。
       
        传输终止阶段,控制器和硬盘都可终止数据传输,终止数据传输可分为四个过程:停止请求、停止检查、HSTROBE返回高电平、发送CRC校验值。对于控制器停止数据传输,首先停止产生HSTROBE时钟信号,发出STOP命令信号,控制器检查硬盘的DDMARDY和DMARQ均无效后,使HSTROBE返回高电平,使DMACK-无效,并在DMACK-信号跳变沿处输出CRC校验值到数据线DD(15:0),如图5-3所示。对于硬盘停止数据传输,通过使DDMARDY和DMARQ均无效来停止数据传输,控制器需要在tL1时间内发出STOP信号,使HSTROBE返回高电平,使DMACK-无效,并输出CRC校验值至DD(15:0),如图5-4所示。
       
       
        图5-3 控制器终止Ultra DMA数据传输时序
       
       
        图5-4 硬盘终止Ultra DMA数据传输时序
       
        5.3.5 控制器模块
        控制模块是硬盘控制器的核心,该模块的主要功能是实现CPU对硬盘控制器中寄存器的配置,并根据相关寄存器的写入信息实现对应的控制操作。
       
        6 总结
        项目设计一种基于“流程+引擎+构件”SOA三层架构的网络硬盘控制器。采用FPGA作为系统控制器,在MicroBlaze软核处理器上移植PetaLinux操作系统,加载NFS网络文件系统,将扩展Int 13H规范中定义的基本硬盘操作指令封装成原子构件,采用VHDL硬件描述语言实现各原子构件操作。设计引擎管理模块,根据NFS文件系统操作指令,调用相关原子操作,实现硬盘存储空间管理、文件存储操作、用户管理等功能。
页: [1]
查看完整版本: 基于SOA架构的网络硬盘控制器的设计