Abstract:
In some embodiments of systems and methods for print scheduling, at least one of a plurality of entries in a request table associated with a printing device is updated with print job related information when a spool associated with a printing device is full. A priority is associated with the entries in the request table and an incoming print job is spooled at the time of a print job request, if the spool associated with the printing device is not full and the entry corresponding to the print job in the request table has the highest priority. Embodiments of the methods disclosed provide for the ordered processing of print jobs in a timely fashion with minimal alterations to existing protocols.

Description:
BACKGROUND 
       [0001]    1. Field of the Invention 
         [0002]    The present invention relates to the field of printing systems management and in particular, to systems and methods for print scheduling. 
         [0003]    2. Description of Related Art 
         [0004]    Printing devices and printing systems are ubiquitous in modern office settings, in the home, and in home-office environments. As the cost of printing devices continues to decrease, a greater choice of printers may be available to users in most environments. In large office systems, a print server may be paired with printers and off load several activities from sending devices and the printers. For example, the print server may queue jobs when one or more printers is busy and forward to the job to a specified printer at a later time. 
         [0005]    Print servers require additional memory and firmware and may add significantly to the cost of printing devices. Consequently, print servers are often implemented using older computers with limited functionality. However, in larger or more expensive printing devices, server functionality may be integrated into the printing device. If the print server is implemented on a separate computer, separate installation, administration, and management may be required thereby increasing the cost and complexity of system administration. 
         [0006]    In the context of a small business or a home environment where lower cost printers predominate, the functionality and convenience afforded by print servers may be lacking. Moreover, low cost printing devices generally have limited memory and therefore have lower print spooling capacity. Print spooling is the process by which a print job is stored in a memory location for later processing. When a print job is spooled, it has been stored in memory for later processing by a printing device. Print spool memory may reside on the printer, a print controller, or a print server. 
         [0007]    Print spooling allows a print job to be processed in the background and frees the sending device to perform other functions. The sending device or print client or simply client may be a computer, camera, or any other device requiring the services of the printing device. When the print spool is full, the sending device waits and retries at random intervals until the printing device is able to accept new jobs. In such situations, there is no guarantee that a sending device will be able to spool its job during the next retry. For example, other computers and/or devices may have filled the print spool with new jobs in the interim if one or more preexisting print jobs had completed prior to the sending device&#39;s next retry. 
         [0008]    The “spool full” problem may be exacerbated if a printer or a pool of printers is being shared by a large number of devices, or in an environment that is print heavy, such as in a document processing environment. Although, the “spool full” problem may occur more frequently when lower cost devices with smaller spool memory are shared, it may also occur with larger print devices depending on the number and type of print jobs that are being sent to the device. The “spool full” problem can be very frustrating for users because there is no guarantee that a print job will be processed in a timely manner. 
         [0009]    Thus, there is a need for a system, method, and apparatus that permits the scheduling and efficient processing of print jobs and operates using existing protocols for sending and/or receiving print jobs. 
       SUMMARY 
       [0010]    In some embodiments, a method for scheduling print jobs for processing comprises updating at least one of a plurality of entries in a request table associated with a printing device with print job related information when a spool associated with a printing device is full. A priority is associated with the entries in the request table, and a print job is spooled at the time of a print job request, if the spool associated with the printing device is not full and the entry corresponding to the print job in the request table has the highest priority. The print spool and the request table may be stored in physically separate memories, or in logically separate sections of a common physical memory. 
         [0011]    Updating at least one of a plurality of entries further comprises one or more of: updating expiry period information associated with an entry for a print job; deleting entries associated with spooled jobs from the request table; and adding an entry with information pertaining to a print job, if the request table does not include an entry corresponding to the print job. Further, updating expiry period information associated with an entry for a print job may comprise one or more of: resetting the expiry time period associated with an entry for a print job; and deleting expired entries from the request table. 
         [0012]    The expiry period may be fixed, or dynamically altered based on one or more of: a temporal distribution of print jobs received by the printing device in a preceding time interval; the average size of print jobs received by the printing device; the current time of day; and the size of a print job currently being printed by the printing device. 
         [0013]    A priority may be associated with entries in the request table by using print job related information to determine a priority for each entry. Print job related information may be obtained from a print header associated with the print job and may comprise one or more of: the time the print job was first received by the printing device; the size of the print job; the identity of the device sending the print job; and the identity of the user sending the print job. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0014]      FIG. 1  shows a block diagram of an exemplary system for print scheduling. 
           [0015]      FIG. 2  shows exemplary typical information contained in a print header. 
           [0016]      FIG. 3  shows a flowchart describing an exemplary method for print scheduling. 
           [0017]      FIG. 4  shows an exemplary table with entries corresponding to print jobs. 
       
    
    
     DETAILED DESCRIPTION 
       [0018]      FIG. 1  shows an exemplary block diagram of a system for print accounting. A computer software application consistent with the present invention may be deployed on one or more networked computers, or printers, as shown in  FIG. 1 , that are connected through communication links that allow information to be exchanged using conventional communication protocols and/or data port interfaces. 
         [0019]    As shown in  FIG. 1 , exemplary system  100  includes a computing device  110  and a server  130 . Further, computing device  110  and server  130  may communicate over a connection  120 , which may pass through network  140 , which in one case could be the Internet. Computing device  110  may be a computer workstation, desktop computer, laptop computer, or any other computing device capable of being used in a networked environment. Server  130  may be a platform capable of connecting to computing device  110  and other devices too (not shown). Computing device  110  and server  120  may be capable of executing software (not shown) that allows the control and configuration of printing devices  160 , such as exemplary printing devices  160 - 1  and  160 - 2 . 
         [0020]    Computing device  110  may contain a removable media drive  150 . Removable media drive  150  may include, for example, 3.5 inch floppy drives, CD-ROM drives, DVD ROM drives, CD±RW or DVD±RW drives, USB flash drives, and/or any other removable media drives consistent with embodiments of the present invention. Portions of software applications may reside on removable media and be read and executed by computing device  110  using removable media drive  150 . In some embodiments, results or reports generated by applications may also be stored on removable media. 
         [0021]    Connection  120  couples computing device  110 , server  130 , and printer  160 - 2  and may be implemented as a wired or wireless connection using conventional communication protocols and/or data port interfaces. In general, connection  120  can be any communication channel that allows transmission of data between the devices. In one embodiment, for example, the devices may be provided with conventional data ports, such as USB, SCSI, FIREWIRE, and/or BNC ports for transmission of data through the appropriate connection  120 . The communication links could be wireless links or wired links or any combination that allows communication between computing device  110 , server  130 , and printer  160 - 2 . 
         [0022]    Network  140  could include a Local Area Network (LAN), a Wide Area Network (WAN), or the Internet. In some embodiments consistent with the present invention, information sent over network  140  may be encrypted to ensure the security of the data being transmitted. 
         [0023]    Exemplary printing device  160 - 2 , may be a network printer, and can be connected to network  140  through connection  120 . In some embodiments, a printing device, such as exemplary printing device  160 - 1 , may be a local or dedicated printer and connected directly to computing device  110  and/or server  120  and/or other peripherals such as exemplary digital camera  185 . Digital camera  185  may be capable of communicating with printing device  160 - 1  directly using a protocol such as PictBridge or through computer  110 . Printing devices, such as exemplary printing device  160 - 2 , may also have ports for the connection of flash drives, USB drives, or other storage devices  180 , as shown in  FIG. 1 . System  100  may include multiple printing devices and other peripherals (not shown), according to embodiments of the invention. 
         [0024]    Printing devices  160  may be controlled by hardware, firmware, or software, or some combination thereof. Printing devices  160  may include one or more print controller boards  175 , such as exemplary print controllers  175 - 1  and  175 - 2 , which may control the operation of printing devices  160 . Printing devices  160  may be controlled by firmware or software resident on memory devices in print controllers  175 . In general, print controllers  175  may be internal or external print devices  160 . In some embodiments, printing devices  160  may also be controlled in part by software running on computing device  110  or server  120 . 
         [0025]    Printing devices, such as exemplary printing device  160 - 2 , may also include consoles  190  such as consoles  190 - 1  and  190 - 2 , or other interfaces to allow configuration options to be set and other messages to be displayed. In some embodiments, one or more configuration options may be set using a display or user-interface on a monitor for a computer coupled to printing devices  160 . For example, user interfaces to set one or more configuration options on printing device  160 - 1  may be displayed on monitor  190 - 3 , which is coupled to computer  110 . A user interface to set configuration options on printer  160 - 2  may also be displayed on monitor  190 - 3 , using software running on server  130 . 
         [0026]    In some embodiments, configuration parameters pertaining to printing device  170  may be user-configurable. For example, the print resolution, document sizes, color options, and other configuration parameters may be user-configurable. A user may also be able to specify input trays and the use of automatic document feeders to allow batch processing of documents. Users may also be able to log into a printing device  160  to perform administrative functions such as to enable software or firmware on printing device  160  to perform various functions. In some embodiments, the log in process may require a password or other user-authentication mechanism. 
         [0027]    A computer software application consistent with the present invention may be deployed on any of the exemplary computers, or printers as shown in  FIG. 1 . For example, computing device  110  could execute software that may control and/or monitor the operation of printer  160 - 1 . An independent application may also execute concurrently on printer  160 - 2  based on its configuration. In another example, an application resident on print controller  175 - 1  could be configured using computer  110  but execute on printing device  160 - 1 . In general, applications may execute in whole or in part on one or more computers, print controllers, or printers in the system. 
         [0028]      FIG. 2  shows exemplary print header information  200  included in a print job. When a user decides to print a document, the print job sent to printing device  160  may contain a header. The header is used to identify the user, the sending device, or client, and may also contain device configuration and job processing information. For example, user Information may include the user login-id, user name and other information associated with the user&#39;s account. Client information may include information about the client such as the client name, network address, and port numbers. In some embodiments, the network address of the client may be specified by a TCP/IP address. In general, the list of sending device or clients could include any print job generating device such as computer  110 , server  130 , camera  185 , or any other peripheral capable of sending jobs to printer  160 . 
         [0029]    Job information may include a job name and/or identifier and the time of submission. In some embodiments, the job-id number may be a unique identifier assigned to the print job by a print driver running on the client. Print header information  200  may also include information related to processing the print job such as color, image, rendering, and media information. For example, image related information may include luminance information such as brightness and contrast, and/or chroma information, such as saturation. Rendering information can include information related to half-toning and smoothing options for images and text. Media information may include information about media type such as paper size, paper orientation, paper tray, stapling and/or collating options. 
         [0030]    In general, the type of print header information  200  may vary depending on the printer and the capabilities of the page description language (PDL). PDL&#39;s may include PostScript, Adobe PDF, HP PCL, Microsoft XPS, and variants thereof as well as any other languages used to describe pages in a document. In some embodiments, a proprietary PDL and/or a modified and/or extended version of a standard PDL may be used. 
         [0031]      FIG. 3  shows a flowchart  300  describing an exemplary method for print scheduling. The exemplary method shown in flowchart  300  may be implemented by one or more of printing device  160  and/or print controller  175 . In step  310 , a sending device sends a job to a printing device, such as exemplary printing device  160 . In step  315 , the printing device checks if its spool is full. If the spool is full, the printing device may add information about the job to a Request Table, which may be exemplary Request Table  400 . In some embodiments, Request Table  400  may include a list of jobs received by printing device  160  that have not been spooled. An entry in exemplary Request Table  400  may correspond to a specific job received (but not as yet spooled) by printing device  160 . 
         [0032]      FIG. 4  shows an exemplary Request Table  400 . Exemplary Request Table  400  may be used to hold information pertaining to a specific print job. Details pertaining to a new job may be added to Request Table  400  if the print spool for printing device  160  is full. In some embodiments, Request Table  400  may be checked before details pertaining to a new job are added to prevent duplicate entries. The entry pertaining to a job may be deleted if the job has been processed, or if another request for the same job is not received within some specified time. 
         [0033]    Request Table  400  may include one or more fields such as a Client ID, Job ID, Job Size, User ID, the time a job request was received, and/or other parameters related to the print job. Fields in exemplary Request Table  400  may also include additional information about clients, users, and/or other information associated with a job. In general, any relevant information provided in or associated with print header information  200  may be used as fields in Request Table  400 . Exemplary Request Table  400  may reside in a separate logical or physical memory in printing device  160 , print controller  175  and/or a memory device coupled to printing device  160  or print controller  175 . Memory for Request Table  400  may comprise logically distinct memory reserved or allocated from a common memory. In some embodiments, memory for Request Table  400  may be allocated and de-allocated as new requests are added and pending requests are processed. 
         [0034]    In step  315 , the spool for printing device  160  is checked. If the spool for printing device  160  is not full, then, in step  330 , Request Table  400  may be checked to determine if there are any entries in Request Table  400 . In step  360 , the job may be spooled if there are no entries in Request Table  400 . If the check of Request Table  400  in step  330 , determines that there are entries in exemplary Request Table  400 , then Request Table  400  may be checked for expired entries. Expired entries may be removed in step  335 . 
         [0035]    Any entry in Request Table  400  may be associated with an expiry period. The expiry period may determine the length of time that entries in the table will remain pending before they are removed. For example, the expiry period for entries in Request Table  400  may be set at 10 minutes. If an entry in Request Table  400  has been pending more than 10 minutes it may be deleted. In one embodiment, the expiry period may be set or preset to some default value by a system administrator or a printing device manufacturer. In some embodiments, the default value may be changed at run time based on statistics related to print jobs, such as the distribution of job sizes, frequency of print requests, time of day, the distribution of jobs during a time interval preceding the current time, the temporal distribution of jobs during the day, etc. For example, a longer expiry period may be set for times in a day when the number of print requests is higher. As another example, the expiry period may be increased if printing device  160  is currently printing a large print job. Printing device  160  may be configured to automatically change the expiry period at run time based on statistics maintained by and/or provided to it. The expiry period may also be changed by a system administrator. 
         [0036]    In step  340 , exemplary Request Table  400  is checked to determine if an entry for the currently received job already exists. If exemplary Request Table  400  already includes an entry for the current job, then, in step  345 , the entry associated with the current job is checked to see if it has the highest priority. 
         [0037]    The priority associated with an entry may be determined in step  345  using the job related information associated with an entry in Request Table  400 . For example, the earliest received job may be assigned the highest priority i.e. processed on a First Come First Served basis. In another example, jobs may be prioritized based on their size. In a further example, jobs may be prioritized based on users or sending devices (clients). In one embodiment, entries in Request Table  400  may be sorted according to one or more criteria to determine a priority for entries. In some embodiments, the priorities for Request Table entries may be calculated dynamically, in step  345 , to determine the entry with the highest priority. Thus, a priority for each entry may be calculated based on specified criteria each time the exemplary procedure in step  345  is invoked. In general, a variety of schemes may be used to prioritize jobs and determine priorities associated with entries in Request Table  400 . In step  365 , the entry for a current job (which has been determined to have the highest priority) may be deleted from Request Table  400 . The job may then be spooled, in step  360 . 
         [0038]    If the check of exemplary Request Table  400  (in step  340 ) indicates that no entry for the currently received job exists then an entry may added to Request Table  400 , in step  325 . In step  325 , an entry for the current job may be created, which may include a job identifier and other job related details. Next, in step  328 , a “busy” signal is sent to the sending device to indicate that the job will not be processed at the current time. The sending device may resend the job to printing device  160  at one or more later times. The busy signal may be sent over connection  120  or network  140  using any appropriate protocol established between the sending device and printing device  160 . 
         [0039]    If the check of the current job&#39;s entry (in step  345 ) indicates that the current job does not have the highest priority then its expiry period may be reset in step  355 . Resetting the expiry period for a job in Request Table  400  whenever the job is received, but not spooled, by printing device  160  permits the job to remain pending. In step  328 , a “busy” signal is sent to the sending device to indicate that the job will not be processed at the current time. The process depicted in  FIG. 3 , repeats as new jobs are received by printing device  160 . 
         [0040]    Note that methods consistent with embodiments of the invention may conveniently be implemented using program modules, hardware modules, or a combination of program and hardware modules. Such modules, when executed, may perform the steps and features disclosed herein, including those disclosed with reference to the exemplary flow charts shown in the figures. The operations, stages, and procedures described above and illustrated in the accompanying drawings are sufficiently disclosed to permit one of ordinary skill in the art to practice the invention. Moreover, there are many computers, printing devices, and operating systems that may be used in practicing embodiments of the instant invention and, therefore, no specific detailed programs could be provided that would be applicable to each of these different systems. Each user of a particular environment will be aware of the language, hardware, and tools that are most useful for that user&#39;s needs and purposes. 
         [0041]    The above-noted features and aspects of the present invention may be implemented in various environments. Such environments and related applications may be specially constructed for performing the various processes and operations of the invention, or they may include a general-purpose computer or a multi-function printing device that includes a local computing platform selectively activated or reconfigured by program code to provide appropriate functionality. The processes disclosed herein are not inherently related to any printing device, particular computer or other apparatus, and aspects of these processes may be implemented by any suitable combination of hardware, software, and/or firmware. For example, various general-purpose machines may be used with programs written in accordance with teachings of the invention, or it may be more convenient to reconfigure or construct a specialized printing apparatus or system to perform the required methods and techniques. 
         [0042]    Embodiments of the present invention also relate to computer-readable media that include program instructions or program code for performing various computer-implemented operations based on the methods and processes of embodiments of the invention. The program instructions may be those specially designed and constructed for the purposes of the invention, or they may be of the kind well known and available to those having skill in the computer arts. Examples of program instructions include, for example, machine code, such as produced by a compiler, and files containing a high-level code that can be executed by the computer using an interpreter. 
         [0043]    Other embodiments of the invention will be apparent to those skilled in the art from consideration of the specification and practice of the embodiments of the invention disclosed herein. It is intended that the specification and examples be considered as exemplary only, with a true scope and spirit of the invention being indicated by the following claims. As such, the invention is limited only by the following claims.