G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs

G06F9/46—Multiprogramming arrangements

G06F9/461—Saving or restoring of program or task context

G06F9/462—Saving or restoring of program or task context with multiple register sets

Abstract

A processor for sequentially executing a plurality of programs using a plurality of register value groups stored in a memory that correspond one-to-one with the programs. The processor includes a plurality of register groups; a select/switch unit operable to select one of the plurality of register groups as an execution target register group on which a program execution is based, and to switch the selection target every time a first predetermined period elapses; a restoring unit operable to restore, every time the switching is performed, one of the register value groups into one of the register groups that is not selected as the execution target register group; a saving unit operable to save, prior to the restoring, register values in the register group targeted for restoring, by overwriting a register value group in the memory that corresponds to the register values; and a program execution unit operable to execute, every time the switching is performed, a program corresponding to a register value group in the execution target register group.

Description

[0001]

This application is based on applications no. 2002-002816 and no. 2003-001616 filed in Japan, the content of which is hereby incorporated by reference.

BACKGROUND OF THE INVENTION

[0002]

1. Field of the Invention

[0003]

The present invention relates to processors, and in particular to technology for efficiently executing programs.

[0004]

2. Related Art

[0005]

Conventionally, there exist operating systems (OS) that use a single processor to process a plurality of tasks in a pseudo-parallel manner.

[0006]

An OS such as this makes a processor repeatedly execute the following processing.

[0007]

The processor is made to store, in a register group within the processor, control information (hereafter “contexts”) showing an execution position, a data storage location and the like of a computer program (hereafter, simply “program”) corresponding to each task, to execute the task after obtaining a program, data and the like based on the stored context, to update the context following the execution of the task, and to write the updated context into memory.

[0008]

Here, for the sake of convenience, the writing of a context stored in an external memory into a register group is referred to as “restoring”, and the writing of a context stored in a register group into an external memory is referred to as “saving”.

[0009]

FIG. 32 is a functional block diagram of a conventional processor 1001 that executes tasks under the control of an OS such as described above, and additionally shows a context memory 1010 that stores contexts.

[0010]

Processor 1001 includes a processing execution unit 1002 that executing tasks, a processing control unit 1003 that performs controls relating to the processing conducted by processing execution unit 1002, and a register group 1004 that stores contexts of the tasks to be executed.

[0011]

Register group 1004 is a collection of registers, each of which is for storing a context (i.e. a register value group) corresponding to a task.

[0012]

Every time a new context is stored in register group 1004, processing execution unit 1002 obtains a program and data based on the new context, and executes a task.

[0013]

Processing control unit 1003 saves a context already stored in register group 1004 by overwriting context memory 1010, judges which context should be targeted for storage in register group 1004, and restores a context by reading a targeted context from context memory 1010 based on the judgment and writing the read context into register group 1004.

[0014]

As a result, it is necessary to interrupt the execution of tasks by processing execution unit 1002 for the duration of the saving, judging and restoring (i.e. updating of contexts) by processing control unit 1003.

[0015]

FIG. 33 shows the execution of tasks in processor 1001, and the input/output of contexts between register group 1004 and context memory 1010.

[0016]

Time flows from left to right in this diagram.

[0017]

Here, the tasks are executed uniformly in the sequence task A, task B, task C and task D, and the processing returns to task A after task D.

[0018]

Conventionally, when tasks are executed, the saving, judging and restoring described above are performed before a task is executed.

[0019]

In other words, the saving, judging and restoring are incurred as an overhead in the execution of tasks.

[0020]

Here, if a single processing cycle is defined as the processing from tasks A to D, the above OS regulates the execution sequence and timing of the tasks (i.e. schedules the tasks) in a single cycle.

[0021]

Processing control unit 1003 determines, based on this schedule, a context to be targeted for storage in register group 1004 (i.e. the above judging).

[0022]

By performing the above processing, it is possible for a plurality of tasks to be processed in a pseudo-parallel manner by a single processor.

[0023]

Furthermore, there also exist processors that use hardware to execute the above saving, judging and restoring, and then process a plurality of tasks in a pseudo-parallel manner.

[0024]

However, when a plurality of tasks are processed in a pseudo-parallel manner by a single processor as described above, efficient execution of the tasks cannot be conducted, because of the overhead incurred to perform the above saving, judging and restoring before a task is executed, and the subsequent time taken between completing one task and commencing the next task, in comparison to when a single task is executed continuously.

[0025]

Particularly in the case of broadcasting devices and the like, such as television receivers and communication devices (e.g. mobile telephones), it is necessary for data processing to be executed under near realtime conditions. However, when a plurality of tasks are processed in a pseudo-parallel manner in devices such as these, it is difficult to realize the above near realtime execution of data processing using conventional task execution methods that incur the above overhead.

SUMMARY OF THE INVENTION

[0026]

In view of the above issue, a first object of the present invention is to provide a processor capable of executing tasks (i.e. programs) efficiently when a plurality of tasks are executed in a pseudo-parallel manner by a single processor.

[0027]

Furthermore, a second object is to provide a program execution method capable of executing tasks efficiently.

[0028]

To achieve the first object, a processor is for sequentially executing a plurality of programs using a plurality of register value groups stored in a memory that correspond one-to-one with the programs, and the processor includes: a plurality of register groups; a select/switch unit operable to select one of the plurality of register groups as an execution target register group on which a program execution is based, and to switch the selection target every time a first predetermined period elapses; a restoring unit operable to restore, every time the switching is performed, one of the register value groups into one of the register groups that is not selected as the execution target register group; a saving unit operable to save, prior to the restoring, register values in the register group targeted for restoring, by overwriting a register value group in the memory that corresponds to the register values; and a program execution unit operable to execute, every time the switching is performed, a program corresponding to a register value group in the execution target register group.

[0029]

According to this structure, a register value group is restored into a register group other than the execution target register group without affecting the current program execution. Then, when a program is to be executed based on this register group, the program can be promptly readied for execution because the overheads associated with restoring, saving, and the like have been eliminated, and thus the program is executed quickly.

[0030]

Furthermore, as a result of the elimination of these overheads, program execution periods are not affected, even when the switching is conducted frequently, and thus this structure is effective in parallel execution by pseudo-realtime processing.

[0031]

Here, the program execution unit may start the executing when the switching is performed.

[0032]

According to this structure, when a program is to be executed, the program is executed promptly, and virtually all overheads are eliminated.

[0033]

Here, processor may further include a first obtaining unit operable to obtain sequence information that shows a sequence of the register value groups corresponding to the programs, and the restoring unit may determine, based on the sequence information, a register value group to be restored, and perform the restoring.

[0034]

According to this structure, an execution sequence of the programs is determined by the sequence information.

[0035]

Here, the first predetermined period may be determined such that, if the restoring is performed on all of the register value groups in the sequence shown in the sequence information, a total time period that the restored register groups are selected as the execution target register group is within a second predetermined period.

[0036]

According to this structure, pseudo-parallel execution of a plurality of processing operations is conducted within a limited time period.

[0037]

In other words, this structure is effective in pseudo-parallel realtime processing and the like in which the processing time is limited.

[0038]

Here, the sequence information may be a table in which identification information unique to each register value group is arrayed in a predetermined order, and the sequence may be shown by the order of the arrayed identification information.

[0039]

According to this structure, a restore sequence of the register value groups is shown by an order of the arrayed identification information, and this restore sequence can be altered by changing an order of the array.

[0040]

Here, the table may include identification information that is identical, the identical identification information may be arrayed so as to be dispersed throughout the array, and the number of pieces of identical identification information in the array may be unique for each program corresponding to a register value group specified by a piece of identification information.

[0041]

According to this structure, an execution timing of each of the programs is equalized.

[0042]

Here, the plurality of programs may include a management program that is for judging whether the table requires changing, and for changing the table when required, and the number of pieces of identification information in the array that specify a location of a register value group corresponding to the management program may be only one.

[0043]

According to this structure, there is an opportunity to change the table whenever pseudo-parallel execution is conducted.

[0044]

Here, the first predetermined period may be unique for each program, each piece of identification information may have appended a piece of time period information that shows the unique time period of a program corresponding to a register value group specified by the piece of identification information, and the management program may perform the changing such that a total of the unique time periods is within the second predetermined period.

[0045]

According to this structure, the unique time periods are updated by a management program, so that pseudo-parallel execution of a plurality of processing operations is conducted within a limited time period.

[0046]

Here, when judged during execution of the management program that the table requires changing, the program execution unit may generate a dummy table showing a state of the table after the changing, and perform the changing by replacing the table with the dummy table.

[0047]

According to this structure, it is possible to change the table without affecting the current program execution.

[0048]

Here, the plurality of programs may include an image processing program for executing image processing, and the number of pieces of identification information in the array that specify a location of a register value group corresponding to the image processing program may be greater than that of the other programs.

[0049]

According to this structure, an image-processing program having a large information volume is allotted a longer processing period in total.

[0050]

Here, the identification information may be address values that show storage locations of the register value groups, and the restoring unit may specify, based on the address values, a location of a register value group for restoring, and perform the restoring.

[0051]

According to this structure, it is possible to show a restore sequence of the register value groups by the relative size of the address values.

[0052]

Here, the sequence information may be a table in which the identification information unique to each register value group has attached pointers that point to other identification information, and the sequence may be shown by following the pointers.

[0053]

According to this structure, a restore sequence of the register value groups is shown by pointers, and this sequence can be altered by changing the targets indicated by the pointers.

[0054]

Here, the processor may further include a first detecting unit operable to detect an occurrence of a suspend-cause that results in the program execution being suspended; and a second detecting unit operable to detect a cancellation of the suspend-cause, and when the occurrence of a suspend-cause relating to a program for execution is detected, the program execution unit may relinquish, until the suspend-cause is cancelled, an execution period to be allotted for execution of the program.

[0055]

According to this structure, meaningless program execution is avoided.

[0056]

Here, there may be a plurality of the suspend-causes, the suspend-cause effective as a trigger of the relinquishing may be unique for each program, and the program execution unit may only perform the relinquishing when an effective suspend-cause of a currently executed program occurs.

[0057]

According to this structure, it is judged for each program whether to perform the relinquishing when a suspend-cause occurs.

[0058]

Here, the processor may further include a second obtaining unit operable to obtain suspend information that corresponds (i) information specifying one of the plurality of suspend-causes with (ii) information showing whether the specified suspend-cause has occurred. Furthermore, the register value groups may each include setting information that corresponds (i) information specifying one of the plurality of suspend-causes with (ii) information showing whether the specified suspend-cause is effective, and the program execution unit may refer comparatively to the suspend information and the setting information, and judge whether to perform the relinquishing.

[0059]

According to this structure, an effective suspend-cause can be specified, even when there is a plurality of suspend-causes.

[0060]

Here, the suspend information may be bit string data in which a unique bit position is determined for each suspend-cause, and in which each bit position has a value that shows whether a suspend-cause corresponding to the bit position has occurred, the setting information may be bit string data in which a unique bit position is determined for each suspend-cause, and in which each bit position has a value that shows whether a suspend-cause corresponding to the bit position is effective, and the program execution unit may only refers to a bit position of a suspend-cause in the suspend information that corresponds to a bit position in the setting information that has a value showing the suspend-cause to be effective.

[0061]

According to this structure, the reference range is limited, and thus an effective suspend-cause can be promptly specified, even when there is a plurality of suspend-causes.

[0062]

Here, the program execution unit may notify the restoring unit at a time of performing the relinquishing, and the restoring unit may perform the restoring while ignoring an order in the sequence of a register value group corresponding to the program that has been targeted for the relinquishing, by not targeting the register value group for restoring until the suspend-cause is cancelled.

[0063]

According to this structure, unnecessary restoring of register value groups is avoided.

[0064]

Here, when notified of the relinquishing, the restoring unit may exceptionally set the ignored register value group as a priority restore target candidate in a second performing of the restoring after the notification. Furthermore, if the suspend-cause is cancelled before the start of the second restoring, the restoring unit may determine the register value group as the restore target, and if the suspend-cause is not cancelled before the start of the second restoring, the restoring unit may continue to ignore the register value group until the suspend-cause is cancelled.

[0065]

According to this structure, it is possible to execute another effective program during a relinquished time period.

[0066]

Here, when a plurality of register value groups are ignored by the restoring unit, and the suspend-cause is cancelled with respect to two or more of the plurality of register value groups, the restoring unit may set, as the restore target when the restoring is next performed, whichever of the two or more register value groups was ignored later.

[0067]

According to this structure, the restoring of an ignored register group at a biased time after the cancellation of a suspend-cause is avoided.

[0068]

Here, the program execution unit may notify the select/switch unit at a time of performing the relinquishing, and the select/switch unit may perform the switching when the notification is received.

[0069]

According to this structure, it is possible for execution of a subsequent program to be promptly started when the relinquishing is conducted.

[0070]

Here, the suspend-cause may be a cache-miss occurring at a time of a program execution.

[0071]

According to this structure, the execution of a subsequent program is promptly started when a cache-miss occurs.

[0072]

Here, the suspend-cause may be a state of waiting for a processing result from an external apparatus that was requested to perform processing at a time of a program execution.

[0073]

According to this structure, the execution of a subsequent program is promptly started when the above state occurs.

[0074]

Here, the suspend-cause may be a state of waiting for a release of a shared resource, when the shared resource is required at a time of a program execution.

[0075]

According to this structure, the execution of a subsequent program is promptly started when the above state occurs.

[0076]

Here, the program execution unit may have a CPU for use in program execution, and stop the CPU during an execution period of the relinquishing.

[0077]

According to this structure, wasted power consumption is avoided.

[0078]

Here, the program execution unit may have a CPU for use in program execution, and reduce the drive frequency of the CPU during an execution period of the relinquishing.

[0079]

According to this structure, wasted power consumption is reduced.

[0080]

Here, the program execution unit may have a CPU for use in program execution, and adjust the drive frequency of the CPU in accordance with a program execution load when the plurality of programs are executed, such that a free processing time period does not occur due to a processing capacity of the CPU being too high with respect to the program execution load.

[0081]

According to this structure, wasted power consumption is reduced.

[0082]

Here, there may be two register groups, and the select/switch unit may perform the switching alternately with respect to the two register groups.

[0083]

According to this structure, pseudo-parallel execution of a plurality of programs is conducted using only two register groups, while at the same time eliminating overheads.

[0084]

In other words, two register groups is sufficient, irrespective of the number of program to be executed in a pseudo-parallel manner.

[0085]

Here, the program execution unit may perform pipeline processing having N number of stages, and the saving unit may perform the saving (N−1) clocks after a clock in which the switching was performed.

[0086]

According to this structure, even when pipeline processing is executed, pseudo-parallel execution of a plurality of programs can be conducted, while at the same time eliminating overheads.

[0087]

Here, the select/switch unit may determine the selection target from the plurality of register groups by a predetermined sequence, and perform the switching. Furthermore, the restoring unit may determine the restore target from the plurality of register groups by a predetermined sequence, and perform the restoring.

[0088]

According to this structure, programs are promptly readily for execution because overheads related to restoring, saving and the like have been eliminated, and thus the execution of programs can be quickly completed.

[0089]

Here, there may exist a plurality of candidate register value groups that are candidates for the restoring, and a unique priority level may be corresponded to each candidate register value group. Furthermore, the restoring unit may determine, based on the priority levels, the restore target from the plurality of candidate register value groups, and perform the restoring.

[0090]

According to this structure, a candidate register value group to be the restore target is determined from a plurality of candidate register value group, based on the priority levels.

[0091]

In other words, the flexibility of the restoring is improved as a result of the restore target not being fixed.

[0092]

Here, each candidate register value group may be included in one of a plurality of restore groups, a unique estimated execution period may be corresponded to each restore group, the restoring unit may determine, for each restore group, a candidate register value group included in the restore group as the restore target, and the select/switch unit may principally set, as a time interval from an mth to an m+1th performing of the switching, an estimated execution period of a restore group that includes a register value group in the execution target register group by the select/switch unit in the mth switching, where m is a natural number.

[0093]

According to this structure, an estimated execution period corresponded to each restore group is set as the interval between the switching performed by the select/switch unit.

[0094]

Here, the processor may further include a first detecting unit operable to detect an occurrence of a suspend-cause that results in the program execution being suspended; and a second detecting unit operable to detect a cancellation of the suspend-cause, and when the occurrence of a suspend-cause relating to a program for execution is detected, the program execution unit may relinquish, until the suspend-cause is cancelled, an execution period to be allotted for execution of the program.

[0095]

According to this structure, it is possible to avoid the program execution unit attempting to execute a program with respect to which a suspend-cause suspending the program execution has occurred.

[0096]

Here, the select/switch unit may perform the switching exceptionally, when the relinquishing is performed by the program execution unit.

[0097]

According to this structure, a program corresponding to restored register value group is immediately executed when the relinquishing is conducted.

[0098]

Here, the program execution unit may notify the select/switch unit at a time of performing the relinquishing, and the select/switch unit may perform the switching exceptionally, based on the notification.

[0099]

According to this structure, the switching is performed exceptionally in the select/switch unit as a result of the notification being received.

[0100]

Here, at a time of determining the restore target from the plurality of candidate register value groups, the restoring unit may remove, as a potential restore target, a candidate register value group corresponding to a program that has been targeted for the relinquishing, until the suspend-cause is cancelled.

[0101]

According to this structure, it is possible to avoid the program execution unit attempting to execute, next time, a program with respect to which a suspend-cause suspending the program execution has occurred.

[0102]

Here, the restoring unit may determine, from the candidate register value groups that have not been removed, a candidate register value group having the highest priority level as the restore target.

[0103]

According to this structure, a program corresponding to a register value group to be restored is limited to programs with respect to which a suspend-cause has not occurred, and since the program has a high priority level corresponded, it can be executed with great efficiency.

[0104]

Here, the processor may further include a third obtaining unit operable to obtain information that designates a priority level in each restore group, and when the obtaining is performed by the third obtaining unit, the restoring unit may determine, as the restore target, a candidate register value group that has not been removed and that corresponds to the designated priority level.

[0105]

According to this structure, a register value group to be the restore target is altered by changing the designated priority levels.

[0106]

Here, the processor may further include a third obtaining unit operable to obtain information that designates a priority level in each restore group, and when the obtaining is performed by the third obtaining unit, the restoring unit may determine, as the restore target, a candidate register value group that has not been removed and that corresponds to a priority level that is higher than or equal to the designated priority level.

[0107]

According to this structure, the opportunity for program execution is improved, because a program with respect to which a suspend-cause has not occurred and that is within a range including a specified priority level, is executed.

[0108]

Here, when a program is, as a result of a kth performing of the switching, to be executed for the first time after the relinquishing has been stopped, the select/switch unit may set, as a time interval from the kth to a k+1th performing of the switching, a time period that was not used in the program execution because of the switching being brought forward at a time of the relinquishing, where k is a natural number.

[0109]

According to this structure, when a time period remains unused, this time period is consumed when the program is next executed.

[0110]

Here, the processor may further include a pre-cache unit operable to write, into an external cache for a duration that the relinquishing is performed, data required for executing a program that corresponds to a register value group stored in a register group to be selected as the execution target register group when the relinquishing is stopped.

[0111]

According to this structure, the occurrence of a cache-miss at a next program execution time is prevented.

[0112]

Here, the processor may further include a garbage collection unit operable to perform garbage collection for a duration that the relinquishing is performed.

[0113]

According to this structure, the occurrence of a memory-release wait at the next program execution time is prevented.

[0114]

Here, the processor may further include a fourth obtaining unit operable to obtain an execution request for a program that is to be executed non-steadily; and a first judging unit operable to judge, when the execution request is obtained by the fourth obtaining unit, whether the program whose execution has been requested is a common-processing program that is executable during the execution of any other program.

[0115]

According to this structure, when an execution request for a common-processing program is received, it is recognized that the program is executable during execution of any of the programs.

[0116]

Here, when judged by the first judging unit that the program whose execution has been requested is a common-processing program, the program execution unit may interrupt a program currently being executed and executes the common-processing program, and when the common-processing program has been executed, the select/switch unit may not include the execution period of the common-processing program in the execution period of the program currently being executed.

[0117]

According to this structure, the execution period of a currently executed program is not affected by the interrupt execution of a common-processing program.

[0118]

Here, the select/switch unit may not include the execution period of the common-processing program in the execution period of the currently executed program, by stopping a time measurement counter for a duration that the common-processing is executed.

[0119]

According to this structure, a time period consumed in the interrupt execution of a common-processing program can easily be removed (i.e. not included) in a consumed amount of the estimated execution period of a currently executed program.

[0120]

Here, the common-processing may be processing that results from a handling of a shared resource, and the select/switch unit may stop the switching for a duration from a start to an end of the common-processing execution.

[0121]

According to this structure, a time period consumed in the interrupt operation of a shared resource can be easily removed (i.e. not included) in a consumed amount of the estimated execution period of a currently executed program.

[0122]

Here, the processor may further include a fourth obtaining unit operable to obtain an execution request for a program that is to be executed non-steadily; and a second judging unit operable to judge, when the execution request is obtained by the fourth obtaining unit, whether the program for non-steady execution is a specific-processing program that is to be executed following the execution of a specific program.

[0123]

According to this structure, when an execution request for a specific-processing program is received, it is recognized that the program is executable during the execution of a specific program.

[0124]

Here, when judged by the second judging unit that the program whose execution is requested is a specific-processing program, the program execution unit may execute the specific-processing program following the execution of the specific program, and when the specific-processing program has been executed, the select/switch unit may include a time period consumed to execute the specific-processing program in the consumed time period of an estimated execution period corresponded to the specific program.

[0125]

According to this structure, an execution period of the specific program is affected by the interrupt execution of a specific-processing program, and shortened as a result.

[0126]

Furthermore, efficient program execution can be conducted, because when an execution request for a specific-processing program is received the program execution unit (i.e. the CPU) does not have to judge whether or not to accept the request.

[0127]

Here, when judged by the second judging unit that the program whose execution is requested is a specific-processing program, the program execution unit may execute the specific-processing program following the execution of the specific program. Furthermore, when the specific-processing program has been executed, the select/switch unit may not include a first consumed time period consumed to execute the specific-processing program in a second consumed time period of an estimated execution period corresponded to the specific program, and when the specific program is next executed, the select/switch unit may include the first consumed time period in a third consumed time period of the estimated execution period corresponded to the specific program.

[0128]

According to this structure, when an execution request for a specific-processing program is received, the execution period of a specific program is not affected by the interrupt execution of the specific-processing program. Then, when the specific program is next executed, the execution period of the specific program is affected by the interrupt execution of the specific-processing program, and shortened as a result.

[0129]

In other words, consecutive interrupt processing operations can be processed promptly without being suspended.

[0130]

Here, the processor may further include a third detecting unit operable to detect an occurrence of an execution request for an event-use program. Furthermore, the plurality restore groups may include a first restore group to which an order is corresponded, and a second restore group to which an order is not corresponded, an event-use register value group that corresponds to the event-use program may be included in the second restore group. Moreover, the restoring unit (i) may normally perform the determining sequentially starting with the first restore group based on the order corresponded to the first restore group, and (ii) may interrupt the order when the occurrence of an execution request for an event-use program is detected by the third detecting unit, and determine the event-use register value group as the restore target.

[0131]

According to this structure, when an execution request for an event-use program occurs, it is possible to execute the event-use program immediately.

[0132]

Here, when the occurrence of an execution request for an event-use program is detected by the third detecting unit, the restoring unit may restore the event-use register value group into one of the register groups that is not selected as the execution target register group, and the select/switch unit may perform the switching exceptionally, when the restoring of the event-use register value group is completed.

[0133]

According to this structure, when an execution request for an event-use program occurs, the event-use program is executed immediately.

[0134]

Here, the processor may further include a first adjustment unit operable to adjust the execution period of a program, so as to recuperate, when the program is next executed, a time period that was relinquished as a result of the switching being performed exceptionally during a previous execution of the program.

[0135]

According to this structure, the execution period of a program is adjusted to recuperate a relinquished time period, and thus the execution period of the program is guaranteed, even when relinquishing is conducted.

[0136]

Here, the processor may further include a second adjustment unit operable, when an execution frequency of the event-use program exceeds a threshold, to delay the determining of the event-use register value group by the restoring unit, and to adjust the execution frequency so as not to exceed the threshold.

[0137]

According to this structure, it is possible to suppress reductions in the execution frequency of a program corresponding to a register value group that belongs to the first restore group.

[0138]

Here, the processor may further include a third judging unit for judging whether the switching of the selection target is currently possible, and when the select/switch unit attempts to perform the switching and the third judging unit judges that switching is not currently possible, the select/switch unit may delay the switching until the third judging unit judges that switching is currently possible.

[0139]

According to this structure, a program can be completed normally.

[0140]

Here, the processor may further include a third adjustment unit operable to subtract, from an estimated execution period that corresponds to a specific restore group, a time period by which the estimated execution period is exceeded as a result of the delaying by the select/switch unit.

[0141]

According to this structure, it is possible to prevent a breakdown in the program execution periods caused by the accumulation of exceeded time periods.

[0142]

In other words, the actual execution period of a program corresponding to register values that belongs to a restore group other than a specific restore group is set to be greater than or equal to an estimated execution period corresponded to the register group, and thus the execution period of the program is guaranteed.

[0143]

Here, a unique order may be corresponded to each restore group, and the restoring unit may sequentially perform the determining based on the order corresponded to the restore group.

[0144]

According to this structure, programs are executed in an order corresponded to each restore group.

[0145]

Here, the processor may further include a changing unit operable to change priority levels corresponded to the candidate register value groups.

[0146]

According to this structure, the program for execution can easily be changed.

[0147]

Here, the processor may further include a first detecting unit operable to detect an occurrence of a suspend-cause that results in the program execution being suspended; a second detecting unit operable to detect a cancellation of the suspend-cause; and a power-consumption reducing unit operable to reduce a power consumption of hardware for executing programs. Furthermore, when the occurrence of a suspend-cause relating to a program for execution is detected, the program execution unit may relinquish, until the suspend-cause is cancelled, an execution period to be allotted for execution of the program, and the power-consumption reducing unit may perform the reducing for a duration that the relinquishing is performed.

[0148]

According to this structure, the reducing by the power-consumption reducing unit is performed during a relinquished time period of an estimate execution period of a currently executed program, in order to achieve power reductions.

[0149]

Furthermore, by doing nothing in a time period leftover as a result of the execution-suspension of a program, it is possible to maintain, as much as possible, uniform execution cycles (i.e. maintain periodicity) of the programs.

[0150]

Here, the program execution unit may have a CPU for executing programs, and the power-consumption reducing unit may perform the reducing for the duration that the relinquishing is performed by blocking a clock signal supplied to the CPU.

[0151]

According to this structure, the power reductions can be easily achieved.

[0152]

Here, the program execution unit may have a CPU for executing programs, and the power-consumption reducing unit may perform the reducing for the duration that the relinquishing is performed by reducing a voltage applied to the CPU or setting the voltage to zero.

[0153]

According to this structure, the power reductions can be easily achieved.

[0154]

Here, the processor may further include a receiving unit for receiving an execution request for a program that is to be executed non-steadily, and the power-consumption reducing unit may stop the reducing if the reducing is being performed when the execution request is received.

[0155]

According to this structure, an execution request relating to a program other than a program for urgent execution is not accepted, and thus it is possible to omit the program execution-required judgment processing by the program execution unit (i.e. the CPU), and to conduct program execution efficiently.

[0156]

Here, the execution request may be an interrupt-processing request.

[0157]

According to this structure, it is possible to stop the reducing by the power-consumption reducing unit when an interrupt-processing request occurs.

[0158]

Here, the execution request may be an event-processing request for urgently executing a program following the exceptional switching by the select/switch unit.

[0159]

According to this structure, it is possible to stop the reduction by the power-consumption reducing unit when an event-processing request occurs.

[0160]

Here, the restoring unit may copy the register value groups stored in the memory, and perform the restoring. Furthermore, following the program execution, the program execution unit may change one or more register value restored into the execution target register group, and the saving unit may only perform the saving when the changing has been performed by the program execution unit.

[0161]

According to this structure, only changed register values are saved, and thus a time period required for the saving is shortened.

[0162]

Here, each register of the plurality of register groups may have attached a piece of change information showing whether a register value restored into the register has been changed, and the saving unit may perform the saving by writing, based on the change information, only a changed register value into a location, in the memory, in which the register value prior to being changed is stored.

[0163]

According to this structure, the existence of a change is easily recognized and only changed register values are saved, and thus a time period required for the saving can be shortened.

[0164]

Here, each piece of change information may be a 1-bit flag.

[0165]

According to this structure, changes are shown by the flags.

[0166]

Here, the first predetermined period may be a fixed time period.

[0167]

According to this structure, the switching is facilitated.

[0168]

Here, the first predetermined period may be unique for each of the plurality of programs.

[0169]

According to this structure, it is possible to allot a program execution period suitable for the execution of each program.

[0170]

Here, the processor may further include a plurality of caches for storing execution data that is required in the program execution; a specifying unit operable to refer, following the restoring by the restoring unit, to a register value group that was restored, and to specify the execution data of a program that corresponds to the register value group; and a writing unit operable to write the specified execution data into one of the caches that is not being used in the program execution.

[0171]

According to this structure, the occurrence of a cache-miss is avoided.

[0172]

To achieve the second object, a program execution method is for executing a program in a processor, the processor including a plurality of register groups and sequentially executing a plurality of programs using a plurality of register value groups stored in a memory that correspond one-to-one with the programs, and the program execution method including: a select/switch step of selecting one of the plurality of register groups as an execution target register group on which a program execution is based, and switching the selection target every time a first predetermined period elapses; a restoring step of restoring, every time the switching is performed, one of the register value groups into one of the register groups that is not selected as the execution target register group; a saving step of saving, prior to the restoring, register values in the register group targeted for restoring, by overwriting a register value group in the memory that corresponds to the register values; and a program execution step of executing, every time the switching is performed, a program corresponding to a register value group in the execution target register group.

[0173]

According to this structure, a register value group is restored into a register group other than the execution target register group, without affecting the current program execution. Then, when a program is to be executed based on this register group, the program can be promptly readied for execution because the overheads associated with restoring, saving, and the like have been eliminated, and thus the program is executed quickly.

[0174]

Furthermore, as a result of the elimination of these overheads, the program execution periods are not affected, even when the switching is conducted frequently, and thus this structure is effective in parallel execution by pseudo-realtime processing.

[0175]

Furthermore, the processor may be for sequentially executing a plurality of programs using a plurality of register value groups that correspond one-to-one with the programs, and the processor may include a plurality of register groups for storing the register value groups; a select/switch unit operable to select one of the plurality of register groups as an execution target register group on which a program execution is based, and to switch the selection target every time a predetermined period elapses; and a program execution unit operable to execute, every time the switching is performed, a program corresponding to a register value group in the execution target register group.

[0176]

Furthermore, the program execution method may be for executing a program in a processor, the processor may include a plurality of register groups and sequentially execute a plurality of programs using a plurality of register value groups that correspond one-to-one with the programs, and the program execution method may include: a select/switch step of selecting one of the plurality of register groups as an execution target register group on which a program execution is based, and switching the selection target every time a predetermined period elapses; and a program execution step of executing, every time the switching is performed, a program corresponding to a register value group in the execution target register group.

[0177]

According to these structures, it is possible to execute programs quickly without affecting the execution period of each of the programs, and thus because a plurality of programs are executed rapidly while at the same time being frequently switched every time a predetermined period elapses, this structure is effective in realizing parallel execution by pseudo-realtime processing.

BRIEF DESCRIPTION OF THE DRAWINGS

[0178]

These and other objects, advantages and features of the invention will become apparent from the following description thereof taken in conjunction with the accompanying drawings that illustrate specific embodiments of the present invention.

[0179]

In the drawings:

[0180]

FIG. 1 is a functional block diagram of a virtual multiprocessor 100 according to a first embodiment;

[0181]

FIG. 2 shows a data structure of contexts and a table stored in a context memory;

[0182]

FIG. 3 depicts flags in a completion notification flag group and a setting flag group;

[0183]

FIG. 4 shows a relationship between tasks and plates;

[0184]

FIG. 5 is a flowchart that shows processing performed in the virtual multiprocessor;

[0185]

FIG. 6 is a flowchart that shows flag judgment processing;

[0186]

FIG. 7 depicts, in time series, the processing performed in the virtual multiprocessor;

[0187]

FIG. 8 shows a data structure of a table that uses a pointer to show an execution sequence;

[0188]

FIG. 9 shows, in time series, a plate execution status when the flag judgment processing is performed with priority given to a context of a sleeping plate;

[0189]

FIG. 10 shows, in time series, a plate execution status when the flag judgment processing is performed with priority given to a context of a plate that was put to sleep latest;

[0190]

FIG. 11 shows a data structure of an execution sequence table in which an initial value of a count value is attached to a context address;

[0191]

FIG. 12 is a functional block diagram of a cycle counter;

[0192]

FIG. 13 shows an example of four-stage pipeline processing;

[0193]

FIG. 14 shows a plate execution flow when the execution sequence of a sleeping plate is set at the head of the sequence for priority execution within the next period of plate execution immediately after being put to sleep;

[0194]

FIG. 15 is a functional block diagram of a virtual multiprocessor according to a second embodiment;

FIG. 23A shows a normal program execution state when a program execution period is not relinquished;

[0204]

FIG. 23B shows a program execution state when a program execution period is relinquished and time-option information shows “LP_SWITCH”;

[0205]

FIG. 23C shows a program execution state when a program execution period is relinquished and the time-option information of an LP1 shows “TS_SWITCH”;

[0206]

FIG. 23D shows a program execution state when a program execution period is relinquished and the time-option information of LP1 shows “MICRO-SLEEP”;

[0207]

FIG. 24A depicts a status of a program execution based on idle-option information in a time-driven timeslot when there is no effective candidate program;

[0208]

FIG. 24B shows a program execution state when there is no effective candidate program and the idle-option information of LP1 shows “SWITCH”;

[0209]

FIG. 24C shows a program execution state in a TS1 when there is no effective candidate program and the idle-option information of LP1 shows “MICRO-SLEEP”;

[0210]

FIG. 25A shows a program execution status when there is a sleeping timeslot;

[0211]

FIG. 25B shows a program execution status when a wait-state of a program allotted to a sleeping timeslot is cancelled, and a wakeup timing of the program shows “n”;

[0212]

FIG. 26A shows an execution status of a program when a sleeping timeslot is provided;

[0213]

FIG. 26B shows an execution status of a program when a wait-state of a program allotted to a sleeping timeslot is cancelled, and a wakeup timing of the program shows “e”;

[0214]

FIG. 27A shows a program execution state when an event-processing request is not generated;

[0215]

FIG. 27B shows an execution status of a program when an event-processing request is generated, and a wakeup timing of a program for executing the event processing shows “n”;

[0216]

FIG. 27C shows an execution status of a program when an event-processing request is generated, and a wakeup timing of a program for executing the event processing shows “e”;

[0217]

FIG. 28A shows a program execution state when a common interrupt-processing request is not generated;

[0218]

FIG. 28B shows a program execution state when a common interrupt-processing request is generated;

[0219]

FIG. 29A shows program execution state when a unique interrupt-processing request is not generated;

[0220]

FIG. 29B shows an execution state of unique interrupt processing when a program other than the program for executing the unique interrupt processing is being executed at the time that a unique interrupt-processing request is generated;

[0221]

FIG. 29C shows an execution state of unique interrupt processing when a program for executing the unique interrupt processing is being executed at the time that a unique interrupt-processing request is generated;

[0222]

FIG. 30A shows program execution state when a unique interrupt-processing request is not generated;

[0223]

FIG. 30B shows an execution state, in a kth cycle, of unique interrupt processing by a method other than that of the first and second embodiments when a unique interrupt-processing request is generated in the kth cycle;

[0224]

FIG. 30C shows an execution state, in a k+1th cycle, of unique interrupt processing by a method other than that of the first and second embodiments when a unique interrupt-processing request is generated in the kth cycle;

[0225]

FIG. 31A shows a structure of functional units for reducing power consumption according to the second embodiment;

[0226]

FIG. 31B shows a further exemplary structure of functional units for reducing power consumption by a method other than that of the second embodiment;

[0227]

FIG. 31C shows a further exemplary structure of functional units for reducing power consumption by a method other than that of the second embodiment;

[0228]

FIG. 31D shows a further exemplary structure of functional units for reducing power consumption by a method other than that of the second embodiment;

[0229]

FIG. 32 is a functional block diagram of a conventional processor;

[0230]

FIG. 33 shows the execution of tasks in the conventional processor, and the input/output of contexts between a register group and a context memory; and

[0231]

FIG. 34 shows the connection between an external processor 30 and virtual multiprocessor 100 according to the first embodiment.

A detailed description of a first embodiment according to the present embodiment will now be given with reference to the drawings.

[0233]

FIG. 1 is a functional block diagram of a virtual multiprocessor 100 according to the first embodiment of the present invention.

[0234]

Virtual multiprocessor 100 is a processor that executes a sequential switching of plates.

[0235]

Here, a plate is a unit that collects together one or more tasks, being either conventional tasks or scheduling units of an OS, and is what the processor targets for execution.

[0236]

Each plate has a single execution position (i.e. a single command position within a program).

[0237]

FIG. 1 also shows a context memory 200 storing addresses and other control information (i.e. contexts) that shows, for each plate, a value of a program counter indicating an execution position of a program corresponding the plate, and a storage location of the program and data.

[0238]

Here, the execution of a program corresponding to a plate is referred to as “executing a plate”.

[0239]

Context memory 200 is constituted by a SRAM, and includes a context storage area 201 storing the contexts of a plurality of plates, and an execution-sequence-table storage area 202 storing an execution sequence table 300 that shows an execution sequence of the plates.

[0240]

Execution sequence table 300 is a table that determines an execution schedule of the plates, and is generated by a management application program (hereafter, “management application”) included in one of the plates. Table 300 is an array of values relating to a plurality of memory addresses (hereafter, “context addresses”) in context storage area 201, and in each respective location shown by these context address values are the contexts necessary for executing the plates.

[0241]

Here, addresses in execution-sequence-table storage area 202 that show the physical storage location of each context address value are referred to as a “table addresses”.

[0242]

The above table addresses are shown by numeric values, and the relative size of these numeric values corresponds to the sequence in the above array of context addresses stored in the locations specified by the table addresses.

[0243]

In other words, in a single scheduling cycle, the plates are executed in ascending order of the table address values, and thus a plate corresponding to a context address specified by the value of a context address stored in a physical location shown by the smallest table address value will be executed first.

[0244]

Thus, in the case that the execution sequence of the plates is shown as A→B→C→A→D→C in execution sequence table 300, the execution of each of the plates will be completed within a single cycle, and the cycle will be repeated a plurality of times.

[0245]

Here, the processing time period of each of the plates is the same, and plates, such as plate A above, that require more processing time may be executed more than once in a single cycle.

[0246]

FIG. 34 shows the connection between an external processor 30 and virtual multiprocessor 100 according to the first embodiment.

[0247]

Apart from the functional units described above, there are other functional units relating to virtual multiprocessor 100 that are not depicted.

[0248]

Specifically, there exists a main memory 10, formed from SRAM, that stores programs, data and the like, and a cache memory (not depicted), also formed from SRAM, that is connected between main memory 10 and virtual multiprocessor 100, and that stores the above programs, data and the like. The main memory and cache memory are connected to virtual multiprocessor 100 via a bus 700.

[0249]

Virtual multiprocessor 100 executes a plurality of plates in a pseudo-parallel manner, and sometimes requests external processor 30 to process one of the plurality of plates. External processor 30 is connected to virtual multiprocessor 100 via bus 700 in the same manner described above.

[0250]

In other words, as shown in FIG. 34, main memory 10 is connected to external processor 30 by bus 700, and virtual multiprocessor 100 is connected to external processor 30 via main memory 10.

Furthermore, external processor 30 reads input data for processing from main memory 10, and writes data that results from processing into main memory 10.

[0253]

An external-processing-request signal line 701 and an external-processing-completion signal line 702 are provided independently of bus 700, and are connected to virtual multiprocessor 100 and external processor 30.

[0254]

More specifically, external-processing-request signal line 701 is a signal route for sending a processing request signal from virtual multiprocessor 100 to external processor 30, and external-processing-completion signal line 702 is a signal route for sending a processing completion signal from external processor 30 to virtual multiprocessor 100.

[0255]

The transmission of these signals respectively allows for processing requests to be made from virtual multiprocessor 100 to external processor 30, and for notifications of processing completion to be made from external processor 30 to virtual multiprocessor 100.

[0256]

Furthermore, virtual multiprocessor 100 has SIMD (single instruction multiple data) architecture, and includes a processing execution unit 110, a processing control unit 111, a register switching unit 112, a switching control unit 113, a first register group 114, a second register group 115, a cycle counter 116, an external I/F (interface) 117, a DMA (direct memory access) management unit 118, a completion notification register 119, a control register 120, and a setting flag register 121.

[0257]

First register group 114 and second register group 115 each consist of a collection of registers for storing, respectively, program counter values and register values (e.g. addresses showing program and data storage locations) that form a content of the contexts.

[0258]

Each register has a 1-bit storage area for storing an update flag that shows whether a value of a program counter or the like stored in the register has been updated.

[0259]

The update flag shows a 1-value when a value has been updated and a 0-value when a value has not been updated.

[0260]

In a default state, the update flag in each of the registers in register groups 114 and 115 has a 0-value.

[0261]

In accordance with an instruction from switching control unit 113, register switching unit 112 selects one of register groups 114 and 115 as a register group to be used when a program is executed (hereafter, “current register group”).

[0262]

Here, the register group that is not selected as the current register group is referred to as a “standby register group”, and the switching of the selection target from the currently selected register group to the other register group is referred to as “register switching”.

[0263]

When register switching is conducted (i.e. when a current register group is selected), processing execution unit 110 specifies, based on a context stored in the current register group, the location of a program to be executed and data required to execute the program, and instructs DMA management unit 118 to obtain the program and data.

[0264]

Here, the given example is premised on the program and data being obtained from cache memory. When the targeted data exists in cache memory (hereafter, a “cache hit”), or when a program or data is obtained exceptionally from an external storage apparatus (described below), processing execution unit 110 obtains the program and data, and uses the program and data to execute a plate in accordance with an instruction from processing control unit 111.

[0265]

There are occasions, however, when processing execution unit 110 instructs DMA management unit 118 to exceptionally obtain a program or data from an external storage apparatus (not depicted).

[0266]

This external storage apparatus can be accessed (e.g. read/written) by another input/output apparatus (not depicted) or the like, and in the case that the external storage apparatus is accessed by a plurality of apparatuses, the time required for accessing is different to when access is conducted by a single apparatus (the access time for a plurality of apparatuses being longer).

[0267]

On the other hand, when the targeted data does not exist in cache memory (hereafter, a “cache miss”), or when judged that accessing the external storage apparatus will take time, processing execution unit 110 notifies processing control unit 111 of the cache miss, and performs the following processing in accordance with an instruction from processing control unit 111.

[0268]

Following the execution of a plate, processing execution unit 110 updates values stored in a register that require updating (i.e. program counter and the like), and sets the update flag in the register having an updated value to a 1-value.

[0269]

Furthermore, when a wait-cause (described below) occurs during execution of a plate, processing execution unit 110 outputs to switching control unit 113 via processing control unit 111, a notification showing that the plate has been put to “sleep” (described below), and changes a setting flag (described below) in setting flag register 121 that corresponds to a category of the wait-cause to a 1-value.

Furthermore, when a processing result is received from external processor 30, processing execution unit 110 outputs, to switching control unit 113 via processing control unit 111, a notification showing that processing was requested of external processor 30 and that the plate has been put to sleep.

[0272]

At this time, switching control unit 113 outputs a processing request signal (described below) to external I/F 117.

[0273]

FIG. 1 shows a state of virtual multiprocessor 100 and context memory 200 at an arbitrary point in time, and thus the fact that “(plate B)” appears alongside processing execution unit 110 in FIG. 1 shows that, at the arbitrary point in time, a context corresponding to plate B is stored in first register group 114, and that first register group 114 is selected as the current register group.

[0274]

The input/output of data within virtual multiprocessor 100, and the input/output of data between external processor 30 and context memory 200, main memory 10 and the cache memory is performed by a DMA transfer, and DMA management unit 118 controls the DMA transfer.

[0275]

Furthermore, when DMA management unit 118 performs a DMA transfer based on a request from one of the functional units, and the DMA transfer is completed, DMA management unit 118 outputs a signal (hereafter, “transfer-complete signal”) showing that the DMA transfer has been completed to switching control unit 113, attempts to obtain a program and data from cache memory, and if a cache miss occurs, DMA management unit 118 outputs a signal (hereafter, “cache-miss signal”) showing that the cache miss has occurred to switching control unit 113.

[0276]

Furthermore, DMA management unit 118 attempts to obtain a program or data from an external storage apparatus (not depicted), and it is judged that access will take time (a large latency), unit 118 outputs a signal (hereafter, “memory-access delay signal”) to switching control unit 113 showing that memory latency is large.

[0277]

External I/F 117 is an interface connected to an external apparatus such as external processor 30, and notifies switching control unit 113 of a signal received from an external source, an example of which includes a signal showing that processing allocated to external processor 30 has been completed.

In other words, as described above, when notified by switching control unit 113 of a processing request signal, external I/F 117 outputs the processing request signal to external processor 30.

[0280]

Processing control unit 111 controls processing execution unit 110 to execute plates continuously from a start to an end of the plate execution.

[0281]

Cycle counter 116 includes a clock counter, and registers, as an initial value via switching control unit 113 and processing control unit 111, a value (i.e. count value) determined by the execution in processing execution unit 110 of a plate in which a management application is included.

[0282]

Furthermore, cycle counter 116 conducts a countdown by decrementing a value of “1” per clock starting from the initial value, and when the count value reaches “0”, cycle counter 116 outputs a signal (hereafter, “zero-count signal”) showing that the count value has reached zero, and repeats the processing to commence the countdown after again setting the initial value.

[0283]

Here, the initial count value is a value common to each of the plates.

[0284]

Control register 120 is a register for storing information that specifies a plate currently being executed and a plate to be executed next.

[0285]

Specifically, control register 120 stores a value of a table address (hereafter, “current address”) of a physical location in which a value of a context address corresponding to a plate currently being executed is stored, and a value of a table address (hereafter, “next address”) of a physical location in which a value of a context address corresponding to a plate to be executed next is stored. Control register 120 also stores a value of the smallest table address (hereafter, “table head address”) in execution-sequence table storage area 202, and a value of the largest table address (hereafter, “table end address”) in area 202.

[0286]

It is to be noted that the prior art discloses for the use of software, triggered by the occurrence of a wait or a so-called interrupt resulting from a shared resource required to execute a task being used by another apparatus, to (i) suspend the task currently being executed and remove of the task from the execution sequence, (ii) vacate the execution period allotted to the task to another task, and (iii) reschedule the execution sequence and execute the task when the cause that triggered the task suspension is cancelled.

[0287]

According to the present invention, when a prescribed cause (hereafter, “wait-cause”) triggers the suspension of a plate execution, register switching is performed (i.e. plates are switched), “sleep” processing is executed to removed the switched plate from the execution sequence, and when the wait-cause is cancelled, “wakeup” processing is performed to attempt the execution of the plate.

[0288]

In order to specify a wait-cause for triggering the wake-up processing when the above sleep and wakeup processing is performed, it is necessary to know, for each plate, the wait-cause that causes the sleep processing.

[0289]

Furthermore, when an interrupt request or the like arrives from an external source, it is necessary to know before receiving such a request, whether the request should be processed.

[0290]

For this purpose, a context in each plate has an area for storing setting flags that show, for example, the category of the wait-cause that triggered the sleep processing, and whether to process an interrupt request.

[0291]

As such, the wait-cause has a plurality of categories, and there is a setting flag for each category, or in other words, a setting flag group.

[0292]

This setting flag group is included in each context stored in context storage area 201.

[0293]

Setting flag register 121 is a register for storing the respective setting flag groups included in two plates.

[0294]

When the wait-cause occurs as a result, for example, from a request to suspend a currently executed plate, or a request to suspend the plate execution arriving from an external source, a setting flag (i.e. from among the plurality of setting flags included in a context corresponding to the currently executed plate) that corresponds to the category of the wait-cause is changed by processing execution unit 110 from 0-value to a 1-value.

[0295]

Among the requests to suspend the plate execution is a so-called interrupt request, although it is not always necessary to suspend a currently executed plate when an interrupt occurs, and thus it is determined for each plate, whether to process the interrupt.

[0296]

To realize this, in a plate that accepts interrupts, a 1-value (i.e. showing “interrupt enabled”) is stored in a setting flag that is for showing whether to process an interrupt request from a program designer.

[0297]

Completion notification register 119 is a register for storing flags (hereafter, “completion notification flags”) that respectively show, for example, whether the wait-cause is currently cancelled, and whether an interrupt request has occurred.

[0298]

These completion notification flags are equal in number to the number of setting flags included in a single context, and correspond one-to-one with the setting flags existing per category of the wait-cause.

[0299]

In other words, a bit string length of a completion notification flag group composed of the completion notification flags is the same as a bit string length of a setting flag group composed of the setting flags. Moreover, bits positioned an equal distance from a head of each bit string store values that relate to the same wait-cause.

[0300]

When a zero-count signal is received from cycle counter 116, or when a notification showing that a plate has been put to sleep is received from processing execution unit 110, or when a cache-miss signal is received from DMA management unit 118, or when a memory-access delay signal is received, switching control unit 113 performs flag judgment processing (described below) in order to judges whether to leave the current value in the next address as is, or whether to set the value of another table address as a new next address value, and while reviewing the next address value, unit 113 stores the next address value stored in control register 120 as a new current address value, stores the next largest table address value (i.e. next largest after the current value of the next address) as a new next address value, and instructs register switching unit 112 to perform the above register switching.

[0301]

Furthermore, switching control unit 113 refers to the update flags of each register in the register group that is the current standby register group as a result of the register switching having been performed, instructs DMA management unit 118 to executed saving by overwriting a register value stored in a register whose update flag has a 1-value into a storage area in context storage area 201 that corresponds to this register value (i.e. the place from which the register value, prior to being changed, was read when stored in the register group), and performs flag judgment processing (described below).

[0302]

Furthermore, following the saving, switching control unit 113 reads the setting flag of the saved context from setting flag register 121, and saves the value of the setting flag by overwriting a storage area in context storage area 201 that corresponds to this setting flag (i.e. the place from which the setting flag was read when stored in the setting flag register 121).

[0303]

When the saving and flag judgment processing is completed, switching control unit 113 stores a context of a plate specified by a next address value in control register 120 (i.e. unit 113 performs restoring).

[0304]

At this time, switching control unit 113 clears the setting flag of each register to a 0-value.

[0305]

Switching control unit 113 performs the saving, flag judgment processing and restoring in parallel with the execution of plates by processing execution unit 110 using a context stored in the current register group.

[0306]

The time span of the register switching is determined by a management application or the like, so that the time period required to perform the saving, flag judgment processing and restoring is shorter than the plate execution period.

[0307]

The details of the flag judgment processing in switching control unit 113 will now be described.

[0308]

Switching control unit 113 determines the position of a bit storing a 1-value (hereafter, an “effective bit”) in the bit string of a setting flag group included in a context that exists in context storage area 201 and that is specified by the next address value in control register 120.

[0309]

Here, the processing to determine the position of the effective bit is referred to as effective bit position retrieval processing.

[0310]

When no effective bit is retrieved from the bit string of setting flag group, switching control unit 113 leaves the value of the next address unchanged, and terminates the flag judgment processing.

[0311]

When there is at least one effective bit in the bit string of setting flag group, switching control unit 113 refers to only a position corresponding to the position of the one or more effective bits in the bit string of completion notification flag group in completion notification register 119, and if a 1-value is stored in all of the positions corresponding to the position of the one or more effective bits, switching control unit 113 leaves the value of the next address unchanged, and terminates the flag judgment processing.

[0312]

Here, “a position corresponding to the position of an effective bit” refers to a position (hereafter, “effective bit corresponding position”) distanced from the head of the bit string of the completion notification flag group by the same number of bits as the effective bit is distanced from the head of the bit string of the setting flag group.

[0313]

On the other hand, when a 0-value is stored in any of the effective bits corresponding positions in the completion notification flag group, switching control unit 113 provisionally sets, as the new next address value, the next largest table address value after the value of the next address presently shown in execution-sequence-table storage area 202.

[0314]

Then, after performing effective bit position retrieval processing with respect to the setting flag included in the context specified by a value of the provisional next address, switching control unit 113 repeatedly performs, until the flag judgment processing is completed, processing to review the next address in accordance with a value of an effective bit corresponding position in the completion notification flag group.

[0315]

Here, when the value of the present next address is the value of the table end address, the next largest table address value after the next address value is the value of the table head address.

2. Data

[0316]

The following description relates to data used in virtual multiprocessor 100.

Execution sequence table 300 shows a plurality of context address values of contexts stored in context storage area 201, and determines the physical storage location of these context address values (i.e. the execution sequence of plates whose table address is specified by a context address).

[0319]

In other words, the smaller the table address value allotted to the place in which a context address is stored, the higher up will be the execution sequence of the plate corresponding to the context address.

[0320]

Although sometimes the execution sequence of the plates is skipped as a result of the flag judgment processing, basically the plates are executed according the physical storage location of corresponding context address values (i.e. the sequence shown by the array), and after the plate specified by the count address (i.e. when the table end address is the count address) has been executed, the plate specified by setting the table head address as the count address is executed.

[0321]

In other words, the physical storage locations of a context addresses (i.e. the table addresses) shows one cycle of a plate execution sequence.

[0322]

In FIG. 2, the table addresses have values from 2000 to 2005, and in this case, the value of the table head address is 2000, and the value of the table end address is 2005.

[0323]

The smaller the value of the table address in which a context address of a plate is stored, the higher up is the execution sequence of the plate.

[0324]

FIG. 3 depicts the flags in the completion notification flag group and the setting flag group.

[0325]

The completion notification flag group has a forced-waiting flag, a queue-opening flag, an interrupt flag, a wait-instruction flag, an external-processing completion flag, a transfer-completion flag, and the like.

[0326]

The forced-waiting flag is a flag constantly storing a 0-value.

[0327]

The queue-opening flag is a flag that shows whether a notification showing there to be no opening in a queue has arrived from an external device for managing the queue, when, for example, an attempt is made to queue a command or the like in a queue having few openings in terms of capacity. This flag has a 0-value when there is not space in the queue, and a 1-value when there is space in the queue.

[0328]

The interrupt flag is a flag showing whether an interrupt request has arrived from an external device. This flag has a default value of “1” when an interrupt request has not arrived, and is set to a 0-value by switching control unit 113 when an interrupt request arrives.

[0329]

The wait-instruction flag is a flag that shows whether an instruction has been received from application software and the like to delay the plate execution. This flag has a default value of “1” when the above instruction has not arrived, and is set to a 0-value by switching control unit 113 when the above instruction arrives.

[0330]

The external-processing completion flag is a flag that shows whether a notification has arrived showing that requested processing has been completed (i.e. shows, for instance, the completion of a DMA transfer that was the cause for a cache-miss signal or a memory-access delay signal to occur, or the completion of a DMA transfer requested by a program), when processing is requested of external processor 30 at a time of the plate execution. This flag has a default value of “0” when a notification has not arrived, and is set to a 1-value by switching control unit 113 when a notification arrives showing the completion of the requested processing.

[0331]

The transfer-completion flag is a flag that shows whether a notification has arrived showing a DMA transfer to be completed. This flag has a default value of “0” when a notification has not arrived, and is set to a 1-value by switching control unit 113 when a notification arrives showing the completion of a DMA transfer.

[0332]

Here, with respect to each of the above flags, when a new plate is executed using a flag as a trigger, the value of the flag is reset to the above default value by switching control unit 113 after the plate is executed.

[0333]

The flags structuring the setting flag group correspond to the flags in the completion notification flag group, and show whether to ignore a corresponding flag.

[0334]

When a setting flag structuring the setting flag group included in a context has a 0-value, a plate is executed based on the context, and the value of the corresponding completion notification flag is not affected.

[0335]

Furthermore, when a setting flag has a 1-value, it is judged by switching control unit 113 whether to set, as an execution target, a plate corresponding to a context that includes the setting flag.

[0336]

Here, for example, a setting flag will store a 1-value if the wait-cause occurred when a plate corresponding to a context that includes this setting flag was previously executed, and this resulted the execution of the plate being suspended and the plate being reverted to a sleep state until the wait-cause is cancelled.

[0337]

Specifically, when corresponding completion notification and setting flags both have a 1-value, a plate corresponding to a context that includes the setting flag is targeted for execution, and when corresponding completion notification and setting flags have a 0-value and 1-value, respectively, the plate corresponding to the context is not targeted for execution (i.e. the plate is removed from the execution sequence).

[0338]

In other words, when corresponding completion notification and setting flags both have a 1-value, the plate corresponding to the context that includes the setting flag is “woken up” by switching control unit 113, and when corresponding completion notification and setting flags have a 0-value and 1-value, respectively, the plate reverts to a sleep state.

[0339]

Furthermore, when the setting flag has a 0-value, the a wait-cause category corresponding to the place in which the 0-value is stored is ignored by switching control unit 113, and a completion notification flag corresponding to this wait-cause is not referred to.

[0340]

FIG. 4 shows a relationship between tasks and plates.

[0341]

On the software side there exist a plurality of tasks, and tasks for processing realtime are placed under the direct management of a management application and are not managed via the OS.

[0342]

Here, a management application for updating the content of execution sequence table 300 is included in each task for processing realtime, and if, for example, new processing is to be executed when it comes time to execute the task (i.e. plate), the content of execution sequence table 300 is updated by processing execution unit 110.

[0343]

In this way, every time a cycle of plates is executed, there is at least one opportunity to review the scheduling of the tasks.

[0344]

Specifically, every time a plate corresponding to a management application is executed, the management application judges whether one of the above condition has occurred, and if judged that a condition has occurred, the management generates a dummy table (i.e. an execution sequence table having new content) in execution-sequence-table storage area 202, and updates the execution sequence table forming the basis of plate execution by switching from the current execution sequence table 300 to the dummy table.

[0345]

On the other hand, tasks that do not require realtime processing are firstly placed under the management of the OS, and then placed under the management of a management application.

[0346]

A plate, on the hardware side, is a single execution unit in processing execution unit 110, and may be a single task or a collection of a plurality of tasks, and the assigning of the plates is freely determinable by programming.

3. Operation

[0347]

The following description relates to processing that realizes efficient plate execution in virtual multiprocessor 100 when plates are executed in a pseudo-parallel manner by a single processor.

[0348]

FIG. 5 is a flowchart that shows processing performed in virtual multiprocessor 100.

[0349]

Switching control unit 113 refers to execution sequence table 300 in context memory 200, and registers the table head address, the current address, the next address and the table end address in control register 120 (step S500).

[0350]

Unit 113 clears all the values in first register group 114 and second register group 115 (step S501).

[0351]

Unit 113 selects a current register group and a standby register group from out of first and second register groups 114 and 115 (step S502).

[0352]

Unit 113 then stores a context specified by the current address in the current register group (step S503).

[0353]

Next, unit 113 gives a plate execution instruction to processing execution unit 110 via processing control unit 111, and as a result, processing execution unit 110 commences the plate execution based on the context stored in the current register group (step S504).

[0354]

When the plate execution is started, cycle counter 116 starts a countdown from an initial value that is set as a result of the plate execution (step S505).

[0355]

Switching control unit 113 receives a signal input from external I/F 117 and DMA management unit 118, and updates the value of the completion notification flag in completion notification register 119 according to the inputted signal (step S506).

[0356]

Unit 113 then performs the flag judgment processing in order to set the value of the next address in control register 120 (step S507).

[0357]

Next, unit 113 saves only the context in the registers structuring the standby register group, whose setting flag has a 1-value (step S508), and clears all the values stored in the standby register group (step S509).

[0358]

Furthermore, unit 113 stores, in the standby register group, a context specified by the next address in control register 120 (step S510).

[0359]

Unit 113 then reregisters the next address in control register 120 as the current address, and reregisters the address following the next address as the new next address (step S511).

[0360]

Unit 113 judges whether a zero-count signal has been inputted from cycle counter 116 (i.e. whether the termination of the plate execution has been instructed), whether there has been a notification from processing execution unit 110 showing that a plate being executed has been put to sleep, or whether this notification shows that the plate was put to sleep after processing was requested of external processor 30 (step 512), and if there has been a signal input or a notification, unit 113 has processing execution unit 110 terminate the plate execution, and if the plate was put to sleep after processing was requested of external processor 30, unit 113 has switching control unit 113 notify a processing request signal to external I/F 117, and has external I/F 117 output the processing request signal to external processor 30 (step S513), has register switching unit 112 perform the register switching (step S514), and returns to step S504 to repeat the processing.

[0361]

On the other hand, if there has not been a signal input or a notification, unit 113 continues the current plate execution and returns to step S512 to judge whether a there has been a notification showing the completion or the sleep-state of the plate.

[0362]

FIG. 6 is a flowchart that shows the flag judgment processing.

[0363]

Switching control unit 113 performs effective bit position search processing to determine the position of an effective bit storing a 1-value, from out of the bit string of the setting flag included in a context that exists in context storage area 201 and is specified by the next address in control register 120 (step S600).

[0364]

Unit 113 then judges whether not even one effective bit exists (step S601), and if not even one effective bit exists, unit 113 leaves the value of the next address in control register 120 unchanged, and terminates the flag judgment processing.

[0365]

On the other hand, if one or more effective bits exist, unit 113 refers to only the position of the one or more effective bits in the bit string of the completion notification flag group in completion notification register 119 (step S602), and judges whether a 1-value is stored in all of the one or more effective bits (step S603).

[0366]

If the one or more effective bits in the completion notification flag group all store a 1-value, unit 113 leaves the value of the next address unchanged, and terminates the flag judgment processing.

[0367]

On the other hand, if a 0-value is stored in any of the one or more effective bits in the completion notification flag group, unit 113 provisionally sets, as the new next address, an address subsequent to the next address at the present point in time shown in execution-sequence-table storage area 202 (step S604), and returns to step S600 to repeat the processing.

[0368]

By performing the above processing, virtual multiprocessor 100 is able to execute plates without having to interject the time required for the saving, judging and restoring of contexts between the completion of one plate and commencement of the next plate.

[0369]

FIG. 7 shows the above state in time series.

[0370]

The saving, judging and restoring of contexts is performed in parallel with the execution of plates.

[0371]

As such, the interjecting of the time required for the saving, judging and restoring of contexts between the completion of one plate and commencement of the next plate is avoided.

[0372]

As described above, according to the present embodiment, it is possible to efficiently execute tasks, even when a plurality of plates is executed in a pseudo-parallel manner by a single virtual multiprocessor 100, this being because the time required for the saving, judging and restoring of contexts is not interjected into the plate execution period, due to the saving, judging and restoring of contexts being performed in parallel with the execution of plates.

[0373]

Here, in the present embodiment, execution sequence table 300 shows the execution sequence of the plates, and general execution sequence of the plates is determined by the physical storage locations (i.e. array) of context address values in execution sequence table 300. However, other methods are possible. For example, a context address value and a table address value may be stored as a pair in execution sequence table 300, and the execution sequence of the plates may be determined by the table address showing the physical storage location of the context address value corresponding to the next execution sequence (i.e. by using the table address value as a pointer).

[0374]

In this case, the execution sequence is not affected by the physical storage location of a stored context address values, and, moreover, the execution sequence can be easily altered by changing the pointers.

[0375]

FIG. 8 shows a data structure in a table that shows an execution sequence when the above pointer is used. In order to show the correspondence with the storage location of the contexts, FIG. 8 also shows a data structure in context storage area 201.

[0376]

This execution sequence table stores, as a pair, a context address and a table address as a pointer showing the next execution sequence.

[0377]

Furthermore, in the present embodiment, a plate that has been put to sleep is woken up when the execution sequence of the plate as stipulated in execution sequence table 300 comes around, by switching control unit 113 performing the flag judgment processing based on the execution sequence shown by execution sequence table 300. However, when the flag judgment processing is performed, unit 113 may referring with priority to the setting flag group in the context of the sleeping plate, and if the conditions for wakeup are satisfied, the sleeping plate may be executed without waiting for the execution sequence of the plate.

[0378]

FIG. 9 shows, in time series, a plate execution status in the above case.

[0379]

At time t0, a request is made to external processor 30 to process a plate A, and plate A is put to sleep until a processing result is received from external processor 30.

External processor 30 operates to fetch a command from main memory 10, reads input data for processing from main memory 10, performs the requested processing, and writes data resulting from the processing into main memory 10.

[0383]

Next, external processor 30 outputs a processing completion signal, and notifies virtual multiprocessor 100 that the processing has been completed.

[0384]

When notified of the completion of the processing, virtual multiprocessor 100 again executes the plate that was sleeping by performing flag judgment processing and the like as described above, and reads data resulting from the processing performed by external processor 30 from main memory 10.

[0385]

By executing a plate in this way, virtual multiprocessor 100 requests processing of an external processor, and puts the plate to sleep unit a processing result is received from the external processor.

[0386]

The operations will now be described in detail.

[0387]

Firstly, at time to, the value of the external-processing completion flag in the setting flag group is changed to “1”.

[0388]

From t2 to t4, the flag judgment processing is performed with priority given to plate A, although because the external-processing completion flag has a 0-value, plate A is not woken up.

[0389]

At t5 (i.e. during the execution of plate D), the external-processing completion flag reverts to a 1-value, and thus plate A is woken up.

[0390]

Following the wakeup, switching control unit 113 stores a context of the woken-up plate in the standby register group.

Processing execution unit 110 then executes plate A based on a context, stored in the current register, that corresponds to plate A.

[0393]

Here, subsequent executions of plate A are conducted when the regular execution sequence of plate A comes around.

[0394]

Furthermore, although one sleeping plate is shown in FIG. 9, a plurality of sleeping plates is conceivable, and in this case, the flag judgment processing may be performed with priority given to a context of the plate put to sleep earliest, or alternatively, the flag judgment processing may be performed with priority given to a context of the plate put to sleep latest.

[0395]

FIG. 10 shows, in time series, an example of the flag judgment processing being performed with priority given to a context of a plate that was put to sleep latest.

[0396]

Plate D is put to sleep after plate B, and in the fifth judgment shown in FIG. 10, it is judged whether plate B and plate D are in an executable state, and priority is given to the waking up of plate D (i.e. plate that has been sleeping for the shortest period at this point in time), after which plate B is woken up.

[0397]

The reason for this is because the execution sequence of a plate put to sleep first is closer than that of a plate put to sleep later, and so if the plate put to sleep first is woken up and executed, the execution sequence of that plate will soon come around again, and thus the interval between executions of the plate at this point in time will be extremely short, and there is a possibility that the execution periods of the plates will not be uniform.

[0398]

Furthermore, in the above flag judgment processing described using FIGS. 9 and 10, the above priority can be removed if the sleep period of a plate exceeds a determined period.

[0399]

Furthermore, in the present embodiment, the completion notification flag group and the setting flag group each have a forced-waiting flag, a queue-opening flag, an interrupt flag, a wait-instruction flag, an external-processing completion flag, a transfer-completion flag, and the like, although other flag may be provided.

[0400]

For example, when two or more plates are sleeping, it is unclear which plates the various completion notification flags correspond to.

[0401]

In this case, a flag to which a number identifying a plate is corresponded may be provided in the completion notification flag group and the setting flag group. In other words, when a sleep-state occurs, processing execution unit 110 may be made to generate a unique number that specifies the plate currently being executed, and this number may be registered in the flag provided in the setting flag group, as well as being notified to the external device that triggered the sleep-state.

[0402]

When the wait-cause is cancelled, the above number may, for example, be notified by the external device (e.g. external processor) together with an external processor processing management signal or the like, and in addition to the external-processing completion flag being changed to a 1-value, the flag showing the number may also be changed to a 1-value, thus making it possible to judge which plate the external-processing completion flag corresponds to.

[0403]

Furthermore, in the present embodiment, an example is given in which the execution period allotted to a plate currently being executed is relinquished and vacated to another plate when the wait-cause occurs. However, instead of vacating the execution period of the plate to another plate, power consumption may be suppressed by reducing the drive frequency of the processor for the period of the relinquishing.

[0404]

In this case, the total time period allotted for the execution of plates does not change, and so when, for example, the drive frequency of the processor (i.e. the clock frequency) is reduced by half, cycle counter 116 makes two decrements per clock cycle, rather than one decrement per clock cycle.

[0405]

The time required for the saving, the flag judgment processing and the restoring is described in the present embodiment in terms of the time span of the register switching being determined by a management application or the like to be shorter than the execution period of the plates, although this is actually a constraint that determines the lower value of the time span.

[0406]

On the other hand, although the constraint determining the upper value of this time span is not specifically described in the present embodiment, this time span defines the limits within which the plates can be executed, and thus when the actual execution period of each plate is performed in an extremely short period with respect to these limits, wasted time will occur in which processing is not conducted. To avoid this wasted time, a management application may determine the upper value of this time span so that the actual execution period of the plates is approximately the same as this time span, and also so that this time span is greater than or equal to the actual execution period of each plate.

[0407]

It should be noted that in the case of realtime processing such as communication processing and the like, the frequency with which data for processing by plate execution arrives is basically predetermined.

[0408]

In other words, the processing load of plates in a single cycle is predetermined, and even when one cycle of plates is executed using a time span having an upper and lower value determined as described above, this means nothing if data for processing in the next cycle has not arrived.

[0409]

In view of this, when a surplus of processing time arises due to the processing capacity of processing execution unit 110 being greater than the processing load of plates for processing in a single cycle, the drive frequency (i.e. the processing capacity) of the processor in processing execution unit 110 may be reduced to a level that prevents a surplus from arising, and thus the actual processing time of each plate is increased.

[0410]

In this case, when the plates are executed, the wasted time in which processing is not conducted in reduced, and power consumption is also minimized as a result of the reduction in the drive frequency of the processor.

[0411]

Furthermore, data required for executing a plate to be executed after the plate currently being executed (i.e. the plate corresponding to a context stored in the standby register group) may be stored in a cache in advance.

[0412]

In this case, it is necessary to provide a functional unit that refers in advance to the context stored in the standby register group, obtains the data required to execute the next plate, and stores the data in a cache.

[0413]

Furthermore, in order to virtually enlarge the capacity of the main memory beyond its physical capacity, a virtual memory functional unit may be provided in the present embodiment for managing a correspondence (mapping) between logical addresses specified by programs, and physical addresses accessed physically by a processor.

[0414]

This virtual memory function is prior art.

[0415]

In this case, the caches may include an address-conversion-table cache for storing an address-conversion table that shows the correspondence (mapping) between logical addresses and physical addresses, and in the address-conversion-table cache may be stored an address-conversion table for converting a logical address showing data required by a plate for executing next into a physical address.

[0416]

In this case, a functional unit is required for referring to a plate to be executed subsequent to the currently executed plate (i.e. a context stored in the standby register group) prior to execution of the plate, detecting data required to execute the plate, detecting a value in an address-conversion table for converting the logical address of the data into a physical address, and storing the value in an address-conversion-table cache.

[0417]

Furthermore, although the initial value of the count value in cycle counter 116 is described above as being a value shared by the plates, this initial value may be different for each of the plates.

[0418]

In other words, this initial value may show a time period allowed for execution of a plate, and may allot a unique plate execution period in accordance with the content of the plate processing.

[0419]

In this case, as shown in FIG. 11, initial values of the count value are stored so as to correspond to context addresses within execution-sequence-table storage area 202.

[0420]

Also, switching control unit 113 stores the initial values of the count value so as to correspond respectively to the current address and the next address in control register 120.

[0421]

Furthermore, as a result of this, cycle counter 116 executes a countdown based on the respective initial values while at the same time eliminating the overhead, and it is thus preferable to provide two cycle counters 116.

[0422]

Furthermore, cycle counter 116 may also have the functional unit structure shown in FIG. 12.

[0423]

In FIG. 12, cycle counter 116 has an input/output unit 301, a first memory 302, a second memory 303, and a countdown unit 304.

[0424]

Input/output unit 301 outputs a zero-count signal to switching control unit 113 when a signal is received from countdown unit 304.

[0425]

First and second memories 302 and 303 are FIFO memories.

[0426]

Countdown unit 304 reads an initial value alternately from first and second memories 302 and 303, and performs a countdown based on the read initial value.

[0427]

According to this structure, a unique plate execution period can be allotted in accordance with the content of the plate processing.

[0428]

Furthermore, processing execution unit 110 may execute the plates by pipeline processing that has N number of stages.

[0429]

FIG. 13 shows an example of four-stage pipeline processing.

[0430]

In this case, even when the execution of processing related to plate A is completed at stage 1, plate A is still being executed at stages 2 to 4.

[0431]

In other words, in this situation, because the register value of the current register group is required, the register value of plate A cannot be saved.

[0432]

The execution of plate A is completed at stage 4, after three clocks have elapsed since the completion of the execution of processing related to plate A at stage 1, and this the register value of plate A can now be saved.

[0433]

Consequently, when a plate is executed by N-stage pipeline processing, for example, it will not be possible to save the register value (i.e. the context) until (N−1) clocks have elapsed, even when the execution of the plate at stage 1 has been completed.

[0434]

Furthermore, according to the present embodiment, once a plate is asleep the only chance to wakeup the plate is at the next execution sequence of the plate shown in execution sequence table 300. However, even when a wait-cause occurs and a plate is put to sleep, it sometimes happens that the wait-cause is cancelled immediately. In view of this, the execution sequence of the sleeping plate may be set at the head of the sequence and executed with priority for the period of a single plate execution immediately after the plate is put to sleep.

[0435]

FIG. 14 depicts a plate execution status when plate execution is conducted in the above case.

[0436]

In FIG. 14, since the wait-cause that resulted in the sleep-state is cancelled immediately following plate C being put to sleep, the execution sequence of plate C is moved to the head of the sequence during the execution of plate D, and thus plate C is executed after plate D has been executed.

[0437]

In this case, however, when the cancellation timing of the wait-cause occurs just before the execution completion of plate D, a margin must be allowed for the time required to perform the restoring of plate A (i.e. originally scheduled to be executed after plate D), since there is only one standby register group in the present embodiment.

[0438]

As a result, the time period (hereafter, “priority period”) during which priority is given to the execution sequence of the sleeping plate is, in the case of FIG. 14, shorter than the execution period of plate D.

[0439]

In order to eliminate this inconvenience, at least three register groups may be provided, and by setting one of these as the current register group, and the remaining two as standby register groups, and by storing a context of plate C and a context of plate A in FIG. 14 in the two register groups at the same time, the above priority period is lengthened until just before the execution completion of plate D.

[0440]

Furthermore, although the description in the first embodiment is based on the premise that the number of plates is greater than the number of register groups, the present invention is not limited to this structure, and thus the number of plates may be less than or equal to the number of register groups.

[0441]

In this case, a context storage area need not be provided in the context memory, and restoring and saving steps are not required.

[0442]

More specifically, steps S508 (saving) and S509 (clearing of standby register group) in FIG. 5 are not required, and the processing in steps S510 and S514 is altered.

[0443]

In other words, in the first embodiment, step S510 (storing in standby register group) involves processing to store a context specified by the next address in control register 120 determined by the flag judging processing in step S507. However, when a context storage area is not provided, step S510 may be changed to involve processing to have switching control unit 113 select and store, as a subsequent current register group, a register group already corresponded to a context specified by the next address judged in step S507.

[0444]

Then, in step S514, register switching unit 112 may perform register switching, such that the register group selected as the subsequent register group becomes the current register group.

[0445]

In this case, switching control unit 113 functions to detect which register group is corresponded to the context specified by the next address, and to store the detected register group, and register switching unit 112 functions to switch the current register group for the register group stored by switching control unit 113.

[0446]

Here, when there are two plates and two register groups, plate A is corresponded to a first register group, and plate B is corresponded to a second register group.

[0447]

For example, when plate A is to be executed, switching control unit 113 selects the first register group as the current register group, without performing operations to restore a register value group from the context memory.

[0448]

Furthermore, even when there are three plates and three register groups (i.e. plates A, B, and C, with plate C being corresponded to a third register group), the register group selected as the current register group is the execution target register group, and the other register groups are standby register groups.

[0449]

When plate C is to be executed, the third register group is selected as the current register group.

[0450]

Even after the selection target has been switched, it is not necessary to perform operations to save a register value group to the context memory.

[0451]

Even in the above structure in which a context storage area is not provided, a plurality of programs are executed rapidly while at the same time being frequently switched every time a predetermined period elapses, and thus this structure is effective in realizing parallel execution by pseudo-realtime processing.

[0452]

Furthermore, in the first embodiment, context memory 200 is constituted by SRAM, but may be DRAM. Moreover, context memory 200 is not limited to these types of memory, and may be a register that allows for quick access, an external storage apparatus that allows for quick access, or the like.

[0453]

Furthermore, although in the first embodiment a management application is included in a single plate, a management application may be included in a plurality of plates.

Second Embodiment1. Structure

[0454]

A second embodiment will now be described in detail while referring to the drawings.

[0455]

FIG. 15 is a functional block diagram of a virtual multiprocessor 400 according to the second embodiment.

[0456]

Similar to virtual multiprocessor 100 in the first embodiment, virtual multiprocessor 400 is a processor that executes a plurality of programs in a pseudo-parallel manner.

[0457]

Virtual multiprocessor 400 executes a plurality of programs in a pseudo-parallel manner by sequentially executing a program allotted to each of a plurality of timeslots.

[0458]

Here, a “timeslot” (or simply “TS”) is the smallest program execution timeframe in the case of programs being executed using time-sharing.

[0459]

In virtual multiprocessor 100 of the first embodiment, the plates (i.e. the program execution sequence) are stipulated directly. However, the virtual multiprocessor 400 of the second embodiment differs from the first embodiment, in that the timeslot sequence is firstly stipulated, and then candidates of the programs to be executed in each timeslot are provided.

[0460]

More specifically, either a single program or four programs are corresponded to each timeslot, the corresponded program being an allotment candidate of the timeslot, and normally one of these programs is targeted for allotment.

[0461]

In principal, the programs allotted to each timeslot are executed sequentially based on the stipulated timeslot sequence.

[0462]

Furthermore, the processing content in virtual multiprocessor 400 when a program targeted for allotment is in an unexecutable state differs from that of virtual multiprocessor 100 in the first embodiment.

[0463]

Here, for the sake of convenience, a program targeted for execution as seen from the processor side is referred to as a “logical processor” (hereafter, “LP”).

[0464]

FIG. 15 also shows a context memory 500 in which information (i.e. contexts), such as program counter values showing program execution positions, and addresses showing storage locations of programs and data, is stored.

[0465]

Context memory 500 is structured from SRAM, and has a context storage area 501 in which contexts corresponding to the programs are stored.

[0466]

Context storage area 501 is in a predetermined storage area within context memory 500, and stores context values corresponding to the programs.

[0467]

Furthermore, FIG. 15 shows an oscillator 600 for generating a reference signal, and a PLL (phase-locked loop) 601 for generating a clock pulse that is supplied to virtual multiprocessor 400 based on the reference signal.

[0468]

Furthermore, in addition to these functional units, the following functional units (not depicted) relate to virtual multiprocessor 400.

[0469]

That is, a main memory formed from DRAM and storing programs, data and the like, and a cache memory formed from DRAM and for storing the above programs, data and the like, are connected to virtual multiprocessor 400 via a bus.

[0470]

Virtual multiprocessor 400 has a time-allocation-information storage register 402, a processing execution unit 410, a processing control unit 411, a register switching unit 412, a scheduling control unit 413, a first register group 414, a second register group 415, a cycle counter 416, an external I/F 417, a DMA management unit 418, a request detection unit 419, a control register 420, a setting flag register 421, a LP-state storage register 424, a processor-state storage unit 425, and a clock mask unit 427.

More specifically, this information is formed from (i) timeslot information stipulating, for example, the program execution timeframe and execution sequence of timeslots, (ii) LP information for specifying a program candidate for executing in each timeslot, (iii) priority level & mode information for restricting the range of the program candidates, (iv) idle-option information for determining a processing content when the candidate of an executable program does not exist in a timeslot, and (v) time-option information for determining a processing content when a currently executed program is suspended.

[0473]

These five kinds of information exist for each timeslot, and are related to each other in timeslot units.

[0474]

First and second register groups 414 and 415 are each a collection of registers for storing register values (i.e. context content), such as program counter values, and addresses showing the storage locations of programs and data.

[0475]

Register switching unit 412 selects, as a register group (i.e. current register group) to be used when a program is executed, one of the first and second register groups 414 and 415 in accordance with an instruction from scheduling control unit 413.

[0476]

Similar to the first embodiment, the switching of selection targets by register switching unit 412 is referred to as “register switching”, and the register group that is not selected as the current register group is referred to as a “standby register group”.

[0477]

It should be noted that there are times when the register switching is referred to as “context switching”.

[0478]

Processing execution unit 410 includes a CPU for executing programs. When register switching is performed (i.e. when the current register group is selected), processing execution unit 410 specifies the location of a program for execution and data required to execute the program, and instructs DMA management unit 418 to obtain the program and the data required to execute the program.

[0479]

Also, when a situation occurs during execution of the program whereby processing cannot be continued, processing execution unit 410 outputs a wait-code showing the suspension of the program execution to processing control unit 411.

[0480]

Here, the above CPU drives in synchronization with a clock pulse outputted from PLL 601 via clock mask unit 427, and terminates the program execution when the clock pulse stops.

[0481]

LP-state storage register 424 is a register for storing program-state information showing attributes and states of the programs, and timeslot setting information in which the setting content of the timeslots is shown.

[0482]

More specifically, the timeslot setting information is formed from an ID (hereafter, “TS_ID”) for specifying a timeslot, and a code showing an attribute of the timeslot.

[0483]

Here, as timeslot attribute codes, “TD” is shown in the case of a time-driven timeslot provided for use in executing a program that is principally for steady execution, and “ED” is shown in the case of an event-driven timeslot provided for non-steady program execution, such as a program only executed when an event occurs.

[0484]

In other words, although a time-driven timeslot can become an execution target even when an event has not occurred, an event-driven time slot cannot be an execution target if an event had not occurred. In the above program-state information is shown a ID value identifying a program, a code identifying a program-state, a code showing a program attribute and a code showing a timing (hereafter, “wakeup timing”) for waking up or repeating the program.

[0485]

There are six codes identifying a program state: “waiting”, “ready”, “running”, “suspended-waiting”, “suspended-ready”, and “non-existent”.

[0486]

Of these, “ready” and “running” are states in which a program is currently executable, and in particular, “running” shows the current execution of a program.

[0487]

Furthermore, “waiting” and “suspended-waiting” show states in which a program is a target range of the scheduling.

[0488]

“Non-existent” shows a state in which it is not required to execute a program. In other words, a program in the states of “waiting”, “suspended-waiting” and “non-existent” is outside the target range for program execution scheduling.

[0489]

Furthermore, when these codes shift to “suspended-waiting” as a result of a state occurring during program execution in which the program cannot be executed, the TD_ID value of a timeslot allotted at the point in time when this state occurred, is attached to these codes.

[0490]

Here, these codes each shift to “suspended-ready” when the program becomes executable, although the above TD_ID value remains attached until the program execution is commenced.

[0491]

As program attribute codes, “TD” is shown in the case of a program that is principally for steady execution, and “ED” is shown in the case of a program that is only executed when an event occurs.

[0492]

As codes showing the wakeup timing, “n” is shown in the case of a program executed after storing a context following the release of a register group that is the standby register group when an execution request for the program occurs (i.e. a program having few processing time constraints), and “e” is shown in the case of a program that requires immediate execution, to the extent that a context already stored in the standby register group is switched.

[0493]

Control register 420 is a register for storing information specifying a timeslot that is the present execution target, and a timeslot that is to become the next execution target.

[0494]

More specifically, control register 420 stores a current address value showing the location in which timeslot information corresponding to a timeslot that is the current execution target is stored, and a next address value showing the location in which timeslot information corresponding to a timeslot that is to become the next execution target is stored.

[0495]

In virtual multiprocessor 400, 16 timeslots are configured, and as a result, there exist 16 pieces of timeslot information.

[0496]

Of the 16 timeslots, only 4 timeslots are normally used in program execution.

[0497]

Here, the timeslot information is stored in time-allocation-information storage register 402 such that address values of the timeslot information corresponding to these 4 timeslots take consecutive values.

[0498]

Control register 420 also stores a head address value, being the smallest of the consecutive address values, and an end address value, being the largest of the consecutive address values.

[0499]

Each piece of timeslot information includes a TS_ID value (a single value from 0 to 15) for specifying a corresponding timeslot.

[0500]

The smaller the TD_ID value, the smaller the address value of the location in which the piece of timeslot information is stored in time-allocation-information storage register 402.

[0501]

A TD_ID value from 0 to 3 is corresponded to the four timeslots that are normally used in program execution.

[0502]

In other words, timeslot information in which a 0-value TD_ID is shown is stored in the head address, and timeslot information in which a 3-value TD_ID is shown is stored in the head address.

[0503]

The four timeslots are ranked from high to low priority. The timeslot specified by timeslot information (TD_ID=0) stored in the head address has the highest priority level, and as the address values increase toward the end address, the priority level of the timeslots specified by timeslot information stored in these addresses decreases.

[0504]

These timeslot priority levels show the degree to which realtime processing is required, and in particular, realtime processing is not assured in the timeslot specified by timeslot information (TD_ID=3) stored the end address.

[0505]

Processor-state storage unit 425 is a register storing information related to the state of a currently executed program.

[0506]

This information is formed from (i) the value of a switching-prohibited flag showing whether switching by register switching unit 412 is prohibited, and (ii) the value of a common-interrupt flag showing whether common interrupt processing (described below) is currently being executed.

[0507]

In the case of the switching being prohibited or a common interrupt occurring, the respective flags have a 1-value, and otherwise the respective flags have a 0-value.

More specifically, this setting information is a collection of flags provided per program (hereafter, “setting flag group”), and the content shown by the value of each flag in the setting flag group is classified, for example, into unique interrupt-processing requests (i.e. requests that a corresponding program is able to process) and event-processing requests.

[0510]

Request detection unit 419 has a collection of flags that are provided per program (hereafter, “unique flag group”), and a collection of flags that are provided commonly for all of the programs (hereafter, “common flag group”).

[0511]

The flags in the unique flag group correspond one-to-one to the flags in the setting flag group stored in setting flag register 421, the bit string length of bit data structuring the unique flag group is equal to the bit string length of bit data structuring the setting flag group, and bits positioned an equal distance from a head of the respective bits strings relate to the same item.

[0512]

Here, information relating to items shown by the flags (i.e. related information such as an ID specifying a program corresponding to an item) is attached to some of some of these flags.

[0513]

Request detection unit 419 updates unique flag values and common flag values based on a bit data array and values for an external signal received from external I/F 417.

Unit 419 decodes the external signal content based on the result of a comparison of flag values in the unique flag group with flag values in an updated common flag group and setting flag group values within setting flag register 421.

[0516]

For the sake of convenience, this processing is referred to as “external signal decode processing”.

[0517]

The content of the external signal can be broadly divided into interrupt-processing requests and event-processing requests.

[0518]

The interrupt-processing requests can further be divided into unique interrupt-processing requests and common interrupt-processing requests.

[0519]

Here, a unique interrupt-processing request is a request to execute processing executable only in specific programs, and only these specific programs require the execution of unique interrupt processing.

[0520]

Furthermore, a common interrupt-processing request is a request to execute processing executable in all of the programs, and these specific programs together require the execution of common interrupt processing.

[0521]

The common flag group shows a content of a common interrupt-processing request.

[0522]

Here, the interrupt processing is executed after jumping to a subroutine program of an executable program.

[0523]

An event-processing request is a request to execute a program that is presently in an unexecutable state or a program that does not currently require processing, and arises when an event reverts to an executable state or an event reverts to requiring execution.

[0524]

More specifically, by executing the external signal decode processing, request detection unit 419 judges whether a received external signal is one of a unique interrupt-processing request, a common interrupt-processing request, and an event-processing request.

[0525]

If judged to be a unique interrupt-processing request, request detection unit 419 obtains, from the above related information, an ID (hereafter, “Unique P_ID”) specifying a program to become the interrupt target of the unique interrupt processing, and an ID (hereafter, “Unique SP_ID”) specifying a subroutine program for executing the unique interrupt processing.

[0526]

Furthermore, if judged to be a common interrupt-processing request, request detection unit 419 obtains, from the related information corresponding to the external signal, an ID (hereafter, “Common SP_ID”) specifying a subroutine program for executing the common interrupt processing.

[0527]

Furthermore, if judged to be an event-processing request, request detection unit 419 obtains, from the related information corresponding to the external signal, an ID (hereafter, “Event P_ID”) specifying a program to which the execution request relates from the external signal.

When notified by scheduling control unit 413 of the completion of processing corresponding to an unique interrupt-processing request, a common interrupt-processing request, or an event-processing request, unit 419 changes the flag value of the item corresponding to the completed processing to the default value.

[0530]

Furthermore, when the received external signal is judged to be an event-processing request, request detection unit 419 refers to LP-state storage register 424 prior to the above outputting of the Event P_ID to scheduling control unit 413.

[0531]

At this time, if the program attribute specified by this Event P_ID shows “ED” (event-driven program for non-steady execution), request detection unit 419 determines that this P_ID is for outputting to scheduling control unit 413, so long as a P_ID showing a program whose program attribute is “ED” has not been outputted to scheduling control unit 413 during a time period from when a cycle head signal (described below) was most recently received to the present time.

[0532]

In the case not being able to output a P_ID as a result of performing the above processing, request detection unit 419 stores the P_ID and when a cycle head signal is next received, unit 419 outputs the P_ID to scheduling control unit 413.

[0533]

Scheduling control unit 413 functions to perform, within the program execution timeframe of a single timeslot, program execution scheduling, processing for restoring a context into the standby register group (hereafter, “restore processing”), processing for register switching (hereafter, “register-switch processing”), and processing for saving a context from the standby register group to context memory 500 (hereafter, “save processing”).

1-1 Scheduling

[0534]

First, the above scheduling will be described.

[0535]

There are three kinds of scheduling: (i) time-driven scheduling, which is scheduling related to the execution of steady processing; (ii) event-driven scheduling, which is scheduling related to the execution of a program not currently targeted for scheduling; and (iii) relinquish scheduling, which is scheduling executed when the program execution period is relinquished during the program execution.

The following description relates to the target-timeslot retrieval processing.

[0538]

Scheduling control unit 413 (i) refers to the value of a targeted address (hereafter, “target address”), which is one of the current address value, the next address value, the head address value, and the end address value stored in control register 420, (ii) refers to a TS_ID value in the timeslot information stored in the target address within time-allocation-information storage register 402, (iii) specifies the timeslot (hereafter, “target TS”), and (iv) obtains the program execution timeframe (i.e. basic cycle value) allotted to this timeslot.

1-1-2 Target-TS-Allotment-Program Retrieval Processing

[0539]

The following description relates to the target-TS-allotment-program retrieval processing.

[0540]

Scheduling control unit 413 refers to LP information corresponded to the target TS, specifies the four programs shown by this LP information, and detects the priority levels (from 0 to 3) corresponded to each of these programs.

Scheduling control unit 413 refers to priority level & mode information corresponded to the target TS, and detects whether one of values 0 to 3 is shown as the priority level, and whether one of Index mode and Level mode is shown as the mode.

[0543]

Index mode and Level modes are setting information defining the method of allotting programs to timeslots. In the case of Index mode being shown in the priority level & mode information, scheduling control unit 413 attempts to allot a timeslot to only a single specific program, and in the case of Level mode being shown in the priority level & mode information, scheduling control unit 413 attempts to allot a timeslot to only a program having a priority level above a specified priority level.

1-1-4 Idle-Option-Information Retrieval Processing

[0544]

The following description relates to idle-option-information retrieval processing.

[0545]

As the idle-option-information retrieval processing, scheduling control unit 413 refers to idle-option information corresponded to the target TS, and judges whether “SWITCH” or “MICRO-SLEEP” is shown.

1-1-5 Time-Option-Information Retrieval Processing

[0546]

The following description relates to time-option-information retrieval processing.

[0547]

As the time-option-information retrieval processing, scheduling control unit 413 refers to time-option information corresponded to the target TS, and judges whether “LP_SWITCH”, “TS_SWITCH” or “MICRO-SLEEP” is shown.

1-2 Time-Driven Scheduling

[0548]

The following description relates to time-driven scheduling.

[0549]

Time-driven scheduling is scheduling related to normal program execution.

[0550]

In the case of event-driven scheduling and relinquish scheduling (both described below) not being executed, scheduling control unit 413 executes time-driven scheduling, and performs restore processing, register-switch processing and save processing based on the time-driven scheduling.

[0551]

As the time-driven scheduling, scheduling control unit 413 performs the following scheduling.

1-2-1 Scheduling

[0552]

The following description relates to the scheduling.

[0553]

Scheduling unit 413 performs the above target-timeslot retrieval processing with the next address as the target address, and after specifying the target TS (hereafter, “next TS”), unit 413 performs the above target-TS-allotment-program retrieval processing in order to specify the four programs corresponded to this next TS, and also detects the priority level corresponded to each of these programs.

[0554]

Next, scheduling control unit 413 executes the above priority level & mode information retrieval processing in order to retrieve the content (i.e. priority level and mode) of the priority level & mode information corresponded to the next TS.

[0555]

If the retrieved mode is the Level mode, scheduling control unit 413 sets, as the candidate of the program (hereafter, “candidate program”) allotted to the target TS, all of the programs to which values less than and equal to the retrieved priority level value are corresponded.

[0556]

If the retrieved mode is the Index mode, scheduling control unit 413 sets, as the candidate program, a single program to which the priority level value retrieved by the priority level & mode information retrieval processing is corresponded.

[0557]

Furthermore, scheduling control unit 413 refers to the program-state information corresponding to each candidate program in LP-state storage register 424, and detects whether each of the candidates are executable.

[0558]

More specifically, when the program-state information of a candidate program shows “ready”, scheduling control unit 413 judges whether the program is executable, and makes the program effective as an allotment candidate of the next TS.

[0559]

A candidate program made effective in this way is referred to as an “effective candidate program”.

[0560]

When a plurality of effective candidate programs exist for a single next TS, scheduling control unit 413 sets, as the allotment target of the next TS, the effective candidate program to which the smallest of the priority level values is corresponded.

[0561]

Furthermore, when a single effective candidate program exists for a single next TS, scheduling control unit 413 sets this effective candidate program as the allotment target of the next TS.

[0562]

Following the setting of an effective candidate program as the allotment target of the next TS, scheduling control unit 413 corresponds an ID specifying the effective candidate program to the timeslot information of the next TS.

[0563]

Furthermore, when the execution of the effective candidate program is completed, scheduling control unit 413 deletes the ID specifying the executed effective candidate program from the above timeslot information.

[0564]

Furthermore, when no effective candidate program exists for a next TS, scheduling control unit 413 determines the content of the subsequent processing based on the content of information obtained by performing idle-option-information retrieval processing.

[0565]

More specifically, when the content of the idle option information shows “MICRO-SLEEP”, scheduling control unit 413 does not set any program as the allotment target of the next TS.

[0566]

Here, a timeslot to which no program is allotted is referred to as an “empty timeslot”.

[0567]

Furthermore, when the content of the above information shows “SWITCH”, scheduling control unit 413 sets a value obtained by adding a “1” to the next address value (note: this value=head address value if next address is end address) as the new next address, and repeatedly performs the above scheduling.

[0568]

After performing the above time-driven scheduling, scheduling control unit 413 performs the restore processing, register-switch processing and the save processing.

1-3 Event-Driven Scheduling

[0569]

The following description relates to event-driven scheduling.

[0570]

Event-driven scheduling is scheduling performed instead of the time-driven scheduling when requests occur to execute programs (described below) that are outside the scope of the present scheduling.

[0571]

Programs to which such execution requests relate include programs having an ED attribute that change from a “waiting” state to a “ready” state, and programs having a TD or an ED attribute that change from a “suspended-waiting” or “running” state to a “suspended-ready” state.

[0572]

Here, immediately prior to the time-driven scheduling being performed, scheduling control unit 413 judges whether an execution request for one of the above programs has occurred.

[0573]

When an event P_ID is received from request detection unit 419, scheduling control unit 413 specifies a program from the received event P_ID, refers to LP-state storage register 424, obtains an attribute and wakeup timing of the program, and performs the following processing in accordance with the obtained content.

1-3-1 Recovery-Event Processing

[0574]

When the specified program is in a “waiting” state, has a “TD” attribute and a wakeup timing of “n”, scheduling control unit 413 transfers the state of the current program specified by the P_ID in LP-state storage register 424 to “ready”.

[0575]

After performing the above recovery-event processing, scheduling control unit 413 performs the restore processing, the switch processing and the save processing (i.e. same as performed after the time-driven scheduling).

1-3-2 Urgent Recovery-Event Processing

[0576]

When the specified program is in a “suspended-waiting” state, has a “TD” attribute and a wakeup timing of “e”, scheduling control unit 413 transfers the state of the specified program to “suspended-ready”.

[0577]

Then, scheduling control unit 413 specifies a timeslot (hereafter, “specified TS”) from a TS_ID value attached to a code showing the state of the specified program, and allots the specified TS to the specified program.

[0578]

After performing the above urgent recovery-event processing, scheduling control unit 413 performs urgent restore processing (described below), and also performs urgent register switch processing (described below) instead of the register switch processing that is performed after the time-driven scheduling.

1-3-3 Event-Wakeup Processing

[0579]

When the specified program is in a “suspended-waiting” state, has a “TD” attribute and a wakeup timing of “n”, scheduling control unit 413 transfers the state of the current program specified by the event P_ID in LP-state storage register 424 to “suspended-ready”.

[0580]

Furthermore, when the specified program is in a “waiting” or a “suspended-waiting” state, has an “ED” attribute and a wakeup timing of “n”, scheduling control unit 413 changes the state of the program specified by the received event P_ID to “ready” (i.e. if “waiting”) and “suspended-ready” (i.e. if “suspended-waiting”), respectively.

[0581]

Additionally, when urgent register switching processing is performed at a wakeup timing of “e” after the event-driven scheduling, scheduling control unit 413, as a result of this occurrence, changes the state of the currently executed program from “running” to “suspended-ready”, irrespective of the attribute.

[0582]

When this event-wakeup processing is performed, scheduling control unit 413 performs early restore processing (described below) instead of the restore processing that is performed after the time-driven scheduling, and performs register switch processing (described below) to trigger the arrival of the zero-count signal.

[0583]

This event processing is referred to as “event-wakeup processing”.

1-3-4 Urgent Event-Wakeup Processing

[0584]

When the specified program is in a “waiting” or a “suspended-waiting” state, has an “ED” attribute and a wakeup timing of “e”, scheduling control unit 413 changes the state of the specified program to “ready” (i.e. if “waiting”) and “suspended-ready” (i.e. if “suspended-waiting”), respectively.

[0585]

When the urgent event-wakeup processing has been performed, scheduling control unit 413 performs urgent restore processing (described below) instead of the restore processing that is performed after the time-driven scheduling, and performs urgent register switch processing (described below) instead of the restore switch processing that is performed after the time-driven scheduling.

[0586]

This event processing is referred to as “urgent event-wakeup processing”.

1-4 Relinquish Scheduling

[0587]

The following description relates to relinquish scheduling performed when scheduling control unit 413 receives a wait-code from processing execution unit 410 via processing control unit 411, or a cache-miss signal (described below) from DMA management unit 418.

[0588]

A “wait-code” is a code showing the relinquishing of a time period allotted to a currently executed program when the program execution cannot be continued. The wait-codes include a “vmp_wait” code and a “vmp_sus” code.

[0589]

The “vmp_wait” code is a code that is issued by processing execution unit 410 when it is anticipated that the period of the relinquishing will be comparatively long, and the “vmp_sus” code is a code that is issued by processing execution unit 410 when it is anticipated that the period of the relinquishing will be comparatively short.

[0590]

When the “vmp_wait” or “vmp_sus” code is received from processing execution unit 410 via processing control unit 411, or when the cache-miss signal is received from DMA management unit 418, scheduling control unit 413 updates the state of a currently executed program stored in LP-state storage register 424.

[0591]

More specifically, when a “vmp_wait” code is received, scheduling control unit 413 changes the state of the currently executed program from “running” to “waiting”.

[0592]

When a “vmp_sus” code or a cache-miss signal is received, scheduling control unit 413 changes the state of the currently executed program from “running” to “suspended-waiting”.

[0593]

Scheduling control unit 413 then performs the time-option-information retrieval processing (described above) with the current address set as the target address.

Furthermore, even when the received wait-code is “vmp_wait” and the time-option information content shows “TS_SWITCH”, scheduling control unit 413 performs, as described above, the urgent register switch processing, the save processing, and the control register value update processing.

[0596]

Here, either restore processing in the time-driven scheduling or early restore processing after the early wakeup processing in the event-driven scheduling is performed with respect to the standby register group immediately prior to the performing of the urgent register switch processing.

[0597]

Furthermore, when the received wait-code is “vmp_wait”, and the time-option information content shows “LP_SWITCH”, scheduling control unit 413 judges whether an effective candidate program exists in the timeslot that is the current execution target, and if one or more effective candidate programs exist, scheduling control unit 413 stores (i.e. restores) register values of a context corresponding to a program having the highest priority level out of the one or more effective candidate programs (i.e. if only one effective candidate program, then that program) in the standby register group.

Furthermore, when an effective candidate program does not exist, or when the time-option information content shows “MICRO-SLEEP”, scheduling control unit 413 performs the following processing, in addition to instructing processing control unit 411 to have processing execution unit 410 execute NOP (described below), which is a program execution that does not result from the updating of a register value in the current register group.

[0600]

Scheduling control unit 413 immediately starts an output of a mask signal to clock mask unit 427, refers to the content of a context stored in a standby register group, obtains an address value in the memory in which data required to execute a program corresponding to this context is stored, and instructs DMA management unit 418 to write the data stored in the address into a cache memory.

[0601]

Furthermore, when the register switching or the urgent register switching is next performed, scheduling control unit 413 stops the output of the mask signal to clock mask unit 427.

[0602]

Upon receiving a zero-count signal from cycle counter 416, scheduling control unit 413 performs the register switch processing and the save processing.

[0603]

Processing related to the restoring in the restore processing, the urgent restore processing, the early restore processing, and the like will now be described.

1-5-1 Restore Processing

[0604]

Restore processing is processing for storing register values in the standby register group, and is performed by scheduling control unit 413 after the time-driven scheduling has been performed.

[0605]

As the restore processing when the standby register group is released (i.e. when the saving is completed), scheduling control unit 413 instructs DMA management unit 418 to store, in the standby register group, register values of a context corresponding to a program allotted as a result of the time-driven scheduling.

1-5-2 Urgent Restore Processing

[0606]

The urgent restore processing is processing for storing register values in a standby register group, and is performed by scheduling control unit 413 when the wakeup timing of the specified program shows “e” as a result of performing the event-driven scheduling.

[0607]

As the urgent restore processing when execution of the urgent recovery-event processing or the urgent event-wakeup processing is completed, scheduling control unit 413 saves the register values stored in the standby register group, and instructs DMA management unit 418 to immediately store (i.e. to urgently restore) the register values of a context corresponding to a specified program in the standby register group.

[0608]

Here, it is possible for the saving and restoring to be executed per register rather than per register group, and by performing the saving and restoring sequentially for each register, it is possible to perform the saving and restoring in a pseudo-parallel manner.

1-5-3 Early Restore Processing

[0609]

The early restore processing is processing for storing register values in a standby register group, and is performed by scheduling control unit 413 when the wakeup timing of the specified program shows “n” as a result of performing the event-driven scheduling.

[0610]

As the urgent restore processing when a standby register group is released (i.e. when the saving is completed), scheduling control unit 413 instructs DMA management unit 418 to immediately store register values of a context corresponding to a specified program in the standby register group.

[0611]

Here, similar to the urgent restore processing, scheduling control unit 413 initializes the register values of the standby register group prior to the above storing.

[0612]

Processing that relates to register switching in the register-switch processing, the urgent register-switch processing, and the like will now be described.

At this time, if the execution target timeslot is an empty timeslot, scheduling control unit 413 starts the output of the mask signal to clock mask unit 427, in addition to instructing processing control unit 411 to have processing execution unit 410 execute NOP (i.e. “no-operation”) following the outputting of the basic cycle value to cycle counter 416, refers to a content of a context stored in a standby register group, obtains an address value in a memory in which data required to execute a program corresponding to the context is stored, and instructs DMA management unit 418 to write the data stored in the address into a cache memory.

[0616]

Furthermore, when register switching or the urgent register switching is next performed, scheduling control unit 413 stops the output of the mask signal to clock mask unit 427.

1-6-1-1 Basic-Cycle Adjustment Processing

[0617]

The following description relates to basic-cycle adjustment processing.

[0618]

Immediately prior to the register switching, scheduling control unit 413 refers to LP-state storage register 424, judges whether the state of a program corresponding to a register value group stored in a standby register group is “suspended-ready”, and if “suspended-ready”, scheduling control unit 413 obtains an actual count value (described below) from a residual-cycle-value storage location (described below) in the standby register group.

[0619]

Then, at the next program execution time, scheduling control unit 413 sets this actual count value as the execution period of the program (i.e. as the basic cycle of the timeslot to which the program is allotted) instead of a regular basic cycle shown in the timeslot information of a timeslot to which the program is allotted.

[0620]

Furthermore, when the TS_ID value of this timeslot is “3” (i.e. a timeslot not guaranteeing realtime processing), scheduling control unit 413 obtains a timelag value in the timeslot information that shows the TS_ID value of “3”, sets the result of subtracting this timelag value from the basic cycle value as a new basic cycle for the next program execution time, and updates the timelag value in this timeslot information to “0”.

[0621]

Here, upon receipt of notification from processing control unit 411 of the start of program execution, scheduling control unit 413 outputs the basic cycle value derived as above to cycle counter 416.

1-6-1-2 Switch-Timing Confirmation Processing

[0622]

The following description relates to switch-timing confirmation processing.

[0623]

When programs are executed by timesharing, it may not be possible, for example, to complete the program execution within an arbitrary time period due to shared resources being used in the program execution, and the like.

[0624]

In other words, it may not be possible to perform the register switching within an arbitrary time period.

[0625]

As a result, scheduling control unit 413 firstly requests processing control unit 411 to complete a currently executed program, has the program ended at a point at which completion of the program execution is possible, and confirms whether register switching is possible.

[0626]

More specifically, after the above request, scheduling control unit 413 refers to the values of the switching-prohibited flag and the common-interrupt flag in processor-state storage unit 425, and judges whether register switching is possible (i.e. flag value=“0”) or not possible (i.e. flag value=“1”).

1-6-1-3 Actual-Time-Period Retention Processing

[0627]

The following description relates to actual-time-period retention processing.

[0628]

Having instructed register switching unit 412 to perform the register switching, scheduling control unit 413 obtains the count value of cycle counter 416 at this point in time, and when this count value (hereafter, “actual count value”) is a positive value, and a “vmp_sus” code (i.e. code triggering the register switching) is received, scheduling control unit 413 writes this actual count value into a location (hereafter, “residual-cycle-value storage location”) determined in the register group that becomes the standby register group as a result of the register switching having been performed.

[0629]

By doing this, the actual count value of a program whose execution has been completed is attached to a context of the program, and because the actual count value is stored in context memory 500 following the saving of this context, the actual count value at the previous program execution period can be obtained at the next program execution time.

[0630]

Furthermore, when the actual count value takes a negative value, or when the actual count value takes a positive value and a “vmp_wait” code (i.e. code triggering the register switching) is received, scheduling control unit 413 performs the target-timeslot retrieval processing with the end address as the target address, specifies a storage location of timeslot information of a timeslot (i.e. TS_ID=3) thus specified, and updates the timelag value by adding this actual count value to a timelag value stored in the timeslot information.

[0631]

Here, for the reasons mentioned in the above description of the switch-timing confirmation processing, it is not always possible to strictly match the switch timing with the basic cycle of a timeslot, and the switching is normally performed a few cycles over the basic cycle, and thus the actual count value takes a negative value. Furthermore, when, for example, the register switching is conducted by suspending the program execution, the actual count value takes a positive value due to being less than the basic cycle of the timeslot that is the execution target.

1-6-1-4 Control-Register-Value Update Processing

[0632]

The following description relates to control-register-value update processing.

[0633]

The control-register-value update processing is processing for updating data, and is performed in control register 420 following scheduling (described below) being performed.

[0634]

This scheduling is (1) the performing of time-driven scheduling, or (2) the performing of relinquish scheduling when the time-option information content shows “TS_SWITCH”.

[0635]

In addition to setting to next address value at a current point in time as a new current address value, scheduling control unit 413 sets a value obtained by adding “1” to this next address value (note: this value=head address value if next address is end address), and following this, scheduling control unit 413 updates the values of the current address and the next address stored in control register 420.

[0636]

Furthermore, having transferred the current address value from the end address value to the head address value, scheduling control unit 413 outputs a cycle head signal to request detection unit 419.

1-6-2 Urgent Register-Switch Processing

[0637]

The following description relates to urgent register-switch processing.

[0638]

When the content of time-option information shows “TS_SWITCH” in the time-option processing of the relinquish scheduling, and when the urgent restore processing performed after the urgent recovery-event processing and the urgent event-wakeup processing at a time of the event-driven scheduling is completed, scheduling control unit 413 performs the basic-cycle adjustment processing, and instructs register switching unit 412 to perform the register switching after first conducting the switch-timing confirmation processing.

[0639]

Then, upon receipt of notification from register switching unit 412 that the register switching has been completed, scheduling control unit 413 outputs the basic cycle value to cycle counter 416, and performs the actual-time-period retention processing.

1-7-1 Save Processing

[0640]

Upon receipt of notification that the register switching has been completed, scheduling control unit 413 instructs DMA management unit 418 to overwrite (i.e. save), into a memory area of context memory 500 in which the context was originally stored, register values of a context stored in a register group that becomes the standby register group as a result of the register switching.

[0641]

Here, the saving is conducted immediately prior to the register switching being performed, even when the execution target timeslot is an empty timeslot.

1-8-1 Unique Interrupt Processing

[0642]

Upon receiving a unique P_ID and a unique SP_ID from request detection unit 419, scheduling control unit 413 performs the following processing.

[0643]

Scheduling control unit 413 refers to LP-state storage register 424, judges whether a program specified by the received unique P_ID is currently being executed, and if currently being executed, scheduling control unit 413 immediately instructs processing execution unit 410 via processing control unit 411 to jump to a subroutine program specified by the received unique SP_ID and execute processing.

[0644]

Furthermore, if the program specified by the received unique P_ID is not currently being executed, scheduling control unit 413 specifies a program to be the interrupt target of the subroutine program by referring to a flag in request detection unit 419, and when this specified program is executed, scheduling control unit 413 instructs processing execution unit 410 via processing control unit 411 to jump to the subroutine program and execute processing.

1-8-2 Common Interrupt Processing

[0645]

Upon receipt of a common SP_ID from request detection unit 419, scheduling control unit 413 immediately instructs processing execution unit 410 via processing control unit 411 to jump to a subroutine program specified by the received common SP_ID and execute processing, and when notification is received from processing control unit 411 that execution of the subroutine program has been started, scheduling control unit 413 instructs cycle counter 416 to suspend the countdown.

[0646]

Furthermore, upon receipt of notification from processing control unit 411 that execution of the subroutine program specified by the common SP_ID has been completed, scheduling control unit 413 outputs a count restart signal instructing cycle counter 416 to restart the countdown.

[0647]

As described above, scheduling control unit 413 functions to execution a variety of processing.

[0648]

Processing control unit 411 functions to manage an execution state of programs in processing execution unit 410. More specifically, processing control unit 411 monitors an execution state of programs in processing execution unit 410, and detects a start and an end timing of program execution in processing execution unit 410, and also detects a start and an end timing of interrupt processing.

[0649]

Whenever one of these timings arrives, processing control unit 411 notifies scheduling control unit 413 that the timing has arrived.

[0650]

Furthermore, upon receipt of a wait-code from processing execution unit 410, processing control unit 411 outputs the wait-code to scheduling control unit 413.

[0651]

Furthermore, when a program execution in processing execution unit 410 is in a non-suspendable state, processing control unit 411 sets the value of the switching-prohibited flag in processor-state storage unit 425 to “1” (default value=“0”), and sets the value of the common interrupt flag in processor-state storage unit 425 to “1” (default value=“0”) for the duration that the subroutine program specified by the common SP_ID is being executed in processing execution unit 410.

[0652]

Furthermore, upon receipt of a register-switching prohibited command from processing execution unit 410, processing control unit 411 sets the value of the switching-prohibited flag in processor-state storage unit 425 to “1” and upon receipt of a register-switching prohibition release command from processing execution unit 410, processing control unit 411 sets the value of the switching prohibited flag to “0”. Moreover, upon receipt of an NOP execution instruction from scheduling control unit 413, processing control unit 411 has processing execution unit 410 execute NOP.

[0653]

DMA management unit 418 is a functional unit that manages and smoothly performs DMA transfers, and performs the DMA transfers based on requests from scheduling control unit 413 and other functional units.

[0654]

Furthermore, upon completing a DMA transfer requested by a functional unit, DMA management unit 418 outputs a signal (hereafter, “transfer-completion signal”) showing the completion to the functional unit and to scheduling control unit 413. Moreover, if a cache-miss occurs when DMA management unit 418 tries to obtain a program and data from a cache-memory in response to a request from processing execution unit 410, DMA management unit 418 outputs a signal (hereafter, “cache-miss signal”) showing that a cache-miss has occurred to scheduling control unit 413.

[0655]

External I/F 417 is an interface for connecting external devices such as an external processor and the like, and outputs signals received from an external source to scheduling control unit 413 and request detection unit 419.

[0656]

Cycle counter 416 has a clock counter, and upon receipt of a basic cycle value from scheduling control unit 413, cycle counter 416 starts a countdown with this value as an initial value of the count.

[0657]

Cycle counter 416 conducts the countdown by decrementing a 1-value per clock, starting from the initial value, and when the value reaches zero, cycle counter 416 outputs a signal (hereafter, “zero-count signal”) to scheduling control unit 413 showing that the count value has reached zero.

[0658]

Furthermore, cycle counter 416 suspends and restarts the countdown based on instructions from scheduling control unit 413, outputs an actual count value (i.e. count value at time instructed) to scheduling control unit 413.

[0659]

Clock mask unit 427 functions to block a signal route of a clock pulse to processing execution unit 410 for the duration that a mask signal is being received from scheduling control unit 413.

This information is used in every timeslot, and is related to each other.

2-1-1 Timeslot Information

[0663]

In the timeslot information is included TS_ID values for specifying timeslots, and basic cycle values.

[0664]

Furthermore, in a piece of timeslot information having TS_ID value of “3” is included a timelag value.

[0665]

Furthermore, when the scheduling is performed by scheduling control unit 413, a program ID is corresponded to a TS_ID value of a timeslot to which the program is allotted.

2-1-2 LP Information

[0666]

In the LP information is stored information relating to programs that are candidates for allotting to timeslots.

[0667]

The attributes and number of programs that are candidates for allotting to a single timeslot differ depending on the attribute of timeslots that are allotment targets.

[0668]

In other words, a program having a “TD” attribute will always be allotted to a timeslot having a “TD” attribute.

[0669]

Furthermore, in each timeslot having a “TD” attribute is provided four candidate programs having “TD” attributes.

[0670]

On the other hand, a program having an “ED” attribute will always be allotted to a timeslot having an “ED” attribute.

[0671]

Furthermore, in each timeslot having a “ED” attribute is provided one candidate program having an “ED” attribute.

[0672]

Each piece of LP information is corresponded to a piece of timeslot information that corresponds to an allotment target timeslot.

[0673]

In the LP information is stored groupings of values, each grouping consisting of a (1) an ID value for specifying a program, (2) a value showing a priority level, and (3) an address value in context memory 500 in which a context corresponding to the program is stored, and the number of groupings is equal to the number of allotment candidate programs.

[0674]

The values showing a priority level are one of 0, 1, 2, and 3, and are set such that the priority levels of the allotment candidate programs do not overlap.

[0675]

Here, when the number of allotment candidate programs is one, the value showing a priority level is “0”.

2-1-3 Priority Level & Mode Information

[0676]

In the priority level & mode information is stored information related to the designating of programs that are candidates for allotting to timeslots.

[0677]

In other words, in the priority level & mode information is stored a value (one of 0, 1, 2, 3) showing a priority level, and an “I” or “L” code showing a mode.

[0678]

Here, the “I” code shows an INDEX mode, and the “L” code shows a LEVEL mode.

[0679]

Because the range of effective candidate programs is altered by changing a content of this priority level & mode information, it is possible to adjust an execution frequency of each candidate program so as to approach a target value.

2-1-4 Idle-Option Information

[0680]

In the idle-option information is stored information for determining a program execution operation when all of the programs for allotting to a timeslot are in an unexecutable state.

[0681]

In other words, in the idle-option information is stored a “MICRO-SLEEP” code showing power reduction, or a “SWITCH” code showing high-efficiency program execution.

2-1-5 Time-Option Information

[0682]

In the time-option information is stored information for determining a post-suspension program operation when a currently executed program is suspended.

[0683]

In other words, in the time-option information is stored (1) an “LP_SWITCH” code showing the allocation, to the timeslot, of an executable program corresponded to the timeslot to which a program whose execution has been suspended belongs, (2) a “TS_SWITCH” code showing the setting of the next timeslot as the execution target, or (3) a “MICRO-SLEEP” code showing power reduction.

In the program-state information is stored, for each program, an ID for specifying a program, a code showing a program-state, and a code showing, together with a program attribute, a timing for waking up or recovering a program.

[0686]

There are six codes showing a program-state: “waiting”, “suspended-waiting”, “ready”, “suspended-ready”, “running”, and “nonexistent”.

[0687]

The “waiting” code shows the relinquishing of a program execution period at the present time, and the execution of a program within the program execution timeframe of a normal timeslot at the next program execution time. The “suspended-waiting” code shows the relinquishing of a program execution period at the present time, and the setting of a time period (maximum=period of a single timeslot) not used as a result of the relinquishing, as the program execution period for the next program execution time.

[0688]

The “ready” code shows a program to currently be in an executable state, and the “suspended-ready” code shows a program that was in a “suspended-waiting” state to currently be in an executable state.

[0689]

Furthermore, when a state of a program is transferred to the “waiting”, “suspended-waiting” or “suspended-ready” code as the result of a program execution period being relinquished, a TS_ID value of the allotment target timeslot at the time when the relinquishing occurred is attached to the code.

[0690]

Here, the TS_ID value is not cleared until the program is executed, and thus this TS_ID value may sometimes also be attached to the “ready” code or the “suspended-ready” code.

[0691]

The “running” code shows a program to currently be in an executable state, and furthermore that the program is currently being executed.

[0692]

The “nonexistent” code shows a program to currently be outside the target range of the scheduling.

[0693]

Here, “outside the target range of the scheduling” means that the program cannot currently even be a candidate program.

[0694]

Here, a candidate program that is in a “waiting” or a “suspended-waiting” state is outside the target range of candidate scheduling.

[0695]

Furthermore, the “recovery of a program” mentioned above refers to a program having a “TD” attribute changing from a “waiting” to a “ready” state, or a program having a “TD” attribute changing from a “suspended-waiting” to a “suspended-ready” state at the above timing “e”.

[0696]

Furthermore, the “waking up of a program” refers to a program having a “TD” attribute changing from a “suspended-waiting” to a “suspended-ready” state at the above timing “n”, or a program having an “ED” attribute changing from a “waiting” or a “suspended-waiting” to a “ready” or “suspended-ready” state, respectively.

[0697]

Here, the timing of waking up or recovering a program is referring to collectively in the present invention as simply “wakeup timing”

[0698]

The codes showing a program attribute includes (1) an “ED” code showing an event-driven program in the event-driven scheduling that is within a target range of the candidate scheduling when an event occurs, and that is not effected by the order determined by the time-driven scheduling, and (2) a “TD” code showing a program (i.e. a time-driven program) that waits for an allocated timeslot in the order determined by the time-driven scheduling before being executed, despite being within the target range of the candidate scheduling when an event occurs.

[0699]

In other words, a program having an “ED” attribute is transferred from a “waiting” or a “suspended-waiting” state to a “ready” or a “suspended-ready” state, respectively, and is allocated a timeslot as a result the event-driven scheduling. On the other hand, a program having an “TD” attribute is transferred from a “waiting” state to “ready” state, and allocated a timeslot as a result the time-driven scheduling.

[0700]

As an exception, however, there may be times when a time-driven program that is within the target range of the candidate scheduling when an event occurs, is allocated a timeslot in the event-driven scheduling and executed, without being effected by the order determined in the time-driven scheduling.

[0701]

In other words, this exception arises when a time-driven program is transferred from a “suspended-waiting” state to a “suspended-ready” state, and is allocated a timeslot as a result of the event-driven scheduling.

[0702]

The codes showing a wakeup timing include (1) an “e” code showing that it is necessary to urgently execute a program (i.e. without waiting to receive a zero-count signal) to the extent that a context already stored in the standby register group is deleted, and an “n” code showing the execution of a program after receiving a zero-count signal, upon the completion of the storage in the standby register group, once the save processing from the standby register group has been completed.

These setting flag groups are for specifying a content of events and interrupts permitted by the programs, and apart from being provided for each program, these setting flag groups are the same as the setting flag group mentioned in the first embodiment, and thus a detailed description is omitted here.

[0705]

In request detection unit 419, as shown in FIG. 15, are stored LP unique flag groups provided for each program, and a single common flag group.

[0706]

An LP unique flag group is information relating to unique interrupts, and shows what type of execution request for a unique interrupt has currently occurred with respect to what program.

[0707]

Although the LP unique flag groups appear to exist for each program, they are actually a single piece of bit string data, and each flag exists in a bit position corresponding to a content of a unique interrupt and a program that permits the interrupt.

[0708]

In other words, when an interrupt having this content is permitted in a given program, an LP unique flag existing in the bit position that corresponds to a content of the interrupt and the program will have a 1-value (default value=0).

[0709]

A data structure of the LP unique flags is similar to that of the completion notification flags mentioned in the first embodiment, and thus a detailed description is omitted here.

[0710]

The common flag group is a collection of flags that show whether an execution request for a common interrupt has occurred.

[0711]

Here, an “execution request for a common interrupt” refers to a request to execute an executable subroutine program in any of the programs. The common flag group is actually a single piece of bit string data, and unique bit positions exist for subroutine programs to be executed after interrupting any currently executed program.

[0712]

In other words, in the case of a common interrupt request occurring with respect to a subroutine program, a flag in a bit position corresponding to the subroutine program will have a 1-value (default value=0).

A switching-prohibited flag shows that register switching is currently unexecutable due to reasons such as, for example, not being able to immediately suspend a program because of a shared resource being accessed during the program execution. In this case, the switching-prohibited flag takes a 1-value (default value=0) for the duration that the register switching cannot be executed.

[0715]

The value of this switching-prohibited flag is rewritable by a command issued by a currently executed program.

[0716]

A common interrupt flag shows that processing of a common interrupt is currently being executed, and takes a 1-value (default value=0) for the duration that that the processing of the common interrupt is being executed.

3. Operation

[0717]

The following description relates to processing for realizing efficient program execution in virtual multiprocessor 400, when programs are executed in a pseudo-parallel by a single processor.

[0718]

FIG. 17 is a flowchart that shows processing performed in virtual multiprocessor 400.

[0719]

Processing execution unit 410 starts a program execution based on an instruction from processing control unit 411 (step S100).

[0720]

Parallel with this program execution, scheduling control unit 413 performs save processing that targets register values stored in the standby register group (step S101), and request detection unit 419 judges whether an event-processing request has not occurred, based on an external signal received from external I/F 417 (step S102).

Then, request detection unit 419 judges whether an interrupt-processing request has not occurred (step S107), and if an interrupt-processing request has occurred (step S107=NO), request detection unit 419 outputs, in accordance with the type of interrupt, a unique P_ID, a unique SP_ID, a common SP_ID, and the like to scheduling control unit 413.

On the other hand, if an interrupt-processing request has not occurred (step S107=YES), scheduling control unit 413 judges, based on a wait-code and a cache-miss signal, whether a program execution period relinquishing or a cache-miss has not occurred (step S109), and if these have occurred (step S109=NO), scheduling control unit 413 performs relinquish scheduling (step S110).

[0728]

Here, a processing content after the relinquish scheduling has been performed varies depending on the result of the relinquish scheduling.

[0729]

On the other hand, if a program execution period relinquishing or a cache-miss has not occurred (step S109=YES), scheduling control unit 413 ends the program execution in processing execution unit 410 upon receipt of a zero-count signal from cycle counter 416 (step S111), performs register-switch processing (step S112), and then returns to step S100, in which processing execution unit 410 starts a program execution.

[0730]

FIG. 18 is a flowchart that shows a content of time-driven scheduling performed by scheduling control unit 413.

[0731]

Firstly, operations when a next TS is set as a target TS will be described.

More specifically, scheduling control unit 413 refers to timeslot information stored in the next address in time-allocation-information storage register 402, specifies a next TS based on a TS_ID specifying a timeslot, and obtains a basic cycle value allotted to the timeslot.

More specifically, scheduling control unit 413 refers to LP information corresponded to a next TS, specifies candidate programs shown by the LP information, and detects a priority level corresponded to these programs.

More specifically, scheduling control unit 413 refers to priority level & mode information corresponded to a next TS, judges whether one of 0, 1, 2 and 3 is shown as the priority level, and also whether one of INDEX mode and LEVEL mode is shown as the mode.

More specifically, scheduling control unit 413 specifies four programs corresponded to the next TS obtained by the target-timeslot retrieval processing, and detects a priority level corresponded to each of these programs by target-TS-allocation-program retrieval processing.

[0742]

Scheduling control unit 413 then chooses a candidate program from these four programs, based on a priority level and a mode obtained as a result of the priority level & mode information retrieval processing.

[0743]

Furthermore, scheduling control unit 413 refers to program-state information corresponding to each of the candidate programs in LP-state storage register 424, detects whether each of the candidate programs is executable, and chooses an effective candidate program from the candidate programs.

[0744]

If there is plurality of effective candidate programs, scheduling control unit 413 sets, as the allocation target to the next TS, the effective candidate program to which the highest priority level value is corresponded.

[0745]

Furthermore, if no effective candidate program exists, scheduling control unit 413 determines the subsequent processing content based on the content of information obtained by performing the idle-option-information retrieval processing.

[0746]

In other words, when the information content shows “MICRO-SLEEP”, scheduling control unit 413 does not set any program as an allocation target to the next TS.

[0747]

In this case, scheduling control unit 413 has clock mask unit 427 block the supply of a clock pulse to processing execution unit 410, in addition to having processing execution unit 410 perform NOP.

[0748]

Furthermore, when the information content shows “SWITCH”, scheduling control unit 413 sets, as a new next address, a value obtained by adding “1” to the next address (note: if next address=end address, then this value=head address value), and repeatedly performs the schedule processing from steps S120 to S124.

[0749]

When the above processing is completed, scheduling control unit 413 transfers to step S107, in which request detection unit 419 judges whether an interrupt processing execution has not occurred.

[0750]

Operations when a target TS is set as a current TS are described in a later section.

[0751]

FIG. 19 is a flowchart that shows a content of the event-driven scheduling performed by scheduling control unit 413.

[0752]

Scheduling control unit 413 specifies a program by an event P_ID received from request detection unit 419.

[0753]

Furthermore, when a currently executed program is suspended as a result of urgent register-switching by event driven scheduling, scheduling control unit 413 specifies the program that has been suspended (step S130).

[0754]

Furthermore, scheduling control unit 413 refers to LP-state storage register 424, and recognizes an attribute, a state, and a wakeup timing of the program.

[0755]

Scheduling control unit 413 judges in step S131 whether at least one of the following (1) to (3) currently holds:

[0756]

(1) program attribute is “ED”?

[0757]

(2) program attribute is “TD”, program state is “suspended-waiting”, wakeup timing is “n”?

[0758]

(3) “running” state program that has been urgently register switched by event-driven scheduling?

[0759]

If judged in the negative for all of the above (step S131=NO), scheduling control unit 413 refers to LP-state storage register 424, judges whether the program wakeup timing is “e” (step S132), and if not “e” (step S132=NO; i.e. wakeup timing=“n”), scheduling control unit 413 performs recovery-event processing.

[0760]

More specifically, if the state of the program shown in LP-state storage register 424 is “waiting”, scheduling control unit 413 changes this state to “ready”.

[0761]

Scheduling control unit 413 then returns to step S105, in which time-driven scheduling is performed.

FIG. 20 is a flowchart that shows a content of the interrupt processing performed in step S108.

[0766]

Scheduling control unit 413 judges, based on a unique P_ID, a unique SP_ID and a common SP_ID received from request detection unit 419, whether a common-interrupt-processing request has occurred (step S150).

[0767]

If a common-interrupt-processing request has occurred (step S150=YES; i.e. common SP_ID received from request detection unit 419), scheduling control unit 413 suspends the countdown in cycle counter 416 for the duration that a subroutine program specified by the common SP_ID is being executed (step S151˜S152).

[0768]

On the other hand, if a common-interrupt-processing request has not occurred (step S150=NO; i.e. unique P_ID and unique SP_ID received from request detection unit 419), scheduling control unit 413 does not suspend the countdown in cycle counter 416 for the duration that a subroutine program specified by the unique SP_ID is being executed (step S153˜S154).

[0769]

When the above processing is completed, scheduling control unit 413 moves to step S109.

[0770]

FIG. 21 is a flowchart that shows a content of the relinquish scheduling performed in step S110.

[0771]

Scheduling control unit 413 judges whether a cache-miss signal has been received from DMA management unit 418 (step S160), and if a cache-miss signal has been received (step S160=YES), scheduling control unit 413 changes the state of a currently executed program to “suspended-waiting” (step S161), and performs time-option-information retrieval processing (step S162).

[0772]

On the other hand, if a cache-miss signal has not been received (step S160=NO), scheduling control unit 413 judges whether a “vmp_sus” code has been received (step S163), and if a “vmp_sus” code has been received (step S163=YES), scheduling control unit 413 changes the state of a currently executed program to “suspended-waiting” (step S161), and performs time-option-information retrieval processing (step S162).

[0773]

However, if judged that a “vmp_sus” code has not been received (step S163=NO; i.e. a “vmp_wait” code has been received), scheduling control unit 413 changes the state of a currently executed program to “waiting” (step S164), and performs the time-option-information retrieval processing (step S162).

On the other hand, if the time-option information content is not “TS_SWITCH” (step S167=NO; i.e. time-option information content=“LP_SWITCH”), scheduling control unit 413 sets a target TS as a current TS (step S169), and performs the time-driven scheduling (step S170).

[0778]

The time-driven scheduling performed in step S170 and the time-driven scheduling performed in step S105 will now be described with reference to the differences.

[0779]

There are two differences in the content of the two time-driven scheduling operations.

[0780]

In the time-driven scheduling performed in step S170, (1) the target address is current TS rather than the next TS, and (2) as a result of performing the schedule processing, the processing moves to NOP execution when an effective candidate program does not exist, irrespective of the idle-option information.

[0781]

More specifically, as a continuation of the step S169 processing in FIG. 18(B), scheduling control unit 413 performs target-timeslot retrieval processing (step S120).

[0782]

In other words, scheduling control unit 413 refers to timeslot information stored in the current address in time-allocation-information storage register 402, specifies a current TS based on a TS_ID specifying a timeslot, and obtains a basic cycle value allotted to the timeslot.

More specifically, scheduling control unit 413 specifies four programs corresponded to the current TS obtained by the target-timeslot retrieval processing, and detects a priority level corresponded to each of these programs by target-TS-allocation-program retrieval processing.

[0786]

Scheduling control unit 413 then chooses candidate programs from these four programs, based on a priority level and a mode obtained as a result of the priority level & mode information retrieval processing.

[0787]

Furthermore, scheduling control unit 413 refers to program-state information corresponding to each of the candidate programs in LP-state storage register 424, detects whether each of the candidate programs is executable, and chooses an effective candidate program from the candidate programs.

[0788]

If there is plurality of effective candidate programs, scheduling control unit 413 sets, as the allocation target to the next TS, the effective candidate program to which the highest priority level value is corresponded.

[0789]

Furthermore, if no effective candidate program exists, scheduling control unit 413 stores the fact that no effective candidate program exists.

[0790]

The above processing is the time-driven scheduling performed in step S170, in which the target address is sets as the current address.

[0791]

After executing this time-driven scheduling, scheduling control unit 413 judges whether there is an effective candidate program (step S171).

[0792]

If there is no effective candidate program (step S171=NO), scheduling control unit 413 instructs processing execution unit 410 via processing control unit 411 to execute NOP (step S166), instructs clock mask unit 427 to block the clock-pulse supply to processing execution unit 410 for the duration of the NOP execution, and returns to step S102.

[0793]

As a result of this instruction, supply of the clock pulse to processing execution unit 410 is blocked.

[0794]

On the other hand, when there is an effective candidate program (step S171=YES), scheduling control unit 413 performs the restore processing (step S172), performs the urgent register-switch processing (step S168), and returns to step S100.

4. Program Execution During Processor Drive Time

[0795]

The following description relates a program execution status when virtual multiprocessor 400 is driven.

4-1. Basic Program Execution

[0796]

As described above, program execution is performed in virtual multiprocessor 400 based on a plurality of timeslots and programs that are corresponded to the timeslots.

[0797]

FIGS. 22A and 22B depict these timeslots.

[0798]

For the sake of convenience, each timeslot is written as “TSn” (n being an integer from 0 to 15), and the n-value is unique for each timeslot.

[0799]

In the setting, sixteen timeslots are provided, and four of these timeslots (TS0˜TS3) are time-driven timeslots that are used in normal scheduling.

[0800]

In other words, programs allotted to each of timeslots TS0 to TS3 are executed sequentially, and when execution of a program allotted to TS3 is completed, the programs are again executed from a program allotted to TS0.

[0801]

TS0 to TS2 are timeslots used for program execution premised on realtime processing that targets image, audio, and the like.

[0802]

TS3 (TS_ID=3) is a timeslot used for program execution that is not premised on realtime processing.

[0803]

The other timeslots (TS4˜TS15) are event-driven timeslots that are woken up when an event occurs.

[0804]

As shown in FIG. 22A, each timeslot has corresponded a basic cycle value, and a time period equating to this basic cycle value forms a program execution timeframe of each timeslot.

[0805]

As shown in FIG. 22B, it is not generally possible to exactly match the switch timing with the basic cycle of a timeslot, and the switching normally occurs a few cycles over the basic cycle.

[0806]

By performing the basic-cycle-adjustment processing in virtual multiprocessor 400, the time period by which the execution timeframes are exceeded in TS0 to TS3 is subtracted from the execution timeframe of TS3, and thus the execution periods can be orderly maintained.

[0807]

Furthermore, when a program execution period allotted to a program scheduled for execution is relinquished in virtual multiprocessor 400, two types of information (i.e. time-option information and idle-option information) are available to determine a content of measures to be adopted in effecting efficient program execution or power reductions.

[0000]

4-2. Program Execution: Based on Time-Option Information when Relinquishing Occurs

[0808]

As described above, time-option information is information relating to timeslots, and is for determining a program execution content subsequent to the execution period of a currently executed program being relinquished due to the program becoming unexecutable.

[0809]

FIGS. 23A to 23D depict a program execution state based on time-option information when a program execution period is relinquished (i.e. program execution state that results from time-option-information retrieval processing).

[0810]

For the sake of convenience, each program is written as “LPm” (m being an integer from 0 to 31), and the m-value is unique for each program.

[0811]

As shown in FIG. 23A, when there are efficient candidate programs in time-driven scheduling timeslots TS0 to TS3, the programs are executed sequentially within the execution timeframe of each of the programs.

As shown in FIG. 23B, when the relinquishing of the program execution period is triggered by a “vmp_wait” code outputted by processing execution unit 410 during the execution of LP1 in the execution timeframe of TS1, and also when the time-option information of TS1 shows “LP_SWITCH”, the following program execution is conducted as a result of the above processing being executed in various functional units.

[0814]

LP4 is executed instead of LP1 until the execution timeframe of TS1 is used up, LP4 here being an effective candidate program that is corresponded to the same TS1, is in an executable state, and has the highest priority level of the candidate programs.

[0815]

At this time, register values of a context corresponding to LP2 and stored in a standby register group are at once discarded, and register values of a context corresponding to LP4 are stored in the standby register group.

[0816]

A time period until t2 is required to conduct the discarding, the restoring of LP4, and start the executing of LP4.

[0817]

Normally, this time period t2 is equivalent to approximately thirty cycles of pulse output by cycle counter 416.

[0818]

When there are no effective candidate programs in TS1, it is not possible to conduct program execution in this timeslot, and in this case, scheduling control unit 413 performs controls to have program execution conducted that is similar to when the timeslot information of TS1 (described below) shows “MICRO-SLEEP”.

[0819]

Here, a timeslot such as TS1, that falls outside the execution target range because of there being no effective candidate program, is referred to as a “sleeping timeslot”.

[0820]

The following program execution is conducted when a program execution period is relinquished and the time-option information shows “TS_SWITCH”.

[0821]

As shown in FIG. 23C, the register switching is conducted quickly, and LP2, which is allotted to TS2, is moved up and executed.

[0822]

LP2 was already stored in the standby register group at this time, and thus it is possible to execute LP2 quickly.

[0823]

Furthermore, as shown in FIG. 23D, when a program execution period is relinquished, and the time-option information of TS1 shows “MICRO-SLEEP”, meaningless program execution (i.e. NOP execution) that has no connection with the program originally executed is conducted until the execution timeframe of TS1 is used up.

[0824]

Here, the clock output to processing execution unit 410 is blocked for the duration of the NOP execution, and as a result, drive power is reduced.

[0000]

4-3. Program Execution: Based on Idle-Option Information when Relinquishing Occurs

[0825]

As described above, idle-option information relates to timeslots, and is for determining a program execution content when there exist no effective candidate programs in a given timeslot.

[0826]

FIGS. 24A to 24C depict a program execution status based on idle-option information there are no effective candidate programs in a time-driven timeslot.

[0827]

FIG. 24A shows a program execution status when there is at least one effective candidate program in each time-driven timeslot.

[0828]

The following description is premised on the above situation, and relates to program execution when there are no effective candidate programs in TS1.

[0829]

As shown in FIG. 24B, when there exist no effective candidate programs in TS1, and when the idle-option information of TS1 shows “SWITCH”, LP2, which is allotted to TS2 instead of TS1, is executed.

[0830]

As shown in FIG. 24C, furthermore, when there exist no effective candidate programs in TS1, and when the idle-option information of TS1 shows “MICRO-SLEEP”, NOP execution is conducted until the execution timeframe of TS1 is used up.

[0831]

Here, the clock pulse output to processing execution unit 410 (i.e. the CPU) is blocked for the duration of the NOP execution, and as a result, drive power is reduced.

4-4. Program Execution: Wait-State Cancellation

[0832]

A currently executed program changes to an unexecutable suspended-state (“suspended-waiting”) that is triggered by the output of a “vmp_sus” code.

[0833]

Furthermore, a currently executed program changes to an executable suspended-state (“suspended-ready/”) when suspended by another program as a result of urgent register switching.

[0834]

A timeslot allocated to such a programs during execution is referred to as a “suspended timeslot”, and as described above, a P_ID of the program is stored so as to be related to a TS_ID.

[0835]

A program in the above unexecutable suspended-state becomes an effective candidate program when the waiting-state of the program is cancelled. A program suspended by another program becomes an effective candidate program when the program changes to an executable suspended-state. The following description relates to a temporarily suspended program becoming an effective candidate program, and an execution of a suspended timeslot being restarted from an intermediate position.

[0836]

FIGS. 25A and 25B depict program execution in this situation.

[0837]

FIG. 25A shows a program execution status when TS3 of the four timeslots TS0 to TS3 is already a suspended timeslot, and when TS0 become a new suspended timeslot after LP0 allocated to TS0 ceases to be effective, this being triggered by a “vmp_sus” code outputted from processing execution unit 410.

[0838]

At this time, in TS0, a time period t3 equating to a set execution timeframe remains unused.

[0839]

When a “vmp_sus” code is received, scheduling control unit 413 updates the program state of LP0 to “suspended-waiting” and retains a time period t4, which remains unused in the execution timeframe, in the context as an actual count value.

[0840]

Then, as shown in FIG. 25A, only TS1 and TS2 are repeatedly targeted for execution.

[0841]

FIG. 25B shows a program execution status when the wait-state of LP0 allotted to the suspended timeslot TS0 is cancelled (i.e. cancellation of an unexecutable suspended-state “suspended-waiting”), and when the wakeup timing of LP0 in LP-state storage register 424 shows “n” (i.e. to be woken up normally).

[0842]

In this case, as shown in FIG. 25B, when the waiting is cancelled (i.e. cancellation of an unexecutable suspended-state occurs), scheduling control unit 413 updates the program state of LP0 to “suspended-ready”, but waits for a zero-count signal without immediately executing LP0, and then executes LP0 at a timing that does not cause the suspension of program execution in other TS.

[0843]

In this way, register values already stored in the standby register group are used when the cancellation of an unexecutable suspended-state occurs, and the storage is not wasted.

[0844]

At this time, scheduling control unit 413 has LP0 executed for only the time period t4 of the actual count value retained in the context.

[0845]

In the above case, the execution of LP0 is performed by event-driven scheduling.

[0846]

Following this, LP0 allotted to TS0, which becomes the execution target as a result of normal time-driven scheduling, is executed for only time period t3.

[0847]

The following description relates to a program execution status when waiting is cancelled (i.e. cancellation of an unexecutable suspended-state) in the case that the wakeup timing of LP0 in LP-state storage register 424 shows “e” in the above case.

4-5. Program Execution: Urgent Restore Event

[0848]

Similar to FIG. 25A, FIG. 26A shows a program execution status when TS3 of the four timeslots TS0 to TS3 is already a suspended timeslot, and when TS0 is a new suspended timeslot after LP4 allocated to TS0 has ceased to be effective, this being triggered by a “vmp_sus” code outputted from processing execution unit 410.

[0849]

At this time, in TS0, all of a set execution timeframe t5 has not been used.

[0850]

Again, similar to FIG. 25A, when a “vmp_sus” code is received, scheduling control unit 413 updates the program state of LP0 to “suspended-waiting” and retains a time period t6, which remains unused in the execution timeframe, in the context as an actual count value.

[0851]

FIG. 26B shows a program execution status when the wait-state of LP0 allotted to the sleeping timeslot TS0 is cancelled (i.e. cancellation of unexecutable suspended-state occurs), and when the wakeup timing of LP0 in LP-state storage register 424 shows “e” (i.e. to be woken up urgently).

[0852]

In this case, as shown in FIG. 26B, when the waiting is cancelled (i.e. when an unexecutable suspended-state is cancelled), scheduling control unit 413 updates the program state of LP0 to “suspended-ready”, and has LP0 executed immediately.

[0853]

Here, “immediately” refers to program execution in the overhead (t2) required for the restoring, register switching, and the like.

[0854]

More specifically, at the point in time that the waiting is cancelled (i.e. the unexecutable suspended-state is cancelled), scheduling control unit 413 discards register values already stored in a standby register group, performs urgent restore processing to store register values of a context corresponding to LP0 into the standby register group, performs urgent register-switch processing, and immediately has LP0 executed in the t6 time period, in addition to updating the program state of LP1 to “suspended-ready”, and retaining a time period t7, which remains unused in the execution timeframe of TS1, in the context of LP1 as an actual count value.

[0855]

In a register group that becomes the standby register group as a result of the register-switch processing being executed, there exist register values of a context corresponding to LP1 that had been executed up until then. However, scheduling control unit 413 saves these register values, executes restore processing following the execution of LP1, performs register-switch processing after the completion of the LP0 execution, and immediately has LP1 executed in the t7 time period.

[0856]

Here, the execution of LP1 is also conducted by event-driven scheduling. More specifically, program execution is restarted by event-wakeup processing (wakeup timing=“n”).

4-6. Program Execution: Event-Processing

[0857]

As shown in FIG. 27A, when an event-processing request does not occur, TS0, TS1, TS2 and TS3 sequentially become the execution target, and LP0, LP1, LP2 and LP3 are sequentially executed.

[0858]

FIG. 27B shows a program execution status when an event-processing request occurs to execute LP4 in TS4, which is a timeslot for events, and when a wakeup timing of LP4 in LP-state storage register 424 shows “n” (i.e. to be woken up normally).

[0859]

In this case, as shown in FIG. 27B, when an event-processing request occurs, scheduling control unit 413 updates the program state of LP4 from “waiting” to “ready”, but waits, without executing LP4 immediately, for a register group, which was the current register group when the event-processing request occurred, to become a standby register group, and for this register group to be released, and when this happens, scheduling control unit 413 stores register values of a context corresponding to LP4 in this register group, and has LP4 executed when this register group becomes the current register group.

[0860]

As a result, register values already stored in a standby register group are used at the time that an event-processing request occurs, and the storage is not wasted.

[0861]

FIG. 27C shows a program execution status when an event-processing request occurs to execute LP4 in TS4, which is a timeslot for events, and also when a wakeup timing of LP4 in LP-state storage register 424 shows “e” (i.e. to be woken up urgently).

[0862]

In this case, as shown in FIG. 27C, when an event-processing request occurs, scheduling control unit 413 updates the program state of LP4 to “ready”, and has LP4 executed immediately during t2.

[0863]

More specifically, at the time that an event-processing request occurs, scheduling control unit 413 discards register values already stored in a standby register group, stores register values of a context corresponding to LP4 in the standby register group, executes urgent register-switch processing, and immediately has LP4 executed, in addition to updating the program state of LP1 to “suspended-ready”, and retaining a time period (i.e. an actual count value), which remains unused in the execution timeframe of TS1, in the context of LP1.

[0864]

In a register group that becomes the standby register group as a result of the register-switch processing being executed, there exist register values of a context corresponding to LP1 that had been executed up until then. Scheduling control unit 413 temporarily saves these register values, restores these register values to the standby register group, immediately performs register-switch processing after the execution of LP4 is completed, and has LP1 executed in the above time period that remained unused.

[0865]

Here, the execution of LP1 is also conducted by event-driven scheduling. More specifically, execution is restated by event-wakeup processing (wakeup timing=“n”).

4-7. Program Execution: Common-Interrupt-Processing

[0866]

FIGS. 28A and 28B depict a program execution status when a common-interrupt-processing request occurs.

[0867]

As shown in FIG. 28A, when a common-interrupt processing request does not occur, the four timeslots from TS0 to TS3 sequentially become the execution target timeslot, and LP0, LP1, LP2 and LP3 are sequentially executed.

[0868]

As shown in FIG. 28B, when a common-interrupt processing request occurs during the execution of LP2 in TS2, scheduling control unit 413 jumps to a common-interrupt-processing dedicated subroutine program during the execution of LP2, and executes common-interrupt processing. When the common-interrupt processing has been completed, scheduling control unit 413 returns to LP2 and restarts the program execution.

[0869]

At this time, scheduling control unit 413 does not include the program execution period of the subroutine in the program execution period of the interrupted LP2.

[0870]

More specifically, scheduling control unit 413 stops the countdown in cycle counter 416 for the duration of common-interrupt processing in the subroutine.

[0871]

As a result, a time period, which is obtained by adding time period t10, in which the program was executed in the subroutine, to execution timeframe t9 of TS2, becomes the execution period of LP2.

[0872]

Here, the execution period of the common-interrupt processing is not included in the original execution period of the interrupted LP2 in order to avoid any unfair reduction in the execution period of only the program allotted to a timeslot that happens to be interrupted, despite the common-interrupt processing being required by all of the programs.

4-8. Program Execution: Unique-Interrupt Processing

[0873]

FIGS. 29A to 28C show the execution of programs relating to a unique-interrupt processing request.

[0874]

As shown in FIG. 29A, when a unique-interrupt processing request does not occur, the four timeslots TS0 to TS3 are sequentially selected as the execution target timeslot, and the four programs LP0 to LP3, allotted respectively to these timeslots, are sequentially executed.

[0875]

As shown in FIG. 29B, in the case that a unique-interrupt processing request corresponding to LP3 occurs during the execution of LP2 in TS2, scheduling control unit 413 jumps to and executes a subroutine dedicated to the requested unique-interrupt processing when LP3 is next executed, and returns to and executes LP3 when this processing is completed.

[0876]

In this case, scheduling control unit 413 includes the execution period of the subroutine in the execution period of the interrupted LP3.

[0877]

That is, scheduling control unit 413 does not stop the countdown in cycle counter 416 while the unique-interrupt processing is being executed.

[0878]

Here, LP3 is the only program that requires this unique-interrupt processing, and thus the execution period of the unique-interrupt processing is included in the execution period of the interrupted LP3 in order to avoid any unfair reduction in the execution period of programs that do not require this processing.

[0879]

Furthermore, as shown in FIG. 29C, in the case that a unique-interrupt processing request corresponding to LP3 occurs during the execution of LP3 in TS3, scheduling control unit 413 immediately jumps to and executes the subroutine dedicated to the requested unique-interrupt processing, and returns to and executes LP3 when this processing is completed.

[0880]

In this case, scheduling control unit 413 again includes the execution period of the unique-interrupt processing in the execution period of the interrupted LP3 for the reasons given above.

[0881]

Tasks can be executed efficiently according to the second embodiment as described above, because the saving, judging and restoring of contexts is performed in parallel with the program execution, and thus the time required for the saving, judging and restoring does not intervene in the execution period of the programs, even when a plurality of programs are executed in a pseudo-parallel manner by a single virtual multiprocessor 400.

[0882]

More than one program is provided per timeslot, and so even if one of the programs becomes unexecutable, another of the programs can be executed instead, and the execution period of programs can thus be used effectively.

[0883]

Furthermore, power consumption can be reduced when a program becomes unexecutable, by having processing execution unit 410 execute NOP during the execution period of the unexecutable program in order to stop the driving.

[0884]

Although, in the second embodiment, scheduling control unit 413 is described as including the time period required to execute a subroutine for unique-interrupt processing in the execution period of an interrupted program, the invention is not limited to this structure and may be structured as shown in FIG. 30A to 30C.

[0885]

As shown in FIG. 30A, when a unique-interrupt processing request does not occur, the four timeslots TS0 to TS3 are sequentially selected as the execution target timeslot, and the four programs LP0 to LP3, allotted respectively to these timeslots, are sequentially executed.

[0886]

Here, a single cycle of program execution is completed when LP0 to LP3 have each been executed once.

[0887]

As shown in FIG. 30B, when a unique-interrupt processing request corresponding to LP2 occurs during the kth execution of LP2, scheduling control unit 413 does not, at this time, includes an execution period t13 of the subroutine dedicated to the requested unique-interrupt processing in the execution period of the interrupted program (LP2).

[0888]

In other words, scheduling control unit 413 stops the countdown in cycle counter 416 for the execution period t13 of the subroutine.

[0889]

Then, as shown in FIG. 30C, in the k+1th cycle of program execution, scheduling control unit 413 has LP2 executed for a time period obtained by subtracting the execution period t13 from an execution timeframe t12 of TS2.

[0890]

More specifically, scheduling control unit 413 outputs a value equivalent to a time period obtained by subtracting t12 from t13 to cycle counter 416, instead of the basic cycle value (t12) of TS2.

[0891]

In the k+2th cycle, LP2 is executed normally, as shown in FIG. 30A.

[0892]

Although, according to the second embodiment as shown in FIG. 31A, the power consumption of processing execution unit 410 is reduced by clock mask unit 427 blocking a signal route of a clock pulse to processing execution unit 410 for the duration that clock mask unit 427 receives a mask signal from scheduling control unit 413, the invention is not limited to this structure and may be structured as follows.

[0893]

As shown in FIG. 31B, the power consumption of processing execution unit 410 may be set to “0”, by disposing a power control unit 430 on a power supply route to processing execution unit 410, and having power control unit 430 block this power supply route for the duration that power control unit 430 receives a power control signal (i.e. instead of the mask signal) from scheduling control unit 413.

[0894]

Also, as shown in FIG. 31C, the drive frequency of processing execution unit 410 may be lowered and power consumption reduced, by disposing a dividing unit 431 formed from a divider and the like on a signal route of a clock pulse between an oscillator 600 and processing execution unit 410, and having dividing unit 431 divide a frequency of this clock pulse by a factor of 4, for example, for the duration that dividing unit 431 receives a dividing signal (i.e. instead of the mask signal) from scheduling control unit 413.

[0895]

Furthermore, as shown in FIG. 31D, the drive frequency of processing execution unit 410 may be lowered and power consumption reduced, by disposing dividing unit 431 on a signal route of a clock pulse between oscillator 600 and virtual multiprocessor 400, and having dividing unit 431 divide the frequency of this clock pulse by a factor of 4, for example, for a duration that dividing unit 431 receives a dividing signal (i.e. instead of the mask signal) from scheduling control unit 413.

[0896]

In this case, cycle counter 416 may, in addition to a normal processing unit 432, have a multiplying unit 433 formed from a multiplier and the like, and the influence of the dividing by dividing unit 431 may be set-off by having cycle counter 416 multiply the frequency of the clock pulse by a factor of 4, for example, and conduct the countdown.

[0897]

Here, the factor by which the frequency of the clock pulse is divided/multiplied is, of course, not limited to “4”.

[0898]

According to the second embodiment, when an output frequency (number of outputs is stored for a predetermined period dating back from the present time) of an event P_ID exceeds a predetermined threshold value, request detection unit 419 delays the outputting of the event P_ID until the output frequency is less than or equal to the threshold value. However, request detection unit 419 may stop the output of the event P_ID (i.e. ignore the event-processing request) when the output frequency exceeds the threshold value.

[0899]

Also, according to the second embodiment, scheduling control unit 413 instructs DMA management unit 418 to write data required for executing a program that corresponds to a context stored in a standby register group into a cache-memory, although alternatively, scheduling control unit 413 may instruct garbage collection to be executed by a functional unit for executing garbage collection.

[0900]

In the second embodiment, there is a section that relates to which program to execute first when two or more programs change from “ready” to “suspended-ready” at a given time; that is, when a plurality of programs exist within the candidate range of event-driven scheduling (i.e. within the target range of the scheduling). In this case, the programs may be executed based on priority levels assigned to the programs, starting from the program having the highest priority level.

[0901]

For example, if an inverse relationship exists between priority levels and program ID values, the program within the scheduling target range that has the smallest ID value will be targeted for execution first.

[0902]

Furthermore, although the description in the second embodiment is based on the premise that the number of programs (LP) is greater than the number of register groups, the present invention is not limited to this structure, and thus the number of programs may be less than or equal to the number of register groups.

[0903]

In this case, a context memory need not be provided, and restoring and saving steps are not required.

[0904]

When there are two programs, LP0 is corresponded to a first register group, and LP1 is corresponded to a second register group.

[0905]

For example, when LP0 is to be executed, the scheduling control unit 413 selects the first register group as the current register group, without performing operations to restore a register value group from the context memory.

[0906]

Even if there are three programs and three register groups, the register group selected as the current register group is the execution target register group, and the other register groups are standby register groups.

[0907]

Here, LP2 is corresponded to a third register group.

[0908]

When LP2 is to be executed, the third register group is selected as the current register group.

[0909]

Even after the selection target has been switched, it is not necessary to perform operations to save a register value group to the context memory.

[0910]

Furthermore, in the second embodiment, context memory 500 is constituted by SRAM, but may be DRAM. Moreover, context memory 500 is not limited to these types of memory, and may be a register that allows for quick access, an external storage apparatus that allows for quick access, or the like.

[0911]

Although the present invention has been fully described by way of examples with reference to the accompanying drawings, it is to be noted that various changes and modifications will be apparent to those skilled in the art. Therefore, unless such changes and modifications depart from the scope of the present invention, they should be construed as being included therein.

Claims (8)

1-57. (canceled)

58. The processor of claim 71, wherein

the program execution unit has a CPU for executing programs, and

the power-consumption reducing unit performs the reducing for the duration that the relinquishing is performed by blocking a clock signal supplied to the CPU.

59. The processor of claim 71, wherein

the program execution unit has a CPU for executing programs, and

the power-consumption reducing unit performs the reducing for the duration that the relinquishing is performed by reducing a voltage applied to the CPU or setting the voltage to zero.

60. The processor of claim 71, further comprising:

a receiving unit for receiving an execution request for a program that is to be executed non-steadily, wherein

the power-consumption reducing unit stops the reducing if the reducing is being performed when the execution request is received.

61. The processor of claim 60, wherein

the execution request is an interrupt-processing request.

62. The processor of claim 60, wherein

the execution request is an event-processing request for urgently executing a program following the exceptional switching by the select/switch unit.

63-70. (canceled)

71. A program execution method for executing a program in a processor, the processor including a plurality of register groups and sequentially executing a plurality of programs using a plurality of register value groups that correspond one-to-one with the programs, comprising:

a select/switch step of selecting one of the plurality of register groups as an execution target register group on which a program execution is based, and switching the selection target every time a predetermined period elapses; and

a program execution step of executing, every time the switching is performed, a program corresponding to a register value group in the execution target register group.

US121105392002-01-092008-04-28Processor and program execution method capable of efficient program execution
Active2023-07-11US7930520B2
(en)

Method for performing application wake-up management for a portable device by classifying one application wake-up event of a plurality of application wake-up events as a triggering event for the other application wake-up events