CN1889034A - 一种小型计算机***接口命令的处理方法及设备 - Google Patents
一种小型计算机***接口命令的处理方法及设备 Download PDFInfo
- Publication number
- CN1889034A CN1889034A CN 200610103917 CN200610103917A CN1889034A CN 1889034 A CN1889034 A CN 1889034A CN 200610103917 CN200610103917 CN 200610103917 CN 200610103917 A CN200610103917 A CN 200610103917A CN 1889034 A CN1889034 A CN 1889034A
- Authority
- CN
- China
- Prior art keywords
- scsi command
- processing function
- address
- command
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种小型计算机***接口命令的处理方法,该方法为:存储设备在接收SCSI命令时,依据该SCSI命令在SCSI命令集中查询与之匹配的处理函数的地址,并根据所获取的地址调用相应处理函数对所述SCSI命令进行处理。所述SCSI命令集中依据所述的SCSI命令的标识建立了SCSI命令与相应的处理函数的地址之间的映射关系。这样,便免除了现有技术下SCSI命令处理流程中繁杂的比对过程,解决了SCSI命令的处理函数维护工作量大的问题,使存储设备能更好的适应各种各样的操作***、应用对SCSI兼容性的需要。本发明还同时公开了一种小型计算机***接口命令的处理设备。
Description
技术领域
本发明涉及存储领域管理技术,特别涉及一种小型计算机***接口命令的处理方法及设备。
背景技术
小型计算机***接口(Small Computer Systems Interface,SCSI)协议是存储领域的基础,如何更好的解析和处理SCSI协议对存储区域网络(StorageArea Network,SAN)存储设备的兼容性至关重要。由于种种原因,不同的操作***及软件实现同样功能时,其SCSI命令集不尽相同,甚至差别很大。
参阅图1所示,比如多路径Failover,Windows上运行的Veritas软件和IBM的实现原理就完全不同。又比如微软的Windows和IBM的AIX,这两种操作***对实现基本读写的SCSI命令集也不尽相同,IBM的AIX就比微软的windows要求的最小SCSI命令集大许多。造成这种差异的主要原因是很多软件和操作***采用了SCSI协议中的厂商自定义字段或自定义命令来实现各自的功能。比如Windows上运行的Veritas主要通过SCSI命令Inquiry中的自定义页实现多路径功能,而IBM则主要采用SCSI命令Mode Sense中自定义页来实现。此外,即便同一个厂家的软件,比如微软的Windows NT和Windows 2003,由于软件升级、技术进步以及SCSI标准的修订,SCSI命令集也不一样。这种差异给处于SCSI协议目标器侧的SAN存储设备带来了很大不便。
如果存储设备不能兼容尽可能多的操作***或应用软件,那么将极大限制存储设备的使用范围。但是,由于操作***和应用软件的多样性,加之SCSI命令的繁杂,如果没有一个较好的SCSI协议的实现流程,将很难支撑这种兼容性的需要,同时也很难有较好的扩展性。
现有技术下SCSI命令处理流程中,某些开源的SCSI处理代码,都采用“判断+罗列”的方式,也就是说,将判断收到的SCSI命令中,如果支持该SCSI命令,则调用相应的处理函数处理该SCSI命令,其基本处理流程的伪代码如下:
switch SCSI命令字
{
case SCSI命令1:
调用SCSI命令1的处理函数处理SCSI命令1
break
case SCSI命令2:
调用SCSI命令2的处理函数处理SCSI命令2
break
…
case SCSI命令n:
调用SCSI命令n的处理函数处理SCSI命令n
break
default:
SCSI命令不支持,进行错误处理
break
}
而SCSI命令m的处理函数流程的伪代码为:
switch SCSI命令m中的命令页PageCode
{
case PageCode 0:
switch操作***或应用软件
{
case操作***0
调用操作***0对SCSI命令m的PageCode0的函数处理
break
…
case操作***n
调用操作***n对SCSI命令m的PageCode0的函数处理
break
default
PageCode0不支持的操作***,进行错误处理
break
}
case PageCode m:
switch操作***或应用软件
{
case操作***0
调用操作***0对SCSI命令m的PageCode m的函数处理
break
…
case操作***n
调用操作***n对SCSI命令m的PageCode m的函数处理
break
default
PageCode m不支持的操作***,进行错误处理
break
}
default
不支持的PageCode
break
}
上述SCSI命令的处理流程虽然相对简单,但是处理过程相对繁杂,随着支持的SCSI命令的增加,以及支持的操作***或应用软件种类的增加,维护这种switch-case或if-else if-else代码的工作量将非常大,而且也非常困难。
发明内容
本发明提供一种小型计算机***接口(SCSI)命令的处理方法及设备。用以解决现有技术中存在的SCSI命令处理流程繁杂、SCSI命令的处理函数维护工作量大的问题。使之能更好的适应各种各样的操作***、应用对SCSI兼容性的需要。
本发明技术方案如下:
一种小型计算机***接口命令的处理方法,包括步骤:
接收小型计算机***接口SCSI命令;
根据所述SCSI命令查询SCSI命令集,获取处理函数的地址,其中所述SCSI命令集包含已处理过的SCSI命令的标识及其对应的处理函数的地址;
根据获取的处理函数的地址调用该处理函数对所述SCSI命令进行处理。
根据上述方法:
若所述SCSI命令集中未包含所述接收到的SCSI命令,则根据所述SCSI命令查询***符号表获取处理函数的地址,并将查询到的处理函数的地址和所述SCSI命令的标识加入到所述SCSI命令集中。
在查询***符号表时,包括步骤:
依照SCSI命令的处理函数的命名规则,生成所述接收到的SCSI命令相应的处理函数的名称;
按照所述生成的处理函数的名称在***符号表中查询相应的处理函数的地址,所述***符号表包含***能实现的全部SCSI命令的处理函数的名称和处理函数的地址;
在获得相应的处理函数的地址后将所述SCSI命令的标识和该处理函数的地址加入到所述SCSI命令集中。
若***符号表中未包含所述SCSI命令的处理函数的地址,则返回相应的错误信息。
在所述SCSI命令集中,通过SCSI命令符建立SCSI命令与对应的处理函数的地址之间的映射关系。
在所述SCSI命令集中,通过SCSI命令符的关键字建立SCSI命令与对应的处理函数的地址之间的映射关系;并且在查询SCSI命令集前先获取SCSI命令中的关键字。
所述SCSI命令的标识中包含该SCSI命令的命令描述块、SCSI命令启动器侧运行的操作***和应用程序的相关信息。
所述生成的SCSI命令的处理函数的名称中应包含所述SCSI命令的命令描述块、SCSI命令启动器侧运行的操作***和应用程序的相关信息。
一种小型计算机***接口命令的处理设备,包括:
存储单元:用于存放SCSI命令集和***符号表,其中所述SCSI命令集包含已处理过的SCSI命令的标识与对应的处理函数的地址,所述***符号表包含***能实现的全部SCSI命令的处理函数的名称和处理函数的地址。
接收单元:用于接收SCSI命令。
第一查询单元:用于依据所述SCSI命令在SCSI命令集中查询处理该SCSI命令的处理函数的地址。
执行单元:用于根据所获取的SCSI命令的处理函数的地址调用该处理函数对所述SCSI命令进行处理。
所述设备还包括:
转换单元:用于在查询SCSI命令集前获取SCSI命令中的关键字。
所述设备进一步包括:
函数名生成单元:用于当在所述SCSI命令集中无法获取相应的处理函数的地址时,按照SCSI命令的处理函数的命名规则,生成相应的处理函数的名称。
第二查询单元:用于根据所述生成的处理函数的名称在***符号表中查询处理该SCSI命令的处理函数的地址。
处理单元:用于将在***符号表中获取的处理函数的地址和所述SCSI命令的标识加入到所述SCSI命令集中;或者当在***符号表中无法获取所述SCSI命令的处理函数的地址时,返回相应的错误信息。
本发明有益效果如下:
本发明根据所接收SCSI命令的标识依次在SCSI命令集和***符号表中查找相应的处理函数的地址,统一并简化了SCSI命令的处理流程,避免了现有技术下使用“判断+罗列”的方式查询处理函数的地址时繁杂的比对过程,提高了存储设备的工作效率。并且当存储设备支持的SCSI命令、操作***或应用软件的种类增加时,本发明只需将增加的处理函数的地址加入到SCSI命令集中,与“判断+罗列”的方式相比,大大减少了SCSI命令处理函数维护的工作量,使之能更好的适应各种各样操作***、应用对SCSI兼容性的需要。
附图说明
图1为存储区域网络组网结构示意图;
图2为本发明实施例中SCSI命令处理设备结构图;
图3A为本发明实施例中SCSI命令集的逻辑结构图;
图3B为本发明实施例中***符号表的逻辑结构图;
图4为本发明实施例中SCSI命令的处理流程图。
具体实施方式
在存储区域网络中,为了简化SCSI命令的处理流程、提高存储设备的工作效率、降低处理函数的维护难度,本发明采用了在SCSI命令集中依据SCSI命令的标识在SCSI命令与对应的处理函数的地址之间建立映射关系的方法来获取SCSI命令的处理函数的地址,进而调用该处理函数对所接收的SCSI命令进行处理。
本实施例中,在所述SCSI命令集中可以直接通过SCSI命令符建立SCSI命令与对应的处理函数的地址之间的映射关系,查询时直接利用接收到的SCSI命令符与SCSI命令集中的命令符进行比对。
为了提高查询速度,一种较佳的方式是在所述SCSI命令集中通过SCSI命令符中的关键字建立SCSI命令与对应的处理函数的地址之间的映射关系,查询时先从所接收到的SCSI命令符中获取关键字。如图3A所示,以哈希表为例,在SCSI命令集中,在SCSI命令的命令标识S和相应的处理函数的地址A之间依据SCSI命令符中的关键字k建立一确定的对应关系F,即哈希函数,使每个SCSI命令中的关键字和唯一的一个处理函数的地址相对应。例如当关键字为K时,相应的处理函数的地址必定在F(K)的存储位置上,由此不需要进行比较便可直接取得所查记录,大大简化了SCSI命令的处理流程。另外,还可以采用其他类似的方法,只要其算法效率较高,算法复杂度适中均可。
一般情况下,SCSI命令集初始化为空,因此对于某个操作***下的第一个SCSI命令,需要先根据此SCSI命令生成相应的处理函数的名称,然后依据生成的处理函数名在***符号表中查询相应的处理函数的地址。
生成处理函数的名称时应遵循***符号表中处理函数的命名规则,比如其基本规则为“scsi_命令运行环境_SCSI命令字_SCSI命令字页参数_exec”,其含义为:处理函数的名称中必须包含所接收SCSI命令的命令描述块、SCSI命令启动器侧运行的操作***和应用软件的相关信息。这样,只要遵循处理函数的命名规则,就能生成符合条件的处理函数名并根据此函数名在***符号表中获得相应的处理函数的地址。
参阅图2所示,本实施例中的SCSI命令处理设备包括存储单元20、接收单元21、转换单元22、第一查询单元23、函数名生成单元24、第二查询单元25、处理单元26和执行单元27。第一查询单元23、第二查询单元25和处理单元26分别与存储单元20间存在通信连接,第一查询单元23和第二查询单元25分别与执行单元27间存在通信连接。
所述存储单元20用于存储SCSI命令集和***符号表;所述接收单元21用于接收SCSI命令,该SCSI命令可以是用户输入的命令,也可以是嵌入程序中的命令;所述转换单元22用于获取所接收的SCSI命令中的关键字;为了能够尽量减少占用的空间和提高查询速度,本实施例在***的SCSI命令集中通过SCSI命令符的关键字建立SCSI命令与对应的处理函数的地址之间的映射关系,因此在查询SCSI命令集前要先从所接收的SCSI命令中获取关键字。所述第一查询单元23用于根据所接收的SCSI命令在SCSI命令集中查询相应的处理函数的地址;所述函数名生成单元24用于当在SCSI命令集中无法获取相应的处理函数的地址时,根据处理函数的命名规则生成相应的处理函数的名称;所述第二查询单元25用于根据所述生成的处理函数的名称在***符号表中查询相应的处理函数的地址;所述处理单元26用于将在***符号表中获取的处理函数的地址和所接收的SCSI命令的标识加入到SCSI命令集中,或当在***符号表中无法获取相应的处理函数的地址时返回相应的错误信息;所述执行单元27用于根据获取的处理函数的地址调用该处理函数对所述SCSI命令进行处理。第一查询单元23和第二查询单元25将在存储单元20中获取的处理函数的地址传送至执行单元27。
存储单元20上运行的SCSI命令集,包括已处理过的SCSI命令的标识及其对应的处理函数的地址,所述标识中包含了所接收SCSI命令的命令描述块、SCSI命令启动器侧运行的操作***和应用程序的相关信息。
存储单元20上运行的***符号表是所有符号及其对应地址的一个列表,一个符号(symbol)是一个程序的创建块,它可以是一个变量名或一个函数名。在本发明中,一个符号是一个SCSI命令的处理函数的名称,如图3B所示,本发明中,***符号表包含了***能实现的全部SCSI命令的处理函数的名称T和处理函数的地址A,两者之间存在相对应的映射关系。
由于***符号表的查询是根据字符串来完成的,故其查询速度比较低,所以在获得处理函数的地址后,要把获取的地址和所述接收的SCSI命令的标识加入到SCSI命令集中,是为了再收到相同的SCSI命令时能够直接从SCSI命令集中获取该SCSI命令的处理函数的地址,以提高存储设备的工作效率。
参阅图4所示,SCSI命令的具体处理流程如下:
步骤400:接收SCSI命令。
步骤401:将所接收的SCSI命令转化为对应的关键字。
步骤402:依据所述关键字,在***的SCSI命令集中查询相应的处理函数的地址。
步骤403:如果在***的SCSI命令集中无法获取相应的处理函数的地址则进入步骤404,否则如果获得该地址,则进入步骤408。
步骤404:按照SCSI命令的处理函数的命名规则,生成所述接收到的SCSI命令的处理函数的名称。
步骤405:根据生成的处理函数名,查询***符号表。
步骤406:如果在***符号表中获得所述SCSI命令的处理函数的地址,则进行步骤407,否则进行步骤409。
步骤407:将在***符号表中获得的处理函数的地址和所述接收的SCSI命令的标识加入到SCSI命令集中。
步骤408:根据获得的处理函数的地址,调用相应的处理函数对所接收的SCSI命令进行处理。
步骤409:在***符号表中无法获取相应的处理函数的地址,说明***不支持所接收的SCSI命令或该SCSI命令有误,返回相应的错误信息。
例如,当存储设备接收到服务器Windows 2003下发的第一个SCSI Inquiry0x80页的命令时,首先获取命令中的关键字K1。由于对某个操作***下的第一个SCSI命令,SCSI命令集初始化为空,所以K1不存在于所述SCSI命令集中。接着***根据SCSI命令的处理函数的命名规则生成该SCSI命令的处理函数名“scsi_windows2003_inquiry_0x80_exec”,并根据生成的处理函数的名称查找***符号表。
若在***符号表中获得该SCSI命令的处理函数的地址A1,则将K1和A1加入到所述SCSI命令集中,再根据A1调用相应的处理函数对SCSI Inquiry0x80命令进行处理。
若在***符号表中无法获取该SCSI命令的处理函数的地址,返回相应的错误信息。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (11)
1、一种小型计算机***接口命令的处理方法,其特征在于,包括步骤:
接收小型计算机***接口SCSI命令;
根据所述SCSI命令查询SCSI命令集,获取处理函数的地址,其中所述SCSI命令集包含已处理过的SCSI命令的标识与对应的处理函数的地址;
根据获取的处理函数地址调用该处理函数对所述SCSI命令进行处理。
2、如权利要求1所述的方法,其特征在于,若所述SCSI命令集中未包含所述接收到的SCSI命令,则根据所述SCSI命令查询***符号表获取处理函数的地址,并将查询到的处理函数的地址和所述SCSI命令的标识加入到所述SCSI命令集中。
3、如权利要求2所述的方法,其特征在于,在查询***符号表时,包括步骤:
依照SCSI命令的处理函数的命名规则,生成所述接收到的SCSI命令相应的处理函数的名称;
按照所述生成的处理函数的名称在***符号表中查询相应的处理函数的地址,所述***符号表包含***能实现的全部SCSI命令的处理函数的名称和处理函数的地址;
在获得相应的处理函数的地址后将所述SCSI命令的标识和该处理函数的地址加入到所述SCSI命令集中。
4、如权利要求3所述的方法,其特征在于,若***符号表中未包含所述SCSI命令的处理函数的地址,则返回相应的错误信息。
5、如权利要求1所述的方法,其特征在于,在所述SCSI命令集中,通过SCSI命令符建立SCSI命令与对应的处理函数的地址之间的映射关系。
6、如权利要求1所述的方法,其特征在于,在所述SCSI命令集中,通过SCSI命令符的关键字建立SCSI命令与对应的处理函数的地址之间的映射关系,并且在查询SCSI命令集前先获取SCSI命令中的关键字。
7、如权利要求5或6所述的方法,其特征在于,所述SCSI命令的标识中包含该SCSI命令的命令描述块、SCSI命令启动器侧运行的操作***和应用程序的相关信息。
8、如权利要求3所述的方法,其特征在于,所述生成的SCSI命令的处理函数的名称中应包含所述SCSI命令的命令描述块、SCSI命令启动器侧运行的操作***和应用程序的相关信息。
9、一种小型计算机***接口命令的处理设备,包括:
存储单元:用于存放SCSI命令集和***符号表,其中所述SCSI命令集包含已处理过的SCSI命令的标识与对应的处理函数的地址,所述***符号表包含***能实现的全部SCSI命令的处理函数的名称和处理函数的地址;
接收单元:用于接收SCSI命令;
第一查询单元:用于依据所述SCSI命令在SCSI命令集中查询处理该SCSI命令的处理函数的地址;
执行单元:用于根据所获取的SCSI命令的处理函数的地址调用该处理函数对所述SCSI命令进行处理。
10、如权利要求9所述的设备,其特征在于,还包括:
转换单元:用于在查询SCSI命令集前获取SCSI命令中的关键字。
11、如权利要求9或10所述的设备,其特征在于,还包括:
函数名生成单元:用于当在所述SCSI命令集中无法获取相应的处理函数的地址时,按照SCSI命令的处理函数的命名规则,生成相应的处理函数的名称;
第二查询单元:用于根据所述生成的处理函数的名称在***符号表中查询处理该SCSI命令的处理函数的地址;
处理单元:用于将在***符号表中获取的处理函数的地址和所述SCSI命令的标识加入到所述SCSI命令集中;或者当在***符号表中无法获取所述SCSI命令的处理函数的地址时,返回相应的错误信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200610103917XA CN100395695C (zh) | 2006-07-26 | 2006-07-26 | 一种小型计算机***接口命令的处理方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200610103917XA CN100395695C (zh) | 2006-07-26 | 2006-07-26 | 一种小型计算机***接口命令的处理方法及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1889034A true CN1889034A (zh) | 2007-01-03 |
CN100395695C CN100395695C (zh) | 2008-06-18 |
Family
ID=37578313
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200610103917XA Expired - Fee Related CN100395695C (zh) | 2006-07-26 | 2006-07-26 | 一种小型计算机***接口命令的处理方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100395695C (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102289372A (zh) * | 2011-07-21 | 2011-12-21 | 京信通信***(中国)有限公司 | 基于lut的字符串协议解析方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000132507A (ja) * | 1998-10-27 | 2000-05-12 | Internatl Business Mach Corp <Ibm> | Scsiプロトコルにおけるコマンド処理方法およびそれに用いる装置 |
US6785744B2 (en) * | 2001-08-08 | 2004-08-31 | International Business Machines Corporation | Mapping SCSI medium changer commands to mainframe-compatible perform library function commands |
CN1205547C (zh) * | 2003-05-19 | 2005-06-08 | 清华大学 | 用普通scsi磁盘代替存储光纤网络中光纤磁盘阵列的方法 |
-
2006
- 2006-07-26 CN CNB200610103917XA patent/CN100395695C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN100395695C (zh) | 2008-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1567301A (zh) | 访问数据库的方法及装置 | |
CN1852309A (zh) | 数据同步处理方法及其客户端 | |
CN1731400A (zh) | 分布式***中数据查询的方法及板间数据同步的方法 | |
CN101079784A (zh) | 互联网资源的搜索方法及其搜索*** | |
CN101047670A (zh) | 一种mac地址表老化、操作方法及其处理*** | |
CN101046815A (zh) | 事务协调器、资源使用端、服务端及分布式事务处理方法 | |
CN1852261A (zh) | 维护邻居表项的方法 | |
CN1719786A (zh) | 数据通讯设备命令行接口命令的自动测试***及测试方法 | |
CN1617496A (zh) | 下一代网络终端自动升级配置的方法 | |
CN1913692A (zh) | 按配置下载设备软件的方法 | |
CN1633782A (zh) | 数据通信***、数据通信装置和数据通信方法 | |
CN2684478Y (zh) | 网络管理***、要被管理的装置、管理装置和程序 | |
CN1725707A (zh) | 管理分布式网络设备的方法 | |
CN1889034A (zh) | 一种小型计算机***接口命令的处理方法及设备 | |
CN1881963A (zh) | 一种实现即时通信的***及方法 | |
CN101030228A (zh) | 页面导航方法和装置及应用服务器 | |
CN1851690A (zh) | 一种翻译网页的方法和*** | |
CN101080015A (zh) | Iptv***中实现第三方音视频内容上传的***和方法 | |
CN1863085A (zh) | 保证网管和网元配置数据一致性的方法及*** | |
CN101035082A (zh) | 分片报文重组方法及接口板 | |
CN1512335A (zh) | 基于构件的操作***动态设备驱动的方法 | |
CN1614937A (zh) | 一种用于网络计算机配置参数的自动分配与获取方法 | |
CN1294513C (zh) | 标志信息颁发方法及*** | |
CN1852306A (zh) | 一种获得媒体对象支持模块的方法及装置 | |
CN101075308A (zh) | 一种编辑电子邮件的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080618 Termination date: 20170726 |
|
CF01 | Termination of patent right due to non-payment of annual fee |