一种可实现链表循环的系统及方法

文档序号:9708253阅读:327来源:国知局
一种可实现链表循环的系统及方法
【技术领域】
[0001]本发明涉及信号、数据等在存储器、输入/输出设备或者中央处理器之间的传送技术,尤其涉及一种支持循环、分支地来执行链表的系统及方法。
【背景技术】
[0002]当今社会已进入信息化时代,计算机和网络已渗透到社会的各个领域。伴随国民经济信息化进程的推进和电子商务等网络新业务的兴起,社会对计算机和网络的依赖程度越来越高。信息化时代呼唤信息安全,人们对信息安全的要求也越来越高。
[0003]直接存储器访问控制器(Direct Memory Access,DMA)是现代计算机的重要组成部件,实现输入输出(Input/Output,10)外设和存储器之间批量数据传输,以代替原来通过中央处理单元(Central Processor Unit,CPU)查询或中断来实现数据的传输。
[0004]—般DMA米用两种传输方式:直接方式和链式方式。
[0005]直接方式是CPU将一个传输命令(包括控制信息、源地址和目的地址)配置到DMA内部的寄存器中,然后DMA控制器根据这个传输命令控制总线完成数据传输。直接方式控制简单,但对于非连续地址空间或者大数据量的数据传输需要CPU多次干预,增加CPU开销。
[0006]链式方式是DMA先完成CPU预置的传输命令后,继续载入初始化在外部存储器中的链表(每一个链表就是一个传输命令),直到命令链上的所有传输命令执行完成。
[0007]图1是现有技术链式DMA的实现结构及其链表构成示意图。其中,链式DMA通常包括执行部件101、控制部件102、控制寄存器103、源地址寄存器104、目的地址寄存器105、下条链表地址寄存器106和结束标志寄存器107;每条链表则由控制信息111、源地址112、目的地址113、下条链表地址114以及结束标志115组成。
[0008]现有技术中链式DMA的工作过程如下:首先,执行部件101根据控制寄存器103、源地址寄存器104和目的地址寄存器105中的初始值,完成相应的传输命令,其中控制寄存器103中通常包含传输长度等信息。执行部件101完成该传输命令后,控制部件102结合结束标志寄存器107,决定是否终止命令链;如果结束标志寄存器107无效,控制部件102则根据下条链表地址寄存器106中的值,去寻址下一条链表,并将下一条链表的控制信息111、源地址112、目的地址113、下条链表地址114和结束标志115分别装载至DMA内部的控制寄存器103、源地址寄存器104、目的地址寄存器105、下条链表地址寄存器106和结束标志寄存器107,同时启动执行部件101完成下一条链表的传输命令。重复上述过程,直至某条链表的结束标志有效,完成该条链表定义的传输命令后,DMA进入空闲状态。
[0009]链式DMA通过预存的链表可以自主实现复杂的传输任务,有效减轻软件在搬运过程中的负荷。但链式DMA在实际应用中,会遇到一些需要重复传输的场景。当遇到需要重复多次的传输任务时,就需要将单次传输操作所使用的链表复制多份,以便链式DMA可以重复多次传输操作。假设单次传输操作所需链表数量为M,重复次数为N,那么完成N次重复传输操作需要的链表数量就是M*N,一旦重复次数过多,需要预存的链表数量也会非常庞大,耗费大量的存储空间。

【发明内容】

[0010]本发明为了解决上述现有技术的问题,提出一种可实现链表循环的系统,包括链表,配置模块和直接存储器访问控制器:
所述链表包含控制信息、源地址、目的地址、下条链表地址、结束标志和循环标志;
所述直接存储访问控制器包含:控制部件,用于完成各链表定义的传输命令的执行部件,与链表所包含的各数据一一对应的各寄存器,对正在执行的当前链表的循环次数进行计数的循环计数器;
配置模块,对需要执行的链表进行配置,配置各链表所包含的各数据,以及根据链表需要被循环的次数,配置循环计数器。
[0011 ]所述直接存储访问控制器还包含分支链表地址寄存器,当单个链表需要循环执行时,所述配置模块将下一条链表的地址通过分支链表地址寄存器进行加载,然后将当前链表的下条链表地址置为当前链表本身的地址,并通过下条链表地址寄存器进行加载;在该链表循环过程中,所述控制部件读取下条链表地址寄存器的地址进行加载执行,循环结束后,所述控制部件读取分支链表地址寄存器的地址进行加载执行。有了分支链表地址寄存器,可以使本发明实现更为复杂的链表循环情况。
[0012]本发明还提出了一种可实现链表循环的方法,包括如下步骤:
步骤S201、控制部件从外部存储器中装载链表的控制信息、源地址、目的地址、下一条链表地址、结束标志和循环标志分别到直接存储器访问控制器的控制寄存器、源地址寄存器、目的地址寄存器、下条链表地址寄存器、结束标志寄存器和循环标志寄存器中;
步骤S202、控制部件装载完当前链表后,启动执行部件完成当前链表定义的传输命令;步骤S203、执行部件完成当前链表定义的传输命令后,控制部件判断结束标志寄存器中的链表的结束标志是否有效;
步骤S204、控制部件结合结束标志是否有效,继续判断循环标志寄存器中的当前链表的循环标志是否有效;
当结束标志有效,循环标志无效时,执行步骤S206;
当结束标志无效,循环标志无效时,执行步骤S208 ;
当循环标志有效时,执行步骤S205;
步骤S205、控制部件需要进一步判断循环计数器是否为0,若为0则执行步骤S206,若不为0则执行步骤S207;
步骤S206、直接存储器访问控制器空闲;
步骤S207、循环计数器减1;
步骤S208、控制部件通过下条链表地址寄存器中的值来寻址下一条链表,开始装载下一条链表;
步骤S209、控制部件通过分支链表地址寄存器中的值来寻址下一条链表,开始装载下一条链表。
[0013]本发明通过增加循环标志寄存器和循环计数器,实现了链表的重复执行,同时不会增加链表的数量,进而节省了存储空间。本发明进一步增加了分支链表地址寄存器,可以实现更为复杂的链表循环情况,例如单个链表循环后还需继续执行其他链表,在单个链表循环结束后可以实现分支跳转,作为循环功能的必要补充,提高了链式DMA的使用灵活性,拓宽了链式DMA的应用范围。
【附图说明】
[0014]图1是现有技术链式DMA的实现结构及对应的链表构成示意图;
图2是本发明链式DMA的实现结构及对应的链表构成示意图;
图3是本发明链式DMA的工作流程示意图;
图4是本发明应用实例的链表构成示意图。
【具体实施方式】
[0015]如图2所示,本发明一实施例提出的可实现链表循环的系统,包括待执行的链表,对链表进行加载和执行的直接存储器访问控制器,以及对链表及直接存储访问控制器的部分部件进行配置的配置模块120。
[0016]本发明的链表同样也包含控制信息111、源地址112、目的地址113、下条链表地址114以及结束标志115,并且在现有技术的基础上增加了一个循环标志116,该循环标志116用来标记是否需要循环执行链表,包括单个链表的循环执行和批量链表的循环执行。
[0017]相对应的,直接存储器访问控制器包含执行部件101、控制部件102、控制寄存器103、源地址寄存器104、目的地址寄存器105、下条链表地址寄存器106和结束标志寄存器107,并且在现有技术的基础上也增加了用于加载链表循环标志116的循环标志寄存器108,除此以外,还增加了循环计数器109和分支链表地址寄存器110。
[0018]其中,直接存储器访问控制器的循环标志寄存器108用来标识当前被执行的传输命令是否为循环命令,并作为循环计数器109的减1使能。同时跟结束标志寄存器107—起,在循环计数器109递减到0的时候,决定控制部件102是通过下条链表地址寄存器106还是分支链表地址寄存器110中的值来寻址后续链表。循环计数器109用来记录循环命令被执行的次数。当上个循环命令链结束(循环标志寄存器有效,同时循环计数器递减到0),但结束标志寄存器无效时,分支链表地址寄存器110用来存储分支链表的地址,以便跳出上个循环命令链。
[0019]为了使直接存储器访问控制器可以单个循环链表,或者是批量循环链表,再或者是执行包含了单个循环、批量循环以及顺次执行等多种情况的复杂的链表集合,配置模块120需要对待执行的链表进行配置,并配置链表所包含的数据,以及根据链表需要被循环的次数,配置循环计数器。
[0020]链表循环大致分为四种情况,第一种是单个链表循环后,链表执行完毕。第二种是单个链表循环后,还需要再执行下一条链表。第三种是先依次执行多个链表,然后将这多个链表整体再循环执行,即链表的批量循环。第四种情况比较复杂,可能单个链表1循环之后,继续执行链表2-10,执行链表2-10的过程中,可能某个链表还需要单个循环,最后还需要再循环整个执行过程。
[0021]当第一种情况时,仅仅是单个链表循环,不需要使用分支链表地址寄存器。配置模块120将当前链表的下一条链表地址置为当前链表本身,并且根据需要循环的次数配置计数器。当链表循环完毕,整个过程执行完毕。
[0022]当第二种情况时,需要使用一个分支链表地址寄存器来储存下一条链表的地址,以便当个链表循环执行完毕后,可以顺利找到下一条待执行的链表,其具体实现方式是配置模块120将下一条链表地址通过分支链表地址寄存器进行加载,然后将当前链表的下一条链表地址置为当前链表本身,并通过下条链表地址寄存器进行加载;在该单个链表的循环过程中,控制部件读取下条链表地址寄存器的地址进行加载执行,在单个链表的循环结束后,控制部件读取分支链表地址寄存器的地址进行加载执行,即实现了循环后的分支跳转功能。
[0023]当第三种情况时,批量链表需要循环执行,配置模块120将最后一条链表的下一条链表地址置为第一条链表的地址,并将循环标志置为有效,其余的链表的下条链表地址依次为下一条链表地址,循环标志位置为无效。这样控制部件可以依次读取各链表,待读取到最后一条链表时,由于循环标志位为有效,即需要进行循环,然后下条链表地址的数据为第一条链表的地址,同时,循环计数器被配置模块配置了相应的循环次数,因此,链表将循环执行第一条链表至最后一条链表。
[0024]当第四种情况时,可以将链表看成是以上三种情况的不同组合,根据以上三种情况的执行方法来依次进行处理即可。
[0025]本发明增加了新的判
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1