用于控制usb大容量存储设备的逻辑单元的方法和系统的制作方法

文档序号:6614775阅读:216来源:国知局
专利名称:用于控制usb大容量存储设备的逻辑单元的方法和系统的制作方法
技术领域
本发明涉瓦基于通用串行总线的大容量存储技术,更具体的,本发明 涉及一种用于控制大容量存^i殳备的逻辑单元的方法和大容量存^i殳备、 大容量存储设备驱动器以及大容量存储系统。
背景技术
通用串行总线(USB)大容量存^i殳备类(USB mass storage device class )是由USB-IF ( USB实施者论坛)定义的运行在USB上的计算通信 协议集,其包括(l)USB大容量存储设备类控制/批量/中断
(control/bulk/interrupt或CBI)传输;(2 ) USB大容量存储设备类批 量单独(bulk-only)传输。其还包括了以下的子类规范(1) USB大容 量存储设备类ATA命令块;(2) USB大容量存^i殳备类UFI命M范;
(3) USB大容量存^i殳备类RBC命4^L范;(4) USB大容量存储设 备类QIC-157命4*范;(5) USB大容量存^i殳备类SFF-8070i命令 规范;(6) SCSI透明命令集。前两个传输协议定义了数据/命令/状态在 USB上的传输方法CBI传输规范使用control/bulk/interrupt三种类型的 端点进行数据/命令/状态传送,而bulk-only传输规范仅仅使用批量(bulk) 端点来传输数据/命令/状态。大多数USB存储设备都是基于bulk-only传 输规范和SCSI透明命令集设计的。bulk-only在大部分通信中使用批量传 输,只有在bulk端点上清除阻塞(Stall)状况,以及传送特定类别请求
(class-specific request)时才使用控制传输。
通常将诸如硬盘驱动器(HDD)等遵循该规范连接到计算机的存储设 备称为USB大容量存储设备。典型地,将通过USB批量单独(bulk-only ) 传输协议与计算机通信的存储设备称为USB批量单独传输大容量存储设
5备(USB bulk-only mass storage device)。这种i殳备被广泛地用在个人计 算机和嵌入式系统中,例如USB磁盘/软盘/CD/DVD、多功能媒体读卡器、 移动电话、照相机和扫描仪。
USB批量单独传输大容量存储设备支持共享共同设备特性的多个逻 辑单元,逻辑单元可以是物理存储单元或者逻辑地址空间,每个逻辑单元 可以由逻辑单元号(LUN)来标识。
图1为例示具有多个逻辑单元的USB大容量存储系统的示意图,如图 所示,大容量存^i殳备通过USB批量单独接口 ( USB bulk-only interface) 与主机连接。大容量存^i殳备包括本地逻辑单元和远程逻辑单元,这些逻 辑单元既可以为物理器件,也可以是通过网络或者其它接口甚至通过各种 虚拟化技术连接到大容量存储设备的逻辑地址空间。在某些应用中,可能 需要在设备工作时动态地将新的逻辑单元添加到该大容量存储设备上,或 从其上去除现有的逻辑单元。
图2为例示USB大容量存储系统的结构框图。如图2所示,该系统包 括位于主计算机(下文中也称为"主机,,)上的USB大容量存储设备驱动 器堆栈20和USB主机控制器21,以及大容量存储设备22。大容量存^i殳 备驱动器堆栈20是一个多层次的结构,在驱动器堆栈20的底层是USB控 制器驱动器201 (controller driver)和USB核心驱动器202 (USB core driver),用来负责USB总线的数据传输。USB核心驱动器202提供了 一组通用接口来供USB驱动器来访问和控制USB硬件(即主机控制器和 大容量存储设备)的7>用接口,因此无需担心系统中存在的不同类型的 USB主机控制器21。在驱动器堆栈20的中间层是USB大容量存^i殳备 驱动器203 ( USB mass storage driver),负责实现USB大容量存^i殳备 类的各种子类规范和传输协议,例如典型的SCSI透明子类规范和 bulk-only传输协议。驱动器堆栈20上层是存储介质访问驱动器,对于大 多数USB bulk-only大容量存^i殳备22而言,进行具体的存储介质访问操 作一般是通过SCSI命令来完成的,所以在驱动器堆栈20的最上层一般是 SCSI驱动器204 (下文中对该层将直接使用SCSI驱动器来描述)。但是本领域技术人员可以理解,不同的子类规范,其上层可以有不同的驱动器。
USB大容量存储器驱动器203保存了设备特定的配置信息,并提供给上层 存储介质访问驱动器(SCSI驱动器204)适当的接口来使其与USB大容 量存储设备22通过不同的子类规范和传输协议通信。USB大容量存储器 驱动器203也需要将设备信息向上层驱动器传送,对于大多数bluk-oiily 存储设备而言,传送到SCSI驱动器204。 SCSI驱动器204认为每个有效 的逻辑单元都是独立的存储源,它将为其创建内部的SCSI设备对象,并 为每个设备对象在文件系统中注册独立的接入点,例如在linux系统中的 /dev/sccP或者/dev/sd、通过这些接入点,用户才莫式的应用可以将操作请求 发送到SCSI驱动器204, SCSI驱动器204将这些请求转换为具体的SCSI 命令,并通过内部的SCSI设备对象将它们向下传递到USB大容量存储器 驱动器203 ,以最终到达大容量存储设备22 。
一般而言,正常的USB bulk-only大容量存^i殳备的引导过程包括3 级初始化
1. 第一级-USB核心驱动器初始化
当插入USB大容量存储设备时,主计算机上的USB核心驱动器负责 为该USB设备分配唯一的地址。主计算机也会发送请求到USB设备以获 取配置信息来确定其能力和特性(capabilities and characteristics) 。 USB 设备可以有一种或多种配置,而在每一种配置中,设备可以支持多个接口。 接口是对主才几呈现单一特性或功能的端点的相关集。典型的USB批量单独 传输大容量存储i殳备包括缺省控制通道(Default Control Pipe)(端点0 ) 和bulk-only传输接口。
2. 第二级-USB大容量存^i殳备类初始化
USB大容量存储器驱动器将特定类别的请求"获得最大的逻辑单元 号"("GETMAXLUN")发送给缺省控制通道,通过返回的结果来确 定该设备支持的逻辑单元数。大容量存储设备的逻辑单元数将从LUN 0开 始到最大值LUN15 (十六进制为0x0F)连续编号。此外,USB大容量存 ^i殳备驱动器将分配所需的资源并记录相应的信息,还向SCSI驱动器报
7告该存储i殳备。
3.第三级-SCSI层初始化
SCSI驱动器将发送"查询"("INQUIRY")命令给从O到最大LUN 编号的逻辑单元以完成初始化过程。每个逻辑单元被认为是单独的存储装 置,对"查询"命令的响应指示这些单独的存储装置的特性。最后SCSI 驱动器将所有这些存储装置提供给操作系统。
这样,USB bulk-only大容量存^i殳备完成其引导过程。现在所有的 逻辑单元都是可操作的。
虽然USB技术支持USB设备的热即插即用,但是USB大容量存储设 备不支持其逻辑单元的热即插即用。图3和图4分别为现有技术的对大容 量存储设备的逻辑单元进行添加和去除的流程图。如图3和图4所示,当 对大容量存^i殳备插入或去除逻辑单元时,需要从USB总线上断开该设 备。当主才几得知该设备,皮移除时,USB驱动器将通知SCSI驱动器除去所 有的逻辑单元。然后,大容量存^i更备重新配置自己的逻辑单元,再重新 连接到USB总线。主机重新初始化该设备,即USB驱动器通过"获得最 大的逻辑单元号"请求来获取该设备支持的逻辑单元的最大数目,并将其 向SCSI驱动器报告,SCSI驱动器将发送"查询"命令给该设备当前连接 的每个逻辑单元以完成初始化过程。这一系列的操作导致主机USB核心驱 动器在添加或去除逻辑单元后重启新的引导过程并重新初始化所有的逻辑 单元。这将中断现在正在运行的使用这些逻辑单元的应用,虽然在理论上 这些只与未变化的逻辑单元通信的应用是不应该被中断的。
在现有技术条件下,由于逻辑单元的添加和去除会造成正在运行的应 用被中断,这将严重影响应用的性能、可用性和可靠性。于是,需要一种 更加智能的能够保证其逻辑单元热即插即用的USB大容量存^i殳备。

发明内容
针对上述问题,本发明提供了 一种用于控制大容量存储设备的逻辑单 元的方法、大容量存储设备、大容量存储设备驱动器以及大容量存储系统。根据本发明的第一方面,提供了一种用于控制大容量存^i殳备的逻辑 单元的方法,所述大容量存储设备通过USB接口连接到主计算机,所述方 法包括响应于对逻辑单元的添加和/或去除,在所述大容量存储设备上, 动态管理与逻辑单元关联的逻辑单元表并产生相应的热插拔事件;以及将 所述热插拔事件通知给所述主计算机。
根据本发明的第二方面,提供了一种大容量存^i殳备,具有多个逻辑 单元,所述存^i殳备包括逻辑单元管理装置,用于响应于对逻辑单元的 添加和/或去除,动态管理与逻辑单元关联的逻辑单元表;热插拔事件产生 装置,用于针对所述改变的逻辑单元产生相应的热插拔事件;以及通知装 置,用于将所述热插拔事件通过通用串行总线通知给主计算机。
根据本发明的第三方面,提供了一种大容量存^i殳备驱动器,包括 事件接收装置,用于通过通用串行总线接收来自所述大容量存储设备的与 其逻辑单元的添加和/或去除相关的热插拔事件;以及事件处理装置,用于 响应于接收到的热插拔事件,动态维护相应的逻辑单元表并将所述热插拔 事件通知上一层驱动器。
根据本发明的第四方面,提供了一种通用串行总线大容量存储系统, 包括上述的大容量存储设备和上述的大容量存储设备驱动器。
根据本发明的第五方面,提供了一种计算机程序产品,包括计算机可 执行指令,当在计算机设备上执行所述指令时,该指令致使所述设备被配 置为执行上述的方法。


结合附图,从下面对本发明的实施例的详细描述中本发明的目的、特 点和优点将显而易见,其中
图1为例示具有多个逻辑单元的USB大容量存储系统的示意图。 图2为例示USB大容量存储系统的结构框图3示出了现有技术的对大容量存储设备的逻辑单元进行添加操作的 序列图;图4示出了现有技术的对USB大容量存储设备的逻辑单元进行去除操 作的序列图5示出了根据本发明的实施例的用于控制大容量存储设备的逻辑单 元的方法的流程图6示出了根据本发明的实施例对大容量存储设备的逻辑单元进行添 加操作的序列图7示出了根据本发明的实施例对大容量存储设备的逻辑单元进行去
除^作的序列图8为示出根据本发明的实施例的热插拔事件的热插拔事件记录;
图9为例示大容量存储设备的逻辑单元发生变化的对照表;
图10示出了根据本发明的实施例当去除逻辑单元后如何处理来自主
机的命令的序列图11示出了根据本发明的实施例的与现有的大容量存^i殳备兼,
作的序列图12为示出根据本发明的实施例的大容量存^i殳备的方框图;以及 图13为示出根据本发明的实施例的大容量存储设备驱动器的方框图。
具体实施例方式
下面,结合附图对本发明的实施例进行详细描述。
图5为示出根据本发明的实施例的用于控制大容量存储设备的逻辑单 元的方法的流程图。在该方法中,大容量存^i史备通过USB接口连接到主 计算机,该方法包括响应于对大容量存储设备添加新的逻辑单元和/或从 中去除现有的逻辑单元,在大容量存储设备上动态管理(修改)与逻辑单 元关联的逻辑单元表并产生相应的热插拔事件;以及将该热插拔事件通知 给所述主计算机。
如图5所示,在步骤S501,检测是否对大容量存储设备添加了新的逻 辑单元或者去除了现有的逻辑单元。在步骤S502,响应于该添加或去除, 在大容量存储i殳备上对其逻辑单元表进行动态管理,逻辑单元表用于使用诸如逻辑单元号的标识来记录该大容量存储设备现有的每个激活的逻辑单 元,从而反映该大容量存储设备的逻辑单元的变化情况。例如,可以基于
逻辑单元号(LUN)对逻辑单元表进行管理当添加逻辑单元时,在设备 的逻辑单元表中新增一个逻辑单元号;在去除现有逻辑单元时,从该表中 将与该逻辑单元关联的逻辑单元号删除。这样,通过逻辑单元表可以实现 对逻辑单元的动态管理,也可以实现使用同一 LUN连接到主机系统的逻 辑设备接口对于同一 LUN的动态变化,例如LUN 3在某个时期可以代表 USB DVD驱动器,但是当拔出之后再插入新的装置时则代表该新的装置, 此时其可能是一个USB压缩闪存驱动器。
接下来,在步骤S503,在大容量存储设备上产生与逻辑单元关联的热 插拔事件,最后在步骤S504,大容量存#^殳备将热插拔事件通知给主计算 机。
如图6所示,在本发明的一个实施例中,当插入新的逻辑单元时,USB 大容量存^i殳备首先在逻辑单元表中为该逻辑单元分配新的逻辑单元号, 同时产生相应的热插拔事件(添加)记录。USB大容量存储器驱动器以特 定时间间隔定期向USB大容量存储设备发送"获得热插拔事件,,请求。该 请求用来查询USB大容量存储设备是否存在热插拔事件,如果有,该大容 量存储设备则以相应的热插拔事件作为响应。虽然提供了 USB大容量存储 设备驱动器在特定时间间隔定期向大容量存储设备查询是否存在热插拔事 件的具体的方法,本领域的普通技术人员应理解,以其它方式来获得热插 拔事件也在本发明的范围内。例如,也可以当出现某种状况时(例如主机 接收到某种状态命令),主机通过大容量存储设备驱动器非定时地向大容 量存储设备发送"获得热插拔事件"请求(即应命令而发送请求)。在本 实施例中,如果存在多个事件记录,可以一次报告一个,也可以一次报告 多个,这依赖于具体的实现方式。当存在多个热插拔事件时,可以按事件 发生的时间顺序才艮告给USB存储设备驱动器。 一旦USB大容量存储器驱 动器检测到添加了新的逻辑单元时,它要对自己的逻辑单元表进行相应地 修改,并向SCSI驱动器报告该变化。SCSI驱动器将单独对该新的逻辑单
ii元进行初始化处理,并将其报告给操作系统。在该过程中其它逻辑单元保 持未变,从而实现了该设备的逻辑单元的即插即用。
图7示出了根据本发明的实施例对大容量存^f^i殳备进行去除逻辑单元 处理的序列图。如图7所示,与添加逻辑单元相类似,如果逻辑单元被去 除,则USB大容量存储设备从其本地逻辑单元表中删除该逻辑单元号,并 产生相应的热插拔事件(去除)记录。USB大容量存储器驱动器在特定时 间间隔通过"获得热插拔事件"请求来查询是否存在热插拔事件。当它获 得热插拔事件时,修改其自己的逻辑单元表并通知SCSI驱动器释放在操 作系统中与该去除的逻辑单元相关的所有资源。
在本发明的实施例中,只要添加新的逻辑单元或去除现有的逻辑单元, 支持逻辑单元即插即用(PnP)的USB大容量存储设备就可以立刻产生热 插拔事件记录,并将其放入其本地事件FIFO队列。直到主计算机通过大 容量存^i殳备驱动器发送"获得热插拔事件"请求以查询是否发生热插拔 事件或主机重置,该大容量存储设备才可以清除相应的热插拔事件记录。 在主机重置情况下,清除所有的事件记录。
另一方面,驻留于主计算机的USB大容量存储设备驱动器可以以诸如 1000ms的特定时间间隔定期向USB大容量存储设备的缺省控制通道发送 "获得热插拔事件"请求。 一旦USB大容量存储设备接收到该请求,它将 检查其本地FIFO队列是否为空。如果队列不为空,那么它从该队列头部 取热插拔事件记录,并将其作为对该请求的响应返回给主计算机。当队列 为空时,返回0条记录。在本发明的实施例中,对该请求的响应的格式可 以是以第一个字节指示后面有多少个事件记录,其后跟着一个或多个热插 拔事件记录。如果该队列为空,则为0。
图8例示了根据本发明的实施例的热插拔事件记录的格式。其至少包 括以下信息事件类型和逻辑单元号。事件类型字段801用于表示添加新 的逻辑单元还是去除现有的某个逻辑单元,而逻辑单元号字段802用于指 示哪个逻辑单元了发生变化。
图9为例示才艮据本发明的实施例的大容量存储设备的逻辑单元发生变化的对照表。如图9所示,在本发明的实施例中,当首次连接USB大容量 存储设备时,如果其具有6个逻辑单元,则该设备在其逻辑单元表中为每 个逻辑单元分配连续的LUN,例如0、 1、 2、 3、 4和5。同样的,在获得 该设备具有的最大逻辑单元号后,USB大容量存^i殳备驱动器将向SCSI 驱动器净艮告最大的LUN为5 (即0-5共6个逻辑单元)。如图所示,在完 成初始化枚举过程之后,大容量存^i殳备驱动器和SCSI驱动器中也维持 着同样的逻辑单元表,其逻辑单元号为连续分布的0、 1、 2、 3、 4和5。
当从该设备去除逻辑单元2和4时,该设备检测到发生了这两个逻辑 单元的去除,作为对此的响应,从其逻辑单元表中删除与该逻辑单元关联 的逻辑单元号2和4,其逻辑单元表相应地变为0、 1、 3、 5,并产生表 明去除这些逻辑单元的热插拔事件,例如产生热插拔(去除)事件记录。 在这种情况下,大容量存储设备驱动器可以通过请求-响应的方式获得该事 件,相应地修改自己的逻辑单元表,使其变为0、 1、 3和5,并向SCSI 驱动器报告去除逻辑单元2和4,于是SCSI驱动器对其逻辑单元表进行处 理,也变为0、 1、 3和5。
当再次添加一个新的逻辑单元2时,该设备检测到添加了新的逻辑单 元,作为对此的响应,为该新的逻辑单元分配LUN,该逻辑单元表为0、 1、 2、 3和5,并相应地产生表明添加新的逻辑单元的热插拔事件,例如产 生热插拔事件(添加)记录。与去除的操作类似,大容量存^i殳备驱动器 在通过请求-响应方式获得该事件记录后相应地修改自己的逻辑单元表 (为0、 1、 2、 3和5)并向SCSI驱动器报告添加了新的逻辑单元2,于 是SCSI驱动器对其逻辑单元表进行处理,也变为0、 1、 2、 3和5。
实际上,在从大容量存储设备去除逻辑单元和主计算机通过大容量存 储设备驱动器检测到该热插拔事件之间存在较小的时间差。在该时间期间 主计算机可能继续向已去除的逻辑单元发送SCSI命令。图IO例示了根据 本发明的实施例的当去除逻辑单元后如何处理来自主机的命令的序列图。 该设备响应于检测到逻辑单元的去除,产生热插拔(去除)事件。在主机 获取这个事件前,如果SCSI驱动器继续向已去除的逻辑单元发送SCSI命令,则当该USB大容量存储设备接收到这些SCSI命令时,其可以将这 些SCSI命令的状态设置为"检测状态",并使该命令失效(fail),此外 还产生关于该命令失效的详细信息的诊断数据(sense data)。当主计算机 接收到该表示存在问题的SCSI状态时,USB大容量存储器驱动器将发送 "请求诊断数据"命令以查询该特定的失效命令的信息。于是USB大容量 存储设备以"未准备好(NOT READY)"诊断数据来进行响应。该状态 一直持续到USB大容量存储器驱动器检测该热插拔(去除)事件,并停止 向该逻辑i殳4^发送SCSI命令。
在本发明的实施例中,可选择的,当主机接收到这种表示存在问题的 状态信息时,主机通过大容量存^i史备驱动器向大容量存储设备发送"获 得热插拔事件,,的请求,以及时得到热插拔事件。
图11示出了根据本发明的实施例的与现有的大容量存^i殳备兼^ 作的序列图。考虑到不支持逻辑单元的热即插即用的现有的USB大容量存 储设备在缺省控制通道中接收到"获得热插拔事件"的情况,在本发明的实 施例中对此进行处理。根据USB协议,现有的USB大容量存储设备应该 立即为未知请求阻塞缺省控制通道,将其设置为阻塞(STALL)状态,并 在下一个请求到来之前清除该阻塞状态。于是主机中的USB大容量存储设 备驱动器获悉该设备为现有的USB大容量存储设备,将不再发送"获得热 插拔事件"请求。随后的操作遵循最初的流程。
在本发明的实施例中,大容量存^i殳备的LUN在初始化之后是连续 的,在出现任何热插拔事件之后可能会变为稀疏的。如图9所示,在去除 逻辑单元2和4之后,现有的激活的LUN为O、 1、 3、 5。如果在该情况 下主机将"获得最大LUN"命令发送给该设备,该设备会保持USB bulk-only大容量存储器协议定义的原始的意义以5来进行响应。优选的, 还可以提供"获得现在的位图"命令以使主机能够得到激活的逻辑单元的 现在的LUN位图,这样即使在丢失某些命令而使主机上的逻辑单元表不 能正确反映大容量存储设备的逻辑单元的情况下,也能够恢复到正确的状 态。例如,对该请求可以返回16位数据,每位代表该命令时的激活的LUN。在本发明的另一实施例中,可以保持LUN连续,这与USB大容量存 储类bulk-only子类规范原来的定义一致。当插入逻辑单元时,主机在以 前的最大LUN上增加相应的数。如果逻辑单元被去除并且它不是最后的 一个,则后面的LUN应该向前移动以填补空缺。如图9所示,例如在该 设备的逻辑单元2和4被去除之后,LUN应该是0、 1、 2、 3。下面详细 说明该过程
在保持逻辑单元号为连续的情况下,大容量存^i殳备产生的逻辑单元 事件记录使用的是发生事件当时的单元号。例如,该设备具有逻辑单元0、 1、 2、 3、 4和5,如果去除逻辑单元2和5,那么产生去除逻辑单元2和 去除逻辑单元5这两个事件。同时阻塞这个bulk-only端点,则后续的SCSI 命令将被暂停。主机在检测到STALL状态后,主动在缺省控制通道,即 端点0,发送一个"获得热插拔事件,,请求来取回这两个事件。此时主机USB 大容量存储设备驱动器得知逻辑单元2和5被删除了 ,那么立即将逻辑单 元3和4往前移,变成0, 1, 2, 3,同时将队列中等待的SCSI命令中的 目的逻辑单元号进行调整。比如原来是发往逻辑单元3的,现在发送到逻 辑单元2。接着通知SCSI驱动器把原来对应于逻辑单元2和5的SCSI设 备对象释放掉,此外还需要通知SCSI驱动器把原来对应于逻辑单元3和4 的SCSI设备对象中^^的逻辑单元号前移至2和3。最后通过缺省控制通 道通知USB大容量存储设备清除bulk-only状态,从而净皮暂停的SCSI命 令可以继续执行。如果在bulk-only端点被阻塞后,对"获得热插拔事件" 请求返回的结果是并没有发生热插拔事件,则这时可能发生了其他的异常 情况,后续的操作将遵守原来的流程。
对于去除逻辑单元,但并不改变现有逻辑单元号的情况下,情况会比 较简单。其不需要阻塞bulk-only端点,也不需要将队列中等待的SCSI 命令中的目的逻辑单元号进行调整。在该实施例中保持了 "获得最大LUN" 的语义,因此不需要"获得现在的位图"命令。
在去除逻辑单元的情况下,大容量存储设备也需要更新未变化的逻辑 单元的LUN,以与USB大容量存储设备驱动器同步而保持逻辑单元表为
15一致。
在同一个发明构思下,图12示出了根据本发明的一个实施例的大容量 存储设备的结构框图。在本实施例中,与前述实施例原理相同的部分将适 当省略其"i兌明。下面结合附图,对本实施例进行详细的描述。
如图12所示,具有多个逻辑单元的大容量存储设备12包括检测装 置125,用于检测是否发生逻辑单元的添加和/或去除;逻辑单元表管理装 置122,用于响应于对逻辑单元的添加和/或去除,动态管理与逻辑单元关 联的逻辑单元表;热插拔事件产生装置123,用于针对发生改变的逻辑单 元产生相应的热插拔事件;以及通知装置121,用于将热插拔事件通过通 用串行总线发送给主计算机。
优选的,该设备12还包括容错装置124,用于当收到向已去除的逻辑 单元发送的命令时,设置状态信息并使该命令失效,以及生成关于失效命 令的信息,并通过通知装置121将该信息发送到主计算机。
在本发明的实施例中,该设备的逻辑单元表管理装置122可以被配置 为在逻辑单元表中对添加的逻辑单元分配新的逻辑单元号和/或从逻辑单
元表中删除与去除的逻辑单元关联的逻辑单元号。
该设备的热插拔事件产生装置123可以被配置为当发生逻辑单元改变 时产生与热插拔事件关联的热插拔事件记录,其中该热插拔事件记录至少 包括事件类型和逻辑单元号;以及通知装置121可以被配置为将热插拔事 件记录发送给主计算机。
优选的,通知装置121被配置为响应于主计算机的请求,将热插拔事 件产生装置123产生的热插拔事件发送给主计算机。
此外,通知装置121可以被配置来响应主计算机在特定时间间隔定期 发送的请求,将热插拔事件发送给主计算机;其也可以当出现某种状况时 (例如接收到状态命令),响应主计算机非定期发送的"获得热插拔事件" 请求(即应命令来发送的请求)。
图13为示出根据本发明的实施例的大容量存^i殳备驱动器的原理框 图。如图13所示,本发明的实施例的大容量存储设备驱动器13包括事件接收装置131,用于通过通用串行总线接收来自大容量存^i殳备12的与 其逻辑单元的添加和/或去除相关的热插拔事件;事件处理装置133,用于 响应于接收到的热插拔事件,动态维护相应的逻辑单元表并将所述热插拔 事件通知上一层驱动器;以及事件请求装置132,用于向该大容量存^i殳 备12周期性地发送请求或者应命令来发送请求以查询/检测是否存在所述 热插拔事件。
优选的,事件接收装置131被配置为接收来自大容量存储设备12的与 热插拔事件关联的热插拔事件记录,该热插拔事件记录至少包括事件类型 和逻辑单元号。
响应于事件接收装置131收到来自大容量存^i殳备的热插拔事件,事 件处理装置133被配置为将热插拔事件通知给上层存储介质访问驱动器, 例如SCSI驱动器。
在本发明的实施例中,事件请求装置132还被配置为当发生的热插拔 事件为添加逻辑单元时,向大容量存储设备12的新增的逻辑单元单独发送 查询请求。
进一步的,当与逻辑单元关联的逻辑单元表中的逻辑单元号不连续时, 事件请求装置132还被配置为向大容量存储设备12请求激活的逻辑单元的 位图。
可选择的,如果要保持逻辑单元表中的逻辑单元号是连续的,则该大 容量存储设备驱动器13还可以被配置为当添加逻辑单元时,对所述大容量 存储设备12支持的逻辑单元数增加相应的数目;以及当去除逻辑单元时, 如果该逻辑单元的逻辑单元号不是最后一个,则使该逻辑单元之后的逻辑 单元的逻辑单元号向前移动,以使该表中逻辑单元号连续排列。
在本发明的实施例中,当事件接收装置131收到来自所述大容量存储 设备12的指示存在问题的SCSI状态信息时,大容量存^i殳备驱动器13 的事件请求装置132还被配置为向该大容量存储设备查询关于失效命令的 信息,并根据返回的诊断数据进行下一步处理。
在本发明的另外的实施例中,还"R供了一种大容量存储系统,包括上
17述的大容量存储设备12和大容量存储设备驱动器13,当该大容量存储设 备的逻辑单元发生添加和/或去除的改变时,可以对该逻辑单元进行动态管 理,并产生相应的热插拔事件,并将该热插拔事件发送给该大容量存^i殳 备驱动器,该驱动器根据热插拔事件对逻辑单元表进行添加和/或去除,并 通知SCSI驱动器,从而可以实现对大容量存储设备的逻辑单元的即插即 用的支持,保证了使用其的应用的可用性和可靠性。
在本发明的实施例中,大容量存^i殳备12、大容量存储设备驱动器13 和大容量存储系统在操作上实现根据本发明的实施例的用于控制大容量存 储设备的逻辑单元的方法。
本领域的普通技术人员可以理解上述的方法和设备及其系统可以使用 计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁 盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程 的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。 本实施例的大容量存储设备、驱动器及其组件可以由诸如超大规模集成电 路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门 阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由 各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合 例如固件来实现。
虽然以上结合具体实施例对本发明的用于控制大容量存储i殳备的逻辑 单元的方法及其计算机程序产品、大容量存^i殳备及其驱动器和大容量存 储系统进行了详细描述,但本发明并不限于此,本领域普通技术人员能够 理解可以对本发明进行多种变换、替换和修改而不偏离本发明的精神和范 围;本发明的保护范围由所附权利要求来限定。
权利要求
1. 一种用于控制大容量存储设备的逻辑单元的方法,所述大容量存储设备通过USB接口连接到主计算机,所述方法包括响应于对逻辑单元的添加和/或去除,在所述大容量存储设备上,动态管理与逻辑单元关联的逻辑单元表并产生相应的热插拔事件;以及将所述热插拔事件通知给所述主计算机。
2. 根据权利要求l所述的方法,其中所述将热插拔事件通知给主计算 机的步骤进一步包括由大容量存储设备驱动器以请求-响应的方式从所述大容量存储设备 获得所述热插拔事件。
3. 根据权利要求2所述的方法,进一步包括以下步骤由所述大容量存储设备驱动器将所述热插拔事件通知给SCSI驱动器。
4. 根据权利要求1到3中任一项所述的方法,其中所述动态管理与逻 辑单元关联的逻辑单元表的步骤进一步包括在逻辑单元表中对添加的逻辑单元分配新的逻辑单元号和/或从逻辑 单元表中删除与去除的逻辑单元关联的逻辑单元号。
5. 根据权利要求4所述的方法,其中当所述逻辑单元表中的逻辑单元 号不连续时,所述方法进一步包括由所述大容量存储i殳备驱动器向所述大容量存储i殳^^请求激活的逻辑 单元的位图。
6. 根据权利要求4所述的方法,其中如果在所述逻辑单元表中的逻辑 单元号是连续的,则所述方法进一步至少包括以下一种当添加逻辑单元时,对所述大容量存储设备支持的逻辑单元数增加相 应的数目;以及当去除逻辑单元时,如果所述逻辑单元的逻辑单元号不是最后一个, 使所述逻辑单元之后的逻辑单元的逻辑单元号向前移动,以使所述逻辑单 元号连续排列。
7. 根据权利要求1到3中任一项所述的方法,进一步包括 如果收到向已去除的逻辑单元发送的命令时,在所述大容量存储设备处设置状态信息,并使所述命令失效;以及将关于所述失效命令的信息发送给主计算机。
8. 根据权利要求1到3中任一项所述的方法,进一步包括当出现未知命令时在所述大容量存^i史备处将缺省控制通道设置为阻 塞状态。
9. 根据权利要求8所述的方法,进一步包括如果所述缺省控制通道为阻塞状态,则从所述主计算机处不对所述大 容量存储设备发送请求以查询在所述大容量存储设备处是否存在热插拔事 件。
10. —种大容量存^fti殳备,具有多个逻辑单元,所述存储设备包括逻辑单元管理装置,用于响应于对逻辑单元的添加和/或去除,动态管 理与逻辑单元关联的逻辑单元表;热插拔事件产生装置,用于针对所述改变的逻辑单元产生相应的热插 拔事件;以及通知装置,用于将所述热插拔事件通过通用串行总线通知给主计算机。
11. 根据权利要求10所述的大容量存储设备,其中所述逻辑单元管理 装置被配置为在逻辑单元表中对添加的逻辑单元分配新的逻辑单元号和/ 或从逻辑单元表中删除与去除的逻辑单元关联的逻辑单元号。
12. 根据权利要求10或11所述的大容量存储设备,其中所述通知装 置被配置为响应于所述主计算机的请求,将所述热插拔事件通知给所述主 计算机。
13. 根据权利要求10或11所述的大容量存储设备,其中还包括容错 装置,用于当收到向已去除的逻辑单元发送的命令时,设置状态信息并使 所述命令失效,以及生成关于失效命令的信息,并控制所述通知装置将所 述信息发送到主计算机。
14. 一种大容量存^i殳备驱动器,包括事件接收装置,用于通过通用串行总线接收来自所述大容量存^fti殳备的与其逻辑单元的添加和/或去除相关的热插拔事件;以及事件处理装置,用于响应于接收到的热插拔事件,动态维护相应的逻 辑单元表并将所述热插拔事件通知上一层驱动器。
15. 根据权利要求14所述的大容量存储设备驱动器,进一步包括 事件请求装置,用于向所述大容量存储设备发送请求以查询是否存在所述热插拔事件。
16. 根据权利要求14所述的大容量存储设备驱动器,其中所述事件处 理装置还被配置为响应于所述事件接收装置,将所述热插拔事件通知给 SCSI驱动器。
17. 根据权利要求15所述的大容量存储设备驱动器,其中所述事件请 求装置还被配置为当与逻辑单元关联的逻辑单元表中的单元号是不连续 时,则向所述大容量存^i殳备请求激活的逻辑单元的位图。
18. 根据权利要求15所述的大容量存^i殳备驱动器,其中所述事件请 求装置还纟皮配置为响应于所述事件接收装置接收到来自所述大容量存储设备的状态信 息,向所述大容量存^i殳备查询关于失效命令的信息。
19. 一种通用串行总线大容量存储系统,包括根据权利要求10到13 中任一项所述的大容量存^i殳备和根据权利要求14到18中任一项所述的 大容量存^i更备驱动器。
20. —种计算机程序产品,包括计算机可执行指令,当在计算机设备 上执行所述指令时,该指令致使所述设备被配置为执行根据权利要求1到 9中任一项的方法。
全文摘要
本发明涉及一种用于控制大容量存储设备的逻辑单元的方法和大容量存储设备、大容量存储设备驱动器以及大容量存储系统。其中,大容量存储设备通过USB接口连接到主计算机,在根据本发明的方法中响应于对逻辑单元的添加和/或去除,在所述大容量存储设备上,动态管理与逻辑单元关联的逻辑单元表并产生相应的热插拔事件;以及将所述热插拔事件通知给所述主计算机。在本发明中,通过对逻辑单元的动态管理并产生相应的热插拔事件,以及将其报告给主机,实现了逻辑单元的即插即用。
文档编号G06F3/06GK101452369SQ20071019618
公开日2009年6月10日 申请日期2007年11月29日 优先权日2007年11月29日
发明者兰龙文, 孟宪栋, 健 徐, 伟 谌 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1