固态硬盘的驱动方法及装置的制作方法

文档序号:6400770阅读:369来源:国知局
专利名称:固态硬盘的驱动方法及装置的制作方法
技术领域
本发明涉及电子信息技术领域,特别是涉及一种固态硬盘的驱动方法及装置。
背景技术
Linux I/O (Input/Output,输入/输出)子系统的架构设计受当时主流的储存介质影响,即基于机械转动的磁盘,机械磁盘的I/o性能一直以来都是系统的瓶颈。为了能最大限度利用好有限的磁盘I/o资源,Linux I/O子系统的设计上引入了 I/O调度器(I/Oscheduler),利用I/O调度器对重复、相连的I/O操作请求合并,以及按照扇区的顺序方向对I/O操作请求排序,从而减少实际发生的磁盘I/O次数和磁盘寻道时间。随着储存技术的发展,存储介质也发生了巨大变化,但现有的I/O调度器一直沿用至今。I/O调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,以减少机械磁盘磁头的寻道时间,这种实现就被称为I/o调度算法。为了适应不同的应用场景、性能、时效性方面的需求,Linux内核从2.6开始引入了 4种不同的I/O调度算法,以针对不同类型的应用程序优化磁盘I/O性能,该4种不同的I/O调度算法包括:CFQ (Completely Fair Queuing完全公平队列)算法,Deadline (最后期限)算法,Noop(无干预)算法,Anticipatory (预期)算法。现有的I/O调度层的调度算法在顺序I/O操作下能对机械式磁盘的I/O性能起到明显的优化效果,但是随着技术的发展,采用闪存颗粒(flash disk)的固态硬盘开始逐渐取代带有机械磁盘磁头的机械磁盘。由于闪存颗粒采用顺序方式进行读写,其与机械磁盘所采用的磁盘转动的读写方式截然不同,因此现有的I/O调度层的调度算法对于固态硬盘而言,往往会增加处理复杂度,延长处理时间,从而造成功耗和成本的浪费。

发明内容
本发明实施例主要解决的技术问题是提供一种固态硬盘的驱动方法及装置,在处理针对固态硬盘的I/o操作请求时,可有效简化处理过程,并能有效缩减处理时间,以降低功耗及成本。第一方面提供一种固态硬盘的驱动方法,该方法应用于操作系统,操作系统包括通用块层、I/o调度层、块设备驱动层,该方法包括:接收通用块层发出的记录有操作指令的块I/o请求;将块I/O请求格式转换为记录有操作指令的I/O操作请求,其中I/O操作请求为I/o调度层的基本操作单元;将I/O操作请求插入到I/O调度层的I/O设备请求队列的空位置;从I/o设备请求队列的空位置获取I/O操作请求,将I/O操作请求发送给块设备驱动层;根据块设备驱动层接收到的I/o操作请求中记录的操作指令驱动固态硬盘。在第一方面的第一种可能的实现方式中,操作指令包括读指令和写指令中的任意一种或两种。在第一方面的第二种可能的实现方式中,块I/O请求设置为bio结构体,I/O操作请求设置为request结构体。
在第一方面的第三种可能的实现方式中,操作系统包括Iinux操作系统或unix操作系统。第二方面提供一种固态硬盘的驱动装置,该驱动装置应用于操作系统,操作系统包括通用块层、I/o调度层、块设备驱动层,该装置包括:块I/O请求接收模块,用于接收通用块层发出的记录有操作指令的块I/o请求;格式转换模块,用于将块I/O请求格式转换为记录有操作指令的I/o操作请求,I/O操作请求为I/O调度层的的基本操作单元;插入模块,用于将I/o操作请求插入到I/O调度层的I/O设备请求队列的空位置;1/0操作请求获取模块,用于从I/o设备请求队列的空位置获取I/O操作请求,将I/O操作请求发送给块设备驱动层;驱动模块,用于根据块设备驱动层接收到的I/o操作请求中记录的操作指令驱动固态硬盘。在第二方面的第一种可能的实现方式中,操作指令包括读指令和写指令中的任意一种或两种。在第二方面的第二种可能的实现方式中,块I/O请求设置为bio结构体,I/O操作请求设置为request结构体。在第二方面的第三种可能的 实现方式中,操作系统包括Iinux操作系统或unix操作系统。区别于现有技术的情况,本发明实施例主要解决的技术问题是提供一种固态硬盘的驱动方法及装置,该方法及装置应用于操作系统,通过将I/o操作请求插入到I/O调度层的I/o设备请求队列的空位置,从该空队列位置获取I/O操作请求,从I/O设备请求队列的空位置获取I/o操作请求,将I/O操作请求发送给块设备驱动层,根据I/O操作请求中记录的操作指令驱动固态硬盘,由于本发明实施例并没有对I/o操作请求进行合并、排序等复杂的调度过程,因此更为适合于采用闪存颗粒(flash disk)的固态硬盘,从而在驱动固态硬盘时,能有效缩减处理时间,并且可降低功耗及成本。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1是本发明实施例的固态硬盘的驱动方法第一实施例的流程示意图;图2是本发明实施例的固态硬盘的驱动方法第二实施例的流程图;图3是本发明实施例的固态硬盘的驱动装置第一实施例的装置结构示意图;图4是本发明实施例的固态硬盘的驱动装置第二实施例的结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,图1是本发明实施例的固态硬盘的驱动方法第一实施例的流程示意图,如图1所示,本发明实施例提供的固态硬盘的驱动方法应用于操作系统,该操作系统包括通用块层、I/o调度层、块设备驱动层。该方法包括以下步骤:步骤101:接收通用块层发出的记录有操作指令的块I/O请求。块I/O请求是Linux通用块层中块I/O的描述符,详细描述一个磁盘数据块I/O相关的信息。步骤102:将块I/O请求格式转换为记录有操作指令的I/O操作请求,其中I/O操作请求为I/O调度层的基本操作单元,也是设备驱动程序的处理对象,描述一个需要被处理的I/O操作。步骤103:将I/O操作请求插入到I/O调度层的I/O设备请求队列的空位置。其中,I/o设备请求队列为Linux内核中描述一个块设备需要处理的所有I/O操作请求组成的一个队列。步骤104:从I/O设备请求队列的空位置获取I/O操作请求,将I/O操作请求发送给块设备驱动层。步骤105:根据块设备驱动层接收到的I/O操作请求中记录的操作指令驱动固态
硬盘。 由于固态硬盘采用闪存颗粒(flash disk),闪存颗粒采用顺序方式进行读写,其读取机制与内存相仿,因此读取固态硬盘无需进行磁盘寻道,并且固态硬盘没有对I/O操作请求的合并、排序等调度需求。因此,由于闪存颗粒采用顺序方式进行读写,其与机械磁盘所采用的磁盘转动的读写机制截然不同,故本发明实施例将I/O操作请求插入到I/O调度层的I/O设备请求队列的空位置,从该空队列位置获取I/O操作请求,从I/O设备请求队列的空位置获取I/O操作请求,将I/O操作请求发送给块设备驱动层,根据I/O操作请求中记录的操作指令驱动固态硬盘。从而跳过对I/O操作请求进行合并、排序等复杂的调度过程,更为适合于采用闪存颗粒(flash disk)的固态硬盘,在驱动固态硬盘时,能有效缩减处理时间,并且可降低功耗及成本。值得注意的是,上述的操作系统举例而言可为Iinux操作系统或unix操作系统。以下请参见图2,图2是本发明实施例的的固态硬盘的驱动方法第二实施例的流程图。如图2所示,在本发明实施例所揭示的操作系统设置有文件系统层301、通用块层305、I/O调度层302、块设备驱动层303以及设备层304。其中,文件系统层301内设置有文件系统306,文件系统306包括多个页面缓存307,页面缓存307包括块缓冲器308,块缓冲器308包括多个块I/O请求,块I/O请求设置为Mo结构体,其中块I/O请求记录有操作指令,文件系统层301传输该块I/O请求至通用块层305。通用块层305获取块I/O请求,并将其发送至I/O调度层。I/O调度层302设置有I/O设备请求队列311,I/O设备请求队列311包括多个位置,多个I/o操作请求分别设置在多个位置中,以在I/O设备请求队列311进行排列,图2中虚线框所圈住的位置为非空位置,位置320为空位置。块设备驱动层303设置有存储设备驱动器313。设备层304所设置的设备类型为固态硬盘。
以下将结合图2对具体的写操作流程进行详细介绍,在本发明实施例中,当操作系统捕获到用于写入固态硬盘的进程305时,操作系统产生记录有写操作指令的块I/O请求309,块缓冲器308获取该记录有写操作指令的块I/O请求309并发送至通用块层305。在通用块层305获取块I/O请求309,并将其发送至I/O调度层302。接收通用块层305发出的块I/O请求309,将块I/O请求309格式转换为记录有操作指令的I/o操作请求310,其中,这里所作格式转换具体而言是将格式为bio结构体的块I/O请求309转换为格式为request结构体的I/O操作请求310。bio结构体为现有技术定义的应用于块I/O请求的一种基本结构体,request结构体为现有技术定义的应用于I/O操作请求的一种基本结构体。将I/O操作请求310插入到I/O设备请求队列311的空位置320。并从该空位置320获取I/O操作请求310,将该I/O操作请求310发送给块设备驱动层303。根据块设备驱动层303接收到的I/O操作请求310中记录的写操作指令驱动设备层304中的固态硬盘313,使得固态硬盘313可进行写入动作。值得注意的是,以上所列的实施方式为操作指令为写指令的流程,而操作指令为读指令的流程与上述流程类似,于此不作赘述。因此,在本发明基 于操作系统的固态硬盘的驱动方法第二实施例中,相对于现有技术而言省略了复杂的I/o调度过程,将I/O操作请求放置到I/O设备请求队列的空位置上,并直接从该空位置获取I/o操作请求,由于省略复杂的I/O调度过程,因此能简化现有技术中的I/o协议栈,缩短I/O传输的路径深度,减少I/O传输的资源消耗和延时有效缩减处理时间,并且可降低功耗及成本,更为适合针对固态硬盘的高并发、高随机性的I/O操作请求。以下请参见图3,图3是本发明实施例的固态硬盘的驱动装置第一实施例的装置结构示意图。固态硬盘的驱动装置20应用于操作系统,操作系统包括通用块层、I/O调度层、块设备驱动层,如图3所示,该装置20包括块I/O请求接收模块201、格式转换模块202、插入模块203、I/O操作请求获取模块204以及驱动模块205。其中:块I/O请求接收模块201,用于接收通用块层发出的记录有操作指令的块I/O请求;格式转换模块202,用于将块I/O请求格式转换为记录有操作指令的I/O操作请求,I/O操作请求为I/O调度层的的基本操作单元;插入模块203,用于将I/O操作请求插入到I/O调度层的I/O设备请求队列的空
位置;I/O操作请求获取模块204,用于从I/O设备请求队列的空位置获取I/O操作请求,将I/O操作请求发送给块设备驱动层;驱动模块205,用于根据块设备驱动层接收到的I/O操作请求中记录的操作指令驱动固态硬盘206。可选地,操作指令包括读指令和写指令中的任意一种或两种。可选地,块I/O请求设置为bio结构体,I/O操作请求设置为request结构体。可选地,操作系统包括Iinux操作系统或unix操作系统。
由于闪存颗粒采用顺序方式进行读写,其与机械磁盘所采用的磁盘转动的读写机制截然不同,本发明实施例将I/o操作请求插入到I/O调度层的I/O设备请求队列的空位置,从该空队列位置获取I/o操作请求,从I/O设备请求队列的空位置获取I/O操作请求,将I/o操作请求发送给块设备驱动层,根据I/O操作请求中记录的操作指令驱动固态硬盘。从而跳过对I/o操作请求进行合并、排序等复杂的调度过程,更为适合于采用闪存颗粒(flash disk)的固态硬盘,在驱动固态硬盘时,能有效缩减处理时间,并且可降低功耗及成本。以下请参见图4,图4是本发明固态硬盘的驱动装置第二实施例的结构示意图,如图4所示,本发明固态硬盘的驱动装置30包括存储器33、处理器31以及总线35,其中存储器33以及处理器31分别与总线35连接,以通过总线35进行数据交互。本发明固态硬盘的驱动装置30用于驱动固态硬盘32,固态硬盘32与总线35连接,以通过总线35与存储器33、处理器31进行数据交互。需说明的是,固态硬盘32也可以为固态硬盘的驱动装置30内部。在本发明的其它一些实施例中,存储器33、处理器31以及固态硬盘32也可以不通过总线35直接连接。存储器33可以实现为计算机的软盘、U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等的一种或多种。存储器33存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:
应用程序331包括各种应用程序,例如办公室应用软件、绘图软件或各种编辑软件,用于实现各种应用业务,在本发明实施例中,应用程序331可激活操作系统332中用于对固态硬盘32进行操作的进程,该进程包括写入固态硬盘32的进程、读取固态硬盘32的进程或擦除固态硬盘32内存储内容的进程。操作系统332包括各种系统程序,例如图1所示的文件系统层、通用块层、1/0调度层、块设备驱动层以及设备层等,用于实现各种基础业务以及处理基于硬件的任务。在本发明实施例中,处理器31通过调用存储器33中存储的程序(该程序可以通过应用程序实现,也可以通过操作系统来实现,在通过操作系统来实现时,具体可以将操作系统的内核进行重新编译,以新的操作系统内核形式存储在操作系统中),执行如下操作:接收通用块层发出的记录有操作指令的块1/0请求;将块1/0请求格式转换为记录有操作指令的1/0操作请求,其中1/0操作请求为I/o调度层的基本操作单元;将1/0操作请求插入到1/0调度层的1/0设备请求队列的空位置;从1/0设备请求队列的空位置获取1/0操作请求,将1/0操作请求发送给块设备驱动层;根据块设备驱动层接收到的1/0操作请求中记录的操作指令驱动固态硬盘32。进一步的,本发明实施例提供的终端设备还可以包括输入设备,用户可以使用输入设备向应用程序输入对固态硬盘32进行操作的命令,以激活操作系统中用于对固态硬盘32进行操作的进程,在其它一些实施例中,对固态硬盘32进行操作的命令也可以直接来自于操作系统。输入设备可以实现为触摸屏、鼠标、键盘等。
如图4所示各个模块通过总线35连接,该总线35可以是ISA( Industry StandardArchitecture,工业标准体系结构)总线、PCI (Peripheral Component,外部设备互连)总线或EISA(Extended Industry Standard Architecture,扩展工业标准体系结构)总线等。所述总线35可以是一条或多条物理线路,当是多条物理线路时可以分为地址总线、数据总线、控制总线等。在本发明实施例其它一些实现方式中,本发明实施例提供的各个模块也可以不通过总线35的方式连接,而根据信号传递关系直接建立通信连接。需说明的是,存储器33中存储的程序的模块划分可以参考前述实施例的模块划分方式,也可以采用另外的模块划分方式。可选地,操作指令包括读指令和写指令中的一种或任意两种。可选地,块I/O请求设置为bio结构体,I/O操作请求设置为request结构体。可选地,操作系统包括Iinux操作系统或unix操作系统。由于对固态硬盘32进行读写操作无需进行磁盘寻道,因此在本实施例中通过将I/o操作请求直接插入到I/O设备请求队列的空位置,从该空队列位置获取I/O操作请求,并根据I/O操作请求中记录的操作指令驱动固态硬盘32,而固态硬盘32没有对I/O操作请求的合并、排序等调度需求,因此本发明实施例省略了对I/O操作请求进行合并、排序等复杂的调度过程,从而能有效缩减处 理时间,并且可降低功耗及成本。另外,在本申请所提供的几个实施方式中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例实施方式仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例实施方式方案的目的。另外,在本申请各个实施例实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发 明的专利保护范围内。
权利要求
1.一种固态硬盘的驱动方法,其特征在于,所述方法应用于操作系统,所述操作系统包括通用块层、I/o调度层、块设备驱动层,所述方法包括: 接收所述通用块层发出的记录有操作指令的块I/o请求; 将所述块I/o请求格式转换为记录有所述操作指令的I/O操作请求,其中所述I/O操作请求为所述I/o调度层的基本操作单元; 将所述I/o操作请求插入到所述I/O调度层的I/O设备请求队列的空位置; 从所述I/o设备请求队列的空位置获取所述I/O操作请求,将所述I/O操作请求发送给所述块设备驱动层; 根据所述块设备驱动层接收到的所述I/o操作请求中记录的所述操作指令驱动固态硬盘。
2.根据权利 要求1所述的方法,其特征在于,所述操作指令包括读指令和写指令中的任意一种或两种。
3.根据权利要求1所述的方法,其特征在于,所述块I/O请求设置为bio结构体,所述I/o操作请求设置为request结构体。
4.根据权利要求1所述的方法,其特征在于,所述操作系统包括Iinux操作系统或unix操作系统。
5.一种固态硬盘的驱动装置,其特征在于,所述驱动装置应用于操作系统,所述操作系统包括通用块层、I/O调度层、块设备驱动层,所述装置包括: 块I/o请求接收模块,用于接收所述通用块层发出的记录有操作指令的块I/O请求; 格式转换模块,用于将所述块I/o请求接收模块接收的所述块I/O请求格式转换为记录有所述操作指令的I/o操作请求,所述I/O操作请求为所述I/O调度层的的基本操作单元; 插入模块,用于将所述格式转换模块转换获得的所述I/o操作请求插入到所述I/O调度层的I/o设备请求队列的空位置; I/o操作请求获取模块,用于从所述I/O设备请求队列的空位置获取所述I/O操作请求,将所述I/o操作请求发送给所述块设备驱动层; 驱动模块,用于根据所述块设备驱动层接收到的所述I/o操作请求中记录的所述操作指令驱动固态硬盘。
6.根据权利要求5所述的装置,其特征在于,所述操作指令包括读指令和写指令中的任意一种或两种。
7.根据权利要求5所述的装置,其特征在于,所述块I/O请求设置为bio结构体,所述I/o操作请求设置为request结构体。
8.根据权利要求5所述的装置,其特征在于,所述操作系统包括Iinux操作系统或unix操作系统。
全文摘要
本发明公开了一种固态硬盘的驱动方法及装置,该方法包括接收通用块层发出的记录有操作指令的块I/O请求;将块I/O请求格式转换为记录有操作指令的I/O操作请求,其中I/O操作请求为I/O调度层的基本操作单元;将I/O操作请求插入到I/O调度层的I/O设备请求队列的空位置;从I/O设备请求队列的空位置获取I/O操作请求,将I/O操作请求发送给块设备驱动层;根据块设备驱动层接收到的I/O操作请求中记录的操作指令驱动固态硬盘。通过上述技术方案,本发明能有效缩减处理时间,并且可降低功耗及成本。
文档编号G06F3/06GK103226448SQ20131009303
公开日2013年7月31日 申请日期2013年3月21日 优先权日2013年3月21日
发明者顾政 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1