CN1644386A - 一种能够提高内存利用率的打印内存管理方法 - Google Patents
一种能够提高内存利用率的打印内存管理方法 Download PDFInfo
- Publication number
- CN1644386A CN1644386A CN 200510005085 CN200510005085A CN1644386A CN 1644386 A CN1644386 A CN 1644386A CN 200510005085 CN200510005085 CN 200510005085 CN 200510005085 A CN200510005085 A CN 200510005085A CN 1644386 A CN1644386 A CN 1644386A
- Authority
- CN
- China
- Prior art keywords
- memory
- page
- internal memory
- section
- 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.)
- Granted
Links
Images
Abstract
本发明涉及一种能够提高内存利用率的打印内存管理方法,属于打印控制技术领域。现有的打印控制方法通常采用打印前静态分配页面所需要的内存的方法,这种方法虽然避免了因为不能及时申请到内存而导致打印失败,但是并没有充分提高内存的利用率。本发明所述的方法采用了打印前请求保留内存,在打印过程中动态分配内存的打印内存管理方法。采用本发明所述的方法,与简单的动态内存分配相比,避免了因为后续页面的内存申请导致当前页面由于没有内存而打印失败,与静态内存分配相比,可以在保证打印实时性的同时提高内存的利用率。
Description
技术领域
本发明属于打印控制技术领域,具体涉及一种能够提高内存利用率的打印内存管理方法。
背景技术
现有技术中,通常的光栅打印设备打印一页的整个工作流程可分成三个部分:首先,从主机接收打印数据;然后将打印数据光栅化成光栅点阵;最后将光栅点阵传送到打印引擎输出。
通常,为了降低内存的需求数量,很多的光栅打印设备采用如下打印控制方法:
将一个页面分为若干段,先将页面数据解释成为一种按段安排的中间格式,这种中间格式的数据比较容易转化为最终的光栅点阵,而且这种中间格式的数据所占内存通常大大小于页面的光栅点阵,打印机先光栅化一段就可以开始打印,在上一段打印的过程中同时进行下一段的光栅点阵实时产生,这样既能提高打印速度,又不需要很大的内存来存放一个完整页面的光栅点阵,但是,这种方法的不足之处在于一旦有某一段的数据很复杂,则打印机很可能不能够在上一段打印的时间内及时完成该段的光栅化,则会产生打印越界(print overrun)的错误,页面将不能正确输出。
在此基础上,又出现了一些改进的方法,这些方法利用打印过程中的处理简单段的空闲时间来光栅化复杂段,如惠普公司在美国专利5129049中提出的方法,该方法的原理是如果某一段的内容很简单或者该段的内容已经预先光栅化完毕,则该段打印时并不需要一个段的打印时间来光栅化该段,其中的空闲时间则可以用来光栅化下一段,这样,有可能下一段的光栅化时间可以大于一段打印时间而不需要预先光栅化,所以该方法能在一定程度上减少预先光栅化段的数目。
上述这些方法需要在打印的过程中使用内存,如果因内存不够而使申请失败的话就会导致打印错误,因此打印过程中不适合采用简单的动态分配。通常使用静态内存分配,静态内存分配为每个页面静态分配了一定数量的缓冲内存,在页面打印完成时该页面的缓冲内存提供给下一个页面使用。由于基于分段的打印方法中通常在打印开始的时候需要比较多的内存,打印过程中对内存的需求会逐渐减少,因此这种方法并没有充分提高内存的利用率。另一方面,为了提高打印速度,通常在打印一个页面的同时需要并行处理下一个页面,为了达到这个目的,打印系统需要能够提供至少两个页面处理所需要的内存。
发明内容
针对现有技术中存在的缺陷,本发明的目的是提供一种更先进的能够提高打印内存利用率的打印内存管理方法,该方法可以在保证正确打印的同时提高内存的利用率。
为达到以上目的,本发明采用的技术方案是:一种能够提高打印内存利用率的打印内存管理方法,包括以下步骤:
A.打印系统初始化时初始化所有空闲内存的时间戳为0;将内存管理模式设置为共享模式,对于每一个要打印的页面,启动一个任务,处理以下步骤B至步骤I;
B.为当前准备接受数据的页面生成一个时间戳,如果内存的模式不是共享模式,挂起等待直到内存的模式变为共享模式,然后将内存模式设置为独占模式;
C.打印设备通过接口从主机接收页面打印数据;
D.根据页面大小,打印速度等参数确定每页所分的段的数目,确定存放该页面一个段的光栅化数据所需要的内存大小UnitSize,记录该页面的段缓冲区大小也为UnitSize;
E.申请内存用于存放页面中间格式数据,将打印数据解释成按段组成的中间格式的数据;
F.确定每个段的开始光栅化时刻;
G.确定在每个段打印开始时刻为了保证打印顺利进行所需的缓冲内存的数量Bmax;
H.请求内存管理单元为当前页面保留开始打印第一段时所需的缓冲内存的数量Bmax,将内存模式设置为共享模式;
I.申请内存用于存放光栅化数据,并光栅化需要预光栅化的段,然后,开始打印页面,同时启动光栅化的任务,光栅化任务根据步骤F中确定的每个段的开始光栅化时刻,申请大小为UnitSize的内存用于存放光栅化结果,接着光栅化相应的段,在打印过程中,每打印完一个段,释放已经打印完的段的光栅化数据所占用的内存,同时请求内存管理单元为当前页面保留开始打印下一段时所需的缓冲内存的数量Bmax;
J.页面打印结束后,释放该页面中间格式数据占用的所有内存,请求内存管理单元为当前页面保留0个缓冲内存。
更进一步,为使本发明获得更好的效果,步骤G中确定每个段开始打印时刻为了保证打印顺利进行所需的缓冲内存的数量Bmax,方法是计算每个段开始打印时刻所需要的缓冲内存的数量,该数量是指从该段打印时刻到打印结束的过程中用于缓存光栅化数据的内存块的最大数量,具体步骤如下:
(1)设置最后一段为处理段,设置页面需要的缓冲内存数量MaxBufferCount为0;
(2)计算处理段开始打印时刻已经光栅化但是还没有打印完毕的段的数量BufferCount;
(3)设置处理段对应的缓冲内存数量Bmax为BufferCount,MaxBufferCount两者之中比较大的数;
(4)设置页面需要的缓冲内存数量MaxBufferCount为处理段对应的Bmax;
(5)如果处理段不是该页面的第一段,置处理段的前一段作为处理段,转入步骤(2)。
更进一步,为使本发明获得更好的效果,步骤H、步骤I中请求内存管理单元为当前页面保留内存,请求时提供的信息为需要保留内存的数量即请求保留数量以及提出内存保留的的页面即当前页面,具体计算方法包括以下步骤:
(1)如果当前页面没有内存保留记录,则继续,否则,转入步骤(3);
(2)计算当前页面的可用内存数量,如果当前页面的可用内存数量大于该页面的请求保留数量,那么记录该页面的内存保留数量为请求保留数量,同时初始化该页面的内存需要数量为该页面的内存保留数量,否则,直接返回错误,结束;
(3)如果请求保留数量为0,则删除当前页面的内存保留记录,转入步骤(5),否则更新当前页面的保留数量为请求保留数量;
(4)从该页面的内存需要数量中减去原来内存保留数量和请求保留数量的差额;
(5)如果当前有任务因为请求不到内存而被挂起,唤醒这些任务。
更进一步,为使本发明获得更好的效果,步骤J和步骤I中释放内存,释放内存时需要提供要释放的内存块的开始地址信息,具体包括以下步骤:
(1)根据内存块的开始地址信息查找要释放的内存块作为处理块,如果处理块没有独占标记,将释放内存的页面的内存需要数量加上1,否则,取消内存块的独占标记;
(2)将要释放的内存块标记为空闲,即将要释放的内存块的时间戳更改为0;
(3)合并相邻的空闲内存块,如果存在与该内存块相邻的时间戳为0的内存块,则将它们合并为一个大的内存块;
(4)如果有因为申请内存而挂起的任务,激活这些任务。
更进一步,为使本发明获得更好的效果,步骤E,步骤I中为页面申请内存,申请内存时需要提供的信息为提出内存申请的页面以及所要申请内存的大小,包括以下步骤:
(1)如果有提出内存申请的页面的内存保留记录,并且申请内存的大小与该页面段缓冲区的大小不一致,那么返回错误;
(2)查找一块比申请的内存大的空闲内存块;
(3)如果没有查找到符合条件的内存块,则挂起等待,转入步骤(2)重新开始查找,否则,设置当前空闲内存块等于查找到的内存块,继续进入下一步骤;
(4)检查是否可以从当前空闲内存块里分配内存,如果不可以,则查找其它还没有被检查过并且比申请的内存大的空闲内存块,转入步骤(3),否则,进入下一步骤;
(5)将当前空闲内存块分成两块,其中第一块从原来内存块的起始地址开始,大小为申请的内存大小,并且将第一块的时间戳标识为申请内存页面的时间戳;第二块为除去第一块的剩余部分,第二块的时间戳为0,如果其大小为0,则删除该内存块信息;
(6)如果该页面没有申请内存保留,则标记第一块内存块的内存标志为独占标志,转入步骤(8);
(7)如果该页面已经申请内存保留,则从该页面的内存需要数量中减去1;
(8)返回第一块内存块的起始地址,该地址即为所要分配的内存地址。
更进一步,为使本发明获得更好的效果,上述步骤(4)中,检查是否可以从当前空闲内存块里面分配内存,其详细步骤如下:
1)首先,将当前空闲内存块分成两块,其中第一块从当前空闲块的起始地址开始,大小为申请的内存大小,第二块为除去第一块的剩余部分;
2)将第一块内存块的时间戳标识为申请内存的页面的时间戳;设置第二块内存块的时间戳为0;
3)如果申请内存的页面有内存保留记录,将申请内存页面的需要内存需要数量减去1;
4)对于所有时间戳小于等于申请内存页面时间戳的页面,计算其可用内存数量,检查可用内存数量是否小于该页面的内存需要数量。如果存在页面的可用内存数量小于该页面的内存需要数量,结果为不可以分配,否则,结果为可分配;
5)将在步骤1)中被分成的两块的内存块重新合并,并将其时间戳置为0,如果申请内存的页面已经有内存保留记录,将申请内存页面的内存需要数量加上1。
更进一步,为使本发明获得更好的效果,上述步骤H,步骤4)中,计算一个页面的可用内存数量,内存块以开始地址从小到大的顺序排列,其方法如下:
a.初始化可用内存块数量TotalCount为0,初始化内存块大小UnitSize为该页面的段缓冲区大小,初始化可用内存大小BufferSize为0;
b.取第一块内存块作为处理块;
c.如果处理块的时间戳小于请求内存的页面的时间戳,则BufferSize=BufferSize+处理块的大小,然后转入步骤e;
d.如果处理块的时间戳大于等于请求内存的页面的时间戳,则更新可用内存块数量TotalCount=TotalCount+floor(BufferSize/UnitSize)(请用中文描述),其中floor(x)为比X小的最大整数,设置BufferSize为0;
e.如果没有与处理块相邻的下一个内存块,更新可用内存块数量TotalCount=TotalCount+floor(BufferSize/UnitSize),TotalCount即为该页面可用内存数量,结束,否则取与下一个与处理块相邻的内存块作为处理块,转入步骤c。
本发明的效果在于:采用本发明所述的打印内存管理方法,与简单的动态内存分配相比,避免了因为后续页面的内存申请导致当前页面由于没有内存而出现打印错误,与静态内存分配相比,可以保证在正确打印的同时提高了内存的利用率。
附图说明
图1是本发明具体实施方式主要处理步骤的流程框图;
图2是计算页面的每一段开始打印时刻需要的内存数量流程图;
图3是请求内存管理单元为一个页面保留一定数量的内存流程图;
图4是申请内存流程图;
图5是释放内存流程图;
图6是检查是否可以从一个空闲块里面分配内存流程图;
图7是计算一个页面的可用内存数量流程图。
具体实施方式
下面结合说明书附图对本发明作进一步地描述:
如图1所示,本发明涉及的一种能够提高内存利用率的打印内存管理方法的具体实现方案如下:
(1)首先,如附图1中的标记101所示,为当前正要接受数据的页面生成一个时间戳。时间戳是每个页面的唯一标志,标识了页面的先后顺序,时间戳越小的页面使用内存的优先级越高,从而保证了前面的页面不会因为后面页面的内存申请导致内存不足;
(2)判断内存模式是不是共享模式,如果不是,则如附图标记102所示,挂起等待直到内存的模式变为共享模式;
(3)接着,如附图标记103所示,打印设备通过接口从主机接收页面数据
(4)接着,如附图标记104所示,根据页面大小及其页面所分的段的数目,确定该页面的段缓冲区大小UnitSize;
(5)接着,如附图标记105所示,申请内存用于存放页面的中间格式,把页面数据转换成按段组成的中间格式的数据;
(6)接着,如附图标记106所示确定每个段的光栅化时刻,确定的方法可以参照现有技术;计算每个段为了保证打印顺利进行所需的缓冲内存的数量Bmax,如图2所示详细描述了如何计算页面的一个段开始打印时刻所需的缓冲内存数量;
(7)如附图标记107所示,请求内存管理单元为当前页面保留开始打印第一段时所需的缓冲内存数量Bmax,将内存模式设置为共享模式;
(8)接着,如附图标记108所示,申请内存用于存放光栅化数据,并光栅化需要在打印前光栅化的段;
(9)接着,如附图标记109所示,启动打印引擎,开始打印页面,同时启动光栅化的任务,光栅化任务根据每个段的开始光栅化时刻,在每个段的光栅化时刻申请大小为UnitSize的内存并光栅化相应的段。在打印过程中,每打印完一个段,释放已经打印完的段所占用的内存,同时请求内存管理单元为当前页面保留的内存数量为开始打印下一段时所需的缓冲内存的数量Bmax;
(10)最后,如附图标记110所示,页面打印结束后,释放该页面中间格式数据占用的所有内存,请求内存管理单元为当前页面保留0个缓冲内存。
如图2所示计算页面的一个段开始打印时刻需要内存的数量Bmax,步骤如下:
(1)首先,如附图标记201所示,设置最后一段为处理段,设置页面需要的缓冲内存数量MaxBufferCount为0;
(2)接着,如附图标记202所示,确定处理段开始打印时刻,已经开始光栅化但是还没有打印完毕的段的数量BufferCount;
(3)接着,如附图标记203所示,设置处理段对应的缓冲内存数量Bmax为BufferCount与MaxBufferCount中的较大值。为了保证打印顺利进行,在处理段打印时刻,不仅要保证在开始打印时刻有足够的内存,还需要在该时刻以后直到打印结束这段时间内有足够的内存,所以为了保证正常打印,处理段需要的缓存数量为BufferCount,MaxBufferCount中的较大者;
(4)接着,如附图标记204所示,设置页面需要的缓冲内存数量MaxBufferCount为处理段对应的缓冲内存数量Bmax。MaxBufferCount记录从当前段开始处理直到页面打印结束的时间内页面需要缓存的最大数量;
(5)如果还有段没有计算,如附图标记205所示,设置处理段为当前处理段的前一段,然后,转到如附图标记202所示步骤中继续计算下一段。
如图3所示,请求系统为当前页面保留内存,请求时提供的信息为需要保留内存的数量(下面称为请求保留数量)以及提出内存保留的页面(下面称为当前页面),其详细步骤如下:
(1)如果当前页面还没有申请保留内存,则如附图标记301所示,计算当前页面的可用内存数量,检查该页面的可用内存是否大于请求保留的数量,如果不是,说明可用内存不足,如附图标记308所示,返回错误;如果是,如附图标记306所示,记录该页面的内存保留数量为请求保留数量,接着,如附图标记307所示,设置该页面的内存需要数量为该页面的内存保留数量;
(2)如果当前页面已经请求了内存保留,检查请求保留的数量是否为0,如果不是,如附图标记302所示,更新该页面的内存保留数量为请求保留数量,接着,如附图标记303所示,更新内存需要数量为该页面原来的内存需要数量减去原来内存保留数量和请求保留数量的差额,如果请求保留的数量为0,如附图标记304所示,删除该页面的请求保留数量信息;
(3)接着,如附图标记305所示,唤醒因为申请内存而挂起的任务。
如图4所示,页面申请内存,申请内存时需要提供的信息为提出内存申请的页面,以及所要申请内存的大小,其详细步骤如下:
(1)如果有该页面内存保留记录,并且申请内存的大小与该页面段缓冲区的大小不一致,那么如附图标记401所示,返回错误;
(2)接着,如附图标记402所示,查找一块比申请的内存大的空闲内存块中,如果没有查找到符合条件的内存块,则如附图标记403所示,挂起等待,否则,如附图标记404所示,设置当前空闲块等于查找到的内存块;
(3)检查是否可以从当前空闲块里面分配内存,如果可以,转入下一步骤(如附图标记405所示),如果不可以,如附图标记409所示,查找并检查其它还没有被检查过并且比申请的内存大的空闲内存块,如果没有找到这样的内存块,则如附图标记403所示,挂起等待,否则,转入如附图标记404所示的步骤,设置当前空闲内存块为查找到的内存块,重复本步骤;
(4)如附图标记405所示,将当前空闲内存块分成两块,其中第一块内存块从当前空闲内存块的起始地址开始,大小为申请的内存大小,并且将第一块内存块的时间戳标识为申请内存页面的时间戳;第二块内存块为除去第一块内存块的剩余部分,设置第二块的时间戳为0,如果其大小为0,删除该内存块信息;
(5)如果该页面还没有申请内存保留,则如附图标记406所示,标记第一块内存块内存标志为独占标志;如果该页面已经申请内存保留,则如附图标记407所示,从该页面的内存需要数量中减去1。
(6)最后,如附图标记408所示,返回第一块内存块的开始地址,该地址即为所要分配的内存地址。
如图5所示,释放内存,释放内存时需要提供要释放的内存块的开始地址信息,其详细步骤如下:
(1)首先,如附图标记501所示,根据内存块的开始地址信息查找要释放的内存块作为处理块,如果处理块没有独占标记,将释放内存的页面的内存需要数量加上1,否则,取消内存块的独占标记;
(2)接着,如附图标记502所示,将要释放的内存块的时间戳更改为0;
(3)接着,如附图标记503所示,合并相邻的空闲内存块。如果存在与该内存块相邻的时间戳为0的内存块,将它们合并为一个大的内存块;
(4)最后,如附图标记504所示,如果有因为申请内存而挂起的任务,激活这些任务。
如图6所示,检查是否可以从当前空闲内存块里分配内存,其详细步骤如下:
(1)首先,如附图标记601所示,将当前空闲内存块分成两块,其中第一块内存块从当前空闲内存块的起始地址开始,大小为申请的内存大小,第二块内存块为从当前空闲内存块里面减去第一块后的剩余部分;
(2)接着,如附图标记602所示,将第一块内存块的时间戳标识为申请内存的页面的时间戳;设置第二块内存块的时间戳为0;
(3)接着,如附图标记603所示,如果申请内存的页面已经有内存保留记录,将申请内存页面的内存需要数量减去1;
(4)接着,如附图标记604所示,对于所有时间戳小于等于申请内存页面时间戳的页面,计算其可用内存数量,检查可用内存数量是否小于该页面的内存需要数量。如果存在页面的可用内存数量小于该页面的内存需要数量,结果为不可以分配,如附图标记606所示,设置检查结果为不可分配,否则,结果为可分配,如附图标记605所示,设置检查结果为可分配;
(5)接着,如附图标记607所示将在上面步骤中被分成的两块的内存块重新合并,并将其时间戳置为0,最后,如附图标记608所示,如果申请内存的页面已经有内存保留记录,将申请内存页面的内存需要数量加上1。
如图7所示,计算一个页面的可用内存数量,其中所有内存块以开始地址从小到大的顺序排列,其详细步骤如下:
(1)首先,如附图标记701所示,初始化可用内存块数量TotalCount为0,初始化内存块大小UnitSize为该页面的段缓冲区大小。初始化可用内存大小BufferSize为0;
(2)接着,如附图标记702所示,取第一块内存块,作为处理块。如果处理块的时间戳小于请求内存的页面的时间戳,则如附图标记703所示,更新可用内存大小BufferSize的值为BufferSize+处理块的大小;如果处理块的时间戳大于等于请求内存的页面的时间戳,如附图标记704所示,更新可用内存块数量TotalCount=TotalCount+floor(BufferSize/UnitSize),其中floor(x)为比X小的最大整数,置bufferSize为0;
(3)如果没有与处理块相邻的下一个内存块,如附图标记705所示,更新可用内存块数量TotalCount=TotalCount+floor(BufferSize/UnitSize),TotalCount即为该页面可用内存数量,如附图标记706所示,返回TotalCount,结束。否则,如附图标记707所示,取与下一个与处理块相邻的内存块作为处理块转入步骤(2)继续检查。
根据以上具体实施方式,可以看出采用本发明所述的方法,可以大大提高打印系统的内存利用率。比如说:打印A,B页面各需要5个段的缓存,系统总共有6个段的缓存,那么,现有技术中使用静态内存管理,由于A页面占用了5个缓存,所以B页面只有一个可用缓存,于是B页面不得不等到A页面释放了4个缓存以后才可以开始预处理。采用本发明所述方法,虽然A占用了5个缓存,但是由于B的时间戳比A大,所以,B也认为它有6个可用缓存,所以B可以先申请一个缓存,开始预处理一个段,接着,在打印过程中,一旦A对内存的需求降低,B就可以马上申请并使用申请到的缓存进行预处理,而不需要等到A释放4个缓存。
Claims (7)
1.一种能够提高打印内存利用率的打印内存管理方法,包括以下步骤:
A.打印系统初始化时初始化所有空闲内存的时间戳为0;将内存管理模式设置为共享模式,对于每一个要打印的页面,启动一个任务,处理以下步骤B至步骤I;
B.为当前准备接受数据的页面生成一个时间戳,如果内存的模式不是共享模式,挂起等待直到内存的模式变为共享模式,然后将内存模式设置为独占模式;
C.打印设备通过接口从主机接收页面打印数据;
D.根据页面大小,打印速度等参数确定每页所分的段的数目,确定存放该页面一个段的光栅化数据所需要的内存大小UnitSize,记录该页面的段缓冲区大小也为UnitSize;
E.申请内存用于存放页面中间格式数据,将打印数据解释成按段组成的中间格式的数据;
F.确定每个段的开始光栅化时刻;
G.确定在每个段打印开始时刻为了保证打印顺利进行所需的缓冲内存的数量Bmax;
H.请求内存管理单元为当前页面保留开始打印第一段时所需的缓冲内存的数量Bmax,将内存模式设置为共享模式;
I.申请内存用于存放光栅化数据,并光栅化需要预光栅化的段,然后,开始打印页面,同时启动光栅化的任务,光栅化任务根据步骤F中确定的每个段的开始光栅化时刻,申请大小为UnitSize的内存用于存放光栅化结果,接着光栅化相应的段,在打印过程中,每打印完一个段,释放已经打印完的段的光栅化数据所占用的内存,同时请求内存管理单元为当前页面保留开始打印下一段时所需的缓冲内存的数量Bmax;
J.页面打印结束后,释放该页面中间格式数据占用的所有内存,请求内存管理单元为当前页面保留0个缓冲内存。
2.如权利要求1所述的一种能够提高打印内存利用率的打印内存管理方法,其特征是:步骤G中确定在每个段开始打印时刻为了保证打印顺利进行所需的缓冲内存的数量Bmax,方法是计算每个段开始打印时刻所需要的缓冲内存的数量,该数量是指从该段打印时刻到打印结束的过程中用于缓存光栅化数据的内存块的最大数量,具体步骤如下:
(1)设置最后一段为处理段,设置页面需要的缓冲内存数量MaxBufferCount为0;
(2)计算处理段开始打印时刻已经光栅化但是还没有打印完毕的段的数量BufferCount;
(3)设置处理段对应的缓冲内存数量Bmax为BufferCount和MaxBufferCount两者之中比较大的数;
(4)设置页面需要的缓冲内存数量MaxBufferCount为处理段对应的Bmax;
(5)如果处理段不是该页面的第一段,设置处理段的前一段作为处理段,转入步骤(2)。
3.如权利要求1或2所述的一种能够提高打印内存利用率的打印内存管理方法,其特征是:步骤H、步骤I中请求内存管理单元为页面保留内存,请求时提供的信息为需要保留内存的数量即请求保留数量以及提出内存保留的的页面即当前页面,具体计算方法包括以下步骤:
(1)如果当前页面没有内存保留记录,则继续,否则,转入步骤(3);
(2)计算当前页面的可用内存数量,如果当前页面的可用内存数量大于该页面的请求保留数量,那么记录该页面的内存保留数量为请求保留数量,同时初始化该页面的内存需要数量为该页面的内存保留数量,否则,直接返回错误,结束;
(3)如果请求保留数量为0,则删除当前页面的内存保留记录,转入步骤(5),否则更新当前页面的保留数量为请求保留数量;
(4)从该页面的内存需要数量中减去原来内存保留数量和请求保留数量的差额;
(5)如果当前有任务因为请求不到内存而被挂起,唤醒这些任务。
4.如权利要求1所述的一种能够提高打印内存利用率的打印内存管理方法,其特征是:步骤J和步骤I中释放内存,释放内存时需要提供要释放的内存块的开始地址信息,具体包括以下步骤:
(1)根据内存块的开始地址信息查找要释放的内存块作为处理块,如果处理块没有独占标记,将释放内存的页面的内存需要数量加上1,否则,取消内存块的独占标记;
(2)将要释放的内存块标记为空闲,即将要释放的内存块的时间戳更改为0;
(3)合并相邻的空闲内存块,即如果存在与该内存块相邻的时间戳为0的内存块,则将它们合并为一个大的内存块;
(4)如果有因为申请内存而挂起的任务,激活这些任务。
5.如权利要求1所述的一种能够提高打印内存利用率的打印内存管理方法,其特征是:步骤E,步骤I中为页面申请内存,申请内存时需要提供的信息为提出内存申请的页面以及所要申请内存的大小,包括以下步骤:
(1)如果有提出内存申请的页面的内存保留记录,并且申请内存的大小与该页面段缓冲区的大小不一致,那么返回错误;
(2)查找一块比申请的内存大的空闲内存块;
(3)如果没有查找到符合条件的内存块,则挂起等待,转入步骤(2)重新开始查找,否则,设置当前空闲内存块等于查找到的内存块,继续进入下一步骤;
(4)检查是否可以从当前空闲内存块里分配内存,如果不可以,则查找其它还没有被检查过并且比申请的内存大的空闲内存块,转入步骤(3),否则,进入下一步骤;
(5)将当前空闲内存块分成两块,其中第一块从原来内存块的起始地址开始,大小为申请的内存大小,并且将第一块的时间戳标识为申请内存页面的时间戳;第二块为除去第一块的剩余部分,第二块的时间戳为0,如果其大小为0,则删除该内存块信息;
(6)如果该页面没有申请内存保留,则标记第一块内存块的内存标志为独占标志,转入步骤(8);
(7)如果该页面已经申请内存保留,则从该页面的内存需要数量中减去1;
(8)返回第一块内存块的起始地址,该地址即为所要分配的内存地址。
6.如权利要求5所述的一种能够提高打印内存利用率的打印内存管理方法,其特征是:上述步骤(4)中,检查是否可以从当前空闲内存块里面分配内存,其详细步骤如下:
1)首先,将当前空闲内存块分成两块,其中第一块从当前空闲块的起始地址开始,大小为申请的内存大小,第二块为除去第一块的剩余部分;
2)将第一块内存块的时间戳标识为申请内存的页面的时间戳;设置第二块内存块的时间戳为0;
3)如果申请内存的页面有内存保留记录,将申请内存页面的需要内存需要数量减去1;
4)对于所有时间戳小于等于申请内存页面时间戳的页面,计算其可用内存数量,检查可用内存数量是否小于该页面的内存需要数量,如果存在页面的可用内存数量小于该页面的内存需要数量,结果为不可以分配,否则,结果为可分配;
5)将在步骤1)中被分成的两块的内存块重新合并,并将其时间戳置为0,如果申请内存的页面已经有内存保留记录,将申请内存页面的内存需要数量加上1。
7.如权利要求6所述的一种能够提高打印内存利用率的打印内存管理方法,其特征是:步骤H和步骤4)中,计算一个页面的可用内存数量,内存块以开始地址从小到大的顺序排列,其方法如下:
a.初始化可用内存块数量TotalCount为0,初始化内存块大小UnitSize为该页面的段缓冲区大小,初始化可用内存大小BufferSize为0;
b.取第一块内存块作为处理块;
c.如果处理块的时间戳小于请求内存的页面的时间戳,则BufferSize=BufferSize+处理块的大小,然后转入步骤e;
d.如果处理块的时间戳大于等于请求内存的页面的时间戳,则更新可用内存块数量TotalCount=TotalCount+floor(BufferSize/UnitSize),其中floor(x)为比X小的最大整数,设置BufferSize为0;
e.如果没有与处理块相邻的下一个内存块,更新可用内存块数量TotalCount=TotalCount+floor(BufferSize/UnitSize),TotalCount即为该页面可用内存数量,结束,否则取与下一个与处理块相邻的内存块作为处理块,转入步骤c。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100050853A CN100360318C (zh) | 2005-01-31 | 2005-01-31 | 一种能够提高内存利用率的打印内存管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100050853A CN100360318C (zh) | 2005-01-31 | 2005-01-31 | 一种能够提高内存利用率的打印内存管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1644386A true CN1644386A (zh) | 2005-07-27 |
CN100360318C CN100360318C (zh) | 2008-01-09 |
Family
ID=34875179
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100050853A Expired - Fee Related CN100360318C (zh) | 2005-01-31 | 2005-01-31 | 一种能够提高内存利用率的打印内存管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100360318C (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010063198A1 (zh) * | 2008-12-02 | 2010-06-10 | 中兴通讯股份有限公司 | 一种发送复杂消息的方法 |
CN102314323A (zh) * | 2010-06-30 | 2012-01-11 | 北京大学 | 一种印刷输出设备的数据处理方法及装置 |
CN102567945A (zh) * | 2010-12-21 | 2012-07-11 | 北大方正集团有限公司 | 页面数字图像的光栅化处理方法和装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5764869A (en) * | 1995-09-25 | 1998-06-09 | Hewlett-Packard Company | Hot based printing system with raster image data buffering |
JP3562181B2 (ja) * | 1996-11-21 | 2004-09-08 | セイコーエプソン株式会社 | プリンタのメモリ管理方法及びメモリ管理装置 |
US6040917A (en) * | 1997-10-27 | 2000-03-21 | Hewlett-Packard Company | Memory partitioning for multi-resolution pauseless page printing |
JP2002196904A (ja) * | 2000-11-09 | 2002-07-12 | Texas Instruments Inc | プリントドキュメントを指定するページ記述データをピクセルデータへ変換する方法 |
-
2005
- 2005-01-31 CN CNB2005100050853A patent/CN100360318C/zh not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010063198A1 (zh) * | 2008-12-02 | 2010-06-10 | 中兴通讯股份有限公司 | 一种发送复杂消息的方法 |
CN102314323A (zh) * | 2010-06-30 | 2012-01-11 | 北京大学 | 一种印刷输出设备的数据处理方法及装置 |
CN102314323B (zh) * | 2010-06-30 | 2015-06-10 | 北京大学 | 一种印刷输出设备的数据处理方法及装置 |
CN102567945A (zh) * | 2010-12-21 | 2012-07-11 | 北大方正集团有限公司 | 页面数字图像的光栅化处理方法和装置 |
CN102567945B (zh) * | 2010-12-21 | 2014-12-10 | 北大方正集团有限公司 | 页面数字图像的光栅化处理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN100360318C (zh) | 2008-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1154928C (zh) | 用于多任务设施信息处理系统的资源管理方法和设备 | |
JP5437754B2 (ja) | ディスプレイリストの並列生成及び並行ラスタライゼーションのための方法及びコンピュータにより読取可能な媒体 | |
CN1099678C (zh) | 非易失性半导体磁盘装置 | |
CN1084896C (zh) | 清空高速缓冲存储器内容的装置 | |
CN100351857C (zh) | 一种能够减少打印内存需求的打印控制方法 | |
CN1728118A (zh) | 资源分配管理 | |
CN1255765C (zh) | 数据通信系统和方法 | |
CN1828541A (zh) | Java操作系统中定时任务的实现方法 | |
JP5475307B2 (ja) | ラスタ化のためのメモリマネージメント方法、コンピュータ可読媒体及び装置 | |
US9311227B2 (en) | Memory management | |
CN1862515A (zh) | 数据传送装置、数据传送方法和程序 | |
CN1908903A (zh) | 执行作业步的系统和方法以及计算机产品 | |
CN1652253A (zh) | 存储卡和半导体器件 | |
CN1716187A (zh) | 预载控制器、由处理器控制将数据预载至临时存储器的预载控制方法和程序 | |
CN1746842A (zh) | 用于乱序执行条件指令的硬件装置及其执行方法 | |
CN100351867C (zh) | 高效地进行图像处理的信息处理装置 | |
US20100277757A1 (en) | Parallel printing system | |
CN1928825A (zh) | 一种服务器的实现方法以及服务器系统 | |
CN1644386A (zh) | 一种能够提高内存利用率的打印内存管理方法 | |
CN1892630A (zh) | Dma数据传送装置、半导体集成电路装置及数据传送方法 | |
CN1819544A (zh) | 一种基于bitmap表的缓存管理方法 | |
CN1710598A (zh) | 一种能够避免打印越界错误的打印控制方法 | |
WO2013115028A1 (ja) | 電子機器におけるマウント方法 | |
CN1955933A (zh) | 数据处理设备和方法 | |
JP2007323393A (ja) | 画像処理装置及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080109 Termination date: 20190131 |