欢迎来到个人简历网!永久域名:gerenjianli.cn (个人简历全拼+cn)
当前位置:首页 > 范文大全 > 实用文>基于虚拟扇区的Flash存储管理技术

基于虚拟扇区的Flash存储管理技术

2023-05-21 08:55:01 收藏本文 下载本文

“beijingof365”通过精心收集,向本站投稿了9篇基于虚拟扇区的Flash存储管理技术,以下是小编整理后的基于虚拟扇区的Flash存储管理技术,欢迎阅读分享,希望对您有所帮助。

基于虚拟扇区的Flash存储管理技术

篇1:基于虚拟扇区的Flash存储管理技术

基于虚拟扇区的Flash存储管理技术

摘要:首先,针对闪存Flash的存储编程特点,提出一种基于虚拟扇区的闪存管理技术,使系统对Flash的擦写次数大大降低,从而提高Flash的使用寿命和整个系统的性能。然后,通过嵌入式系统电子名片管理器,介绍这一技术的使用。随着闪存的广泛应用,对Flash的有效存储管理将有很大的实用意义和社会效益。

关键词:闪存Flash 虚拟扇区VSS 存储管理 扇区分配表SAT

引言

随着嵌入式系统的迅速发展和广泛应用,大量需要一种能多次编程,容量大,读写、擦除快捷、方便、简单,外围器件少,价格低廉的非易挥发存储器件。闪存Flash存储介质就是在这种背景需求下应运而生的。它是一种基于半导体的存储器,具有系统掉电后仍可保留内部信息,及在线擦写等功能特点,是一种替代EEPROM存储介质的新型存储器。因为它的读写速度比EEPROM更快,在相同容量的情况下成本更低,因此闪存Flash将是嵌入式系统中的一个重要组成单元。

然而,由于Flash读写存储的编程特点,有必要对其进行存储过程管理,以使整个系统性能得以改善。

1 闪存Flash的存储编程特点

Flash写:由1变为0,变为0后,不能通过写再变为1。

Flash擦除:由0变为1,不能只某位单元进行擦除。

Flash的擦除包括块擦除和芯片擦除。块擦除是把某一擦除块的内容都变为1,芯片擦除是把整个Flash的内容都变为1。通常一个Flash存储器芯片,分为若干个擦除block,在进行Flash存储时,以擦除block为单位。

当在一个block中进行存储时,一旦对某一block中的某一位写0,再要改变成1,则必须先对整个block进行擦除,然后才能修改。通常,对于容量小的block操作过程是:先把整个block读到RAM中,在RAM中修改其内容,再擦除整个block,最后写入修改后的内容。显然,这样频繁复杂的读-擦除-写操作,对于Flash的使用寿命以及系统性能是很不好的,而且系统也常常没有这么大的RAM空间资源。一种基于虚拟扇区的管理技术可以有效地控制Flash的擦写次数,提高Flash的使用寿命,从而提高系统性能。

2 基本原理

2.1概念

VSS(Visual Small Sector),虚拟小扇区:以它为单位读写Flash内容。

VSS ID(Visual Small Sector Identity),虚拟小扇区号:只通过虚拟扇区号进行存储,不用考虑它的真实物理地址。

SI(Sector Identity),分割号:一个擦写逻辑块中物理扇区的顺序分割号。

BI(Block Identity),块号:Flash芯片中按擦除进行划分的块号。

SAT(Sector Allocate Table),扇区分配表:一个擦写逻辑块中的扇区分配表。一个SAT由许多SAT单元组成,一个SAT表对应一个Block,一个SAT单元对应一个VSS。

每个SAT单元最高两位为属性位,后面各位为VSS ID号。如果一个SAT单元由16位组成,则VSS ID最大可以达到16×1024;而如果SAT单元由8位组成,则VSS ID最大可以达到64,具体约定由应用情况而定。

2.2 实现原理

把每个block分为更小的虚拟逻辑块(visual small sector),称为虚拟扇区,扇区大小根据应用而定。每个block前面的一固定单元用于记录本block中扇区分配的使用情况(即扇区分配表),包括扇区属性及扇区逻辑号。图1为逻辑扇区划分示意图。

在进行数据读写和修改时,以虚拟扇区块的大小为单位。要修改某一扇区的数据时,先读出这个扇区的内容,重新找一个未使用的扇区,把修改后的内容写入这个新扇区。然后,修改原来扇区的属性值为无效,修改这个新扇区的属性为有效,拷贝VSS ID号到新扇区对应的SAT单元中。

这样,当某一个block中的SAT属性都标为无效时,才对当前block进行擦写。可见,以虚拟扇区大小为单位的存储管理,对Flash块的擦写次数可大大减少,从而提高了系统性能。

(本网网收集整理)

3 VSS管理实现要点

3.1 常数部分

#define BLOCKSIZE 128*1024 //可根据Flash型号修改

#define SECTORSIZE

512 //可根据Flash型号及应用情况修改

#define MAX_BLOCK 8 //可擦除块个数

#define MAX_SI_1B 255 //每个可擦除块中有效SI个数

#define SATSIZE 510 //扇区分配表大小

#define VSS_MASK 0XC000 //VSS属性屏蔽值

#define VSS_FREE 0XC000 //VSS为未使用的属性值

#define VSS_VALID 0X4000 //VSS为有效的属性值

#define VSS_INVALID 0X0000 //VSS为无效的属性值

3.2 数据结构部分

unsigned char VSS_Table[MAX_BLOCK][MAX_SI_1B/8];用于记录Flash中各个block的使用情况。数组中的某位为1,表示相应sector为未使用;否则,为已经写过,系统通过这个表可以跟踪各个block的使用情况。

3.3 函数功能部分

1) Flash_Format//擦除整块Flash存储介质。

2) Flash_Init()//对VSS管理系统参数进行初始化,填充VSS_Table表,统计Flash的使用情况。在系统复位初始时调用。

3) Block_Erase(int blockID)//擦除块号为block ID的块。

4) Find_VSS(int vss)//查找VSS所在的block ID及分割号SI。

5) Get_Addr(int vss)//取得VSS所在的物理地址。

6) Scan_SAT(int blockID)//整理块号为block ID的SAT,填充VSS_Table[]。

7) Flash_Read(long addr,char *pdata,int len)//从物理地址为addr的Flash处读取len个字节到pdata。

8) Flash_Write(long addr,char *pdata,int len)//写pdata中长度为len的数据到指定地址为addr的Flash中。

9) Read_Sat(int bi)//读取块号为blockID的SAT。

10) IsValid(vat)//检查本SAT单元属性是否有效。

11) IsFree(vat)//检查本SAT单元属性是否未使用。

12) IsInvalid(vat)//检查本SAT单元属性是否无效。

13) Read_VSS(addr)//从地址为addr处读一个VSS。

14) Write_VSS(addr,*pData)//把pData中的内容写到从地址addr开始的一个VSS中。

4 计算VSS ID的物理地址

要对某个VSS ID进行读写操作,必须先找到其物理地址。

定位某个VSS ID物理地址的过程如下。

① 查找这个VSS ID所在的块号(BI)以及在这个块中所处的分割号(SI)。

从第一个block开始,搜索这个块的SAT表。首先搜索属性,只有属性为有效的才比较VSS ID号。如果条件满足,记录所在的块号BI及SAT的位置,即扇区分割号SI;否则,block号增加,继续按照上面步骤查找。

bFound=0;

for(int i=0;i

{//读取对应block的SAT表

psat=ReadSat(i)

for(j=0;j

{//分析每个SAT单元

sat=*psat++;

if(IsValid(sat))//比较属性是否有效

{//比较逻辑号是否相等,相等设置标志退出

if(Equal(sat,VSSID)){bFound=1;break;}

}

}

if(bFound){bi=i;si=j;break;}//找到后记录块号和分割号退出

}

②找到VSS ID所在的块号及分割号(SI)后,这个VSS ID的物理地址为:

ADDR=整个Flash的偏地址+

BLOCKID*BLOCKSIZE+SATSIZE+SI*SECTERSIZE。

5 应用

应用于名片记录管理系统:由于名片记录很大,而且记录很多,存在常常修改的情况,因此可以使用Flash作存储介质。

名片记录结构为:

struct CARD

{

char name[10]; //姓名:10字节

char position[15]; //出职务:15字节

char companyname[40]; //公司名称:15字节

char mobilephone[11]; //手机号码:11字节

char homephone[15]; //家庭电话:15字节

char officephone[15]; //办公电话:15字节

char Email[30]; //邮件地址:30字节

char homepage[30]; //公司主页:30字节

char remark[40]; //备注:40字节

}card_record;

每个名片记录大小为:181字节。

对于1MB的Flash,分为8个block,每个block为128KB(131072字节)。

针对以上情况,作如下分配:

每个扇区大小为181字节;

SAT大小为1432字节,每个SAT单元用16位(2字节);

分为716个扇区,也相当于1个block能存716条名片记录,则131072-1432-716×181=44字节为空闲。

常数定义部分修改如下:

#define blockSIZE 128*1024 //每个block大小

#define SECTORSIZE 181 //每个扇区大小

#define MAX_SI_1B 716 //每个可擦除块中有SI个数

#define SATSIZE 1432 //扇区分配表大小

#define VSS_MASK 0XC000 //VSS属性屏蔽值

#define VSS_FREE 0XC000 //VSS为未使用的属性值

#define VSS_VALID 0X4000 //VSS为有效的属性值

#define VSS_INVALID 0X0000 //VSS为无效的属性值

约定:首先对名片进行编号,且约定名片的编号对应于VSS ID逻辑号。

a) 记录增加。增加一个记录时,根据提供的VSS ID号,首先查找这个记录号是否在使用。如果还没有使用,首先查找这个记录号是否在使用。如果还没有使用,则申请一个未使用的VSS,把相在内容写入这个VSS,修改其对应的.SAT单元,写入有效属性值和VSSID号;否则,进入记录修改过程。

b) 记录删除。要删除一个记录时,根据提供的VSS ID号,查找SAT表。如果找到,修改其对应的SAT属性为无效;否则,说明这个记录不存在。

c) 记录查找。①由VSS ID号进行的查找:根据提供的VSS ID号,查找所有的SAT表中属性为有效的VSS ID,返回相应的BI及SI。②根据名片的用户名查找:检测所有的SAT表中属性为有效的VSS ID,得到相应的BI及SI,由BI及SI定位到指定Flash物理地址读入用户各到RAM中,比较是否相等。如果相等,读取并返回SAT单元的VSS ID;否则,继续查找。

d) 记录修改。当要修改一名片记录时,由VSS ID先把这个记录读入到RAM中,然后修改其内容,重新找一个未使用的扇区,把修改后的内容写入到这个新扇区中,并拷贝其VSS ID

号到这个新扇区对应的SAT单元,修改其属性为高,修改原来的扇区属性为无效。

结语

本文提出的Flash存储管理技术原理简单实用。它是对那些复杂的Flash文件管理系统的一种剪裁、简化和定制。对于那些不需要复杂的文件管理系统,而又使用了Flash作为存储介质的嵌入式系统有很好的借鉴意义和使用价值,如手机电话号码簿管理、短信管理等都可以利用这种技术进行管理。

篇2:基于虚拟扇区的Flash存储管理技术

基于虚拟扇区的Flash存储管理技术

摘要:首先,针对闪存Flash的存储编程特点,提出一种基于虚拟扇区的闪存管理技术,使系统对Flash的擦写次数大大降低,从而提高Flash的使用寿命和整个系统的性能。然后,通过嵌入式系统电子名片管理器,介绍这一技术的.使用。随着闪存的广泛应用,对Flash的有效存储管理将有很大的实用意义和社会效益。

关键词:闪存Flash 虚拟扇区VSS 存储管理 扇区分配表SAT

引言

随着嵌入式系统的迅速发展和广泛应用,大量需要一种能多次编程,容量大,读写、擦除快捷、方便、简单,外围器件少,价格低廉的非易挥发存储器件。闪存Flash存储介质就是在这种背景需求下应运而生的。它是一种基于半导体的存储器,具有系统掉电后仍可保留内部信息,及在线擦写等功能特点,是一种替代EEPROM存储介质的新型存储器。因为它的读写速度比EEPROM更快,在相同容量的情况下成本更低,因此闪存Flash将是嵌入式系统中的一个重要组成单元。

然而,由于Flash读写存储的编程特点,有必要对其进行存储过程管理,以使整个系统性能得以改善。

1 闪存Flash的存储编程特点

Flash写:由1变为0,变为0后,不能通过写再变为1。

Flash擦除:由0变为1,不能只某位单元进行擦除。

Flash的擦除包括块擦除和芯片擦除。块擦除是把某一擦除块的内容都变为1,芯片擦除是把整个Flash的内容都变为1。通常一个Flash存储器芯片,分为若干个擦除block,在进行Flash存储时,以擦除block为单位。

当在一个block中进行存储时,一旦对某一block中的某一位写0,再要改变成1,则必须先对整个block进行擦除,然后才能修改。通常,对于容量小的block操作过程是:先把整个block读到RAM中,在RAM中修改其内容,再擦除整个block,最后写入修改后的内容。显然,这样频繁复杂的读-擦除-写操作,对于Flash的使用寿命以及系统性能是很不好的,而且系统也常常没有这么大的RAM空间资源。一种基于虚拟扇区的管理技术可以有效地控制Flash的擦写次数,提高Flash的使用寿命,从而提高系统

[1] [2] [3] [4] [5] [6] [7]

篇3:存储虚拟化技术

计算机存储技术经历了从单个的磁盘、磁带、RAID到存储网络系统的发展历程,这一路走来似乎缓慢而艰辛,随着存储数据的不断增长,对存储空间的迫切需求推动着存储虚拟化技术不断向前。

1、什么是存储虚拟化

存储虚拟化:可以理解为把硬件资源抽象化,用虚拟形式来展示它们。

虚拟化能够把物理的存储系统从数据驱动的具体工作中解放出来,从而使用户能够随意地按实际需要对有限的存储资源进行分配。

虚拟化可以将多个物理存储资源池合成一个虚拟的存储资源,再对其实施集中管理或者以逻辑方式将其分成多个虚拟机。

存储虚拟化技术是通过把物理层资源抽象化,从而将一个灵活的、逻辑的数据存储空间展现在用户面前。

最基础的存储虚拟化实现是在主机层,通过计算机操作系统的逻辑卷管理器能够很便捷的为应用系统和用户分配存储容量。

2、存储虚拟化的主要特点

(1)虚拟存储为大容量存储系统集中管理提供了一个手段,由网络中的一个环节(如服务器)进行统一管理,从而避免了由于扩充存储设备为管理带来的麻烦。

(2)对于视频网络系统虚拟存储最值得一提的特点是:大幅度提高存储系统整体访问的带宽。

多个存储模块组成了当前的存储系统,而虚拟存储系统能够很好地实现负载平衡,把每次数据访问所需占用的带宽十分合理地分配到各个存储模块上,这样整个视频网络系统的访问带宽就变大了。

(3)虚拟存储技术使得存储资源管理变得更加灵活,能够把不同类型的存储设备集中管理统一分配使用,有效保障了用户以往对存储设备的投资。

(4)虚拟存储技术能够通过相关管理软件,为网络系统提供许多其它的功能,现在比较流行的如无需服务器的远程镜像、数据快照等技术。

3、相关存储技术

现在虚拟存储的发展还没有一个统一的标准,从它的拓扑结构来看主要有两种方式:即对称式与非对称式。

对称式虚拟存储技术是指虚拟存储控制设备与存储软件系统,交换设备集成为一个整体,内嵌在网络数据传输路径中;非对称式虚拟存储技术是指虚拟存储控制设备独立于数据传输路径之外。

而从它的实现原理来看也有两种方式:即数据块虚拟与虚拟文件系统。

3.1 对称式虚拟存储具有以下主要特点

3.1.1 大容量高速缓存的应用,使数据传输速度明显提高

缓存是位于主机与存储设备之间的I/O路径上的中间介质被存储系统广泛采用的。

当主机向存储设备读取数据时,会先把与当前数据存储位置相关联的数据读到缓存中,并将多次调用过的数据保留在缓存中;当主机读/写数据时,缓存这个中间介质就能够大大提高读/写速度。

3.1.2 多端口并行技术,使I/O瓶颈消于无形

传统的存储设备中控制端口与逻辑盘之间关系就是一一对应,访问一块硬盘只能通过一个特定的控制器端口。

但在对称式虚拟存储设备中,SAN Appliance的存储端口与LUN的关系是虚拟的,即多台主机可以通过多个存储端口(最多8个)同时并发访问同一个LUN;在光纤通道100MB/带宽的大前提条件下,并行工作的端口数量越多,数据带宽就越高。

3.1.3 逻辑存储单元为用户提供了高速的磁盘访问速度

在视频应用环境中,应用程序读写数据是以固定大小(512byte~1MB)的数据块为单位的。

但存储系统为了能保证应用程序的带宽需求,常常设计为传输512byte大小以上的数据块时才能达到其最佳I/O性能。

对称式虚拟存储系统为主机提供了真正的超大容量、高性能的LUN,使数据传输速度得到有效提高,解除了主机CPU的大工作量,有效提高了主机性能。

3.1.4 成对的HSTD系统的容错性能

HSTD是在对称式虚拟存储系统中数据进出的必经之地,存储池则是数据存放地。

由于存储池中的数据都有容错机制保障数据安全,因此用户当然关心HSTD是否有容错保护。

和许多大型存储系统一样,HSTD在成熟的对称式虚拟存储系统中是成对配制的,每对HSTD之间是通过SAN Appliance内嵌的网络管理服务保证缓存数据一致和提供相互通信的。

3.1.5 在SAN Appliance之上能够方便的连接交换设备,最终实现超大规模Fabric结构的SAN

因为系统延续了标准的SAN结构,为系统之后的扩展和互连提供了技术保障,所以在SAN Appliance之上能够方便的连接交换设备,最终实现超大规模Fabric结构的SAN。

3.2 非对称式虚拟存储系统具有如下特点

(1)将不同物理硬盘阵列中的容量进行逻辑组合,实现虚拟的带区集,将多个阵列控制器端口进行绑定,一定程度上将系统的可用带宽提高了。

(2)在交换机端口数量充足的情况下,可在一个网络内安装两台虚拟存储设备用以实现Strip信息和访问权限的冗余。

3.3 数据块虚拟与虚拟文件系统

数据块虚拟存储方案可用于解决数据传输过程中的冲突和延时问题。

在多交换机组成的大型Fabric结构的SAN中,由于多台主机通过多个交换机端口读/写存储设备,数据块冲突和延时问题非常突出。

数据块虚拟存储方案采用虚拟的多端口并行技术,为多台客户机提供了很高的带宽,尽可能减少了延时与冲突的发生。

对称式拓扑结构是数据块虚拟存储方案在实际应用中的表现形式。

虚拟文件系统存储方案适用于解决大规模网络系统中文件共享的安全机制问题。

通过对不同的站点赋予不同的访问权限,保证网络文件的安全。

非对称式拓扑结构是虚拟文件系统存储方案在实际应用中的表现形式。

4、存储虚拟化的作用

存储虚拟化是对存储设备等硬件资源进行抽象化,这种虚拟化使用户能够与存储资源中大量的物理特性分离开来。

从用户角度看,虚拟化的存储资源就如同一个巨大的“存储池”,用户不会看到诸如磁盘、磁带等的存储部件,也不用关心数据将经过哪一条路径又通往哪一个具体的存储设备。

篇4:存储虚拟化技术

摘要:近年来,随着网络在人们生活中的普遍应用,由此产生的数据也在以爆炸似的速度增长,而各企业单位管理数据能力的提高速度总是远远不及数据增长的速度,因此,存储系统的改革成为必然。

主要从存储系统的虚拟化方面阐述了存储系统的改革,并详细分析了虚拟化技术在存储系统中的应用。

关键词:虚拟化;存储系统;存储虚拟化

0引言

进入21世纪以来,网络在现在企业的运行环境中应用得越来越普遍,各种数据也在快速增长,虽然现在企业管理数据的能力也在提高,但是已经远远跟不上数据增长的速度。

虚拟化技术的出现为企业解决这一难题提供了新的途径。

运用虚拟化技术,像备份/恢复、数据归档、存储资源分配等大量重复和消耗时间的工作,完全能够通过存储虚拟化技术运用自动化的方法进行处理,从而使人的工作量大大降低,提供企业的效率。

存储虚拟化为用户提供的益处也是显而易见的,首先是使存储管理的复杂性降低,减少了存储管理和运行的成本;其次是提高了存储效率,使存储投资的费用大大降低。

篇5:存储技术基础:存储虚拟化详解

简单的讲,虚拟存储(Storage Virtualization),就是把多个存储介质模块(如硬盘、RAID)通过一定的手段集中管理起来,所有的存储模块在一个存储池中得到统一管理,这种可以将多种、多个存储设备统一管理起来,为使用者提供大容量、高数据传输性能的存储系统,就称之为虚拟存储。

存储虚拟化的基本概念是将实际的物理存储实体与存储的逻辑表示分离开来,应用服务器只与分配给它们的逻辑卷(或称虚卷)打交道,而不用关心其数据是在哪个物理存储实体上。

逻辑卷与物理实体之间的映射关系,是由安装在应用服务器上的卷管理软件(称为主机级的虚拟化),或存储子系统的控制器(称为存储子系统级的虚拟化),或加入存储网络SAN的专用装置(称为网络级的虚拟化)来照管的。

主机级和存储子系统级的虚拟化都是早期的、比较低级的虚拟化,因为它们不能将多个,甚至是异构的存储子系统整合成一个或多个存储池,并在其上建立逻辑虚卷,以达到充分利用存储容量、集中管理存储、降低存储成本的目的。

只有网络级的虚拟化,才是真正意义上的存储虚拟化。它能将存储网络上的各种品牌的存储子系统整合成一个或多个可以集中管理的存储池(存储池可跨多个存储子系统),并在存储池中按需要建立一个或多个不同大小的虚卷,并将这些虚卷按一定的读写授权分配给存储网络上的各种应用服务器。这样就达到了充分利用存储容量、集中管理存储、降低存储成本的目的。

目前存储虚拟化的发展尚无统一标准,从存储虚拟化的拓扑结构来讲主要有两种方式:即对称式与非对称式。

对称式存储虚拟技术是指虚拟存储控制设备与存储软件系统、交换设备集成为一个整体,内嵌在网络数据传输路径中;非对称式存储虚拟技术是指虚拟存储控制设备独立于数据传输路径之外。

存储虚拟化有如下特点:

1、存储虚拟化是一个SAN里面的存储中央管理、集中管理,这是虚拟化的一个特点,一个突出的地方。可以得到很大的收益,降低成本。

2、存储虚拟化打破了存储供应商之间的界线,就是你用了EMC的东西,以后必须买EMC的,因为他不可能EMC的东西和IBM或者HDS的什么替换做存储的管理,

有了存储虚拟化,这种壁垒将被打破。

3、就是用不同的,可以应用于不同品牌的高中低档的存储设备。

存储虚拟化依然脱离不了软件和硬件两大类。这种划分也体现在存储硬件厂商和软件厂商的区分上,存储厂商一般根据各自所掌握的核心技术来提供自己的虚拟存储产品。

惠普在基于主机的虚拟化、基于存储的虚拟化,以及基于网络层的虚拟化方面都有相应的产品。其中,基于存储系统的虚拟化产品----HP StorageWorks企业虚拟阵列EVA是用户最熟悉的。目前,EVA系列有EVA 3000和EVA 5000可供选择。

HP EVA系列最突出的优势是可以提高性能。虚拟化可以使数据分布在多个磁盘上,磁盘无需再按照磁盘容量大小和RAID保护类型布置在传统RAID组中。HP EVA采用了VRAID(虚拟RAID)技术,可支持一个存储池中的各种容量和RAID类型的多个虚拟磁盘。

HDS公司推出的第五代存储系统----TagmaStore通用存储平台在提升存储容量的同时,还注重改进性能和高速缓存管理,在一个既有高度整合又有合理分区的环境中确保服务质量。TagmaStore是基于存储设备的虚拟化产品。

HDS TagmaStore通用存储平台采用了虚拟化技术,通过内置的虚拟层,可以管理高达32PB的内部与外部存储容量,并支持在内部与外部存储中的逻辑分区,以及复杂的任意存储地点间的远程复制功能。

IBM推出的基于网络的存储虚拟化产品主要包括SAN Volume Controller(SVC)和SAN File System。SVC是整个SAN(存储区域网)网络的控制器,可以将SAN中的各种存储设备整合成一个存储池,并按需分配存储空间、性能和功能。SVC对服务器和存储设备都是透明的。SVC为各种不同的存储设备提供了一个统一的数据复制平台。SVC是一个软硬件集成的产品。SVC刚推出时,可实现存储虚拟化的软件运行在一个类似服务器的硬件设备上。如今,此软件也可以安装在SAN中的交换机上,如思科的MDS网络交换机。SVC是为一个完全开放的存储环境设计的,可以兼容各种不同的存储设备。

篇6:uClinux平台下的Flash存储技术

uClinux平台下的Flash存储技术

摘要:较为详细地介绍嵌入式操作系统uClinux平台下的Flash存储技术,并给出基于三星S3C4510系统下Dlash存储器具体设计实例。

关键词:Flash存储技术 uClinux平台 S3C4510

1 Flash类型与技术特点

Flash主要分为NOR和NAND两类。下面对二者作较为详细的比较。

1.1 性能比较

Flash闪存是非易失存储器,可以对存储器单元块进行擦写和再编程。任何Flash器件进行写入操作前必须先执行擦除。NAND器件执行擦除操作十分简单;而NOR则要求在进行擦除前,先要将目标块内所有的位都写为0。擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为1~5s;擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。执行擦除时,块尺寸的不同近一步拉大了NOR和NADN之间的性能差距。统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。因此,当选择存储解决方案时,设计师必须权衡以下的各项因素。

*NOR的读取速度比NAND稍快一些。

*NAND的写入速度比NOR快很多。

*NAND的擦除速度远比NOR快。

*大多数写入操作需要先进行擦除操作。

*NAND的擦除单元更小,相应的擦除电路更少。

1.2 接口差别

NOR Flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内容的每一字节。

NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。NAND的读和写操作采用512字节的块,这一点有点像硬盘管理此类操作。很自然地,基于NAND的存储器就可以取代硬盘或其它块设备。

1.3 容量和成本

NAND Flash的单元尺寸几乎是NOR器件的一半。由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。

NOR Flash占据了大部分容量为1~16MB的内存市场,而NAND Flash只是用在8~128MB的产品当中。

1.4 可靠性和耐用性

采用Flash介质时,一个需要重点考虑的问题是可靠性。对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。

(1)寿命(耐用性)

在NAND闪存中,每个块的最大擦写次数是100万次,而NOR的擦写次数是10万次。NAND存储器除了具有10:1的块擦除周期优势外,典型的NAND块尺寸要比NOR器件小8位,每个NAND存储器块在给定时间闪的删除次数要少一些。

(2)位交换

所有Flash器件都受位交换现象的困扰。在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。

一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障就可能导致系统停机。如果只是报告有问题,多读几次就可能解决。

位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用EDC/ECC算法。当然,如果用本地存储设备来存储操作系统、配置文件或其它敏感信息时,必须使用EDC/ECC系统以确保可靠性。

(3)坏块处理

NAND器件中的不坏块是随机分布的。以前做过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理。将导致高故障率。

1.5 易用性

可以非常直接地使用基于NOR的闪存,像其它存储器那样连接,并可以在上面直接运行代码。由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。在使用NAND器件时,必须先写入驱动程序,才能继续执行其它操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。

1.6 软件支持

在NOR器件上运行代码不需要任何的软件支持。在NAND器件上进行同样操作时,通常需要驱动程序,也就是闪

存技术驱动程序(MTD)。NAND和NOR器件在进行写入和擦除操作时都需要MTD。使用NOR器件时,所需要的MTD要相对少一些。许多厂商都提供用于NOR器件的更高级的软件,其中包括M-System的TrueFFS驱动,该驱动被Wind River System、Microsoft、QNX Sotrware System、Symbian和Intel等厂商所采用。驱动还用于对DiskOnChip产品进行仿零点和NAND闪存的管理,包括纠错、坏块处理和损耗平衡。

目前,NOR Flash的容量从几KB~64MB不等,NAND Flash存储芯片的容量从8MB~128MB,而DiskonChip可以达到1024MB。

2 系统设计

Flash在每MB的存储开销上较RAM要昂贵,但对于uClinux系统来说,选择Flash作为存储器具有一定的优势。UClinux系统在上电后,需要运行的程序代码和数据都可以存储在Flash中,甚至放在CPU起始地址中的uClinux启动内核都可以写入Flash中。从一定意义上讲,嵌入式系统只用Flash就可以完成所需的存储功能。

Flash存储器的分区较硬盘的分区更为简单,分区后的Flash使用起来更加方便。典型的Flash分区如下。

SEGMENT PURPOSE

0 Bootloader

1 factory configuration

2

┆ kernel

X

┆ root filesystem

Y

分区0放置Bootloader,分区1放置factory configuration,分区2到分区X放置系统内核,分区X到分区Y放置根文件系统。Flash的分区可以根据需要划分,uClinux中支持Flash存储器的块设备驱动负责定义上述的分区。

和PC机下的Linux不同,Flash的分区把系统内核文件和根文件系统单独划分到两个分区中,而PC机的硬盘是把内核文件和根文件系统放在一个分区内。PC机下Linux的Bootloader是LILO或GRUB。它们在系统启动时能智能地在分区中找到内核文件块,并把它加载到RAM中运行。对于Flash而言,把内核的镜像文件写进一个单独的分区对嵌入式系统有两大优点:①系统可以直接在Flash上运行;②LILO或GRUB更易找到内核代码并加载,甚至可以不用LILO或GRUB引导而直接运行。

内核文件和根文件系统在Flash中的放置,可以根据系统设计需要适当选择。

3 引导程序选择

系统启动之前的引导过程是CPU初始化的过程。包括ARM和X86在内的许多CPU是从固定地址单元开始运行引导程序(Bootloader)的。其它的部分CPU是从某个地址单元读入引导程序的入口地址,然后再运行引导程序,譬如M68K和Coldfire系列。所以这些都影响到Flash中系统启动代码的存放地址。

系统首先要考虑的是在什么地址存放Bootloader,或者说系统从哪个地址单元开始加载运行系统内核代码。

CPU启动后直接运行系统内核是可以实现的。对于uClinux来说,启动代码必须包括芯片的初始化和RAM的初始化等硬件配置;同时加载内核的代码段到RAM中,并清除初始化的数据段内容。尽管这些实现起来很直观,但是要具体把启动代码存放在Flash中正确的地址偏移单元内,使CPU一启动便能执行就比较困难了。不过,现在技术比较先进的CPU都将默认的偏移地址设置为0,或者在偏移地址为0的附近存放起始地址。

Bootloader是一段单独的代码,用以负责基本硬件的初始化过程,并且加载和运行uClinux的内核代码。作为系统启动工具,Bootloader经过配置可以加载Flash中的多个内核,甚至可以通过串口和网口来加载内核和系统的镜像到RAM中运行。Bootloader同时也提供对内核镜像文件的多级别保护,这一点对于以Flash作为存储设备的系统来说非常重要。譬如,当系统进行内核升级和重要数据备份时,系统突然掉电,正如PC机进行BIOS刷写过程中的旧电一样,都是灾难性的。但是利用Bootloader就可以实现保护性的恢复。

目前运行在uClinux上的免费Bootloader有COLILO、MRB、PPCBOOT和DBUG。也有为特殊需求设计的SNAPGEAR和ARCTURUS NETWORKS。

4 uClinux的块驱动器

对于嵌入式系统的块设备,可选择存储文件系统的块驱动器(Block Driver)主要有三种选择。

①Blkmem driver。Blkmem driver仍是uClinux上使用最普通的Flash驱动器。它是为uClinux而设计的,但是它的结构相对比较简单,并且仅支持NOR Flash的操作,需要在RAM中建立根文件系统。同时它也很难配置,需要代码修改表来建立Flash分区。尽管如此,它还是提供了最基本的.分区擦/写操作。

②MTD driver。MTD driver是Linux下标准的Flash驱动器。它支持大多数Flash存储设备,兼有功能

强大的分区定义和映像工具。借用交叉存取技术(interleaving),MTD driver甚至可支持同一系统中不同类型的Flash,Linux内核中关于MTD driver配置有较为详细的选择项。

③RAM disk driver。在无盘启动的标准Linux中,用得最多的就是RAM disk driver;但它不支持底层的Flash存储器,仅对根文件系统的建立有意义,即根文件系统压缩以后存放在Flash的什么地方。

通过上面的比较可以看到,MTD driver提供对Flash最有力的支持同,同时它也支持在Flash上直接运行文件系统,譬如JFFS和JFFS2,而B1kmem driver则不支持。

5 根文件系统

uClinux中的文件系统可以有多种选择。通常情况下,ROMfs是使用最多的文件系统,它是一种简单、紧凑和只读的文件系统。ROMfs顺序存储文件数据,并可以在uClinux支持的存储设备上直接运行文件系统,这样可以在系统运行时节省许多RAM空间。

Cramfs是针对Linux内核2.4之后的版本所设计的一种新型文件系统,也是压缩和只读格式的。它主要的优点是将文件数据以压缩形式存储,在需要运行的时候进行解压缩。由于它存储的文件形式是压缩的格式,所以文件系统不能直接在Flash上运行。虽然这样可以节约很多Flash存储空间,但是文件系统运行需要将大量的数据拷贝进RAM中,消耗了RAM空间。

考虑到多数系统需要能够读/写的文件系统,可以使用MTD driver的JFFS和JFFS2日志式文件在Flash头部建立根文件系统(Root Filesystem)。日志式文件系统可以免受系统突然掉电的危险,并且在下一次系统引导时不需要文件系统的检查。由于JFFS和JFFS2文件格式是特别为Flash存储器设计的,二者都具一种称为“损耗平衡”的特点,也就是说Flash的所有被擦写的单元都保持相同的擦写次数。利用这些特有保护措施,Flash的使用周期得到相当大的提升。JFFS2使用压缩的文件格式,为Flash节省了大量的存储空间,它更优于JFFS格式在系统中使用。值得注意的是,使用JFFS2格式可能带来少量的Flash空间的浪费,这主要是由于日志文件的过度开销和用于回收系统的无用存储单元,浪费的空间大小约是两个数据段。

如果使用RAM disk,一般应选择EXT2文件格式,但EXT2并不是一块特别高效的文件存储空间。由于存在RAM disk上,所以任何改变在下一次启动后都会丢失。当然,也有许多人认为对嵌入式存储空间来讲,这是一种优势,因为每次系统启动都是从已知的文件系统状态开始的。

虽然在Linux下有许多的文件格式可供选择,但是对于uClinux一般只选择上述的几种文件格式。另外一点就是如何在目标系统上建立根文件系统,步骤如下:首先在开发宿主机上建立一个目标机的根文件系统的目录树,然后利用嵌入式根文件系统生成工具在宿主机上生成目录树的二进制文件镜像,最后下载到目标机上就可以了。对于不同的文件格式有不同的二进制镜像生成工具,譬如JFFS的mkfs.jffs2、ISO9660的mkisofs。

篇7:uClinux平台下的Flash存储技术

uClinux平台下的Flash存储技术

摘要:较为详细地介绍嵌入式操作系统uClinux平台下的Flash存储技术,并给出基于三星S3C4510系统下Dlash存储器具体设计实例。

关键词:Flash存储技术 uClinux平台 S3C4510

1 Flash类型与技术特点

Flash主要分为NOR和NAND两类。下面对二者作较为详细的比较。

1.1 性能比较

Flash闪存是非易失存储器,可以对存储器单元块进行擦写和再编程。任何Flash器件进行写入操作前必须先执行擦除。NAND器件执行擦除操作十分简单;而NOR则要求在进行擦除前,先要将目标块内所有的位都写为0。擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为1~5s;擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。执行擦除时,块尺寸的不同近一步拉大了NOR和NADN之间的性能差距。统计表明,对于给定的`一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。因此,当选择存储解决方案时,设计师必须权衡以下的各项因素。

*NOR的读取速度比NAND稍快一些。

*NAND的写入速度比NOR快很多。

*NAND的擦除速度远比NOR快。

*大多数写入操作需要先进行擦除操作。

*NAND的擦除单元更小,相应的擦除电路更少。

1.2 接口差别

NOR Flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内容的每一字节。

NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。NAND的读和写操作采用512字节的块,这一点有点像硬盘管理此类操作。很自然地,基于NAND的存储器就可以取代硬盘或其它块设备。

1.3 容量和成本

NAND Flash的单元尺寸几乎是NOR器件的一半。由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。

NOR Flash占据了大部分容量为1~16MB的内存市场,而NAND Flash只是用在8~128MB的产品当中。

[1] [2] [3] [4] [5]

篇8:嵌入式系统中的Flash存储管理

嵌入式系统中的Flash存储管理

摘要:以TRI公司的基于NORFlash的Flash管理软件FMM为例,详细介绍嵌入式系统中如何根据Flash的物理特性来进行Flash存储管理。

关键词:嵌入式系统FlashFMM

引言

在当前数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式系统已经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文件艺术、娱乐业以及人们的日常生活等方方面面中。随着嵌入式系统越来越广泛的应用,嵌入式系统中的数据存储和数据管理已经成为一个重要的课题摆在设计人员面前。

Flash存储器作为一种安全、快速的存储体,具有体积小、容量大、成本低、掉电数据不丢失等一系列优点。目前已经逐步取代其它半导体存储元件,成为嵌入式系统中主要数据和程序载体。

作为嵌入式系统的一部分,Flash存储管理的主要功能是针对Flash自身的物理特性,利用一些特定的算法来提高Flash的使用效率,加快操作速度和管理Flash各单元的使用频率。

1Flash存储器简介

嵌入式系统中使用的Flash主要分为NOR和NAND两种类型。这里我们以NOR型Flash为例进行介绍。NOR型Flash主要特点如下:

*体积小、容量大,目前可以达到十几MB。

*掉电数据不丢失,数据可以保存10~1。

*有独立的地址和数据总线,可以快速地通过总线读取数据。因此它具有和静态RAM相同的读取速度,既可以作为数据存储器也可以作为程序存储器使用。

*写入操作必须通过指令序列来完成,以字节(Byte)或字(Word)为单位,每写入一个Byte或Word需十几μs。

*擦除也通过指令序列完成,以块(Block)为单位,通常块的大小为64K。每擦除一个块需要十几ms。

*由于Flash有一定的使用寿命,一般为10~100万次。所以随着使用次数的增加,会有一些单元逐渐变得不稳定或失效,因此必须能够对其状态加以识别。

2Flash存储管理的作用

由Flash特点可以看出,操作Flash需要注意以下几点:

*必须以几K~几十K的块为单位进行数据的操作;

*擦除操作耗时较多,应减少擦除操作;

*尽量避免频繁地对同一地址操作,以免造成局部单元提前损坏。

另外,大部分嵌入式操作系统所挂接的文件系统是建立在以扇区(Sector)为单位的磁盘操作基础上(通常为512字节/扇区)。因此也需要一段特殊的Flash存储管理程序来解决以扇区为单位的文件系统接口和以块为单位的Flash物理特性之间的矛盾;同时,完成各块之间的擦写次数均衡和坏块管理等工作。Flash存储管理程序在系统中的位置如图1所示。

本文以TRI公司的FMM为例,说明Flash存储管理模块和如何完成这些功能的。

3FMM介绍

FMM(FlashMediaManager)是由TRI公司开发的专门针对NOR型Flash的管理软件,其主要特点如下:

*动态映射OS的逻辑扇区到物理地址;

*所有物理块进行寿命均衡,同时可记录Flash的擦写次数;

*掉电数据恢复,可以保证系统的稳定性;

创建坏块表进行坏块管理,保证系统的可靠性。

为了更好地介绍FMM的操作流程,这里先作几点说明。

(1)存储空间管理

为了实现以扇区为基础的数据管理,FMM首先对Flash中的块内存储空间逻辑上进行了重新定义,每个物理块内部又重新划分成了若干物理扇区。每个物理块内部又重新划分成了若干物理扇区。每个物理扇区由512+4字节=516(0x204)字节组成。512字节为有效数据空间,另外4字节(32位)用于存放逻辑扇区另和当前状态。定义如下:

扇区状态逻辑扇区号数字空间4位28位125字节

扇区状态有4种,用于进行掉电数据恢复:

FREE―空扇区(0xF);

DVALID―扇区数据无效(0xE);

INUSE―扇区数据有效(0xC);

DIRTY―扇区数据无用,可擦除(0x8)。

以64K大小的块为例,可以计算出每个块中可以划分出127个扇区;另外,还会有4字节的空间,专门用于标志下一个被整理块。标记为0x80,否则为0xffffffff。

因此可以得出物理扇区和绝对地址之间的对应关系:

绝对地址=Flash基地址+物理扇区号×0x204+所在块号×4

(2)扇区分类

FMM中将扇区分为ID扇区和数据扇区两类:

①FMM会占用N个扇区作为标识ID(Identification)扇区,占用逻辑扇区号0~N。这一部分扇区是文件系统不能使用的,是FMM用于管理所占用的存储空间。因此文件系统所管理的逻辑扇区号必须从N+1开始。

ID扇区主要包含如下数据:FMM版本号、写入(擦除)次数EraseCount、用户标识和坏扇区表。

N的取值与坏扇区表的大小有关,每个FMM管理的物理扇区占用表中的1位。在每次存储数据时,可以通过查询表中的相应位来确定该扇区的有效性。

②数据扇区,用于存储数据。

(3)空间映射表(MappingTable)

由于Flash不能像普通磁盘那样进行字节的修改,甚至不能以扇区为单位进行修改;而只能以块为单位进行修改;但如果只是简单将物理扇区和逻辑扇区一一对应,那么如果我们想对扇区修改就必须将整个块的内容都擦除,然后再将修改后的内容回写;势必会造成时间和Flash寿命的损失。因此,建立一个物理扇区号和逻辑扇区号的空间映射表,使逻辑扇区与物理扇区号进行动态的匹配。这样,在修改某个扇区的内容时只要将数据写入一个新的扇区,然后将原扇区标记为DIRTY就可以了。这样,还可以消除频繁修改某个扇区带来的寿命不均的影响。

映射表是建立在内存中的项数为M(扇区总数)的数组,每项占用4字节,用于存放对应的物理扇区号。当某项为空(NULL)时,认为该扇区空闲,未使用,如图2所示。

4FMM模块操作

按功能,可以将FMM分解为4个基本模块:格式化模块、初始化模块、存取模块和空间整理模块。以下简单扫描各模块的操作流程。

(1)格式化模块

对数据空间进行初级格式化,建立ID扇区。该模块在第一次使用数据盘之前调用,相当于低级格式化。过程如下:

①调用FMM初始化模块,根据结果判断该存储体是否含有FMM控制信息。如果有,将擦除次数计数器EraseCount加1,否则置为1。

②调用Flash驱动程序,将FMM所管理的空间全部擦除。

③将Block0的标志置为0x80,即下一个被整理的`Block,也是第一个非空Block。

④收集有关信息,创建ID扇区写入Flash。

⑤在内存中创建空间映射表。

空间映射表的创建过程如下:

①清空内存中为映射表和ID扇区申请的空间。

②将Flash中的ID扇区内容读入内存中。

③扫描整个物理空间,依次读入每个物理扇区的状态和逻辑扇区号,将状态为INUSE的逻辑扇区号装入空间映射表的对应位置,并记录INUSE和DIRTY扇区的数目。

④修复扫描中发现的DAVLID扇区数据。

修复DAVLID扇区的过程如下:

①取出DVALID扇区的逻辑扇区号。

②如果逻辑扇区号为NULL,跳到步骤⑤。

③查询空间映射表,如果对应的物理扇区号为NULL,跳到步骤⑤。

④将查到的物理扇区置为DIRTY。

⑤将DAVLID扇区置为INUSE,将其扇区号填入空间映射表。

(2)初始化模块

该模块在文件系统初始化之前调用,用于初始化FMM系统。

①从内存池中为ID扇区申请内存。

②从内存池中为空间映射表申请内存。

③在内存中创建空间映射表。

(3)存取模块

该模块是FMM与文件系统的接口,可以分为读和写两部分。

*读数据过程:

①根据所要读取的逻辑扇区号,查表找出其对应的物理扇区号;

②根据物理扇区号计算出物理地址;

③读出该扇区数据;

④如需读多个扇区,重复步骤①~③。

*写数据流程;

Flash存储器中“写入”是将对应单元由“1”变“0”,“擦除”是由“0”变为“1”。因此,无须擦除就可以将状态FREE(0xF)依次“写”为DVALID(0xE)、INUSE(0xC)、DIRTY(0x8),如图3所示。

(4)空间整理模块

由于在写入操作中产生dirty扇区,因此当自由空间不足时,需要对空间进行整理,释放dirty扇区占用的空间用于存储数据,流程如图4所示。

根据图4可以看出,整理的过程实际是将有用扇区依次搬到空扇区中,再擦除旧块的过程,因此需要一个空块用作数据交换。

5FMM性能分析

*读出速度:读取速度基本与Flash的读速度相同。

*写入速度:写入操作速度与Flash的写入速度基本相同。

*整理速度:空间整理上由于算法的限制会耗费很长的时间,最好挑选除速度较快的Flash来进行配合使用;或者可以采用其它的算法来进行空间整理,但会使寿命均衡有所减弱,必须根据具体的应用来选取适合的方案组合才能达到最好的效果。

*文件系统可用空间:由于FMM占用了一部分空间,因此实际文件系统可用空间小于Flash的实际物理空间。

文件系统可用空间=Flash总空间-ID扇区空间-1个用于整理的保留块空间。

篇9:基于Flash存储的巡检仪存储管理系统设计

基于Flash存储的巡检仪存储管理系统设计

系统采用三星公司生产的Nand Flash K9F2808UOB芯片作为系统的`数据存储芯片,设计了一个适用于便携式巡检仪的Flash存储管理系统来对Flash存储器进行物理管理,并在此基础上建立了一个FAT文件系统来对文件操作进行管理.经实践证明,系统完全支持文件名管理、自动坏损管理等通用文件系统所具有的功能,为便携式巡检仪各项功能的实现莫定了基础.

作 者:侯本利 李艾华 Hou Benli LiAihua  作者单位:第二炮兵工程学院502教研室,西安,710025 刊 名:电子测量与仪器学报  ISTIC英文刊名:JOURNAL OF ELECTRONIC MEASUREMENT AND INSTRUMENT 年,卷(期):2008 22(z2) 分类号:P315 关键词:Flash存储器   便携式巡检仪   存储管理系统   FAT文件系统  

【基于虚拟扇区的Flash存储管理技术】相关文章:

1.多级存储技术在媒体资产管理系统中的应用

2.装备虚拟训练软件测试技术论文

3.flash论文

4.规划管理技术规定

5.枣树花期管理技术

6.教育技术信息化管理

7.虚拟化技术在计算机网络技术的应用论文

8.flash教学课件

9.flash教学设计

10.flash课件下载

下载word文档
《基于虚拟扇区的Flash存储管理技术.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度: 评级1星 评级2星 评级3星 评级4星 评级5星
点击下载文档

文档为doc格式

  • 返回顶部