CN104331269B - 一种嵌入式***可执行代码压缩方法及代码解压缩*** - Google Patents
一种嵌入式***可执行代码压缩方法及代码解压缩*** Download PDFInfo
- Publication number
- CN104331269B CN104331269B CN201410589995.XA CN201410589995A CN104331269B CN 104331269 B CN104331269 B CN 104331269B CN 201410589995 A CN201410589995 A CN 201410589995A CN 104331269 B CN104331269 B CN 104331269B
- Authority
- CN
- China
- Prior art keywords
- dictionary
- coding
- ring shift
- code
- twisted ring
- 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.)
- Active
Links
- 238000007906 compression Methods 0.000 title claims abstract description 123
- 230000006835 compression Effects 0.000 title claims abstract description 121
- 238000000034 method Methods 0.000 title claims abstract description 38
- 230000006837 decompression Effects 0.000 title claims abstract description 34
- 230000005055 memory storage Effects 0.000 claims abstract description 51
- 238000012545 processing Methods 0.000 claims abstract description 31
- 238000013507 mapping Methods 0.000 claims abstract description 22
- 238000003860 storage Methods 0.000 claims description 42
- 238000005056 compaction Methods 0.000 claims description 14
- 230000003139 buffering effect Effects 0.000 claims description 4
- 230000018199 S phase Effects 0.000 claims description 2
- 230000003044 adaptive effect Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 6
- 230000000694 effects Effects 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 229910002056 binary alloy Inorganic materials 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 241001441724 Tetraodontidae Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000008602 contraction Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000011549 displacement method Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000005381 potential energy Methods 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提供一种嵌入式***可执行代码的压缩方法,包括步骤S1:对二进制代码集合按集合中各个不同编码出现的次数进行统计;步骤S2:对各个不同编码出现的频次进行排序,组成一个新的已排序的编码频次表;步骤S3:根据编码频次表中的信息,将所有出现的不同编码分为r类;步骤S4:对前r‑1类编码分别用不同索引长度的字典压缩,对第r类编码进行扭环移位字典压缩;步骤S5:将构建的r个字典及其索引集合分别存入外部存储器中。本发明还提供一种嵌入式***可执行代码的解压缩***,中央处理器由解压缩逻辑中的地址映射逻辑,从r个字典及其索引集合中取得所需的压缩代码,经过解压缩逻辑中的解压单元,得到二进制代码集合中的指令编码。
Description
技术领域
本发明涉及代码压缩领域,尤其涉及嵌入式***可执行代码的压缩方法及运行时解压缩***。
背景技术
随着应用复杂度的增加,应用程序的可执行二进制代码集合尺寸也逐步增大,需要巨大的存储空间,从而导致芯片面积和***功耗增加。由于外部存储器的容量在物理上的增加往往受到机器自身及***成本的制约,因此可将代码进行压缩存储,以从逻辑上来扩充存储器的容量。使用代码压缩方法减小程序代码尺寸,可以有效节省芯片的面积和功耗。
代码压缩技术按解压缩结构,可分为取指时解压和缓存中解压两类。取指时解压的方案,解压器放在外部存储器与指令缓冲存储器(cache)之间。缓存中解压的方案,解压器放在处理器与指令缓冲存储器(cache)之间。就性能和功耗考虑,如果解压逻辑的硬件开销和时间开销较小,则缓存中解压的方案要优于取指时解压的方案。但目前的代码压缩技术因解压逻辑的开销问题,大多选择取指时解压的方案。
按字典的个数可分为单字典压缩和多字典压缩。单字典压缩技术,有两种方案,一种是对编译后的可执行二进制代码集合,进行频次统计,将出现频次高的一部分编码采用短的索引进行查字典解压,剩下的出现频次低的编码不压缩;另一种是采用哈夫曼压缩,建立字典,出现频次高的编码采用短索引,出现频次低的编码采用长索引。多字典压缩技术,是对编译后的可执行二进制代码集合,进行频次统计,然后按出现的频次将编码分成几类,每一类采用一个独立的字典进行压缩。这样,每个字典的索引可以选择最佳的长度,进一步提高压缩率。多字典的缺点是增加了部分硬件开销。
按指令的压缩形式分,有全代码压缩和子代码压缩技术。全代码压缩是对完整的指令码进行压缩,在解压逻辑中采用映射表来得到原始指令。子代码压缩技术是对指令编码中的操作码字段进行压缩,而对指令编码中表示寄存器和标志位的字段不压缩。
美国专利US6564314B1给出了一种代码压缩方法。专利号为CN1241115C的发明专利给出了处理压缩程序代码的电子设备和方法。专利号为CN101382884B的发明专利给出了一种指令编码方法、指令编码***及数字信号处理器,在设计指令集时,对指令编码分成3种长度以达到指令压缩的效果。对指令编码进行分类字典压缩,并对其中压缩效果一般的一类编码采用扭环移位压缩,以进一步提高压缩率,在执行阶段,从程序存储器取出压缩的指令,然后用解压缩器将其解压为原始形式,再解码成控制信号去控制处理器中的硬件资源。
发明内容
(一)要解决的问题
为了进一步提高现有技术的效果,本发明目的是提供一种有效的缩小代码存储在外部存储器中所需的存储空间的代码压缩方法和可执行代码运行时的解压缩硬件***。
(二)技术方案
本发明的第一方面,提供一种嵌入式***可执行代码的压缩方法,包括步骤如下:
步骤S1:对二进制代码集合按该集合中各个不同编码出现的次数进行统计,得到编码出现次数的频次表;
步骤S2:对各个不同编码出现的频次进行排序,出现频次高的编码排在前面,出现频次低的编码排在后面,组成一个新的已排序的编码频次表;
步骤S3:根据编码频次表中的信息,采用分类算法,将所有出现的不同编码分为r个类;
步骤S4:对可执行二进制代码集合H的前r-1个类编码分别采用不同索引长度的字典进行压缩,对第r类编码进行扭环移位字典压缩,构建r个字典及其索引集合;
步骤S5:将r个字典及其索引集合分别存入外部存储器中。
本发明的第二方面,提供一种嵌入式***可执行代码的解压缩***包括:中央处理器、缓冲存储器、地址映射缓存、缓冲装载逻辑单元、扭环移位序列产生器、r个字典、外部存储器;其中:
中央处理器与缓冲存储器和地址映射缓存相连;中央处理器的数据总线输出信息给缓冲存储器,也从缓冲存储器获取输入信息;中央处理器的地址总线输出信息给地址映射缓存,也从地址映射缓存获取输入信息;中央处理器通过控制总线控制信息的流向;
缓冲存储器与缓存装载逻辑单元相连,缓冲存储器从缓存装载逻辑单元获得通过索引查字典所得到的原始二进制代码集合中的指令编码,缓存装载逻辑单元从缓冲存储器接收命令并对自身的数据进行更新;
地址映射缓存与缓存装载逻辑单元相连,地址映射缓存从缓存装载逻辑单元获得解压缩后的代码在外部存储器中的地址,缓存装载逻辑单元从地址映射缓存单元接收命令对自身的地址数据进行更新;
缓存装载逻辑单元分别与扭环移位序列发生器及r个字典相连;扭环移位序列发生器和r个字典输出字典中的数据序列发送给缓存装载逻辑单元;
扭环移位序列发生器和r个字典分别与外部存储器相连;外部存储器的输出数据分别发送到扭环移位序列发生器和r个字典;在计算机上编写代码压缩算法,用于压缩可执行二进制代码、压缩第r类编码扭环移位字典,构建r个字典及其索引集合,压缩后的代码存储在外部存储器中;
中央处理器在代码解压时,将外部存储器的字典载入中央处理器的内部存储器中,通过解压缩逻辑中的地址映射逻辑,找到待解压的指令所对应的索引,以该索引查找其所对应的字典条目,该字典条目的值即是二进制代码集合中的指令编码。
(三)有益效果
本发明实施例对可执行二进制代码集合采用分类的字典压缩算法,按编码出现的频次分成r类(r=1、2、4、......),并对最后一类编码采用扭环移位字典压缩技术进行压缩。对可执行二进制代码集合采用这种分类多字典编码方法来表示n比特编码S的二进制代码集合H,其熵比采用哈夫曼变长编码时的熵要大,也即这种编码方式的冗余度要小,编码之间的相关性小。在对二进制代码集合H进行分类时,把采用字典压缩几乎不产生效果的编码归入了第r类,对可执行二进制代码集合中的第r类采用扭环移位字典进行压缩,能够进一步提高第r类的压缩率。由于采用了分类多字典压缩和扭环移位字典压缩,同一程序在同一体系结构的处理器下编译后生成的二进制代码集合,所占的外部存储器开销比不使用该压缩算法或使用其他多字典压缩算法时要小。所做的实验结果表明,基准程序集MiBench中的33个程序在ARM体系架构下的可执行二进制代码集合在本发明实施例中的压缩率都介于50%~55%之间,是目前(2014年)代码压缩领域压缩率最佳的结果。
现有技术中的多级字典压缩技术与本发明实施例中的多字典技术在压缩原理上是不相同的。多级字典压缩技术将可执行二进制代码集合H采用一级字典压缩后,得到代码集合H’,再对代码集合H’进行字典压缩,得到代码集合H”,依次逐级压缩。本发明实施例中的多字典技术则是将可执行二进制代码集合H分为r类,对各类一次性采用不同索引长度的字典进行压缩。由于采用了分类字典,可以对出现频次高的编码采用极短的索引构建相应的字典,出现频次稍低的编码采用稍长的索引构建相应的字典,提高了压缩率。本发明实施例中的多字典技术在代码解压时的访存次数比多级字典要少,也即代码解压的实时性要比多级字典的方法要好。
现有技术中的字典压缩通常对索引进行哈夫曼编码,本发明实施例中对二进制代码集合H采用自适应定长编码。所谓自适应定长编码,即是对二进制代码集合H按集合中的编码出现的次数进行分类,对分得的每类二进制代码子集合h采用定长编码进行字典压缩。同一类中的编码经过字典压缩后的索引长度k相同,即定长编码;不同类的编码经过字典压缩后的索引长度不同,其索引长度由经过分类后的每类的大小决定,即自适应编码。在不同编码的个数较多的待编码集合中,采用自适应编码所需要的总的比特数比采用哈夫曼编码要少。
附图说明
图1为压缩代码的生成过程示意图;
图2为本发明实施嵌入式***可执行代码压缩方法的示意图;
图3为本发明实施扭环移位产生的序列图;
图4为本发明实施扭环移位字典压缩的流程图;
图5为本发明扭环移位字典压缩的另一个实施例;
图6为本发明实施代码解压缩***的示意图;
图7为本发明实施指令执行过程的流程图;
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
如图1所示压缩代码的生成过程,将一个用户程序经过编译程序100产生若干个目标模块,然后将目标模块和它们所需要的库函数文件通过链接程序200链接在一起,形成可执行二进制代码,通过压缩程序300压缩二进制可执行代码,形成压缩后的二进制代码,将其载入存储器400中。
压缩二进制执行代码,目前现有技术常采用字典压缩的方法。表1举了2个例子,对字典压缩进行描述。第1列为待压缩的原始可执行代码,在存储器中是以2进制形式储存,为了直观,在表1中采用16进制来表示,共6条指令,每条指令32比特。第2列为采用哈夫曼编码对指令进行压缩后的编码。0Xffffffff出现了2次,该编码出现的频次在整个代码集合中与0Xe24cb004并列第一,所以采用短的编码来表示,于是用0来表示。为了在解压时,能准确找出每条指令,根据哈夫曼的编码规则,0Xe24cb004只能编码为10或11,这里编码为10。第3列为采用定长编码对指令进行压缩后的编码。原始二进制代码集合有4个不同的编码,所以采用定长编码,2比特即可表示。
表1 字典压缩举例
原始代码 | 哈夫曼编码 | 定长编码 |
0X312c3028 | 110 | 00 |
0Xffffffff | 0 | 01 |
0Xe1a0c00d | 111 | 10 |
0Xe24cb004 | 10 | 11 |
0Xffffffff | 0 | 01 |
0Xe24cb004 | 10 | 11 |
表2所示,第1列是经过字典压缩后,原始二进制可执行代码在字典中的条目,这些条目存储在中央处理器的内部存储器中,以便查找字典的速度尽可能地快。外部存储器比内部存储器的访存时间要慢很多,把字典放在内部存储器,可以减轻代码压缩对处理器性能的影响。第2列是经过字典压缩后,在哈夫曼编码情况下,存储在外部存储器中的压缩后代码。第3列是经过字典压缩后,在定长编码的情况下,存储在外部存储器中的压缩后代码。
表2 压缩后的字典及其索引
从表1和表2可以得知,原始代码有6条32位的指令,共192比特。采用哈夫曼编码的字典压缩后,字典索引在外部存储器中需存9比特数据,字典在外部存储器中需存128比特数据,所以总的压缩率为字典的大小与压缩后代码(即字典索引)的大小之和除以原始代码大小,也即(128+9)/192=71.35%。采用定长编码的字典压缩后,字典索引在外部存储器中需存8比特数据,字典在外部存储器中需存128比特数据,所以总的压缩率为字典的大小与压缩后代码(即字典索引)的大小之和除以原始代码大小,也即(128+8)/192=70.8%。
对于实际程序,代码的压缩率还必须考虑地址映射表的开销,以及为了地址对齐而额外增加的存储开销等。
上例中哈夫曼编码的压缩率要劣于定长编码的压缩率。随着程序的增大,不同编码的个数的增多,哈夫曼的编码长度会增长得比定长编码的编码长度要快,导致压缩效果变差。采用自适应定长编码,则其压缩率要优于哈夫曼编码的压缩率。本发明即采用自适应定长编码对二进制代码进行压缩。
所谓自适应定长编码,即是对二进制代码集合H按集合中的编码出现的次数进行分类,对分得的每类二进制代码子集合h采用定长编码进行字典压缩。同一类中的编码经过字典压缩后的索引长度k相同,即定长编码;不同类的编码经过字典压缩后的索引长度不同,其索引长度由经过分类后的每类的大小决定,即自适应编码。
如图2示出为本发明实施嵌入式***可执行代码压缩方法的示意图,本发明所述方法对可执行的二进制代码集合在计算机上进行压缩,压缩后的代码载入外部存储器供中央处理器运行程序时使用。
本发明嵌入式***可执行代码压缩方法的步骤如下:
步骤S1:对图1的链接程序200中链接后形成的二进制代码集合按该集合中各个不同编码出现的频次进行统计,得到编码出现次数的频次表;
步骤S2:对各个不同编码出现的频次进行排序,出现频次高的编码排在前面,出现频次低的编码排在后面,组成一个新的已排序的编码频次表;
步骤S3:根据编码频次表中的信息,采用分类算法,将所有出现的不同编码分为r类,其中,r=2v(v=1、2、3、......j)。r的大小一般不会超过216,所以j的值小于16,也即v的值小于16。实际代码压缩的时候,v的值一般取2或3。将包含m个不同的编码S的可执行二进制代码集合H={S1,S2,……,Sm},按其中每个编码S出现次数的多少对可执行二进制代码集合H进行分类,得到r个类;采用不同索引长度的字典对各分类进行压缩;每一类中不同编码的字典索引的长度相等,不同类的字典索引长度不等。
步骤S4:对可执行二进制代码集合H的前r-1类编码进行分别采用不同索引长度的字典压缩,对第r类编码进行扭环移位字典压缩,构建r个字典及其索引集合C={c1,c2,……,cr}。所述扭环移位序列的种子经过扭环移位寄存器扭环左移位或扭环右移位后,得到新的扭环移位数据序列。若新的扭环移位数据序列H与代码集合H中的编码S相同,则用扭环移位序列的种子来表征编码S。编码可由扭环移位序列的种子经过扭环移位寄存器扭环左移位或扭环右移位后得到。利用扭环移位序列将第r类编码进行压缩,只将种子信息存储在外部存储器中。种子信息包含扭环移位序列的种子及该种子扭环移位得到编码所需的扭环移位次数。
由于要区分索引属于哪个字典,所以在索引中加入标志位f。f的长度等于v,其值用二进制表示,比如00,10等等。
第i类编码中不同的编码个数为ci,则该类编码所对应的字典的索引长度ki=v+log2ci。
本实施例中v=2,f={00,01,10,11},r=4,C={c1,c2,c3,c4},c1=4,c2=32,c3=1024,c4=t-c1-c2-c3,其中,t为待压缩代码的大小,对应MiBench中的blowfish程序,t=7749536.
对第1、2、3类采用字典压缩。对第4类编码采用扭环移位字典压缩。总共得到4种长度的压缩编码,建立4个字典及其索引集合。
步骤S5:将这4个字典及索引集合分别存入中央处理器的内部存储器以及外部存储器中。
步骤S6:程序执行时,中央处理器通过解压缩逻辑中的地址映射逻辑,能从外部存储器中取得所需的压缩代码,该压缩代码也即各个分类对应的字典的索引,通过索引查字典,即可得到字典中的字典条目,这些字典条目即是二进制代码集合中的指令编码。
如图3示出本发明实施扭环移位产生的序列图,种子11000000经过扭环移位寄存器右移后,右移一次,即得到数据序列11100000,再右移一次,即得到数据序列11110000,依次类推得到2*8=16个新的数据序列。该数据序列与循环移位所产生的数据序列在生成方式上的区别是:先将最后一位取反,再进行循环移位。n比特的种子,经过扭环移位,可产生2n个不同的扭环移位数据序列。本发明实施例中,利用扭环移位所产生的扭环移位数据序列,将第4类编码进行字典压缩,只将种子信息存储在外部存储器中。种子信息包括:区分属于哪类字典的标志位,种子序列,得到某个序列需要扭环移位的次数。
如图4示出本发明实施扭环移位字典压缩的流程图,实施例是对第4类编码进行扭环移位字典压缩时,寻找种子的方法流程。
步骤S41:对第r类编码进行频次统计和排序;
步骤S42:以第r类中频次高的n比特编码作为种子,进行扭环移位,该种子将产生2*n个扭环移位数据序列;
步骤S43:将这2n个扭环移位数据序列分别与第r类编码中的每个编码进行比较,若第r类编码中存在编码与所述2n个扭环移位数据序列中的某个扭环移位数据序列完全相同,则记录下种子扭环移位得到该编码需要的扭环移位次数x,把种子存入种子集合U,并从第r类中摘除该编码,转步骤S44;若第r类编码中没有编码与这2n个扭环移位数据序列中的某个数据序列相同,则取频次第二高的编码作为种子,转步骤S42;
步骤S44:若遍历到了第r类中频次最低的最后一个编码,则转步骤S45,否则转步骤S42;
步骤S45:将种子集合U作为字典,并建立其索引,索引即是压缩后的代码Gr。
如图5示出为本发明扭环移位字典压缩的另一个实施例,在所述索引中加入扭环移位次数x,使扭环移位解压逻辑能通过种子信息和扭环移位次数x解压出该编码。将32位编码分成4段,每段分别进行扭环移位字典压缩。寻找种子的方法流程如下:首先对第4类编码进行频次统计和排序,以第一个频次高的编码作为种子,将该种子分成4段,每段8比特分别进行扭环移位,该种子将产生(2*8)*4=65536个序列,将这65536个序列分别与第4类编码中的每个编码进行比较,若相等,则记录下种子每段扭环移位得到该编码的扭环移位次数x1、x2、x3、x4、然后摘除该编码。再从频次第二高的编码开始,以其作为种子,进行扭环移位,并摘除编码。如此重复,直到最后一个编码。将这些种子作为字典,并建立索引。索引中包括:每段的扭环移位次数x1、x2、x3、x4,表示属于第4类的标志位11,以及查找扭环移位字典的字典索引。由于8比特的数据序列经过扭环移位,产生16个扭环移位数据序列,所以x1、x2、x3、x4的长度都为4比特。
图6所示为本发明提供的一种代码解压缩***的示意图,包括:中央处理器1、缓冲存储器2、地址映射缓存3、缓存装载逻辑4、扭环移位序列产生器5、三个字典6-8、外部存储器9、外部存储器9中含有地址映射表,其中:
中央处理器1与缓冲存储器2和地址映射缓存3相连。中央处理器1的数据总线输出信息给缓冲存储器2,也从缓冲存储器2获取输入信息。中央处理器1的地址总线输出信息给地址映射缓存3,也从地址映射缓存3获取输入信息;中央处理器1通过控制总线控制信息的流向。
缓冲存储器2与缓存装载逻辑单元4相连,缓冲存储器2从缓存装载逻辑单元4获得通过索引查字典所得到的原始二进制代码集合中的指令编码,缓存装载逻辑单元4从缓冲存储器2接收命令并对自身的数据进行更新;
地址映射缓存3也即地址映射缓冲存储器,地址映射缓存3与缓存装载逻辑单元4相连,地址映射缓存3从缓存装载逻辑单元4获得解压缩后的代码在外部存储器9中的地址,缓存装载逻辑单元4从地址映射缓存3接收命令对自身的地址数据进行更新。
缓存装载逻辑单元4分别与扭环移位序列发生器5及r个字典6-8相连。扭环移位序列发生器5和r个字典输出字典中的数据序列发送给缓存装载逻辑单元4。
扭环移位序列发生器5和r个字典分别与外部存储器9相连;外部存储器9的输出数据分别发送到扭环移位序列发生器5和r个字典6-8;在计算机上编写代码压缩算法,用于压缩可执行二进制代码、压缩第r类编码扭环移位字典,构建r个字典6-8及其索引集合,压缩后的代码存储在外部存储器9中;
中央处理器1在代码解压时,将外部存储器9的字典载入中央处理器1的内部存储器中,通过解压缩逻辑中的地址映射逻辑,找到待解压的指令所对应的索引,以该索引查找其所对应的字典条目,该字典条目的值即是二进制代码集合中的指令编码。
对二进制代码进行压缩时,在计算机中计算出代码压缩前代码在外部存储器9中的地址、代码压缩后代码在外部存储器中的地址,构建这两个地址之间的对应关系,将对应关系存入地址映射表。将此地址映射表存入外部存储器9中。
所述r个字典,对应于二进制代码集合H的r个分类;每一类中不同编码的字典索引的长度相等,不同类的字典索引长度不等;r个字典的索引及字典条目存储在外部存储器中;程序执行时,先将字典条目装载入中央处理器的内部存储器中。
所述扭环移位序列产生器,对扭环移位序列的种子扭环左移位或扭环右移位,在规定的扭环移位次数下,得到新的扭环移位数据序列,该数据序列即可表征编码S。规定的扭环移位次数即预先存储在字典索引中的扭环移位次数。
如图7示出本发明***实施指令执行过程的流程图,用于描述本发明***的工作流程和数据流向:
步骤SA:中央处理器1访问缓冲存储器2;
步骤SB:如果缓冲存储器2中的标签与中央处理器1给的数据相等,且缓冲存储器2中标签所对应的数据块有效,则表示缓冲存储器2命中,执行步骤SH;步骤SH直接从该缓冲存储器2中取出指令并传回给中央处理器1。如果缓冲存储器2中的标签与中央处理器1给的数据不相等,或者缓冲存储器2中该标签所对应的数据块无效,则表示缓冲存储器2没有命中,执行步骤SC;
步骤SC:如果缓冲存储器2没有命中,则比较地址映射缓存3中的标签与中央处理器1给出的标签数据是否相等,若相等,且标签所对应的数据有效,则地址映射缓存3被命中,执行步骤SF;若地址映射缓存3中的标签与中央处理器1给出的标签数据不相等,或者标签所对应的数据无效,则地址映射缓存3没有命中,执行步骤SD;
步骤SD:中央处理器1访问外部存储器9中的地址映射表,读取地址映射表中的块数据。块数据中是多个地址的集合。这些地址指向存储器中压缩后的指令的存储单元。
步骤SE:中央处理器1将步骤SD中放问存储器得到的块数据,通过缓存装载逻辑单元4,载入地址映射缓存3中,更新地址映射缓存的值。
步骤SF:中央处理器1访问步骤SD中的块数据所指向的存储单元或者地址映射缓存3中的块数据所指向的存储单元,将压缩的指令通过查字典,解压到缓存装载逻辑单元4中。缓存装载逻辑单元4将数据装载入地址映射缓存3中。
步骤SG:中央处理器1从地址映射缓存3中取出地址数据块,通过计算,得到指令对应于地址数据块中的地址值。该地址值指向外部存储器9的存储单元。
步骤SH:从外部存储器9的存储单元取得压缩的指令,该指令经过查字典解压或扭环移位查字典解压,得到原始指令的二进制可执行代码。将原始指令的二进制可执行代码存入缓冲存储器2中。中央处理器2从缓冲存储器2中读人二进制可执行代码并执行程序。
其中,地址映射缓存3的作用为减少中央处理器1两次访问外部存储器9的次数。如果地址映射缓存3被命中,则中央处理器1只需一次访问外部存储器9即可取得所需的压缩指令。如果地址映射缓存3未被命中,则中央处理器1需2次访问外部存储器9才能取得所需的压缩指令,这种情况会影响处理器的吞吐量,降低处理器的性能。选取合适的地址映射缓存3,命中的概率在90%左右,所以处理器性能的降低在可容忍的范围内。
地址映射表的作用是:将压缩前指令的地址与压缩后指令的地址进行一一映射,使得中央处理器1在遇到跳转指令时,仍能正常工作,程序不至于运行到不确定状态。
表3至表7为本发明提供的一种代码解压缩***的指令压缩和解压的具体实施例。
表3中第1列的指令顺序为链接后的二进制指令出现的先后顺序。第2列为指令在不压缩的情况下存储在外部存储器9的地址。第3列为指令的二进制表示形式,同时也是这些待压缩的指令在字典中的二进制表示形式。第4列为经过4字典压缩后的字典索引,压缩后存储在外部存储器9中的指令即是这些索引。第5列为每条指令压缩后所需要存储的比特数,也即索引的长度。第4列的左边子列是标志位,用来区分该压缩指令所对应的原始编码是在哪一个字典中。第4列的右边子列中的数据是用来区分该压缩指令所对应的原始编码是字典的哪个条目。
这里假设这段代码在外部存储器9中的起始地址是0X100,因为表3中指令为32位,而存储器中的地址一般为8位,所以下一条指令的起始地址是0X100+4=0X104,也即每条指令占4个存储单元。表3中没有列举出这段代码的全部指令。从表3可以看出,这段代码分为了4类,前3类中每类所包含的编码个数分别为:4、32、1024,编码方法为定长编码。第4类所包含的编码个数不能通过表3中的数据得到,与具体的程序有关,必须通过在计算机上编写扭环移位压缩的程序进行统计计算后才能得知。第4类压缩后,表征一条指令需要18比特。这18比特的前2比特是标志位,接下来的6比特是扭环移位次数,剩余的10比特是扭环移位字典。
表3 指令及其压缩后的索引
表4中是表3中的指令对应的字典的索引在外部存储器9中存储示意图。在该存储方式中,每个被压缩的指令都是相邻存储,不浪费存储空间,不产生存储碎片。表3中的8条指令,不压缩时,占用32字节的存储单元,经过压缩,只需10字节的存储单元。表4中的省略号表示外部存储器9后面地址中的压缩指令在本表中没有列举出来。
表4 压缩后的代码在外部存储器中的存储方式一
表5是压缩后指令的地址与压缩前地址在外部存储器9中的地址之间的地址映射值。其中第2列中每一行的数据称为地址映射表的一个条目。表5所示实例为32位数据总线、24位地址总线的地址映射表。该表中,每个条目为32比特,其中前24比特为压缩后指令在外部存储器9中的物理地址,中间3位是为了地址对齐所随意填充的,最后5位表示这8条指令在外部存储器9某地址的哪个比特位起始。表5中,起始地址为0X608的存储单元中存放的32比特数据表示:表3中从地址为0X120起始的8条32位指令,其在压缩后的地址为0X108(000000000000000100001000),而且这8条指令是从0X108地址的第10(01010)比特起始的。
表5 压缩后代码的地址映射表
表5中地址映射表所占的开销为1*32/8*32=12.5%,该数值太大,严重影响代码压缩的压缩率。表6是一种高密度地址映射表所对应的存储方式。在该存储方式中,下一个8条指令在某地址中的起始位能被8整除。假如某8条指令,经过压缩后,只需30比特,则在存储时,在这8条指令压缩代码的尾部填充2个0,以构成32比特进行存储。这样,下一个8条指令的起始地址,可以通过字节来定位。
表6 压缩后的代码在外部存储器中的存储方式二
表7为所占开销可以接受的地址映射表。该表中,每个条目占64比特。前24比特表示某64条指令的物理起始地址。后续的5比特表示从起始地址开始的第2组8条指令的起始地址是在哪个字节开始的。再后续的5比特表示从起始地址开始的第2组8条指令的起始地址是在哪个字节开始的。依次类推。64条指令只需64比特的地址映射表,所以地址映射表所占的存储开销为64/64*32=3.125%。
表7 压缩后代码的高密度地址映射表
604(HEX) | 000000000000000100000000_01010[10byte]_01001[9byte]_...... |
本领域普通技术人员可以理解实现上述实施例中的字典压缩和扭环移位字典压缩是可以基于不同的比特数的,如8bit、16bit、32bit、64bit等。
本领域普通技术人员可以理解实现上述实施例中的扭环移位字典压缩是可以采其他移位方法的,可以采用扭环左移和扭环右移的方式,也可采用循环左移或循环右移的方式,不局限于本发明实施例中的扭环右移。
本领域普通技术人员可以理解实现上述实施例中的地址映射表可以采用不同的映射方式,不局限于本发明实施例中8条指令一个地址映射表条目的方案。
以上所述仅是本发明的优选实施方式,应当指出,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.一种嵌入式***可执行代码的压缩方法,包括步骤如下:
步骤S1:对所述嵌入式***可执行代码的二进制代码集合按该集合中各个不同编码出现的次数进行统计,得到编码出现次数的频次表;
步骤S2:对各个不同编码出现的频次进行排序,出现频次高的编码排在前面,出现频次低的编码排在后面,组成一个新的已排序的编码频次表;
步骤S3:根据编码频次表中的信息,采用分类算法,将所有出现的不同编码分为r个类;
步骤S4:对可执行二进制代码集合H的前r-1个类编码分别采用不同索引长度的字典进行压缩,对第r类编码进行扭环移位字典压缩,构建r个字典及其索引集合;
步骤S5:将r个字典及其索引集合分别存入外部存储器中,
其中,对第r类编码进行扭环移位字典压缩时,寻找种子步骤如下:
步骤S41:对第r类编码进行频次统计和排序;
步骤S42:以第r类中频次高的n比特编码作为种子进行扭环移位,该种子将产生2n个扭环移位数据序列;
步骤S43:将这2n个扭环移位数据序列分别与第r类编码中的每个编码进行比较,若第r类编码中存在编码与所述2n个扭环移位数据序列中的某个扭环移位数据序列完全相同,则记录下种子扭环移位得到该编码需要的扭环移位次数x,把种子存入种子集合U,并从第r类中摘除该编码,转步骤S44;若第r类编码中没有编码与这2n个扭环移位数据序列中的某个数据序列相同,则取频次第二高的编码作为种子,转步骤S42;
步骤S44:若遍历到了第r类中频次最低的最后一个编码,则转步骤S45,否则转步骤S42;
步骤S45:将种子集合U作为字典,并建立其索引,索引即是压缩后的代码Gr。
2.如权利要求1所述嵌入式***可执行代码的压缩方法,其特征在于,将包含m个不同的编码S的可执行二进制代码集合H={S1,S2,……,Sm},按其中每个编码S出现次数的多少对代码集合H进行分类;采用不同索引长度的字典对各分类进行压缩;每一类中不同编码的字典索引的长度相等,不同类的字典索引长度不等。
3.如权利要求1所述嵌入式***可执行代码的压缩方法,其特征在于,所述扭环移位序列的种子经过扭环移位寄存器扭环左移位或扭环右移位后,得到新的扭环移位数据序列,若该新的扭环移位数据序列与代码集合H中的编码S相同,则用扭环移位序列的种子来表征编码S。
4.如权利要求1所述嵌入式***可执行代码的压缩方法,其特征在于,利用扭环移位序列对第r类编码进行压缩,只将种子信息存储在外部存储器中。
5.如权利要求1所述嵌入式***可执行代码的压缩方法,其特征在于,在所述索引中加入扭环移位次数x,使扭环移位解压逻辑能通过种子信息和扭环移位次数x解压出该编码。
6.一种使用权利要求1所述的嵌入式***可执行代码压缩方法的解压缩***,其特征在于包括:中央处理器、缓冲存储器、地址映射缓存、缓冲装载逻辑单元、扭环移位序列产生器、r个字典、外部存储器;其中:
中央处理器与缓冲存储器和地址映射缓存相连;中央处理器的数据总线输出信息给缓冲存储器,也从缓冲存储器获取输入信息;中央处理器的地址总线输出信息给地址映射缓存,也从地址映射缓存获取输入信息;中央处理器通过控制总线控制信息的流向;
缓冲存储器与缓存装载逻辑单元相连,缓冲存储器从缓存装载逻辑单元获得通过索引查字典所得到的原始二进制代码集合中的指令编码,缓存装载逻辑单元从缓冲存储器接收命令并对自身的数据进行更新;
地址映射缓存与缓存装载逻辑单元相连,地址映射缓存从缓存装载逻辑单元获得解压缩后的代码在外部存储器中的地址,缓存装载逻辑单元从地址映射缓存单元接收命令对自身的地址数据进行更新;
缓存装载逻辑单元分别与扭环移位序列发生器及r个字典相连;扭环移位序列发生器和r个字典输出字典中的数据序列发送给缓存装载逻辑单元;
扭环移位序列发生器和r个字典分别与外部存储器相连;外部存储器的输出数据分别发送到扭环移位序列发生器和r个字典;在计算机上编写代码压缩算法,用于压缩可执行二进制代码、压缩第r类编码扭环移位字典,构建r个字典及其索引集合,压缩后的代码存储在外部存储器中;
中央处理器在代码解压时,将外部存储器的字典载入中央处理器的内部存储器中,通过解压缩逻辑中的地址映射逻辑,找到待解压的指令所对应的索引,以该索引查找其所对应的字典条目,该字典条目的值即是二进制代码集合中的指令编码。
7.根据权利要求6所述的***,其特征在于,所述r个字典,对应于二进制代码集合H的r个分类;每一类中不同编码的字典索引的长度相等,不同类的字典索引长度不等;r个字典的索引及字典条目存储在外部存储器中;程序执行时,先将字典条目装载入中央处理器的内部存储器中。
8.根据权利要求6所述的***,其特征在于,所述扭环移位序列产生器,对扭环移位序列的种子扭环左移位或扭环右移位,在规定的扭环移位次数下,得到新的扭环移位数据序列,该数据序列即可表征编码S。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410589995.XA CN104331269B (zh) | 2014-10-28 | 2014-10-28 | 一种嵌入式***可执行代码压缩方法及代码解压缩*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410589995.XA CN104331269B (zh) | 2014-10-28 | 2014-10-28 | 一种嵌入式***可执行代码压缩方法及代码解压缩*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104331269A CN104331269A (zh) | 2015-02-04 |
CN104331269B true CN104331269B (zh) | 2017-08-15 |
Family
ID=52406003
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410589995.XA Active CN104331269B (zh) | 2014-10-28 | 2014-10-28 | 一种嵌入式***可执行代码压缩方法及代码解压缩*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104331269B (zh) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106202213B (zh) * | 2016-06-28 | 2019-12-17 | 深圳市恒扬数据股份有限公司 | 一种fpga二进制文件压缩、解压方法及压缩、解压装置 |
TWI645698B (zh) | 2017-07-17 | 2018-12-21 | 財團法人工業技術研究院 | 資料發送裝置、資料接收裝置及其方法 |
CN107463355B (zh) * | 2017-07-28 | 2020-03-31 | 珠海市杰理科技股份有限公司 | 立即数压缩编码方法和*** |
US10331558B2 (en) * | 2017-07-28 | 2019-06-25 | Apple Inc. | Systems and methods for performing memory compression |
CN110875744B (zh) * | 2018-08-31 | 2023-06-20 | 阿里巴巴集团控股有限公司 | 编码方法及装置 |
CN109450450B (zh) * | 2018-10-17 | 2022-09-23 | 杭州费尔斯通科技有限公司 | 一种json数据实时无损压缩以及解压方法 |
CN111381874B (zh) * | 2018-12-28 | 2022-12-02 | 上海寒武纪信息科技有限公司 | Compress指令译码方法、数据处理方法、译码器及数据处理装置 |
CN109985389B (zh) * | 2019-04-04 | 2022-08-23 | 南京邮电大学 | 基于区块链智能合约的牌类游戏防作弊方法及其*** |
CN110572160A (zh) * | 2019-08-01 | 2019-12-13 | 浙江大学 | 一种指令集模拟器译码模块代码的压缩方法 |
CN110647234B (zh) * | 2019-09-27 | 2021-08-17 | 联想(北京)有限公司 | 一种指令处理方法及电子设备 |
CN111464187B (zh) * | 2020-04-17 | 2023-04-28 | 北京百瑞互联技术有限公司 | 一种主机控制接口命令事件编码方法、存储介质及计算机设备 |
CN112416315B (zh) * | 2020-06-16 | 2024-05-14 | 上海哔哩哔哩科技有限公司 | Css代码的压缩方法、电子设备和存储介质 |
CN112131865B (zh) * | 2020-09-11 | 2023-12-08 | 成都运达科技股份有限公司 | 一种轨道交通报文数字压缩处理方法、装置及存储介质 |
CN112100987A (zh) * | 2020-09-27 | 2020-12-18 | 中国建设银行股份有限公司 | 一种多源数据字典的转码方法及装置 |
CN114492312B (zh) * | 2021-12-22 | 2022-09-20 | 深圳市小溪流科技有限公司 | 一种ip国家映射信息的编解码方法及*** |
CN115296774A (zh) * | 2022-07-31 | 2022-11-04 | 航天科工通信技术研究院有限责任公司 | 一种采用公共数据压缩二进制代码组帧的方法 |
CN116841618B (zh) * | 2023-07-04 | 2024-02-02 | 上海耀芯电子科技有限公司 | Tta处理器的指令压缩方法和***,解压方法和*** |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101382884A (zh) * | 2007-09-07 | 2009-03-11 | 上海奇码数字信息有限公司 | 指令编码方法、指令编码***及数字信号处理器 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7051189B2 (en) * | 2000-03-15 | 2006-05-23 | Arc International | Method and apparatus for processor code optimization using code compression |
US8933829B2 (en) * | 2013-09-23 | 2015-01-13 | International Business Machines Corporation | Data compression using dictionary encoding |
-
2014
- 2014-10-28 CN CN201410589995.XA patent/CN104331269B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101382884A (zh) * | 2007-09-07 | 2009-03-11 | 上海奇码数字信息有限公司 | 指令编码方法、指令编码***及数字信号处理器 |
Also Published As
Publication number | Publication date |
---|---|
CN104331269A (zh) | 2015-02-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104331269B (zh) | 一种嵌入式***可执行代码压缩方法及代码解压缩*** | |
CN103582871B (zh) | 用于内嵌在存储器层级内的经熵编码软件的存储和翻译的方法和设备 | |
CN100432959C (zh) | 压缩高速缓存内数据的机制 | |
US5245337A (en) | Data compression with pipeline processors having separate memories | |
US8572131B2 (en) | Techniques for more efficient usage of memory-to-CPU bandwidth | |
US10437781B2 (en) | OZIP compression and decompression | |
US10862507B2 (en) | Variable-sized symbol entropy-based data compression | |
CN202931289U (zh) | 一种硬件lz77压缩实现*** | |
CN103236847A (zh) | 基于多层哈希结构与游程编码的数据无损压缩方法 | |
CN103023509A (zh) | 一种硬件lz77压缩实现***及其实现方法 | |
CN101449462A (zh) | 基于集合关联高速缓存映射技术的高速数据压缩 | |
US11791838B2 (en) | Near-storage acceleration of dictionary decoding | |
CN103095305A (zh) | 一种硬件lz77的压缩实现***及方法 | |
CN108886367A (zh) | 用于压缩和解压缩数据的方法、设备和*** | |
Kim et al. | SBH: Super byte-aligned hybrid bitmap compression | |
CN102843142B (zh) | 可编程逻辑器件配置数据流压缩、解压缩处理方法及*** | |
US6654867B2 (en) | Method and system to pre-fetch compressed memory blocks using pointers | |
Burtscher et al. | pFPC: A parallel compressor for floating-point data | |
US20240028510A1 (en) | Systems, methods and devices for exploiting value similarity in computer memories | |
US7676651B2 (en) | Micro controller for decompressing and compressing variable length codes via a compressed code dictionary | |
RU2450441C1 (ru) | Способ и устройство сжатия данных | |
JP2023503034A (ja) | パターンベースのキャッシュブロック圧縮 | |
Franaszek et al. | Data compression with restricted parsings | |
Kesavan et al. | Comparative Study on Data Compression Techniques in Cache to Promote Performance | |
Kim et al. | Dual pattern compression using data-preprocessing for large-scale gpu architectures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |