一种提高固态硬盘数据传输效率的方法

文档序号:6593780阅读:207来源:国知局
专利名称:一种提高固态硬盘数据传输效率的方法
技术领域
本发明涉及一种提高固态硬盘数据传输效率的方法,用于解决固态硬盘地址不对齐的问题,属于计算机数据存储技术领域。
背景技术
固态硬盘(Solid State Disk,SSD),是一种采用固态电子存储芯片阵列制成的硬盘,由控制单元和存储单元组成。与传统机械硬盘(Hard Disk Drive,HDD)相比,固态硬盘在读取速度、功耗、噪音、抗震性、体积、工作温度范围、容价比等方面均具有明显优势,被广泛应用于军事、车载、工控、视频监控、网络监控、网络终端、电力、医疗、航空等、导航设备等领域。根据存储介质的不同,固态硬盘分为两种,一种采用闪存(FLASH芯片)作为存储介质,另外一种采用动态随机存取存储器(Dynamic Random Access Memory, DRAM)作为存储介质。其中,基于闪存的固态硬盘最大的优点是可移动,且数据保护不受电源控制,能够适应于各种环境。基于闪存的固态硬盘其内部构造简单,固态硬盘内主体是一块印制电路板(Printed Circuit Board,PCB),而这块PCB板上最基本的配件是控制芯片、内存芯片和用于存储数据的闪存芯片。其中,控制芯片是固态硬盘的大脑,其作用一是合理调配数据在各个闪存芯片上的负荷,二则是承担整个数据的中转,连接闪存芯片和外部SATA (SerialAdvanced Technology Attachment)接口 ;内存芯片用于辅助主控芯片进行数据处理。与传统的机械硬盘相比,固态硬盘的缺点是:①由于受到闪存擦写次数的限制,其使用寿命相对较短。传统的机械硬盘以扇区为单位,而固态硬盘通常以页为单位存储数据。为了延长固态硬盘使用寿命,绝大多数的固态硬盘都有磨损平衡的处理,即连续两次对同一逻辑地址的写入操作,在闪存进行写入操作的实际物理位置不同。②在对固态硬盘进行写操作时,若写操作的逻辑地址没有与固态硬盘的基本单位(页)对齐,可能出现数据从一个闪存页到另一个闪存页的搬移现象,即:在对固态硬盘进行写操作时,如果写操作的逻辑地址与固态硬盘的基本单位(页)不对齐时,首先需要将闪存中的写操作页读取到固态硬盘的内存中,然后在固态硬盘的内存中对该写操作页进行部分替换,再将内存中的该写操作页写回到固态硬盘中。如此操作,大量的时间被浪费在了简单而耗时的闪存数据搬移操作上,影响固态硬盘的传输效率和使用寿命。③主机的数据在写入闪存之前都要经过SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器)层,但目前的固态硬盘没有考虑这些数据的二次利用问题,导致有用数据白白浪费。

发明内容
本发明的目的是为了解决目前已有固态硬盘在写操作的逻辑地址与固态硬盘的基本单位(页)不对齐时,造成传输效率不高的问题,提出一种提高固态硬盘数据传输效率的方法。本发明方法通过采用一种基于双向循环链表实现的数据缓冲机制和一种仿堆栈型LRU (Least Recently Used,最近最少使用算法)缺页调度算法,有效解决了固态硬盘地址不对齐的问题,从而提高数据传输效率。本发明的目的是通过以下技术方案实现的。一种提高固态硬盘数据传输效率的方法,用于主机与固态硬盘之间的数据传输,所述固态硬盘包括控制芯片、内存芯片和闪存芯片;其具体实施步骤为:步骤1:在固态硬盘的内存中创建I个空闲页双向循环链表、I个整页双向循环链表、I个零碎页双向循环链表和I个缓冲区。所述空闲页双向循环链表有N个节点,N为正整数。所述空闲页双向循环链表中的每个节点包含I个指针。所述整页双向循环链表和零碎页双向循环链表均为空。所述整页双向循环链表和零碎页双向循环链表中的每个节点都有一个标志量(用符号Flag表示),用于表示该节点指向的缓存区中的页面是否修改过,设置Flag=0。所述整页双向循环链表中的每个节点包含I个指针。所述零碎页双向循环链表中的每个节点包含2个指针,分别称为头指针和尾指针。所述缓冲区的大小为所述固态硬盘的页面大小的N倍。步骤2:将步骤I中创建的缓冲区分为N个页面,每个缓冲区页面的大小与所述固态硬盘的页面大小相同;然后依次使所述空闲页双向循环链表第I个节点的指针指向缓冲区第I个页面的起始地址,使所述空闲页双向循环链表第2个节点中的指针指向缓冲区第2个页面的起始地址,以此类推,使所述空闲页双向循环链表第N个节点中的指针指向缓冲区第N个页面的起始地址。步骤3:当主机请求对所述固态硬盘进行读/写操作时,根据请求的读/写地址查找读/写操作页是否缓存在固态硬盘的缓存区中。若固态硬盘的缓冲区中有该读/写操作页的缓存,则直接在该读/写操作页的缓存上进行读/写操作,并在写操作后,设置该节点的标志量Flag=I。若固态硬盘的缓冲区中没有该读/写操作页的缓存,则判断空闲页双向循环链表是否为空,如空闲页双向循环链表为空,则采用缺页调度算法进行缺页调度操作,然后执行步骤4的操作。如空闲页双向循环链表不为空,则执行步骤4的操作。所述缺页调度算法具体为:第a步:判断整页双向循环链表是否为空,如不为空,则从整页双向循环链表的尾部选择一个标志量Flag=I的节点,将该节点称为待写回整页节点;将该待写回整页节点中指针指向的缓冲区中的页内容写入固态硬盘的闪存中;然后为空闲页双向循环链表增加一个新节点,并使该新节点的指针指向待写回整页节点中指针指向的地址;再从整页双向循环链表中删除该待写回整页节点。如果整页双向循环链表为空,则执行第b步的操作。第b步:从零碎页双向循环链表的尾部选择一个标志量Flag=I的节点,将该节点称为待写回零碎页节点;将该待写回零碎页节点中指针指向的缓冲区中的页内容写入固态硬盘的闪存中;然后为空闲页双向循环链表增加一个新节点,并使该新节点的指针指向待写回零碎页节点中指针指向的地址;再从零碎页双向循环链表中删除该待写回零碎页节点。所述缺页调度算法在进行缺页调度时,遵循堆栈型LRU替换原则,即从整页双向循环链表和零碎页双向循环链表的尾部开始向前选择一个节点进行缺页替换操作。步骤4:判断步骤3中所述对读/写操作页的操作是对该页的整页操作还是部分操作,如果是对整页操作,则从空闲页双向循环链表中摘出一个节点插入到整页双向循环链表,将该节点称为新增整页节点;然后根据步骤3中所述主机对固态硬盘进行读/写操作的地址,将该读/写操作页的内容从闪存中读入到新增整页节点中的指针指向的内存缓冲区页面;在该读/写操作页的缓存上进行读/写操作,并在写操作后,设置该节点的标志量Flag=10如果进行的是部分操作,则从空闲页双向循环链表中摘出一个节点,并为零碎页双向循环链表增加一个节点,将该节点称为新增零碎页节点,使新增零碎页节点的头指针指向从空闲页双向循环链表中摘出的节点中指针指向的页面的起始地址;然后根据步骤3中所述主机对固态硬盘进行读/写操作的地址,将该读/写操作页的内容从闪存中读入到新增零碎页节点中头指针指向的内存缓冲区页面;在该读/写操作页的缓存上进行读/写操作,并在写操作后,设置该节点的标志量Flag=I ;最后,使新增零碎页节点的头指针指向缓冲区中该读/写操作页的非空第一个字节的地址,使新增零碎页节点的尾指针指向该读/写操作页的非空最后一个字节的地址。所述一种提高固态硬盘数据传输效率的方法,还包括:在固态硬盘的处于空闲状态时,将缓存区中的数据写入闪存的操作,其具体步骤为:步骤a:检查零碎页双向循环链表,判断其中是否存在待转移整页节点,若存在待转移整页节点,则在整页双向循环链表的头部增加一个新节点,并使该新节点的指针指向待转移整页节点头指针指向的地址,再从零碎页双向循环链表中删除待转移整页节点。所述待转移整页节点是零碎页双向循环链表中头指针指向对应缓存区页面的起始地址,尾指针指向对应缓存区页面的结束地址的节点。步骤b:从整页双向循环链表的尾部选择一个标志量Flag=I的节点,将该节点指向的页面数据写入固态硬盘的闪存中,并设置标志量Flag=0。当整页双向循环链表没有标志量Flag=I的节点时,在零碎页双向循环链表的尾部选取一个标志量Flag=I的节点,将该节点指向的页面数据写入固态硬盘的闪存中,并置标志量Flag=0。这样,当固态硬盘突然断电时,整页双向循环链表和零碎页双向循环链表中仅有少量Flag=I的节点指向的页面数据没有存储到固态硬盘的闪存中,可以在短时间内将缓存的数据写入固态硬盘,避免数据丢失。有益效果本发明提出的一种提高固态硬盘数据传输效率的方法通过采用基于双向循环链表实现的数据缓冲机制和一种仿堆栈型LRU缺页调度算法,有效解决了固态硬盘地址不对齐的问题,从而提高数据传输效率。
具体实施例方式为了更好的说明本发明的技术方案,下面通过I个实施例,对本发明做进一步说明。在主机和固态硬盘之间进行数据传输,固态硬盘包括控制芯片、内存芯片和闪存芯片。其中,闪存芯片采用三星K9LCG08U1M型芯片;固态硬盘的页大小为32KB。其具体实施步骤为:
步骤1:在固态硬盘的内存中创建I个空闲页双向循环链表、I个整页双向循环链表、I个零碎页双向循环链表和I个缓冲区。所述空闲页双向循环链表有128个节点。所述空闲页双向循环链表中的每个节点包含I个指针。所述整页双向循环链表和零碎页双向循环链表均为空。所述整页双向循环链表和零碎页双向循环链表中的每个节点都有一个标志量Flag,用于表示该节点指向的缓存区中的页面是否修改过,设置Flag=0。所述整页双向循环链表中的每个节点包含I个指针。所述零碎页双向循环链表中的每个节点包含2个指针,分别称为头指针和尾指针。所述缓冲区的大小为所述固态硬盘的页面大小的128倍,即4M。步骤2:将步骤I中创建的缓冲区分为128个页面,每个缓冲区页面的大小与所述固态硬盘的页面大小相同;然后依次使所述空闲页双向循环链表第I个节点的指针指向缓冲区第I个页面的起始地址,使所述空闲页双向循环链表第2个节点中的指针指向缓冲区第2个页面的起始地址,以此类推,使所述空闲页双向循环链表第128个节点中的指针指向缓冲区第128个页面的起始地址。步骤3:当主机请求对所述固态硬盘进行读/写操作时,根据请求的读/写地址查找读/写操作页是否缓存在固态硬盘的缓存区中。若固态硬盘的缓冲区中有该读/写操作页的缓存,则直接在该读/写操作页的缓存上进行读/写操作,并在写操作后,设置该节点的标志量Flag=I。若固态硬盘的缓冲区中没有该读/写操作页的缓存,则判断空闲页双向循环链表是否为空,如空闲页双向循环链表为空,则采用缺页调度算法进行缺页调度操作,然后执行步骤4的操作。如空闲页双向循环链表不为空,则执行步骤4的操作。所述缺页调度算法具体为:第a步:判断整页双向循环链表是否为空,如不为空,则从整页双向循环链表的尾部选择一个标志量Flag=I的节点,将该节点称为待写回整页节点;将该待写回整页节点中指针指向的缓冲区中的页内容写入固态硬盘的闪存中;然后为空闲页双向循环链表增加一个新节点,并使该新节点的指针指向待写回整页节点中指针指向的地址;再从整页双向循环链表中删除该待写回整页节点。如果整页双向循环链表为空,则执行第b步的操作。第b步:从零碎页双向循环链表的尾部选择一个标志量Flag=I的节点,将该节点称为待写回零碎页节点;将该待写回零碎页节点中指针指向的缓冲区中的页内容写入固态硬盘的闪存中;然后为空闲页双向循环链表增加一个新节点,并使该新节点的指针指向待写回零碎页节点中指针指向的地址;再从零碎页双向循环链表中删除该待写回零碎页节点。所述缺页调度算法在进行缺页调度时,遵循堆栈型LRU替换原则,即从整页双向循环链表和零碎页双向循环链表的尾部开始向前选择一个节点进行缺页替换操作。步骤4:判断步骤3中所述对读/写操作页的操作是对该页的整页操作还是部分操作,如果是对整页操作,则从空闲页双向循环链表中摘出一个节点插入到整页双向循环链表,将该节点称为新增整页节点;然后根据步骤3中所述主机对固态硬盘进行读/写操作的地址,将该读/写操作页的内容从闪存中读入到新增整页节点中的指针指向的内存缓冲区页面;在该读/写操作页的缓存上进行读/写操作,并在写操作后,设置该节点的标志量Flag=10如果进行的是部分操作,则从空闲页双向循环链表中摘出一个节点,并为零碎页双向循环链表增加一个节点,将该节点称为新增零碎页节点,使新增零碎页节点的头指针指向从空闲页双向循环链表中摘出的节点中指针指向的页面的起始地址;然后根据步骤3中所述主机对固态硬盘进行读/写操作的地址,将该读/写操作页的内容从闪存中读入到新增零碎页节点中头指针指向的内存缓冲区页面;在该读/写操作页的缓存上进行读/写操作,并在写操作后,设置该节点的标志量Flag=I ;最后,使新增零碎页节点的头指针指向缓冲区中该读/写操作页的非空第一个字节的地址,使新增零碎页节点的尾指针指向该读/写操作页的非空最后一个字节的地址。当固态硬盘的处于空闲状态时,将缓存区中的数据写入闪存的操作,其具体步骤为:步骤a:检查零碎页双向循环链表,判断其中是否存在待转移整页节点,若存在待转移整页节点,则在整页双向循环链表的头部增加一个新节点,并使该新节点的指针指向待转移整页节点头指针指向的地址,再从零碎页双向循环链表中删除待转移整页节点。所述待转移整页节点是零碎页双向循环链表中头指针指向对应缓存区页面的起始地址,尾指针指向对应缓存区页面的结束地址的节点。步骤b:从整页双向循环链表的尾部选择一个标志量Flag=I的节点,将该节点指向的页面数据写入固态硬盘的闪存中,并设置标志量Flag=0。当整页双向循环链表没有标志量Flag=I的节点时,在零碎页双向循环链表的尾部选取一个标志量Flag=I的节点,将该节点指向的页面数据写入固态硬盘的闪存中,并置标志量Flag=0。这样,当固态硬盘突然断电时,整页双向循环链表和零碎页双向循环链表中仅有少量Flag=I的节点指向的页面数据没有存储到固态硬盘的闪存中,可以在短时间内将缓存的数据写入固态硬盘,避免数据丢失。
权利要求
1.一种提高固态硬盘数据传输效率的方法,用于主机与固态硬盘之间的数据传输,所述固态硬盘包括控制芯片、内存芯片和闪存芯片;其特征在于:其具体实施步骤为: 步骤1:在固态硬盘的内存中创建I个空闲页双向循环链表、I个整页双向循环链表、I个零碎页双向循环链表和I个缓冲区; 所述空闲页双向循环链表有N个节点,N为正整数;所述空闲页双向循环链表中的每个节点包含I个指针; 所述整页双向循环链表和零碎页双向循环链表均为空; 所述整页双向循环链表和零碎页双向循环链表中的每个节点都有一个标志量,用符号Flag表示,Flag用于表示该节点指向的缓存区中的页面是否修改过,设置Flag=O ; 所述整页双向循环链表中的每个节点包含I个指针; 所述零碎页双向循环链表中的每个节点包含2个指针,分别称为头指针和尾指针; 所述缓冲区的大小为所述固态硬盘的页面大小的N倍; 步骤2:将步骤I中创建的缓冲区分为N个页面,每个缓冲区页面的大小与所述固态硬盘的页面大小相同;然后依次使所述空闲页双向循环链表第I个节点的指针指向缓冲区第I个页面的起始地址,使所述空闲页双向循环链表第2个节点中的指针指向缓冲区第2个页面的起始地址,以此类推,使所述空闲页双向循环链表第N个节点中的指针指向缓冲区第N个页面的起始地址; 步骤3:当主机请求对所述固态硬盘进行读/写操作时,根据请求的读/写地址查找读/写操作页是否缓存在固态硬盘的缓存区中; 若固态硬盘的缓冲区中有该读/写操作页的缓存,则直接在该读/写操作页的缓存上进行读/写操作,并在写操作后,设置该节点的标志量Flag=I ; 若固态硬盘的缓冲区中没有该读/写操作页的缓存,则判断空闲页双向循环链表是否为空,如空闲页双向循环链表为空,则采用缺页调度算法进行缺页调度操作,然后执行步骤4的操作;如空闲页双向循环链表不为空,则执行步骤4的操作; 所述缺页调度算法具体为: 第a步:判断整页双向循环链表是否为空,如不为空,则从整页双向循环链表的尾部选择一个标志量Flag=I的节点,将该节点称为待写回整页节点;将该待写回整页节点中指针指向的缓冲区中的页内容写入固态硬盘的闪存中;然后为空闲页双向循环链表增加一个新节点,并使该新节点的指针指向待写回整页节点中指针指向的地址;再从整页双向循环链表中删除该待写回整页节点;如果整页双向循环链表为空,则执行第b步的操作; 第b步:从零碎页双向循环链表的尾部选择一个标志量Flag=I的节点,将该节点称为待写回零碎页节点;将该待写回零碎页节点中指针指向的缓冲区中的页内容写入固态硬盘的闪存中;然后为空闲页双向循环链表增加一个新节点,并使该新节点的指针指向待写回零碎页节点中指针指向的地址;再从零碎页双向循环链表中删除该待写回零碎页节点;步骤4:判断步骤3中所述对读/写操作页的操作是对该页的整页操作还是部分操作,如果是对整页操作,则从空闲页双向循环链表中摘出一个节点插入到整页双向循环链表,将该节点称为新增整页节点;然后根据步骤3中所述主机对固态硬盘进行读/写操作的地址,将该读/写操作页的内容从闪存中读入到新增整页节点中的指针指向的内存缓冲区页面; 在该读/写操作页的缓存上进行读/写操作,并在写操作后,设置该节点的标志量Flag=I ;如果进行的是部分操作,则从空闲页双向循环链表中摘出一个节点,并为零碎页双向循环链表增加一个节点,将该节点称为新增零碎页节点,使新增零碎页节点的头指针指向从空闲页双向循环链表中摘出的节点中指针指向的页面的起始地址;然后根据步骤3中所述主机对固态硬盘进行读/写操作的地址,将该读/写操作页的内容从闪存中读入到新增零碎页节点中头指针指向的内存缓冲区页面;在该读/写操作页的缓存上进行读/写操作,并在写操作后,设置该节点的标志量Flag=I ;最后,使新增零碎页节点的头指针指向缓冲区中该读/写操作页的非空第一个字节的地址,使新增零碎页节点的尾指针指向该读/写操作页的非空最后一个字节的地址。
2.如权利要求1所述的一种提高固态硬盘数据传输效率的方法,其特征在于:还包括:在固态硬盘的处于空闲状态时,将缓存区中的数据写入闪存的操作,其具体步骤为: 步骤a:检查零碎页双向循环链表,判断其中是否存在待转移整页节点,若存在待转移整页节点,则在整页双向循环链表的头部增加一个新节点,并使该新节点的指针指向待转移整页节点头指针指向的地址,再从零碎页双向循环链表中删除待转移整页节点; 所述待转移整页节点是零碎页双向循环链表中头指针指向对应缓存区页面的起始地址,尾指针指向对应缓存区页面的结束地址的节点; 步骤b:从整页双向循环链表的尾部选择一个标志量Flag=I的节点,将该节点指向的页面数据写入固态硬盘的闪存中,并设置标志量Flag=O ;当整页双向循环链表没有标志量Flag=I的节点时,在零碎页双向循环链表的尾部选取一个标志量Flag=I的节点,将该节点指向的页面数据写入固态硬盘的闪存中,并置标志量Flag=O;这样,当固态硬盘突然断电时,整页双向循环链表和零碎页双向循环链表中仅有少量Flag=I的节点指向的页面数据没有存储到固态 硬盘的闪存中,可以在短时间内将缓存的数据写入固态硬盘,避免数据丢失。
全文摘要
本发明涉及一种提高固态硬盘数据传输效率的方法,属于计算机数据存储技术领域。本发明方法通过采用一种基于双向循环链表实现的数据缓冲机制和一种仿堆栈型LRU(Least Recently Used,最近最少使用算法)缺页调度算法,有效解决了固态硬盘地址不对齐的问题,从而提高数据传输效率。
文档编号G06F12/02GK103198021SQ201310135328
公开日2013年7月10日 申请日期2013年4月18日 优先权日2013年4月18日
发明者张全新, 朱瑞瑾, 李元章, 王文明, 马忠梅, 张雪兰, 谭毓安 申请人:北京理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1