Abstract:
An access control apparatus, method, and recording medium for storing a program, provides equal input/output (IO) opportunities to auxiliary memory units for all users by attaching priority information for each user to user-entered IO commands. The prioritized IO commands are stored in an IO queue corresponding to a particular one of the auxiliary memory units, and physical IO is performed on each of the auxiliary memory units in the sequence of priority information attached to the prioritized IO commands in each IO queue irrespective of who the entrant users are.

Description:
BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     The present invention relates to an access control apparatus for use by a plurality of users, wherein consecutive visual data for multimedia or video on demand (VOD) use are stored on a shared basis among a plurality of auxiliary memory units and, when a plurality of users try to access the data, every user is equally given an opportunity to access. 
     2. Description of the Related Art 
     In the Gazette of the Japanese Patent Laid Open No. Hei 6-250792, there is disclosed a file access control apparatus, which is a low speed device, capable of storing requests entered by a plurality of users for access to a file into a queue storing section and, if the access requests concern entry of data stored in the file, executing the entry process at the highest possible speed by inserting the input requests before output requests already stored in the queue storing section. 
     This prior art involves a problem that, because input requests for access to data in a file, entered by a plurality of users, are given priority in acceptance over output requests for data in that file, the performance of output processing is deteriorated. 
     It involves another problem that, as requests for accessing a file, entered by a plurality of users, are stored into a single queue storing section and processed in the sequence of their storage into the queue storing section (first come first served), the plurality of users are not given equal opportunities to access. 
     SUMMARY AND OBJECTS OF THE INVENTION 
     An object of the present invention is to provide an access control apparatus capable of giving requests for accessing a file, entered by a plurality of users, equal opportunities to access and executing their processing efficiently. 
     An access control apparatus according to a first aspect of the invention consists of IO queue incorporating means for attaching priority information for each user entering an input/output command to an auxiliary memory unit, and storing the command into an IO queue corresponding to the auxiliary memory unit; and actual IO issuing means for taking out such input/output commands, stored in said IO queue, in the sequence of priority information attached thereto irrespective of who the entrant users are and executing the commands on the auxiliary memory unit corresponding to the IO queue. 
     An access control apparatus according to a second aspect of the invention consists of local chain manipulating means for adding an input/output command to an auxiliary memory unit, entered by a user, to the end of the local chain of the user; IO queue incorporating means for storing said input/output command into an IO queue corresponding to an auxiliary memory unit designated by that input/output command; and actual IO issuing means for taking out such input/output commands, stored in said IO queue, in accordance with the respective priority positions of the input/output commands in said local chain irrespective of who the entrant users are and executing the taken-out input/output commands on the auxiliary memory unit corresponding to the IO queue. 
     An access control apparatus according to a third aspect of the invention, is a version of the access control apparatus according to the second aspect of the invention, wherein said local chain manipulating means further deletes, in response to a request entered by a user for confirmation of input/output completion on an input/output command, the input/output command from said local chain of that user after confirming the completion of the execution of the input/output command. 
     An access control method according to the first aspect of the invention includes an IO queue incorporating step to attach priority information for each user entering an input/output command to an auxiliary memory unit, and to store the command into an IO queue corresponding to the auxiliary memory unit; and an actual IO issuing step to take out such input/output commands, stored into said IO queue at said IO queue incorporating step, in the sequence of priority information attached thereto irrespective of who the entrant users are and to execute the commands on the auxiliary memory unit corresponding to the IO queue. 
     An access control method according to the second aspect of the invention includes a local chain manipulating step to add a user-entered input/output command to an auxiliary memory unit to the end of the local chain of the user; an IO queue incorporating step to store said input/output command into an IO queue corresponding to an auxiliary memory unit designated by that input/output command; and an actual IO issuing step to take out such input/output commands, stored into said IO queue at said IO queue incorporating step, in accordance with the respective priority positions of the input/output commands in said local chain irrespective of who the entrant users are, and to execute the taken-out input/output commands on the auxiliary memory unit corresponding to the IO queue. 
     An access control method according to a third aspect of the invention, is a version of the access control method according to the second aspect of the invention, wherein said local chain manipulating step further includes deletion, in response to a request entered by a user for confirmation of input/output completion on an input/output command, of the input/output command from said local chain of that user after confirming the completion of the execution of the input/output command. 
     A recording medium according to the first aspect of the invention records a program to cause a computer to execute IO queue incorporation processing to attach priority information for each user to a user-entered input/output command to an auxiliary memory unit, and to store the command into an IO queue corresponding to the auxiliary memory unit; and actual IO issue processing to take out such input/output commands, stored into said IO queue by said IO queue incorporation processing, in the sequence of priority information attached thereto irrespective of who the entrant users are and to execute the commands on the auxiliary memory unit corresponding to the IO queue. 
     A recording medium according to the second aspect of the invention records a program to cause a computer to execute local chain manipulation processing to add a user-entered input/output command to an auxiliary memory unit, to the end of the local chain of the user; IO queue incorporation processing to store said input/output command into an IO queue corresponding to an auxiliary memory unit designated by that input/output command; and actual IO issue processing to take out such input/output commands, stored into said IO queue by said IO queue incorporation processing, in accordance with the respective priority positions of the input/output commands in said local chain irrespective of who the entrant users are and to execute the taken-out input/output commands on the auxiliary memory unit corresponding to the IO queue. 
     A recording medium according to a third aspect of the invention, is a version of the recording medium according to the second aspect of the invention, wherein said program, in said local chain manipulation processing, further causes, in response to a request entered by a user for confirmation of input/output completion on an input/output command, the input/output command to be deleted from said local chain of that user after confirming the completion of the execution of the input/output command. 
     A group of recording media according to the first aspect of the invention divide said program, recorded in any one of the recording media according to the first to third aspects of the invention, into a plurality of segments, and record each of the plurality of segments in one or another of the plurality of recording media. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     The present invention will be understood more fully from the detailed description given below and from the accompanying drawings of preferred embodiments of the invention, which, however, should not be regarded as limiting the invention, but are merely intended to help explain, and facilitate understanding of, the invention. 
     FIG. 1 is a block diagram illustrating a mode of implementation of the invention. 
     FIG. 2 is a flow chart illustrating the operation of the input/output means  2  in this mode of implementation of the invention. 
     FIG. 3 is a flow chart illustrating the operation of the local chain manipulating means  6  in this mode of implementation of the invention. 
     FIG. 4 is a flow chart illustrating the operation of the IO queue incorporating means  5  in this mode of implementation of the invention. 
     FIG. 5 is a flow chart illustrating the operation of the actual IO issuing means  7  in this mode of implementation of the invention. 
     FIG. 6 is a block diagram of a preferred embodiment of the invention. 
     FIG. 7 is a diagram illustrating the state of the preferred embodiment of the invention before user A and user B request input/output processing. 
     FIG. 8 is a diagram illustrating the state of the preferred embodiment of the invention after user A and user B have requested input/output processing. 
     FIG. 9 is a diagram illustrating the state of the preferred embodiment of the invention after the completion of physical IO. 
     FIG  10  is a diagram illustrating the state of the preferred embodiment of the invention after user A has confirmed the completion of input/output. 
     FIG. 11 is a diagram illustrating the state of the preferred embodiment of the invention after user B has confirmed the completion of input/output. 
     FIG. 12 is a diagram illustrating the state after physical IO has been performed in the state of FIG.  10 . 
     FIG. 13 is a diagram illustrating the state after physical IO has been performed in the state of FIG.  11 . 
    
    
     Here, it should be noted that like reference numerals represent like elements throughout the disclosure. 
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
     A mode of implementation of the present invention will be described in detail below with reference to the drawings. 
     Referring to FIG. 1, a mode of implementation of the invention is configured of a computer  100  operating under programmed control; input/output units  1 , connected to the computer  100 , into which users enter input/output requests or confirmations of input/output completion; and auxiliary memory units  3 . 
     In a variation of this mode of implementation, the computer  100  and a recording medium  101  such as a magnetic disk unit or a semiconductor memory may be connected to each other via a signal line, so that the computer  100  executes the following processing under a program loaded from the recording medium  101  via the signal line. 
     The computer  100  comprises input/output means  2  for receiving input/output requests or confirmations of input/output completion entered by users; IO queues  4  for holding input/output requests, each corresponding to one or another of the auxiliary memory units  3 ; IO queue incorporating means  5  for incorporating into one or another of the IO queues  4  an IO command  10  holding the reserve position of a user&#39;s input/output request and the user&#39;s local chain; local chain manipulating means  6  for manipulating reserve positions in IO commands  10  and local chains; and actual IO issuing means  7  for taking out IO commands  10  from IO queues  4  and processing physical input/output (physical IO) upon auxiliary memory units  3 . 
     FIG. 2 is a flow chart which illustrates processing by the input/output means  2 ; FIG. 3 is a flow chart which illustrates processing by the local chain manipulating means  6 ; FIG. 4 is a flow chart which illustrates processing by the IO queue incorporating means  5 ; and FIG. 5 is a flow chart which illustrates processing by the actual IO issuing means  7 . 
     Next, the overall operation of this mode of implementation will be described in detail below with reference to FIGS. 1 to  5 . 
     First will be described a case in which a user makes an input/output request by entering an IO command  10  at an input/output unit  1 . 
     Referring to FIG. 1, the input/output means  2  determines whether the user&#39;s request entered into the input/output unit  1  is an input/output request or a confirmation of input/output completion (step  201 ) and, if it is determined to be an input/output request, incorporates with the local chain manipulating means  6  the IO command  10  into the user&#39;s local chain (step  202 ). 
     The input/output means  2 , with the IO queue incorporating means  5 , further incorporates the IO command  10  into the IO queue  4  corresponding to a designated auxiliary memory unit  3  (step  203 ), and completes the processing. 
     If the user&#39;s request is determined to be a confirmation of input/output completion at step  201 , the input/output means  2  waits until physical IO on the IO command  10 , whose input/output completion is to be confirmed, is completed (step  204 ) and, upon completion of the input/output processing, separates with the local chain manipulating means  6  the IO command  10  from the user&#39;s local chain (step  205 ), thereby completing the processing. 
     Referring to FIG. 3, the local chain manipulating means  6 , as instructed by the input/output means  2 , picks out the local chain of the user having requested input/output (step  301 ), determines whether the instruction by the input/output means  2  requires incorporation of the IO command  10  into the local chain or its separation from the local chain (step  302 ) and, if it is determined to be a request for separation, separates the IO command  10  from the local chain (step  303 ) or, if it is determined to be a request for incorporation, adds the IO command  10  at the end of the local chain (step  304 ). 
     The local chain manipulating means  6  further alters the reserve position of the IO command  10  in the local chain according to the sequence of the chain (step  305 ), and completes the processing. 
     Referring to FIG. 4, the IO queue incorporating means  5 , as instructed by the input/output means  2 , incorporates the IO command  10  into the IO queue  4  corresponding to the auxiliary memory unit  3  designated by the input/output request (step  401 ), and completes the processing. 
     Referring to FIG. 5, the actual IO issuing means  7  temporarily holds the leading one of the IO commands  10  stored in the IO queue  4  corresponding to an auxiliary memory unit  3  (step  501 ), compares the reserve position of the temporarily held IO command with that of the following IO command  10 , temporarily holds whichever of the IO commands  10  is earlier in the reserve position, and repeats this procedure on every IO command  10  stored in the IO queue  4  (steps  502  to  505 ). The actual IO issuing means  7 , after the completion of step  505 , separates the temporarily held IO command from the IO queue  4  (step  506 ), and performs physical  10  corresponding to the temporarily held IO command on the auxiliary memory unit  3  (step  507 ). The actual IO issuing means  7  repeats physical IO on the auxiliary memory unit  3  as long as any IO command  10  is stored in the IO queue  4  (step  508 ). The actual IO issuing means  7  performs the above-described processings of steps  501  to  508  for IO queues  4  corresponding to all the auxiliary memory units  3 . 
     Preferred Embodiment 
     Next will be described in detail a preferred embodiment of the invention with reference to FIGS. 6 to  13 . 
     FIG. 6 is a block diagram of the preferred embodiment of the invention, consisting of a user process  610 ; input/output means  620  for receiving input/output requests and confirmations of input/output completion entered by users; a plurality of magnetic disk units  680  and  690  for storing data; an IO queue  650  for holding an IO command  612  correspondingly to the magnetic disk unit  680 ; an IO queue  660  for holding the address of an IO command  613  correspondingly to the magnetic disk unit  690 ; IO queue incorporating means  640  for incorporating the IO commands  612  and  613  into the IO queues  650  and  660 , respectively; local chain manipulating means  630  for manipulating the reserve positions of the IO commands  612  and  613  and a local chain; and actual IO issuing means  670  for taking out the IO commands  612  and  613  from the IO queues  650  and  660 , respectively, and performing physical inputting/outputting. Each individual user process  610  comprises the IO commands  612  and  613  for holding the reserve positions of input/output requests and the local chain, and a local chain start  611  for storing the address of the leading IO command of the local chain. 
     The IO command  612  comprises the disk number of the magnetic disk unit  680  for performing physical inputting/outputting; an IO address, which is the address of the object of inputting/outputting in the magnetic disk unit  680 ; the local chain for chaining the IO command  612  in the user process; and a reserve position indicating the position of the input/output request in the reserve sequence. Similarly, the IO command  613  comprises the disk number of the magnetic disk unit  690 ; an IO address, which is the address of the object of inputting/outputting in the magnetic disk unit  690 ; the local chain for chaining the IO command  613 ; and a reserve position. 
     The IO queue  650  is provided with the disk number of the magnetic disk  680 ; the number of held items, which is the number of input/output requests in the IO queue; the IO command address of the IO command  612  requested for inputting/outputting; and a position in sequence. Similarly, the IO queue  660  is provided with the disk number of the magnetic disk  690 ; the number of held items; the IO command address of the IO command  613  requested for inputting/outputting; and a position in sequence. 
     FIG. 7 is a diagram illustrating the state before user A and user B request input/output processing; FIG. 8, a diagram illustrating the state after user A and user B have requested input/output processing; FIG. 9, a diagram illustrating the state after the completion of physical IO; FIG. 10, a diagram illustrating the state after user A has confirmed the completion of input/output; FIG. 11, a diagram illustrating the state after user B has confirmed the completion of input/output; FIG. 12, a diagram illustrating the state after physical IO has been performed in the state of FIG. 10; FIG. 13, a diagram illustrating the state after physical IO has been performed in the state of FIG.  11 . 
     Next will be described the operation of the preferred embodiment of the invention with reference to FIGS. 7 to  13 . 
     The following description refers to a case of processing in which users A and B are supposed to issue three and two input/output requests, respectively, to two magnetic disk units. 
     Referring to FIG. 7, user A&#39;s process  710  comprises three IO commands  712  to  714  and a local chain start  711  indicating a value of “−1” meaning the presence of no input/output request. User B&#39;s process  720  comprises two IO commands  722  and  723  and a local chain start  721  indicating a value of “−1” meaning the presence of no input/output request. In IO queues  730  and  740  respectively corresponding to the magnetic disk units  750  and  760 , the number of held items in every IO queue is “0” indicating the absence of any address of an IO command to perform physical IO. 
     FIG. 8 illustrates the state following the state of FIG. 7 in which user A and user B have requested input/output processing. The input/output means, having received input/output requests by the IO commands  712  to  714 , calls the local chain manipulating means and the IO queue incorporating means successively, and then the input/output means, having received input/output requests by the IO commands  722  and  723 , calls the local chain manipulating means and the IO queue incorporating means successively. 
     The input/output means, having successively received the IO commands  712  to  714 , incorporates with the local chain manipulating means the IO commands  712  to  714  into user A&#39;s local chain. 
     The local chain manipulating means, accepting the IO command  712 , recognizes that user A&#39;s local start  711  is “−1” and that the chain is vacant, stores the address Al of the IO command  712  at the local chain start  711  in order to position the IO command  712  in the leading position of the chain, and stores “1” in the reserve position of the IO command  712 . 
     Then the local chain manipulating means, accepting the IO command  713 , recognizes user A&#39;s last IO command  712  from the fact that the local chain-is “−1”, stores the address A 2  of the IO command  713  into the local chain of the IO command  712  in order to position the IO command  713  next to the IO command  712 , and stores “2” in the reserve position of the IO command  713 . 
     Further the local chain manipulating means, accepting the IO command  714 , recognizes user A&#39;s last IO command  713  from the fact that the local chain is “−1”, stores the address A 3  of the IO command  714  into the local chain of the IO command  713  in order to position the IO command  714  next to the IO command  713 , and stores “3” in the reserve position of the IO command  714 . 
     Next the IO queue incorporating means, referring to the disk number of the IO command  712 , stores the address A 1  of the IO command  712  into the IO queue  730  corresponding to the magnetic disk  750  indicated by the disk number D 1  in a position whose sequential position is the number of items held in the IO queue  730  plus 1 to make the number of items held in the IO queue  730  “1”. 
     The IO queue incorporating means, referring to the disk number of the IO command  713 , stores the address A 2  of the IO command  713  into the IO queue  740  corresponding to the magnetic disk  760  indicated by the disk number D 2  in a position whose sequential position is the number of items held in the IO queue  740  plus 1 to make the number of items held in the IO queue  740  “1”. 
     Further the IO queue incorporating means, referring to the disk number of the IO command  714 , stores the address A 3  of the IO command  714  into the IO queue  730  corresponding to the magnetic disk  750  indicated by the disk number D 1  in a position whose sequential position is the number of items held in the IO queue  750  plus 1 to make the number of items held in the IO queue  750  “2”. 
     The IO queue incorporating means, having similarly accepted the IO commands  722  and  723 , incorporates with the local chain manipulating means the IO commands  722  and  723  into user B&#39;s local chain. 
     The local chain manipulating means accepts the IO command  722 , recognizes that user B&#39;s local start  721  is “−1” and that the chain is vacant, stores the address B 1  of the IO command  722  at the local chain start  721  in order to position the IO command  722  in the leading position of the chain, and stores “1” in the reserve position of the IO command  722 . 
     Then the local chain manipulating means, accepting the IO command  723 , recognizes user B&#39;s last IO command  722  from the fact that the local chain is “−1”, stores the address B 2  of the IO command  723  into the local chain of the IO command  722  in order to position the IO command  723  next to the IO command  722 , and stores “2” in the reserve position of the IO command  723 . 
     Next the IO queue incorporating means, referring to the disk number of the IO command  722 , stores the address B 1  of the IO command  722  into the IO queue  740  corresponding to the magnetic disk  760  indicated by the disk number D 2  in a position whose sequential position is the number of items held in the IO queue  740  plus 1 to make the number of items held in the IO queue  740  “2”. 
     Further the IO queue incorporating means, referring to the disk number of the IO command  723 , stores the address B 2  of the IO command  723  into the IO queue  730  corresponding to the magnetic disk  750  indicated by the disk number D 1  in a position whose sequential position is the number of items held in the IO queue  730  plus 1 to make the number of items held in the IO queue  730  “3”. 
     FIG. 9 is a diagram illustrating the state following the state of FIG. 8 in which the actual IO issuing means has taken out one IO command address each from the IO queues  730  and  740  and performed physical IO upon the respectively corresponding magnetic disks  750  and  760 . The state of neither the local chain start nor the IO commands is changed. 
     The actual IO issuing means successively refers to the IO commands  712 ,  714  and  723  in the IO queue  730 , respectively indicated by the IO command addresses of sequential positions 1 to 3 in FIG. 8; takes out of the IO queue  730  the IO command  712 , first found from the IO commands having the earliest reserve positions; successively advances the IO command addresses whose sequential positions follow those taken out; and reduces the number of items held in the IO queue  730  by 1 to “2”. Then it performs physical IO upon the magnetic disk  750  indicated by the disk number of the taken-out IO command  712 . 
     Similarly, the actual IO issuing means successively refers to the IO commands  713  and  722  in the IO queue  740 , respectively indicated by the IO command addresses of sequential positions 1 to 2; takes out of the IO queue  740  the IO command  722 , first found from the IO commands having the earliest reserve positions; successively advances the IO command addresses whose sequential positions follow those taken out; and reduces the number of items held in the IO queue  740  by 1 to “1”. Then it performs physical IO upon the magnetic disk  760  indicated by the disk number of the takenout IO command  722 . 
     FIG. 10 illustrates the state following the state of FIG. 9 in which user A has entered a confirmation of the completion of inputting/outputting of the IO command  712 . 
     The states of user B&#39;s local chain start  721 , the IO commands  722  and  723 , the IO queues  730  and  740 , and the magnetic disks  750  and  760  are not changed. 
     The input/output means, having received a confirmation of input/output completion on the IO command  712  from user A, calls the local chain manipulating-means after the completion of physical IO on the IO command  712 . 
     The local chain manipulating means, in order to separate the IO command  712  from user A&#39;s local chain, stores the value “A 2 ” of the local chain of the IO command  712  into the local chain start  711  and “−1” into the local chain of the IO command  712 . Then, while successively referring to IO commands, using the local chain, from the IO command  713  indicated by the value “A 2 ” of the local chain start  711  until the value of the local chain becomes “−1”, it stores the sequential positions referred to as reserve positions in IO commands, and the IO commands  713  and  714  take on reserve positions “1” and “2”, respectively. 
     FIG. 11 illustrates the state following the state of FIG. 10 in which user B has entered a confirmation of the completion of inputting/outputting of the IO command  722 . 
     The states of user A&#39;s local chain start  711 , the IO commands  712  to  714 , the IO queues  730  and  740 , and the magnetic disks  750  and  760  are not changed. 
     The input/output means, having received a confirmation of input/output completion on the IO command  722  from user B, calls the local chain manipulating means after the completion of physical IO on the IO command  722 . 
     The local chain manipulating means, in order to separate the IO command  722  from user B&#39;s local chain, stores the value “B2” of the local chain of the IO command  722  into the local chain start  721  and “−1” into the local chain of the IO command  722 . Then, while successively referring to IO commands, using the local chain, from the IO command  723  indicated by the value “B2” of the local chain start  721  until the value of the local chain becomes “−1”, it stores the sequential positions referred to as reserve positions in IO commands, and the IO command  723  takes on a reserve position “1”. 
     FIG. 12 is a diagram illustrating the state following the state of FIG. 10 in which the actual IO issuing means has taken out one IO command address each from the IO queues  730  and  740  and performed physical IO upon the respectively corresponding magnetic disks  750  and  760 . The state of neither the local chain start nor the IO commands is changed. 
     The actual IO issuing means successively refers to the IO commands  714  and  723  in the IO queue  730 , respectively indicated by the IO command addresses of sequential positions 1 to 2; takes out of the IO queue  730  the IO command  714 , first found from the IO commands having the earliest reserve positions; successively advances the IO command addresses whose sequential positions follow those taken out; and reduces the number of items held in the IO queue  730  by 1 to “1”. Then it performs physical IO upon the magnetic disk  750  indicated by the disk number of the taken-out IO command  714 . 
     Next the actual IO issuing means, as the number of held items in the IO queue  740  is “1”, takes out of the IO queue  740  the IO command  713 , whose sequential position is 1, to make the number of items held in the IO queue  740  “0”. Then it performs physical IO upon the magnetic disk  760  indicated by the disk number of the taken-out IO command  713 . 
     FIG. 13 is a diagram illustrating the state following the state of FIG. 11 in which the actual IO issuing means has taken out one IO command address each from the IO queues  730  and  740  and performed physical IO upon the respectively corresponding magnetic disks  750  and  760 . The state of neither the local chain start nor the IO commands is changed. 
     The actual IO issuing means successively refers to the IO commands  714  and  723  in the IO queue  730 , respectively indicated by the IO command addresses of sequential positions 1 to 2; takes out of the IO queue  730  the IO command  723 , first found from the IO commands having the earliest reserve positions; successively advances the IO command addresses whose sequential positions follow those taken out; and reduces the number of items held in the IO queue  730  by 1 to “1”. Then it performs physical IO upon the magnetic disk  750  indicated by the disk number of the taken-out IO command  714 . 
     Next the actual IO issuing means, as the number of held items in the IO queue  740  is “1”, takes out of the IO queue  740  the IO command  713 , whose sequential position is 1, to make the number of items held in the IO queue  740  by 1 to “0”. Then it performs physical IO upon the magnetic disk  760  indicated by the disk number of the taken-out IO command  713 . 
     As hitherto described, the present invention has the benefit to provide an access control apparatus which can give equal input/output opportunities to input/output requests from all users by adopting as criterion of priority among input/output processing requests from all users the reserve sequence of reserved input/output requests, held for each individual user, and process the requests efficiently. 
     Although the invention has been described in detail above with reference to preferred embodiments thereof, it will be apparent to those skilled in the art that these embodiments have been provided solely for the purpose of illustration, and are in no way to be regarded as limiting the invention. Instead, various modifications and substitutions of equivalent techniques will be readily apparent to those skilled in the art upon reading this specification, and such modifications and substitutions are to be regarded as falling within the true scope and spirit of the following claims.