首页 / 专利库 / 驱动系统 / 直接驱动 / 一种多队列的高速存储设备驱动程序设计方法

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

阅读:901发布:2023-03-06

专利汇可以提供一种多队列的高速存储设备驱动程序设计方法专利检索,专利查询,专利分析的服务。并且本 发明 提供了一种多队列的高速存储设备驱动程序设计方法, 请求 格式转换之后不直接发送到设备,而是将其缓冲在预备队列中,而且对该请求的发送操作并不一定由当前 进程 来执行;只有当预备队列变成活动队列之后,其中的请求才可以被发送到设备,此发送过程是由某一个进程代表活动队列上请求的所有者来集中完成的,所以高效且资源消耗少。,下面是一种多队列的高速存储设备驱动程序设计方法专利的具体信息内容。

1.一种多队列的高速存储设备驱动程序设计方法,其特征在于:步骤如下:
A、从文件系统获得IO请求
B、在持有预备队列的自旋的情况下将请求入队;
C、在持有队列切换自旋锁的情况下检查活动队列,若为空则将预备队列和活动队列互换,若非空则不进行操作;
D、对请求发送标志进行原子的测试和设置操作;
E、处理请求的进程向设备循环发送活动队列上的请求,已发送的则从活动队列中移除;若队列为空或队列已满,则中止这一轮发送;
F、清空发送标志;
G、检查活动队列,若为空则将预备队列和活动队列互换;
H、检查活动队列,若非空,则启动一个定时器,在短时间内再次从步骤D开始执行;
所述步骤D测试和设置操作过程为测试若为0则置1,否则不对其进行修改;若置位成功,则当前进程进入发送请求临界区,将其发送至设备;若置位不成功,则表明已有一个进程正在活动队列上处理请求,跳转至步骤H。

说明书全文

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

技术领域

[0001] 本发明涉及高速存储设备在操作系统中的驱动程序设计和实现技术,特别涉及Linux内核设备驱动程序设计方法。

背景技术

[0002] 存储设备是最重要的计算机外围设备之一,常见的包括软盘、磁盘、CD-ROM和闪存等。一般地,这些存储设备主要由存储介质、设备控制器和设备接口组成,它们通过设备接口与计算机总线相连,而操作系统中则需要有合适的驱动程序来对设备进行存取。
[0003] 存储设备的驱动程序位于操作系统中文件系统之下,与设备直接打交道。典型的存储设备驱动程序通过如下步骤来完成对设备的存取:
[0004] 1.从文件系统获取对该设备的I/O请求。这种请求的格式是设备无关的,也就是说它决定于操作系统数据结构的定义,而非决定于设备的约定。这里所述“获取”并不一定是设备驱动程序主动去获得文件系统所产生的I/O请求,更多的情形是设备驱动程序提供一个接口,当文件系统产生请求时,将请求作为参数来调用这个接口,从而使操作系统代码的执行路径离开文件系统层、进入到设备驱动程序。
[0005] 2.将获得的I/O请求转化为设备可识别的请求。设备驱动程序解析文件系统递交的I/O请求,获得至少包括设备地址、主机内存地址、操作类型(读还是写)、数据长度这些信息。然后按照设备的约定,将这些信息组装成设备可识别的请求格式。
[0006] 3.将转化后的请求发送给设备。设备驱动程序通过设备控制寄存器告知设备有新的请求。可以将整个请求写入控制寄存器,也可以将请求置于主机内存某个位置,然后将这个地址通过控制寄存器告知设备,由设备来获取请求。
[0007] 4.等待设备完成数据传输。目前的存储设备都是以中断方式来反馈I/O操作结果,驱动程序则通常会在某个条件上等待,而这个条件将由中断处理程序来使其满足。等待的方式不限,如轮询、睡眠。设备以DMA(Direct Memory Access)的方式在存储介质和主机内存之间传输数据,这个过程与CPU的指令执行是并行进行的。传输完成之后,设备将产生中断,告知操作系统。
[0008] 5.接收中断,激活等待条件。中断处理程序是驱动程序的一部分,当设备产生中断时被调用。中断处理程序获取I/O操作的完成状态,对相应请求的等待条件实施改变,使得等待中的进程可以继续执行。
[0009] 上述步骤是某一次I/O操作所经历的过程,包括了操作系统和设备各自的行为以及二者之间的交互。实际情况中,多个I/O操作通常是并发的,即在同一个时间片段内,多个进程或者线程可能一起发出大量I/O请求,操作系统和驱动程序处理这些请求的大部分过程是并行进行的,如错误!未找到引用源。所示。
[0010] 并发意味着竞争,对一些关键数据结构的访问需要保证互斥;特别地,在向设备发送请求时,必须保证发送过程处于临界区内,即当某一个进程开始操作设备时,其它进程必须等待此进程完成操作,错误!未找到引用源。展示了这种情形。实现互斥功能的常见方法有原子操作、自旋信号量、等待队列等。SMP(Symmetric Multi-Processing)和多核技术的快速发展使得单一操作系统映像运行于十几个甚至几十个核上的情形越来越普遍,上述各种互斥手段都存在一些弊端:
[0011] ·自旋锁效率高、延迟小,但是只适用于临界区较小的情形,否则容易导致CPU资源严重浪费
[0012] ·原子操作效率高,但只适用于对单条指令保证其原子性,不适用于复杂的操作[0013] ·等待队列通常会使暂不能进入临界区的里程睡眠,不适用于对性能或实时性要求高的情形
[0014] ·信号量通常由自旋锁或者等待队列实现,因此也存在这两种机制所存在的弊端[0015] 本文中,高速存储设备是指当前能获得较高性能的主流存储设备,或者新兴的性能更好的存储设备。对性能的衡量没有明确的量化指标,I/O带宽等于或大于主流存储设备带宽的设备都属于高速存储设备。
[0016] 当存储设备本身能提供比较高的读写带宽时,设备的用户都期望操作系统可以将该设备的I/O能充分利用起来,这就要求设备驱动程序必须写得足够好。尽管各种存储设备所提供给计算机的软/硬件接口并不一样,但是我们依然可以从上述设备驱动程序的通用处理流程中找到关键路径。一般地,从文件系统获得请求、分析并转换请求格式都是可以完全并行化的,即各个进程可以互不干涉地执行;而在将请求发送给设备的时候,需要互斥地对设备进行访问。这里的互斥访问如果效率低了(如采用等待队列、信号量),则发送的请求并不能使设备的I/O能力达到饱和,若为了效率而采用比较激进的互斥手段如自旋锁,则CPU资源的浪费将十分可观。现有的存储设备驱动程序多采用等待队列方式,对于高速存储设备而言,无法充分发挥其性能。

发明内容

[0017] 为克服高速存储设备中效率和资源消耗之间的矛盾,本发明给出一种既可以保证I/O高效及时、又不会过多消耗CPU资源的设备驱动程序设计方法。
[0018] 一种多队列的高速存储设备驱动程序设计方法,步骤如下:
[0019] A、从文件系统获得IO请求;
[0020] B、在持有ready lock的情况下将请求入队;
[0021] C、在持有队列切换自旋锁的情况下检查活动队列,若为空则将预备队列和活动队列互换,若非空则不进行操作;
[0022] D、对请求发送标志进行原子的test and set操作;
[0023] E、处理请求的进程向设备循环发送活动队列上的请求,已发送的则从活动队列中移除;若队列为空或队列已满,则中止这一轮发送;
[0024] F、清空发送标志;
[0025] G、检查活动队列,若为空则将预备队列和活动队列互换;
[0026] H、检查活动队列,若非空,则启动一个定时器,在短时间内再次从步骤D开始执行。
[0027] 本发明一种优选技术方案在于:所述步骤D test and set操作过程为测试若为0则置1,否则不对其进行修改;若置位成功,则当前进程进入发送请求临界区,将其发送至设备;若置位不成功,则表明已有一个进程正在活动队列上处理请求,跳转至步骤H。
[0028] 本发明的有益效果在于请求格式转换之后不直接发送到设备,而是将其缓冲在预备队列中,而且对该请求的发送操作并不一定由当前进程来执行;只有当预备队列变成活动队列之后,其中的请求才可以被发送到设备,此发送过程是由某一个进程代表活动队列上请求的所有者来集中完成的,所以高效且资源消耗少。附图说明
[0029] 图1是一般情况下操作系统和驱动处理请求的过程
[0030] 图2是本发明I/O请求从文件系统到设备的处理过程

具体实施方式

[0031] 本发明提出的一种基于多队列的存储设备驱动程序设计方法。它包括如下数据结构:
[0032] ·一个活动队列(active queue):存放即将发送至设备的I/O请求[0033] ·一个预备队列(ready queue):存放暂不能发送至设备的I/O请求[0034] ·一个请求发送标志(request flag):若置为1则表示当前已经有一个进程正在将活动队列上的请求发送至设备,若置为0则表示
[0035] ·一个保护队列切换操作的自旋锁(switch lock):保证对活动队列和预备队列的切换过程处于一个临界区
[0036] ·一个用于互斥访问预备队列的自旋锁(ready lock):保证对预备队列的入队(euqueue)操作是互斥的
[0037] ·一个定时器(timer):用于激活对潜在的最后一批I/O请求的处理[0038] 设备驱动程序获得文件系统的请求并最终向设备发送I/O请求的过程遵循如下步骤:
[0039] 1.从文件系统获得I/O请求。这通常的实现方法是设备驱动程序实现了一个操作系统规定的处理I/O请求的接口,当文件系统层产生新的I/O请求时,将调用这一接口,从而进入到设备驱动程序代码段。
[0040] 2.将请求入队(enqueue)到预备队列。这一步要在持有ready lock的前提下执行,保证各个并发的入队操作都是完整进行的,从而不会破坏预备队列的完整性。
[0041] 3.检查活动队列,若为空则将预备队列和活动队列互换;若非空则不做任何操作。这一步要在持有队列切换自旋锁的前提下执行,保证活动队列或者预备队列指针始终指向正确的目标队列。
[0042] 4.对请求发送标志(request flag)进行原子的test and set操作:测试若为0则置为1,否则不对其进行修改。若置位成功,则当前进程进入发送请求的临界区,它代表活动队列上的所有请求的拥有者来处理这些请求(本文称之为代表进程),将其发送至设备。若置位不成功,表明已经有一个进程正在活动队列上处理请求,则跳至8[0043] 5.处理请求的进程向设备循环发送活动队列上的请求,已发送的则从活动队列中移除。若队列变为空,或者设备不能再接受更多的请求,则这一轮发送终止。
[0044] 6.清空发送标志(request flag)。
[0045] 7.检查活动队列,若为空则将预备队列和活动队列互换。
[0046] 8.检查活动队列,若非空,则启动一个定时器,在很短的时间(如1毫秒)之后再次从步骤4开始执行。这一步可以结合内核定时器及内核线程来完成,在Linux内核2.6以上的版本中,已提供了相应的实现。
相关专利内容
标题 发布/更新时间 阅读量
直接驱动的静压变速器 2020-05-12 556
直接驱动的回转机 2020-05-12 887
永磁直接驱动绞车 2020-05-12 94
直接驱动的洗衣机 2020-05-13 140
直接驱动的风力涡轮机 2020-05-12 278
电机直接驱动的奶泡机 2020-05-12 821
旋转的直接驱动装置 2020-05-13 960
直接驱动电机 2020-05-11 772
直接驱动电机 2020-05-11 531
直接驱动电机 2020-05-11 191
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈