一种多队列的高速存储设备驱动程序设计方法技术

技术编号:5453462 阅读:316 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种多队列的高速存储设备驱动程序设计方法,请求格式转换之后不直接发送到设备,而是将其缓冲在预备队列中,而且对该请求的发送操作并不一定由当前进程来执行;只有当预备队列变成活动队列之后,其中的请求才可以被发送到设备,此发送过程是由某一个进程代表活动队列上请求的所有者来集中完成的,所以高效且资源消耗少。

【技术实现步骤摘要】

本专利技术涉及高速存储设备在操作系统中的驱动程序设计和实现技术,特别涉及 Linux内核块设备驱动程序设计方法。
技术介绍
存储设备是最重要的计算机外围设备之一,常见的包括软盘、磁盘、⑶-ROM和闪存 等。一般地,这些存储设备主要由存储介质、设备控制器和设备接口组成,它们通过设备接 口与计算机总线相连,而操作系统中则需要有合适的驱动程序来对设备进行存取。存储设备的驱动程序位于操作系统中文件系统之下,与设备直接打交道。典型的 存储设备驱动程序通过如下步骤来完成对设备的存取1.从文件系统获取对该设备的I/O请求。这种请求的格式是设备无关的,也就是 说它决定于操作系统数据结构的定义,而非决定于设备的约定。这里所述“获取”并不一定 是设备驱动程序主动去获得文件系统所产生的I/O请求,更多的情形是设备驱动程序提供 一个接口,当文件系统产生请求时,将请求作为参数来调用这个接口,从而使操作系统代码 的执行路径离开文件系统层、进入到设备驱动程序。2.将获得的I/O请求转化为设备可识别的请求。设备驱动程序解析文件系统递交 的I/O请求,获得至少包括设备地址、主机内存地址、操作类型(读还是写)、数据长度这些 信息。然后按照设备的约定,将这些信息组装成设备可识别的请求格式。3.将转化后的请求发送给设备。设备驱动程序通过设备控制寄存器告知设备有新 的请求。可以将整个请求写入控制寄存器,也可以将请求置于主机内存某个位置,然后将这 个地址通过控制寄存器告知设备,由设备来获取请求。4.等待设备完成数据传输。目前的存储设备都是以中断方式来反馈I/O操作结 果,驱动程序则通常会在某个条件上等待,而这个条件将由中断处理程序来使其满足。等待 的方式不限,如轮询、睡眠。设备以DMA (Direct Memory Access)的方式在存储介质和主机 内存之间传输数据,这个过程与CPU的指令执行是并行进行的。传输完成之后,设备将产生 中断,告知操作系统。5.接收中断,激活等待条件。中断处理程序是驱动程序的一部分,当设备产生中断 时被调用。中断处理程序获取I/O操作的完成状态,对相应请求的等待条件实施改变,使得 等待中的进程可以继续执行。上述步骤是某一次I/O操作所经历的过程,包括了操作系统和设备各自的行为以 及二者之间的交互。实际情况中,多个I/O操作通常是并发的,即在同一个时间片段内,多 个进程或者线程可能一起发出大量I/O请求,操作系统和驱动程序处理这些请求的大部分 过程是并行进行的,如错误!未找到引用源。所示。并发意味着竞争,对一些关键数据结构的访问需要保证互斥;特别地,在向设备发 送请求时,必须保证发送过程处于临界区内,即当某一个进程开始操作设备时,其它进程必 须等待此进程完成操作,错误!未找到引用源。展示了这种情形。实现互斥功能的常见方法有原子操作、自旋锁、信号量、等待队列等。SMP (Symmetric Multi-Processing)和多核技 术的快速发展使得单一操作系统映像运行于十几个甚至几十个核上的情形越来越普遍,上 述各种互斥手段都存在一些弊端·自旋锁效率高、延迟小,但是只适用于临界区较小的情形,否则容易导致CPU资 源严重浪费·原子操作效率高,但只适用于对单条指令保证其原子性,不适用于复杂的操作·等待队列通常会使暂不能进入临界区的里程睡眠,不适用于对性能或实时性要 求高的情形·信号量通常由自旋锁或者等待队列实现,因此也存在这两种机制所存在的弊端本文中,高速存储设备是指当前能获得较高性能的主流存储设备,或者新兴的性 能更好的存储设备。对性能的衡量没有明确的量化指标,I/O带宽等于或大于主流存储设 备带宽的设备都属于高速存储设备。当存储设备本身能提供比较高的读写带宽时,设备的用户都期望操作系统可以将 该设备的I/O能力充分利用起来,这就要求设备驱动程序必须写得足够好。尽管各种存储 设备所提供给计算机的软/硬件接口并不一样,但是我们依然可以从上述设备驱动程序的 通用处理流程中找到关键路径。一般地,从文件系统获得请求、分析并转换请求格式都是可 以完全并行化的,即各个进程可以互不干涉地执行;而在将请求发送给设备的时候,需要互 斥地对设备进行访问。这里的互斥访问如果效率低了(如采用等待队列、信号量),则发送 的请求并不能使设备的I/O能力达到饱和,若为了效率而采用比较激进的互斥手段如自旋 锁,则CPU资源的浪费将十分可观。现有的存储设备驱动程序多采用等待队列方式,对于高 速存储设备而言,无法充分发挥其性能。
技术实现思路
为克服高速存储设备中效率和资源消耗之间的矛盾,本专利技术给出一种既可以保证 I/O高效及时、又不会过多消耗CPU资源的设备驱动程序设计方法。,步骤如下A、从文件系统获得IO请求;B、在持有ready lock的情况下将请求入队;C、在持有队列切换自旋锁的情况下检查活动队列,若为空则将预备队列和活动队 列互换,若非空则不进行操作;D、对请求发送标志进行原子的test and set操作;Ε、处理请求的进程向设备循环发送活动队列上的请求,已发送的则从活动队列中 移除;若队列为空或队列已满,则中止这一轮发送;F、清空发送标志;G、检查活动队列,若为空则将预备队列和活动队列互换;H、检查活动队列,若非空,则启动一个定时器,在短时间内再次从步骤D开始执 行。本专利技术一种优选技术方案在于所述步骤D test and set操作过程为测试若为 0则置1,否则不对其进行修改;若置位成功,则当前进程进入发送请求临界区,将其发送至设备;若置位不成功,则表明已有一个进程正在活动队列上处理请求,跳转至步骤H。本专利技术的有益效果在于请求格式转换之后不直接发送到设备,而是将其缓冲在预 备队列中,而且对该请求的发送操作并不一定由当前进程来执行;只有当预备队列变成活 动队列之后,其中的请求才可以被发送到设备,此发送过程是由某一个进程代表活动队列 上请求的所有者来集中完成的,所以高效且资源消耗少。附图说明图1是一般情况下操作系统和驱动处理请求的过程图2是本专利技术I/O请求从文件系统到设备的处理过程具体实施例方式本专利技术提出的一种基于多队列的存储设备驱动程序设计方法。它包括如下数据结 构· 一个活动队列(active queue)存放即将发送至设备的I/O请求· 一个预备队列(ready queue)存放暂不能发送至设备的I/O请求· 一个请求发送标志(request flag)若置为1则表示当前已经有一个进程正在 将活动队列上的请求发送至设备,若置为0则表示 一个保护队列切换操作的自旋锁(switch lock)保证对活动队列和预备队列的 切换过程处于一个临界区· 一个用于互斥访问预备队列的自旋锁(ready lock)保证对预备队列的入队 (euqueue)操作是互斥的· 一个定时器(timer)用于激活对潜在的最后一批I/O请求的处理设备驱动程序获得文件系统的请求并最终向设备发送I/O请求的过程遵循如下 步骤1.从文件系统获得I/O请求。这通常的实现方法是设备驱动程序实现了一个操作 系统规定的处理I/O请求的接口,当文件系统层产生新的I/O请求时,将调用这一接口,从 而进入到设备驱动程序代码段。2.将请求入队(enqueue)到预备队列。这一步要本文档来自技高网
...

【技术保护点】
一种多队列的高速存储设备驱动程序设计方法,其特征在于:步骤如下:A、从文件系统获得IO请求;B、在持有ready lock的情况下将请求入队;C、在持有队列切换自旋锁的情况下检查活动队列,若为空则将预备队列和活动队列互换,若非空则不进行操作;D、对请求发送标志进行原子的test and set操作;E、处理请求的进程向设备循环发送活动队列上的请求,已发送的则从活动队列中移除;若队列为空或队列已满,则中止这一轮发送;F、清空发送标志;G、检查活动队列,若为空则将预备队列和活动队列互换;H、检查活动队列,若非空,则启动一个定时器,在短时间内再次从步骤D开始执行。

【技术特征摘要】
1.一种多队列的高速存储设备驱动程序设计方法,其特征在于步骤如下A、从文件系统获得IO请求;B、在持有readylock的情况下将请求入队;C、在持有队列切换自旋锁的情况下检查活动队列,若为空则将预备队列和活动队列互 换,若非空则不进行操作;D、对请求发送标志进行原子的testand set操作;Ε、处理请求的进程向设备循环发送活动队列上的请求,已发送的则从活动队列中移 除;若队列为空或队列已满,则中止这一轮发送;F、清空...

【专利技术属性】
技术研发人员:贺志强李麟袁清波许建卫
申请(专利权)人:天津曙光计算机产业有限公司
类型:发明
国别省市:12[]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1