(控制理论与控制工程专业论文)符合i2o规范的raid系统设计与硬件设备模块实现.pdf_第1页
(控制理论与控制工程专业论文)符合i2o规范的raid系统设计与硬件设备模块实现.pdf_第2页
(控制理论与控制工程专业论文)符合i2o规范的raid系统设计与硬件设备模块实现.pdf_第3页
(控制理论与控制工程专业论文)符合i2o规范的raid系统设计与硬件设备模块实现.pdf_第4页
(控制理论与控制工程专业论文)符合i2o规范的raid系统设计与硬件设备模块实现.pdf_第5页
已阅读5页,还剩77页未读 继续免费阅读

(控制理论与控制工程专业论文)符合i2o规范的raid系统设计与硬件设备模块实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

上海交通大学硕士学位论文 5 符合 i2o 规范的 raid 系统设计与硬件设备模块实现 摘 要 网络技术的不断发展对服务器 i/o 性能提出了越来越高的要求, 因 此提升 i/o 性能是当前服务器技术发展的重点。 本文的研究工作主要分 为两部分: 设计一种符合 i2o 规范的 raid 系统和该系统的硬件设备模 块开发。研究工作的意义在于,能够开发出一种兼容现有服务器的嵌 入式 i/o 平台, 这种 i/o 平台不但能通过使用 raid 技术改善服务器的 i/o 性能,同时还能利用 i2o 技术,大大减轻由于 i/o 操作造成的主机 端应用程序处理器的负担,除此之外,基于 i2o 规范的驱动程序设计 模式也能大大简化重复性极高的驱动开发过程。 本文围绕这两个核心问题展开讨论。将首先介绍 i2o 规范定义及 系统结构,作为开发的基础知识,同时给出几种典型的 i2o 平台的实 现形式;并进一步将介绍选择的 i2o 操作系统 ixworks,其中包括 ixworks 的特点、提供的服务,以及集成开发环境 tornado,并将详细 描述交叉编译环境的建立步骤;在建立了良好的知识基础后,将从硬 件和软件两方面,给出整个 i2o raid 系统的结构设计,定义系统的各 个部分的功能,并以此作为开发的标准;并将详细描述本系统中硬件 设备模块的开发和实现过程,包括建立虚拟磁盘、建立模块参数和参 数表阵列、消息处理函数等,同时列举了若干个具有典型意义的功能 函数实现细节;最后将将具体的安装和使用硬件设备模块,并结合 raid 中介服务模块,完整的实现整个 raid 系统的功能、测试其 i/o 性能,并结合测试数据进行分析,证明该 i2o raid 系统能够大大提高 整个系统的 i/o 性能。 上海交通大学硕士学位论文 6 关键字关键字:智能输入输出,raid,ixworks,硬件设备模块 上海交通大学硕士学位论文 7 a structrual design of an i2o based raid system and the implementation on hardware device module abstract nowadays, the i/o performance of a network server, which becomes the key issue in future server technology, is driver by the continuous development in network technology. this paper focuses to design a i2o based raid system and to implement its hardware device module, which not only have a positive impact on servers i/o performance via raid technology, but also relieve host cpu from i/o interrupt by i2o technology. besides, the device driver model provided by i2o specification will remarkably simplify the developing procedure of device drivers. firstly, the i2o specification and its system structure will be introduced as basic knowledge. and ixworks, chosen as an i2o embedded system for this paper, will be introduced in detail on its characteristics, services and integrated developing environment tornado. secondly, after a systematic introduction on background knowledge, a structural design of an i2o based raid system will be delivered both on hardware structure and software one. the detailed functions of each module will also be defined as the foundation for further implementation. the implementation process of hardware device module will also be described step by step, including the establishment of ram disk, the establishment of module parameter block, parameter groups and message handlers. also, several key functions will be listed to reveal the details of implementation. finally, the hardware device module will be installed and tested to prove its functionality. and iometer will be used to evaluate the i/o performance of the i2o based raid system to prove that the system has a great advantage on i/o performance compared with traditional i/o devices. 上海交通大学硕士学位论文 8 key words:i2o, raid, ixworks, hardware device module 上海交通大学硕士学位论文 3 上海交通大学上海交通大学 学位论文原创性声明学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究 工作所取得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人 或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体, 均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 学位论文作者签名:姚爚 日期:2008 年 2 月 18 日 上海交通大学硕士学位论文 4 上海交通大学上海交通大学 学位论文版权使用授权书学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保 留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。 本人授权上海交通大学可以将本学位论文的全部或部分内容编入有关数据库进行 检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 保密保密,在 年解密后适用本授权书。 本学位论文属于 不保密 不保密。 (请在以上方框内打“” ) 学位论文作者签名:姚爚 指导教师签名:施亮 日期:2008 年 2 月 18 日 日期:2008 年 2 月 18 日 上海交通大学硕士学位论文 1 1. 绪论 1.1. 研究背景 1.1.1. 服务器技术发展趋势 网络时代为服务器的应用提供了广阔的空间。 尽管目前不断开发出新技术 (包 括 atm,快速以太网,光纤通道等)用来为用户改善网络 i/o 性能。然而事实上, 这些高速网络技术正在加剧系统的 i/o 性能的不平衡, 导致网络服务器的数据流量 和计算强度急速增大。而网络的快速发展对服务器提出了更高的要求,网络服务 器的性能也很大程度上影响、制约了网络的进一步的发展。 系统平衡对于优化整体系统性能非常重要。主机处理器、局部存储器和 i/o 设 备必须协同工作才能为最终用户提供一个有效的工作环境。如果系统的某一方面 成了瓶颈,系统的整体性能必定会受到影响。而就目前来看,i/o 设备的发展远远 比不上处理器的发展。 在客户机/服务器计算环境中,这一点尤为突出。因为该环境中最终用户对数 据的依赖性强,并需要与网络上的其它用户进行通讯。为了适应网络发展对服务 器新的需求,则必须首先设法改善它的薄弱环节,i/o 性能。1 1.1.2. 智能输入输出(intelligent i/o)技术 i2o(intelligent i/o)是一种架构的规范,一方面,它是针对 i2o 子系统而设 计的一种规范; 另一方面, 它也为具有独立微处理器的 i2o 设备定义了一种新的驱 动程序模型。 在硬件设备上,i2o 规范提出的 i2o 设备将是一种发展趋势。尤其是在中低端 网络服务器中。当设备的中断密集型 i/o 处理成为瓶颈时,最直接也是最有效的办 法就是提高 i/o 设备上芯片的处理能力,必要的话就需要专用的 i/o 微处理器。而 目前微处理器技术的快速发展也使得这个成为可能。因此,i2o 规范定义的 i2o 体 系结构能够把主机从这些 i/o 任务中解放出来, 极大地改善系统的 i/o 性能。 与 i2o 上海交通大学硕士学位论文 2 兼容的系统将更有效地满足范围广泛的高带宽应用程序,以满足服务器技术发展 对 i/o 性能的要求 作为一个软件架构规范,i2o 还提供了一种极具发展前景的设备驱动程序模 式。 这种驱动模式很有可能将替代传统的程序结构而成为将来设备驱动的主流。 i2o 规范的目的是提供一种开放的、基于标准的方法,既能改进现有的驱动程序,同 时又为新一代可移植、i2o 解决方案的快速发展提供一个框架。2 如果这种 i2o 架构能够得到使用和推广,将有以下好处:3 1) 降低降低 i2o 平台开发商的产品开发和维护成本,并能支持多种操作系统。平台开发商的产品开发和维护成本,并能支持多种操作系统。 2) 将将 i2o 硬件开发与驱动程序软件开发分开,有望实现并行。硬件开发与驱动程序软件开发分开,有望实现并行。 3) 由于驱动程序模块按照功能被分割开,所以简化了设备驱动程序的测试流程。由于驱动程序模块按照功能被分割开,所以简化了设备驱动程序的测试流程。 4) 由于由于 i2o 子系统与主机操作系统相分离, 更容易对错误进行诊断和恢复。 增强 了系统的管理能力和容错能力。 子系统与主机操作系统相分离, 更容易对错误进行诊断和恢复。 增强 了系统的管理能力和容错能力。 5) i/o 核心操作从主机操作系统转移到核心操作从主机操作系统转移到 i2o 子系统, 所以能够大大提高系统性能。子系统, 所以能够大大提高系统性能。 6) 对未来的对未来的 i/o 技术和总线连接,有良好的可扩展性。技术和总线连接,有良好的可扩展性。 1.1.3. raid 技术 raid (redundant array of inexpensive disks 或 redundant array of independent disks)是 1988 年由 david. a. patterson 教授在美国加州大学伯克利分校提出来。 中文称为廉价冗余磁盘阵列,或者为独立冗余磁盘阵列。事实上,可以把 raid 理解成一种使用磁盘驱动器的方法,它将一组磁盘驱动器用某种逻辑方式联系起 来,作为逻辑上的一个磁盘驱动器来使用。raid 的实现对用户操作与访问来说是 透明的。4 raid 与一般的存储介质相比有两个很明显的优点:5 1) 传输速率高传输速率高 使用 raid 技术,可以同时对多个磁盘驱动器并行传输数据。而这些磁盘驱 动器在逻辑上又是一个磁盘驱动器,所以使用 raid 可以达到单个的磁盘驱动器 几倍几十倍甚至上百倍的速率。这也是 raid 最初想要解决的问题之一。因为当 时 cpu 的速度增长很快,而磁盘驱动器的 i/o 速率无法大幅提高,所以需要有一 种方案解决二者之间的矛盾。raid 就是一种成功的解决方案 上海交通大学硕士学位论文 3 2) 容错功能容错功能 普通磁盘驱动器无法提供容错功能。而 raid 技术,通过冗余算法提供了额 外的容错功能, 甚至可以把损坏的数据恢复出来。 它比一般带 crc(循环冗余校验) 码单个磁盘驱动器的硬件容错功能具有更高的安全性。 正因为这两个优点,raid 技术得到了长足的发展和应用。raid 技术经过不 断的发展,现在已拥有了从 raid 0 到 6 多种基本的 raid 级别。另外还有一些 基本 raid 级别的组合形式如 raid 1+0, raid 5+0 等。raid 的级别代表着不 同的存储性能数据安全性和存储成本。可以预见,存储领域日益增长的需求将一 直推动 raid 技术关键应用的发展。在未来,raid 将向用户提供更高的安全性、 更快的 i/o 性能和更简单的使用功能。 上海交通大学硕士学位论文 4 1.2. 主要研究工作和意义 本文从服务器技术的发展对 i/o 性能的要求引出 i2o 技术和 raid 技术。 一方 面,服务器技术对 i/o 性能越来越高的要求证明了本课题有非常现实的应用价值; 另一方面,i2o 和 raid 技术也为本课题提供了技术应用背景。 具体来说,本文的研究工作主要分为两部分:符合 i2o 规范的 raid 系统设计 和该系统的硬件设备模块开发。本课题的意义在于,能够开发出一种兼容现有服 务器的嵌入式 i/o 平台, 这种 i/o 平台不但能通过使用 raid 技术改善服务器的 i/o 性能,同时还能利用 i2o 技术,大大减轻由于 i/o 操作造成的主机端应用程序处理 器的负担。下文将围绕这两个核心问题展开讨论。 在章节安排上: 第 2 章将介绍 i2o 规范定义及系统结构, 作为开发的基础知识, 同时给出几种典型的 i2o 平台的实现形式;第 3 章将介绍本文选择 i2o 操作系统 ixworks,其中包括 ixworks 的特点、提供的服务,以及集成开发环境 tornado,并 将详细描述本文交叉编译环境的建立步骤;第 4 章将给出整个 i2o raid 系统的结 构设计,从硬件和软件两方面,定义系统的各个部分的功能,并以此作为开发的 标准;第 5 章将详细描述本系统中硬件设备模块的开发和实现过程,包括建立虚 拟磁盘、建立模块参数和参数表阵列、消息处理函数等,并列举了若干个具有典 型意义的功能函数实现细节;第 6 章将具体的安装和使用硬件设备模块,并结合 raid 中介服务模块,完整的实现整个 raid 系统的功能、测试其 i/o 性能,并结 合测试数据进行分析,证明该 i2o raid 系统能够大大提高整个系统的 i/o 性能; 第 7 章为本文的总结以及对未来进一步开发的展望。 上海交通大学硕士学位论文 5 2. i2o 规范定义及系统结构 i2o 规范是针对 i2o 子系统而设计的一种规范;同时也对具有独立微处理器的 i2o 设备定义了一种新的驱动程序模型。本章节将先介绍 i2o 规范、其制定组织以 及该规范的意义所在。然后详细讨论 i2o 规范的最新版本 2.0 所带来的技术优势。 最后将从硬件结构和软件结构两方面, 详细介绍 i2o 2.0 规范推荐的几种典型的 i2o 系统实现方式。 2.1. i2o sig 和 i2o 2.0 规范 2.1.1. i2o 特别兴趣组(i2o sig) i2o 特别兴趣组(i2o special interest group,i2o sig)成立于 1996 年,宗旨 是发展高性能 i2o 子系统的工业标准,解决网络运算环境的 i/o 的瓶颈问题。i2o 发起委员会成员包括 3com,compaq,hp,intel, microsoft, netframe system incorporated, novell inc., symbios logic。i2o 小组成员包括 adaptec, cyclone microsystems inc., distributed processing, harris /* 设备的事件列表 */ i2o_dev_id deviceid; /* 设备 id */ i2o_adapter_id adapterid; /* 设备的适配器 id*/ i2o_dma_id sys2localdmaid; /* 设备的 dma id */ u32 blocksize; /* 块大小(512 字节)*/ u32 numblocks; /* 块的数量 */ i2o_mem_set_id mempart; /* 内存集的 id */ u32 head; /* 首块 */ u32 tail; /* 尾块*/ u32 serialnbr; /* 序列号 */ ; 可以看到,结构体中一方面对磁盘的硬件信息做了定义,另一方面,为磁盘 成为 i2o 设备也做了准备:设备 id、适配器 id、事件列表、dma id 等。因此在 开发过程中具体初始化设备的时候,可以直接使用相应的部分。比如:在创建逻 辑设备的事件队列的时候, 可以用ixworks的系统函数i2oeventqcreate来为eventq 创建一个事件队列(这个函数同时也自动的创建了用来处理事件队列的线程了) ; 在建立好事件队列的基础上进行设备的创建,可以利用系统函数 i2odevcreate 来 分配 deviceid;另外还需要利用系统函数 i2odmacreate 给设备创建一个 dma 对 象,以便该设备可以和主机进行 dma 方式的数据传输。 2) 申请内存空间申请内存空间 虚拟磁盘就是将一片内存虚拟称为磁盘驱动器,所以必须给这些磁盘申请预 定大小的内存。 (磁盘容量块大小(512 字节)块数量,实际使用中,块的数 量 不 能 设 置 过 多 , 否 则 会 导 致 无 法 申 请 到 足 够 的 内 存 空 间 ) 。 可 使 用 上海交通大学硕士学位论文 41 i2omemsetcreate 分配内存集 id 和 i2omemalloc 函数进行内存申请,并返回一个 指针。代码相对简单,不赘述。 以上便完成了虚拟磁盘的初始化,为了将来满足中介服务模块 raid 功能的 需求,开发中初始化了两个容量一致的虚拟磁盘以供使用。 5.3. 硬件设备模块头(header) 从图 15 中可以看到,模块头包含一个模块参数块(module parameter block) , 一个设备列表(device list)和一个适配器列表(adapter list) 。 参数块包含硬件设备模块的基本信息,如 i2o 版本,驱动版本号,i2o 平台类 型等。适配器列表用于定义本硬件设备模块支持的适配器类型。irtos 通过查询 适配器列表来判断那些适配器可以被硬件设备模块驱动和控制。本文开发中的硬 件设备模块没有用到适配器,故此表的内容为空(如通过连接 scsi 适配器挂载 scsi 硬盘, 就需要填写这个表) 。 设备列表用于定义本硬件设备模块支持的设备类 型。irtos 通过查询设备列表来判断可被驱动的设备。硬件驱动模块通过模块头 向 ixworks 声明自己,并完成初始化。 在 ixworks 下, 可以利用图形界面的方式创建硬件设备模块头, 只需要在相应 的字段输入信息或选择正确的类型即可。29 5.4. 参数组及其存取 如图 1 和图 15 所示,硬件设备模块内包含一系列数据结构定义和基于这些 数据结构的参数组(parameter groups) 。本小节将详细描述,硬件设备模块参数组 的建立过程和存取方法。 5.4.1. 参数组的定义和作用 按照 i2o 规范,每个逻辑设备(硬件设备模块实例化后也成为一个逻辑设备) 利用参数组来存放和自己相关的信息。这些信息涉及到逻辑设备的内部状态,i2o 操作系统、主机操作系统、其他驱动模块都可以通过 i2o 消息的方式来进行访问。 因此,这些信息必须以标准的方式保存在参数组中。 上海交通大学硕士学位论文 42 参数组按照维数,可以分为两类。第一类参数组只包含一行(维数为 1) ,行 内包含若干个字段(field) ,称为数量参数组(scalar parameter group) ,第二类包 含多个行(维数为 2) ,称为表格参数组(table parameter group) ,每一行的格式 定义都相同,且每行的第一个参数称为行的关键字(key) 。每个参数组通过一个 全局唯一的 16-bit 的组 id 来标识。显然的,如果需要读取数量参数组,只需要通 过组 id 和参数位置就能确定参数值;当需要读取表格参数组时,则需要提供 3 个 参数:组 id、关键字和参数位置。 如图 15 所示,按照适用范围,也可以将参数组分为两类。根据 i2o 规范,所 有的 i2o 逻辑设备必须具备通用参数组(generic parameter groups) ,而针对不同 的设备类别还需要具备特殊参数组 (specific parameter groups) 。 i2o 设备必须支持 的通用参数组如下:30 参数组 功能 类型 authorized user 可使用设备的用户 table claimed 所有声明控制的设备和适配器 table hdm identity 指向 hdm 实体 scalar device configuration control 设备是否可以被配置 scalar device identity 指向设备实体 scalar physical device 保存所有与当前设备相关的设备 table sgl operating limits 规定了 sgl 的上限 scalar user information 保存当前使用用户的信息 scalar user 保存当前声明该设备的所有用户 table 表 3:i2o 通用参数组 table 3: i2o generic parameter groups 本文开发的硬件设备模块属于块存储设备,根据 i2o 规范,块设备(bsa device)需要支持的特殊参数组如下: 参数组 功能 类型 device information 描述块设备的信息 table operational control 块设备的存取操作参数 scalar power control 非正常情况下的电源控制信息 scalar media information 存储介质类型信息 scalar cache control 缓存配置参数 scalar error log 错误信息记录 table 表 4:块设备特殊参数组 table 4: specific parameter groups of bsa devices 上海交通大学硕士学位论文 43 5.4.2. 参数组实现 在具体实现参数组的时候,可以调 i2o_params_field_def 结构体(包含 在 i2ocfglib.h 中) 。包含 4 个部分:字段常量(field constant) ,用来标明字段名; 设置函数的指针,指向字段设置函数;读取函数的指针,指向读取函数;和字段 长度定义。如下图所示: set func pointerget func pointerfield sizefield constantset func pointerset func pointerget func pointerfield sizefield sizefield constant 图 16:参数字段数据结构 figure 13: the data structure of i2o_params_field_def 数 量 参 数 组 ( scalar parameter group ) 可 以 直 接 通 过 创 建 i2o_params_field_def 类型的数组来实现。每一个参数就作为一个字段保存 在数量参数组中。以 5.4.1 中列举的用户信息参数组(user information)为例,创 建结构如下(代码相对简单,此处不赘述) : device nameservice namephysical locationinstance name user information group set device name get device name64 bytes device tid device namedevice nameservice namephysical locationinstance name user information group set device name get device name64 bytes device tidset device nameset device name get device name64 bytes device tid 图 17:用户信息组结构实现 figure 14: the structure of user information groups 表格参数组(table parameter group)与数量参数组的定义和实现方式不同。 如上图所示,数量参数组只有一行,而表格参数组有多个行,同时要具备添加和 删除行的能力。以 5.4.1 中列举的设备参数组(device information)为例,所有初 始化的虚拟磁盘都将在这个参数组内注册。因此每个虚拟磁盘都会在参数组中创 建一行。只有每行的第一个字段有差异(用来标识区别) ,而每行的格式定义完全 相同,也就是说,对每行相同位置的字段存取的方式是相同的。仍然利用 i2o_params_field_def 结构体31,创建结构如下: 上海交通大学硕士学位论文 44 device information group add rowdelete row 4 bytesdevice tid device tid block numberblock size get sizenull 4 bytesblock size device tid block numberblock size device information group add rowdelete row 4 bytesdevice tid add rowdelete row 4 bytesdevice tid device tid block numberblock sizedevice tiddevice tid block numberblock sizeblock size get sizenull 4 bytesblock size get sizenull 4 bytesblock size device tid block numberblock sizedevice tiddevice tid block numberblock sizeblock size 图 18:设备信息组结构实现 figure 15: the structure of device information group 可以看到,每增加一个磁盘,可以通过调用 add row 的函数来增减一行,每 行的第一个字段为设备的 tid(target id) ,是全局唯一的,故用来作为行的关键 字 ( key ) , 行 内 其 它 字 段 就 如 同 数 量 参 数 组 内 的 字 段 一 样 , 是 一 个 i2o_params_field_def 结构体,内部包含存取函数(有些字段不能写入,如 block size,写入函数就为空) 。 开发过程中,严格按照 i2o 2.0 规范,将所有的通用参数组和特殊参数组一一 建立完成。 5.4.3. 参数的存取 在上一小节,完成了参数组的建立。可以发现,针对每个参数(也就是具体 字段) ,都安排有读出和写入的函数指针。正是通过这些函数,实现了对参数的存 取。以下依然以设备信息组为例,对读取函数(get function)进行具体实现,写 入函数(set function)实现方法则类似。 i2o 规范定义的标准读取函数格式如下:32 u8 getfunc ( i2o_obj_context context, u32 constant, i2o_addr32 pkey, i2o_addr32 pvalue, i2o_frame pmessage ); context 是 i2o 规范中定义的特殊类型,包含 i2o 事件(event)和事件的内容。 此处的context表示目标设备, 可以用i2o_addr32 类型的pdevice来代替。 constant 就是图 16 中描述的字段名,pkey 和 pvalue 分别是两个指向关键字和返回值的指 针,pmessage 用来返回函数的执行结果。程序的代码框图如下: 上海交通大学硕士学位论文 45 pdevice; pkey; constant; pvalue pdevice=null? pkey=null? matched key? case constant return table error return bad key block size block num no match *pvalue=block size *pvalue=block num return success return no field yes yes yes nono no pdevice; pkey; constant; pvalue pdevice=null? pkey=null? matched key? case constant return table error return bad key block size block num no match *pvalue=block size *pvalue=block num return success return no field pdevice; pkey; constant; pvalue pdevice; pkey; constant; pvalue pdevice=null?pdevice=null? pkey=null?pkey=null? matched key?matched key? case constantcase constant return table error return table error return bad key return bad key block sizeblock size block numblock num no matchno match *pvalue=block size*pvalue=block size *pvalue=block num*pvalue=block num return success return success return no field return no field yes yes yes nono no 图 19:设备信息组参数读取函数框图 figure 16: the diagram of get-function for device information table 在实现细节上,对 pvalue 的赋值需要使用 i2odeviceconfigread32,例如读取 block size 的具体代码为: *pvalue = i2odeviceconfigread32 ( pdevice- blocksize, ram_read_count_offset, i2o_no_status); 函数返回的消息(message)类型共有四种,可以直接调用 i2o 标准消息类型, 分别是: 1) i2o_params_status_table_error 2) i2o_params_status_bad_key_continue 3) i2o_params_status_no_such_field 4) i2o_params_status_success 所表达的含义显而易见。而写入函数的结构与读取函数大致相同,只是把相 关的操作替换为 i2odeviceconfigwrite32,不再赘述。 对于表格参数组,需要实现添加、删除行的功能。行添加函数 addrow 的定义 和上文 getfunc 几乎一致,只是没有 pvalue 作为返回,其代码框图为: 上海交通大学硕士学位论文 46 pdevice; pkey; constant; pdevice=null? pkey=null? key existed? return table error return bad key return success yes yes no no yes no block size= *pdevice-block size; block num= *pdevice-block num pdevice; pkey; constant; pdevice; pkey; constant; pdevice=null?pdevice=null? pkey=null?pkey=null? key existed?key existed? return table error return table error return bad key return bad key return success return success yes yes no no yes no block size= *pdevice-block size; block num= *pdevice-block num 图 20:设备信息组行添加函数框图 figure 17: the diagram of add-row function for device information table 行删除函数的结构与行添加函数大致相同,不再赘述。 5.4.4. 参数组阵列实现 在上文中,已经实现了参数组的建立和参数的存取功能。根据 i2o 规范,需要 建立若干个参数组阵列(group arrays) ,每个参数组阵列用来存放一系列的参数 组(parameter group) 。可以这样理解,一个参数阵列是一个一维的数组,每个元 素 就 是 一 个 指 向 一 个 特 定 参 数 组 的 入 口 指 针 。 因 此 , 可 以 通 过 调 用 i2o_params_group_def 结构体(同样包含在 i2ocfglib.h 中)来实现这一功 能。如下图所示,该结构体包含五个部分:组编号,组内字段数量,指向组内元 素的结构体定义的指针,表读取函数,表删除函数。 group serial numnumber of fieldgroup definitionget function clear function group serial numnumber of fieldgroup definitionget function clear function 图 21:i2o_params_group_def 数据结构 figure 18: the data structure of i2o_params_group_def 开 发 过 程 中 , 建 立 了 一 个 类 型 为i2o_params_group_def的 ramhdmgroups 数组, 来实现参数组阵列的功能, 同时将所有的参数表放入该阵列, 结构如下图所示(仅列举两条记录为例) : 上海交通大学硕士学位论文 47 f102h4user informationget function clear function f208h6device informationget function clear function ramhdmgroups f102h4user informationget function clear function f208h6device informationget function clear function f102h4user informationget function clear function f102h4user informationget function clear function f208h6device informationget function clear function f208h6device informationget function clear function ramhdmgroups 图 22:参数组阵列 ramhdmgroups 实现 figure 19: the structure of a group array, ramhdmgroups 表读取函数(get function)和表删除函数(clear function)的实现与字段存 取差异不大,此处不再赘述实现细节。 5.4.5. 参数传递模型 至此,已经完整的建立起了 i2o 规范所定义的参数组(parameter groups)结 构,现在将给出完整的参数传递模型,借此概括本小节的内容。 我们知道,参数存放在参数组中,而参数组入口又统一存放在参数组阵列中。 这就构成了一个“阵列参数组参数”的三级结构。因此要完成一个参数的传 递,需要按照下图所示的流程: 上海交通大学硕士学位论文 48 requesting device request message message handler reply message i2ocfgparammsgreply group array group 1 group 2 parameter group 2 key 1 key 2 parameter 1 parameter 1 parameter 2 parameter 2 function routine parameter requesting devicerequesting device request messagerequest message message handlermessage handler reply messagereply message i2ocfgparammsgreply i2ocfgparammsgreply group arraygroup array group 1group 1 group 2 parameter group 2 key 1 key 2 parameter 1 parameter 1 parameter 2 parameter 2 parameter group 2 key 1key 1 key 2key 2 parameter 1parameter 1 parameter 1parameter 1 parameter 2parameter 2 parameter 2 function routinefunction routine parameterparameter 图 23:参数传递模型框图 figure 20: the diagram of parameter access 图中所示, 请求发起方的消息 (消息封装为 utilparamsget 或者 utilsparamsset 类型)经由消息处理函数(message handler,将在后续章节详细介绍)识别后, 交由 i2ocfgparammsgreply()函数处理,并由它生成回复信息并返回发起方。 i2ocfgparammsgreply 的定义如下: void i2ocfgparammsgreply ( i2o_dev_id devid, /*发起方 device id */ i2o_obj_context context, /*事件传递参数 */ i2o_message_frame * pcfgmsg, /* 请求消息帧 */ i2o_count numgroups, /* 参数组数量*/ i2o_params_group_def * pgrouparray, /* 发起方所属阵列 */ i2o_status * pstatus /* 状态处理*/ ) i2ocfgparammsgreply()是 ixworks 预定义的函数,只要参数表建立成功,并 且正确的调用并进行参数传递, 它就会依次按照图 23 的步骤: 首先进入参数阵列, 然后进入相应的参数组入口,最终调用相应的参数存取函数来完成请求,并封装 上海交通大学硕士学位论文 49 回复信息,返回请求发起方。 5.5. 消息处理函数(message handlers) 我们知道,在整个 i2o 系统中,所有的通讯通过一种“消息传递” (messaging) 的方式进行。如图 11 所示,ixworks 的外壳服务接口实现了消息的标准化封装, 并基于 tid 进行消息传输。因此,当硬件设备模块接受到消息后,要实现两个功 能:第一,正确的识别消息格式;第二,做出正确的消息处理(message handler) 。 根据 i2o 规范,所有的 i2o 消息都遵循标准化的格式。因此,硬件设备模块可 以区分出不同类型的消息。 同时, 硬件设备模块通过函数分配表的 (disp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论