具体实施方式
综述
在以下所述的各个实施例中,描述了其中***中打印作业的相对优先级可编程的一种打印***。在至少一些实施例中,调度程序组件监督打印作业的管理和调度,并连同称为优先级划分程序的组件一起工作以提供编程和定制的便利。在至少一些实施例中,提供了***的接口,以使优先级划分程序能被编程并***,来根据不同的打印作业属性来定制调度程序的行为。因此,在一些实施例中,不必精通各种编程语言的***管理员能简便地定义用于管理打印作业的定制行为。例如,在至少一些实施例中,提供了使优先级划分程序的各个参数值能由管理用户配置的用户界面。管理用户还能改变优先级划分程序的相关分级。这样,编程较不熟练的用户具有无需具备使用编程语言的能力就能进一步定制调度程序的行为的能力。在至少一些实施例中,打印作业可在基于其特定特征在时间上通过编程来延迟或提前。
此外,在至少一些实施例中,***使用用于***中打印队列的相对优先级划分的模型来实施***资源在打印队列之间的公平(或在管理员的判断下的有偏)平衡。这使***能在***的各个打印机上公平地平衡作业负载。此外,用来公平地确定各个队列上负载的该机制还可按照使较少经验的用户能定制***行为的方式来编程。
在至少一些实施例中,如本领域技术人员所理解的,***可用O(1)的计算复杂度来实现其运算,以便于确定不再需要进一步的处理。
在至少一些实施例中,***可在打印一个作业时独立地调度提交和打印操作。这使它能够对向打印机发送打印输出的I/O限制任务实现所需设备吞吐量,同时限制***中CPU和存储器密集的提交任务的数量。在以下所述的一实施例中,***使用称为“饥饿风险”的试探法来帮助确保***中的节流提交不会导致设备饥饿。
在至少一些实施例中,***使自然入池模型(natural pooling model)得以表达。如以下将显而易见的,这使***的普通和管理用户能看到特定队列上影响他们的打印能力的全部作业。
在至少一些实施例中,***用O(1)的CPU复杂度实现这些目标,以便于确定另一个作业是否必须打印,并且O(log2J)+O(log2P)的CPU复杂度用于调度决定,其中J是队列中作业的数量,而P是***中物理打印机的数量。因而,例如,在具有两百个队列和均匀分布的一百万个作业的***中,本***通常仅用20次比较就可做出调度决定,而与之相比,当前的***可能需要200百万次比较才能做出调度决定。
示例性客户机设备/打印机服务器组件
首先,在描述各个实施例之前,先提供计算设备的以下描述。如本领域技术人员所理解的,计算设备的各个组件可用来实现客户机和打印服务器。
这样,图1示出可使用以下所述的各个实施例的示例性计算设备。可以理解和认为所述计算设备仅为示例性目的提供,并非旨在限制所请求保护的主题仅应用于一种特定类型的计算设备。
计算装置142包括一个或多个处理器或处理单元144、***存储器146以及把包括***存储器146的各个***组件耦合到处理器144的***总线148。***总线148表示若干总线结构类型中任一种的一个或多个,包括存储器总线或存储器控制器、***总线、加速图形端口以及使用多种总线架构的任一种的处理器或局部总线。***存储器146包括只读存储器(ROM)150和随机存储器(RAM)152。含有帮助如启动期间在计算装置142中元件之间信息交换的基本例程的基本输入/输出***(BIOS)154存储在ROM150中。
计算装置142还包括读取和写入硬盘(未示出)的硬盘驱动器156、读取或写入可移动磁盘160的磁盘驱动器158、以及读取或写入诸如CD ROM或其它光学介质等可移动光盘164的光盘驱动器162。硬盘驱动器156、磁盘驱动器158和光盘驱动器162分别通过SCSI接口166或一些其它适当接口连接至总线148。诸驱动器及其相关联计算机可读介质为计算机142提供计算机可执行指令、数据结构、程序模块和其它数据的非易失性储存。尽管在此所述示例性环境采用了硬盘、可移动磁盘160和可移动光盘164,但本领域技术人员应理解也可在示例性操作环境中使用其它类型计算机可访问的能够存储数据的计算机可读介质,诸如盒式磁带、闪存卡、数字视频盘、随机存取存储器(RAM)、只读存储器(ROM)等等。
包括操作***170、一个或多个应用程序172(诸如用户代理程序或浏览器)、其它程序模块174和程序数据176的众多程序模块,可存储在硬盘156、磁盘160、光盘164、ROM150或RAM152中。用户可通过诸如键盘178和定位装置180的输入装置把命令和信息输入计算机142。其它输入装置(未示出)可包括诸如话筒、游戏杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些和其它输入装置通过与总线148耦合的接口182连接到处理单元144。监视器184或其它类型的显示装置也通过诸如视频适配器186的接口和总线148相连。除了监视器之外,个人计算机通常包括其它***输出装置(未示出),如扬声器和打印机。
计算机142通常在使用与一台或多台远程计算机,诸如打印服务器188的逻辑连接的网络化环境中运行。打印服务器188可以是另一台个人计算机、服务器、路由器、网络PC、对等装置或其它公共网络节点,而且通常包括上述与计算装置142相关的许多或全部元件。图1中所描绘的逻辑连接包括局域网(LAN)190和广域网(WAN)192。这样的网络化环境在办公室、企业范围计算机网络、内联网和因特网上是常见的。
当用于LAN网络环境中时,计算机142通过网络接口或适配器194与局域网连接。当用于WAN网络环境中时,计算机142通常包括调制解调器196或其它用于在诸如因特网的广域网192上建立通信的装置。可以是内置式或外置式的调制解调器196,与总线148通过串行端口接口168连接。在网络化环境中,所述与个人计算机142相关的程序模块或其一部分,可以存储在远程存储器存储装置中。可以理解,所示网络连接是示例性的,也可以使用其它在计算机之间建立通信连接的装置。
一般而言,计算机142的数据处理器通过不同时间存储在计算机的各个计算机可读存储介质中的指令来编程。各程序和操作***通常分布在例如软盘或CD-ROM上。从那里,它们被安装并载入到计算机的二级存储器。在执行时,它们至少部分地被载入计算机的主电子存储器。在此所述的***包括这些和其它类型的计算机可读存储介质,其中这些介质包含用于连同微处理器或其它数据处理器实现所述块的指令或程序。所述***还可包括根据在此所述的方法和技术编程的计算机本身。
为进行说明,程序和诸如操作***的其它可执行程序组件在此被视为分立的块,尽管可以理解这些程序和组件在不同时间驻留在计算机的不同存储组件中,并由计算机的数据处理器执行。
示例性实施例的综述和描述
图2总地在200示出根据一实施例的示例性***的高级示图。在以下描述中,描述了各个对象,并在其标题下描述一些相关联属性和/或特征。然后,标题为“确定作业的优先级”的小节描述了如何表示特定打印作业的优先级,以及优先级划分程序在优先级划分过程中的角色。
首先,在描述图2的特定实现示例之前,讨论作为以下所述特定实现的基础的一些原理和考虑事项。
在以下描述中,具体地引入优先级划分程序或优先级划分程序对象的概念。优先级划分程序是使打印***可编程的编程机制。本质上优先级划分程序着眼于一特定打印作业,并产生与该打印作业相关联的权重或时间。管理员可定义一系列优先级划分程序并可使该系列优先级划分程序与特定打印队列相关联。然后该序列优先级划分程序对一特定打印作业产生元组,它是可包括权重值和/或时间值的值构成的向量。每个优先级划分程序都可由***管理员通过经以下所述的用户界面向优先级划分程序提供配置数据来具体地配置。然后为特定打印作业产生的元组可由一调度程序对象解释和处理,以在打印***中调度特定打印作业。
在操作原理上,当***管理员想要通过配置特定打印队列来编程打印***时,管理员以用户界面驱动的方法简单地选择用于该特定队列的一个或多个优先级划分程序。使用每个优先级划分程序的用户界面组件,***管理员可参数化各优先级划分程序、并为该特定队列的各优先级划分程序分配一优先级顺序。
现在参看图2,示出具体实现以上所述各原理的特定***200。可以理解和认为,以下描述仅构成了一个示例,并非旨在将所要求保护的主题限制为仅应用于该特定***中。
因此,该示例中的***200包括一个或多个客户机设备242和一个或多个打印服务器288。在此,客户机设备242和打印服务器288可包括与结合图1所述的相同或相似的组件。然而,为简便起见,这些组件未在图2示例中示出。
根据一实施例,客户机设备242包括优先级划分程序用户界面244。用户界面244被配置成允许***管理员(或其它用户)如上所述地编程或以其它方式配置优先级划分程序。在所示和所述实施例中,用户界面244显示一定制用户界面来表示一个或多个打印机的优先级数据(如下所述)。优先级用户界面支持以下方法:
·名称—优先级划分程序用户界面具有人类可读显示名称、及其逻辑ID。
·AppComponentID—这是优先级划分程序用户界面的唯一组件ID。
可调用优先级划分程序,以获取其初始配置数据或改变现有配置。这些操作通过每个优先级划分程序所支持的GetConfiguration和ChangeConfiguration命令来支持。
在所示和所述实施例中,打印服务器288包括一个或多个以下对象,其中每一个对象如下所述:调度程序对象252、打印作业对象254、打印机对象256、逻辑服务器对象258、优先级顺序对象260、优先级划分程序数据对象262和优先级划分程序对象268。此外,数据接口组件270提供客户机设备242和打印服务器288可通过它进行通信的机制。可使用任何适当的数据接口和协议。
调度程序对象
在所示和所述实施例中,调度程序对象252负责选择要发送给特定打印机的打印作业。为此,调度程序对象处理由优先级划分程序产生的数据。
此外,调度程序对象确保如下所述打印作业上的优先级得以兑现。此外,调度程序兑现管理各打印作业,以努力确保通过该***的所需吞吐量。因此,调度程序对象负责尝试在适当时间向所有打印设备提供适当数据,从而避免任何不当延迟。此外,如下所述,如果优先级会导致作业饥饿,则调度程序对象尝试确保一定程度的公正。
在所示和所述实施例中,调度程序对象被配置成能够从大量物理设备上的大量打印作业中进行选择,而不会导致过多额外开销。因为需要维护一个灵活的优先级集合,各队列是基于优先级队列的非对称堆实现的,该优先级队列的实现具有以下属性:
·***和移除的O(log2N)
·侵入式实现—***或移除不需要存储器—因此总是可从队列从***或移除各项。
·非对称堆总是保持统计平衡。基于向量的堆被确保保持平衡,但为了发挥作用还需要外部向量。
对于给定优先级,***维护该特定优先级上打印作业的先入先出(FIFO)队列。这对减少同一优先级上调度作业的额外开销是有用的。
此外,根据一实施例,***维护三个逻辑类型的优先级队列一时间优先级队列、打印机优先级队列和资源仲裁队列,每一个队列都在图3中更详细地描述。然而,先考虑以下内容。
时间优先级队列是将应当重新调度作业的时间用作其优先级的优先级队列。例如,如果打印设备进入错误状态,则该作业将进入时间队列,其中应移除它的期望时间(例如5秒内)作为其优先级。这些时间并不存储为Δ值(或变化值),而是绝对时间,以防止调度程序对象中较小延迟所导致的漂移。
打印机优先级队列是表示队列中相对于一设备的相关优先级划分的队列。
资源仲裁队列是目的为在打印机队列之间公平地平衡负载的打印机队列。所有这些都更详细地在下面讨论。
打印作业对象
打印作业对象254被创建,并表示一特定打印输出请求。每个打印作业对象支持两个命令:从各客户机不能访问的ChangePriority命令和ChangeScheduleTime命令。
优先级划分程序对象(如下所述)可调用改变优先级或相关联作业的调度时间的命令。结果,当调用这些命令时,作业将在其调度队列中自动移动。这些命令接收新的时间或优先级,及优先级划分程序的唯一组件id(如下所述),且***使用它们来算出要改变优先级n元组的哪个字段,这从以下描述中将变得显而易见。
打印机对象
打印机对象256是在打印***中进行调度的逻辑单元。因此,它也是存储优先级划分程序的配置数据的对象。在所示和所述实施例中,打印机对象与物理打印机的接口具有一一对应关系。
逻辑服务器对象
优先级划分程序对象被安装在逻辑服务器上。逻辑服务器还使一系列优先级顺序由管理员创建。提供逻辑服务器对象的一个原因是,在某些情形中,单个物理服务器可具有一个以上的逻辑服务器。例如,一个打印机群集具有众多的逻辑服务器,它们在管理员的判断下或因为各个物理群集节点的故障而在该群集中的各个节点之间移动。
优先级顺序对象
优先级顺序对象260用来定义一系列一个或多个优先级划分程序对象的优先级顺序。在所示和所述实施例中,优先级划分程序仅了赋予作业权重或将其在时间上往前安排。如何确定该权重是通过该队列中的相应数据、并通过与该作业相关联的其它数据(诸如称为作业票据的数据)来参数化的。管理员可改变队列数据并可改变优先级划分程序的相对优先级。例如,假设一优先级划分程序将管理人员提交的作业排定为优先级优于普通雇员提交的作业,而另一优先级划分程序则降低大作业的优先级,则管理员可指定一个<管理人员特权><大作业惩罚>的优先级顺序,以及另一个<大作业惩罚><管理人员特权>的另一优先级顺序。在后一优先级顺序中,管理人员作业仅在不太大时才获得特权。
在所示和所述实施例中,总是有一个仅维护打印时间间隔、用户请求优先级、强制时间优先级和缺省全局优先级惩罚的优先级顺序。这是为了在实现示例中保持与当前由平台实现的打印服务器的兼容性。此外,优先级顺序对象添加了强制时间能力,并提供确保队列间公平性的缺省机制。
优先级划分程序数据对象
优先级划分程序的配置与一特定打印队列相关联。该配置符合优先级划分程序的XSD架构。在所示和所述实施例中,给定优先级划分程序总是对打印机/作业组合调用。在该特定示例中,优先级划分程序数据对象262具有以下字段:
·优先级划分程序ID—这是相应优先级划分程序的唯一id,并允许打印***使正确的优先级划分程序与其数据相关联。
·数据—这是符合优先级划分程序中存储的XSD架构的XML文档。
·ShouldBump—这是记录该字段是否应用于排挤其它作业的布尔字段。如果一作业被排挤掉了,则如果该字段具有较高优先级,即使该文档已开始打印也要将它从队列中移除。
优先级划分程序对象
在所示和所述实施例中,优先级划分程序对象268是可***组件,它可向作业分配权重,或可在时间上(可能是无限地)推迟或提前它。优先级划分程序对象具有以下属性:
·名称—用于优先级划分程序的显示名称。这不同于通常是GUID或强名称的逻辑ID。
·数据架构—这是描述优先级划分程序的数据格式的XSD架构。
·UIComponentID—这是其相应UI组件的ID。该组件在需要时可从服务器下载,以显示每个打印机的优先级划分数据的配置。
·类型—这是标识应如何解释由优先级划分程序返回的值的枚举。在该实施例中,类型标识时间提升(boost)、时间fifo、相对优先级或全局优先级作用,每一个都如下所述。
优先级划分程序对象还支持称为JobChange()的方法。该方法由打印***在作业到达的任何时候、完成假脱机操作(spooling)时、开始打印时或完成打印时调用。它还在过了该作业的延迟时间或强制时间的任何时候进行通知。如果优先级划分程序想要监听其它事件,则它可使用***的数据接口通知机制。
可使用多个不同类型的优先级划分程序,并且每一类型都可使不同行为集合导向获得期望结果。在以下所示和所述实施例中,有该***所支持的四种不同类型的优先级划分程序,每一类型都在以下小节中进行更详细地描述。然而,可以理解和认为,这些特定类型的优先级划分程序并非旨在限制所请求保护的主题的应用。
确定作业的优先级
在所示和所述实施例中,打印作业的优先级通过三项数据来表示:相对优先级元组、全局优先级作用、以及保留计数器。
相对优先级元组是一个数值权重集,例如[W1,W2,W3,W4]。每个权重由优先级划分程序对象分配。当两个打印作业位于一队列中时,每个权重都与其它作业的元组中的相应权重作比较,以便于确定该作业的相对优先级。
全局优先级作用是表示在物理打印机的全局优先级上处理一特定打印作业的作用的单一值。该全局优先级作用可以是负作用或正作用。例如,由管理人员打印的作业可被赋予较大的优先级提升,否则该作业可取决于其大小被赋予全局优先级惩罚。如果队列中的多个优先级划分程序返回一全局优先级作用,则结果进行累加以确定该作业的总体优先级作用。
保留计数器可由优先级划分程序用来将一打印作业保留在队列中,并在后面阶段释放它。保留一打印作业在确定作业优先级所需的数据并非立即可知时是有用的。例如,如果优先级划分程序想要降低大于100k的作业的优先级,则它将不得不在队列中保留该作业直到大小超过该阈值。然后可调整优先级并释放作业。保留可用来在时间上延迟一作业。这在本文档中的后面进行描述。实际上,保留计数值总是元组的第一元素,因为任何活动保留值都会防止该作业进行打印。因此,作业的元组可表示如下:
[保留计数值,W1,W2,W3,W4]。
在操作时,向优先级划分程序对象传送其配置数据和它要确定优先级的作业。然后该优先级划分程序处理其配置数据和相关联的作业数据,并返回权重和状态。该状态表示以下信息:
·成功—优先级划分程序正确地确定该作业的优先级。
·保留—优先级划分程序需要保留该作业。它还暗示这是在某时间(其时它可释放该保留)自动获得通知的时间优先级划分程序,或者它已为将使其在某些其它状态上释放该作业的适当改变通知作了登记。
·错误保留—优先级划分程序没有足够资源来正确保留该作业。该作用与保留相同,除了优先级划分程序将周期性地进行调用,以希望使它释放其保留,或使允许优先级划分程序发挥作用的其它资源变得可用。
·出错—优先级划分程序具有非预期的错误。因为我们不知道优先级划分程序将在后来日期中成功,作业被删除。
在状态为保留、出错、错误保留的情形中,优先级划分程序对象还将返回通过优先级划分程序用户界面244(图2)可显示的某用户信息。该用户信息使以下信息与特定打印作业相关联:
·保留GUID。如果用户界面识别该GUID,则它可载入客户机区域设置中的本地化的字符串;
·字符串参数数组,当由与GUID相关联的字符串格式化时产生人类可读解释。
·后退字符串。这是从在客户机不能识别GUID的情形中提供字符串的服务器侧上资源中载入的字符串。该字符串首先从客户机区域设置中检索,然后在***区域设置中检索。存在调用者语言在服务器上不可用的合理可能性,且在该情形中它们可取回服务器缺省语言的消息。
如上所述,优先级划分程序用户界面244在打印作业处于保留状态的情形中显示该信息。这旨在如果用户作业在队列中保留时减少用户的困惑。例如,如果优先级划分程序延迟大打印作业以在凌晨2点到6点之间打印,则返回给客户机的用户信息可使以下消息对用户显示:
“因为该作业超过10MB,所以已保留在队列中,以在凌晨2点到6点之间打印。如果需要解释,请与***管理员联系。”
如上所述,在至少一个实施例中,可使用四种不同类型的优先级划分程序:相对优先级优先级划分程序、全局优先级优先级划分程序、时间FIFO优先级划分程序和时间提升优先级划分程序,每个优先级划分程序都在下面单独描述。
相对优先级优先级划分程序构建优先级划分程序的最简单情形。相对优先级是用来将以打印作业相对另一打印作业进行分级的权重集。在一实施例中,较低数字表示较高优先级。因此,具有相对优先级0的打印作业比具有相对优先级1的打印作业有相对较高的优先级。
全局优先级作用优先级划分程序将全局优先级作用用作影响一物理打印机对另一物理打印机的相对权重的修改器。例如,对一打印机的相对权重惩罚可在逐页打印基础上分配。因而,较大作业比较小作业对特定打印机具有更负面的影响。
时间FIFO优先级划分程序使用时间字段,该时间字段使作业能在一段时间之后接收优先级上的超越提升,然后以FIFO顺序进行处理。这可用来防止打印作业的饥饿。例如,如果元组被定义为[Tfifo1,P1],且时间FIFO被设置为晚上7点,则晚上7点之后,该打印作业将优先跳出。如果P1具有惩罚大作业的作用,则如果直到此时它仍在队列中处于饥饿状态,这将使大作业最终能打印。然后所有达到该阈值的作业将按FIFO顺序来打印。
时间提升优先级划分程序使用以与时间FIFO字段相同的方式运行的时间提升字段,除了该作业的优先级在设置时间之后被设置为0(注意0意味着较高优先级),而不是该作业的优先级在设置时间之后成为设置时间。这表示时间提升用来给予作业在某时间上的特权增加,但剩下的优先级字段在确定接收到提升的作业的顺序时仍然是重要的。
在所示和所述实施例中,***与相对优先级字段略有不同地来处理各时间字段。即,对所有由优先级划分程序返回的时间作比较,并确定尚未到来的最小时间值,然后该作业被置入时间队列直到该时间到来。当过了该时间时,作业被传递回优先级划分程序。通常优先级划分程序可在此时重新调节时间,或释放保留。
作为示例,考虑如下。考虑实现以下元组的优先级划分程序集:
[Tfifo,Pexec,Tboost,Psmall,Tdelay]。
在该示例中,该元组的每个分量定义如下:
分量 | 定义 |
Tdelay | 保留大于100MB的作业直到凌晨2点;使用如上所述的时间提升。 |
Psmall | 给小作业比大作业高的优先级。 |
Tboost | 设置当前时间加一小时的时间提升。 |
Pexec | 给予管理人员提交的作业比普通用户提交的作业高的优先级。 |
Tfifo | 设置当前时间加3小时的fifo时间。 |
Tboost的作用是在队列中保留超过1小时的大作业将在此时跳成比小作业高的优先级。然而,如果小作业也被长时间地延迟,则它们仍有高于大作业的优先级。Tfifo的作用是不管该小时结束时的时间提升,也不管所提交作业的大小(如果它们都小于100MB),如果任何作业保留在该队列中超过3小时,则它将严格地以FIFO顺序打印(除非它大于100MB)。大于100MB的作业将在凌晨2点之后打印。除非这些较大作业在队列中仅保留了不到3小时(这是不太可能的),它们将以FIFO顺序打印。
从该示例中可以理解,优先级划分程序可用来提供用于编程该打印***的功能强大的机制。通过选择适当的优先级划分程序并相应地配置它们,***管理员被给予功能强大的定制其特定打印***的工具,以无与伦比地符合其特定***可具有的任何需要和要求。
饥饿风险
如上所述,在至少一些实施例中,打印***被配置成尝试确保需要接收继续打印的数据的打印设备接收高于使大量数据排队的打印设备的优先级。
根据一实施例,每个队列维护可具有<低>、<中>和<高>值的“饥饿风险”。该饥饿风险是对给定打印机将空闲的可能性的指示。饥饿风险数据由设备调度程序的上游提交组件使用,以对其作业确定优先级。最好不管其它作业的优先级而开始提交以具有比其它更高饥饿风险的队列为目标的作业。这用来防止高优先级作业总是淹没***中的其它作业。因此,如果一队列具有大量的高优先级打印作业,它最终将充满且其饥饿风险下降。此时,其它队列最好接收作业直到该饥饿风险又超过它们的。
任何适当方法可用来计算饥饿风险。在一实施例中,首先估算打印机吞吐量。这通过采样该设备在一时间段上使用数据的速率、然后计算该时段的吞吐量来完成,如下所示:
Rm=<发送字节>/<时段>。
然而,如本领域技术人员所理解的,因为打印机缓冲(或硬盘)极为快速地充满但页面的打印通常却慢得多,所以打印机吞吐量是相当可变的。因而,应当有一些缓冲设备吞吐量的“爆增”的方法。
根据一实施例,这通过将使用速率计算成(如果需要)通过对使用速率历史的评估为特定队列定义的最小速率的最大值来完成。从数学上讲,使用单个可调节参数α,且它可具有0(表示无历史)与1(表示唯一历史)之间的值。该可调参数被结合到以下计算中,该计算如上所述以考虑设备吞吐量的爆增的方式来计算使用速率:
Rn=max(αRn-1+(1-α)Rm,Rmin)。
如果没有数据发送给该设备,则不执行该计算。打印机设备或其它可******组件(诸如打印提交驱动器或协议适配器)或管理员可选择正确建模该设备的α的值。给定如上的计算,特定队列中所有作业的全部字节计数值可累加,并且饥饿时间的估算因此可计算为:
Tstarvation=ByteCount/Rn。
根据一实施例,两个时段被定义并用来对特定设备的饥饿风险分类。如果所估算的饥饿时间超过第一个时段,则饥饿风险从高移为中。如果所估算的饥饿时间超过第二个时段,则饥饿风险将被分类为低。
作为示例,考虑如下。假设打印机在上一秒接受10KB而在这一秒接受5KB,α为0.8,则根据以上给出格式估算的使用速率为0.8*10k+(1-0.8)*0.5kB.s-1,其中8+1kB.s-1=9kB.s-1。如果该队列中现在具有900kB的数据,则饥饿时间=900/9s=100s。如果我们定义第一饥饿风险时段为1分钟,且第二饥饿风险时段为10分钟,则该特定队列可分类为具有中等饥饿风险。
调度队列
为了提供以上所作讨论的一些上下文,将对图3作短暂参考。然而,在考虑图3之前先作如下考虑,它为随后的图3讨论提供一些上下文。
根据以上和以下所述的各个实施例,调度***的效率通过实现如本领域技术人员所理解的优先级队列的各种队列来增强。优先级队列是定义具有任何父项必须小于其两个子项的基本规则的逻辑树的数据结构。使用优先级队列,通过查看数量为逻辑树上总元素数量的对数的元素,就可将各元素***该队列中。
因此,该特征使得调度非常有效。此外,这也是因为优先级划分程序产生并使用了元组。具体地,元组使调度程序可通过查看每个作业的元组并适当地对各作业排序来比较两个特定作业。此外,当饥饿风险的概念由调度程序引入并考虑时,提供极为强大的调度范例。
现在参看图3示例,示出两个设备队列300、302。这些设备队列是以物理打印机为目标的作业队列。该设备队列中的作业可如上所述地进行排序。在该示例中,一些作业上具有保留。这使这些作业自动地具有比没有保留的作业更低的优先级,如上所述。根据以上讨论可以理解,较低优先级的作业不能立即打印。
不依赖于各个设备队列,提供了打印作业表304,并在其中存储***上的所有作业(或所有作业的索引)。如果作业被提交给入池打印机(入池打印机如下所述),则作业在指定为其目标的所有打印队列中显现。这出于若干不同原因完成。首先,入池队列实质上是包含全部入池设备中的所有作业的虚拟队列。这样地结构化各队列使用户能看到争夺相同资源的其它作业,不管它们是否被发送到同一入池队列。其次,每个物理打印机可具有不同的优先级顺序,且每个打印机的每个优先级划分程序可能可具有不同配置。这表示在许多情形中,在多个物理打印机上比较优先级元组是没有意义的。
此外,如果描述该作业的元组的任一元素都表示将来的时间点,则它们将同时置入时间队列306中。该时间队列按时间排序并根据其绝对时间存储各元素。这防止在从队列中移除各作业时因为处理它们而引起的任何长期偏移。
如本领域技术人员和其它技术人员可理解的,打印***通常具有给定的资源集。在该特定示例中,***资源308包括两个盘、CPU和物理存储器。调度程序(例如图2中的调度程序252)的任务是向各作业分配管理员所指定的相对优先级。这由队列相对优先级划分程序来处理。调度程序还必须尝试根据可用的***资源来选择要调度的有效数量的,在许多(如果不是全部)情形中为最优数量的作业。其原因是只要考虑整体的***吞吐量,调度较少工作可比调度较多工作更为有效。例如,如果在***开始分页操作时太多的作业被调度进行提交,则可导致***比调度较少作业时执行得更差,如上述“颠簸”。类似地,如果有三台极为快速的都从一个盘中接收数据的打印机,则实际上可能只向两台调度作业会更快,以便于减少如果调度第三个作业将导致的额外磁盘或磁头移动。
资源的具体数量和类型并不重要。假脱机程序将在打印作业之前维护该作业必须获得的资源的分层结构。由该作业所需的资源可通过一些试探法估算,然后所使用的实际资源可通过测量来确认。然后该作业可以按照一些预定顺序来获取其资源,并在一完成时就释放它们。该机制可减少吞吐量,但不会导致死锁或活锁。不管资源限制如何,一作业将被调度进行打印,而一作业将被调度进行提交。可用于打印的作业将获得对资源的第一优先级。需要提交的作业将具有比准备打印的作业更低的优先级,但是因为服务器可接收预先提交的作业和需要提交的作业,资源将作保留用于提交。提交保留所不使用的任一部分将被分配给打印作业。
再考虑,***资源自然地对机器是全局性的,但队列内各作业的相对优先级取决于该队列中优先级划分程序的顺序和提供给那些优先级划分程序的配置数据。
因而,从不同队列中确定作业的相对优先级通常是困难的(如果不是不可能的)。可强制规定在机器上只有一个优先级顺序和配置,但当想要迁移或合并打印服务器,或者在分布式情形中打印服务器可从一个节点移到另一个节点时,进行管理和维护将变得非常困难。还可以为每个队列保留一些***资源,但该方法不能在队列负载不平衡时完全地利用服务器上的资源。
根据一实施例,选择用于解决该相对顺序问题的方案是将以下数据用于相对地排列各队列的优先级:队列中最顶部作业上的保留数量、该作业的饥饿风险、以及该队列的全局优先级。
对于队列中最顶部作业上的保留数量,考虑如下。如果队列顶部作业在其上具有保留,则尝试处理它就没有意义了。如果队列中的任一作业不具有保留,则它将位于队列的顶部,因为保留在确定作业顺序时总是具有最高优先级。
对于特定作业的饥饿风险,不管打印服务器中的任何其它公正性考虑,如果一特定设备有饥饿风险而另一设备没有,则将首先调度有饥饿风险的设备。
对于队列全局优先级(参见图3的“资源仲裁队列”310),这些优先级被维护为各个打印队列的优先级队列。在操作时,全局优先级队列在某些方面类似于多数通用操作***中的线程或进程优先级。具体地,每个作业都具有其值可基于不同因素改变的全局优先级作用。在一实施例中,全局优先级作用的缺省行为是在作业中每页扣除一个全局优先级点。此外,全局优先级作业还可提高作业的优先级。例如,可有定义为“急需作业”的类别,在该情形中全局优先级作用可通过大数字来自动地提高。如果作业负面地影响全局优先级,则该作用在调度该作业后(即在取得惩罚该队列的资源之后)计算。不管任何将正常发生的标准化,队列中当前处理作业的负面优先级作用在处理这些作业时总是有效的。此外,可通过使队列优先级在时间上逐步提高直到某设定限制值的全局优先级恢复的概念。
除了可关联于每个作业的全局优先级作用之外,根据一实施例,每个队列可具有多个可配置参数。在本示例中,这些可配置参数包括但不限于,全局优先级范围、标准化速率、以及标准化时间间隔。
对于全局优先级范围,较低的优先级数值得到较高的优先级。队列的优先级将不管任何队列作用和优先级标准化而总是处于该范围内。标准范围可以是例如1000-2000。管理员可定义其它队列范围,并使用这些范围来惩罚或提高一队列相对于其它队列的优先级。例如,管理员可对总是得到高于具有缺省范围队列的优先级的队列集赋予[0-1000]的优先级范围。
标准化速率指优先级随时间标准化的速率。缺省可以是优先级数值在每个时间间隔上降低一个点。
标准化时间间隔指标准化进行的缺省时间间隔。示例性缺省间隔可以是一分钟。
提交器中的调度
选择考虑提交器和设备调度程序之间的关系。每个这些组件基本上都具有它自己的逻辑队列;存储在提交器中的作业逻辑上是与存储在客户机设备或设备调度程序中的相应作业不同的作业。在每个这些队列中的相应打印作业都根据在进程和机器边界上一致的作业GUID(全局唯一标识符)来相互关联。
在操作时,提交器通常以中间格式(诸如增强的元数据格式(EMF))来接收打印作业数据,并通过过滤器器管道来处理该中间格式以产生不同格式的数据,然后将该数据发送给服务器用于调度并提供给打印设备。此外,提交器和设备调度程序的特征是极为不同的。具体地,设备调度程序被称为是“I/O限制的”一意思是设备调度程序实际上常常等待打印机对数据请求做出响应。另一方面,提交器通常是“CPU限制的”一意思是提交器以特定计算设备所允许的尽可能快的速度处理数据并写出其数据。然后对每个这些组件随后在逻辑上将公正地发生两类不同的调度。
根据一实施例,特定打印机的饥饿风险用来协调提交动作,以减少饥饿情形发生的可能性。更具体地,如果下游物理打印机将空闲或者将要完成一作业(即它具有饥饿的高风险),则提交器最好对该打印机调度各个作业。如果作业以使大量数据预先提交因而处于饥饿的低风险的打印机为目标,则提交器最好少调度作提交的作业。
打印池
打印池是定义打印队列和物理打印设备之间多对多关系的一种机制。即,打印服务器可具有与之相关联的一个逻辑打印机,并向多个打印机提供数据。
作为示例,考虑示出带有两个入池打印机的***的图4。每个入池打印机都与两个物理打印机相关联,并且都具有它自己的相应打印队列。用于入池打印机的打印队列从与每个物理打印机相关联的打印队列中确定,而这些打印队列又从每个物理打印机的调度队列和相关联端口的高速缓存设备队列中确定。在该示例中,指定为“打印队列”的各个队列都是虚拟队列。
在该示例中,对来自一个入池打印机的两个物理打印机调度的打印作业在每个物理打印机以及虚拟打印机池中都是可见的。此外,特定入池打印机的打印队列通过合并与每个相应物理打印机相关联的打印队列来确定。
结论
上述打印***和方法可允许打印作业的优先级是可编程的。调度程序组件监督打印作业的管理和调度,并连同称为优先级划分程序的组件一起工作以提供编程和定制的便利。在至少一些实施例中,提供了***的接口,以使优先级划分程序能被编程并***,来根据不同的打印作业属性来定制调度程序的行为。在至少一些实施例中,***使用用于***中打印队列的相对优先级划分的模型来实施***资源在打印队列之间的公平平衡。在至少一些实施例中,***可在打印一个作业时独立地调度提交和打印操作,并可使用称为“饥饿风险”的试探法来帮助确保***中的节流提交不会导致设备饥饿。
尽管本发明已用结构特征和/或方法步骤的专用语言进行了描述,但可以理解在所附权利要求中定义的本发明并非必然受限于所述特定特征或步骤。相反,特定特征和步骤被揭示为实现本发明的较佳形式。