IP Library Granted Patent US 8,001,547
Granted Patent B2
US 8,001,547 · App. 12/201,385 · Granted Aug 16, 2011

Logic for synchronizing multiple tasks at multiple locations in an instruction stream

View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,001,547
App. No.
12/201,385
Granted
Aug 16, 2011
Kind
B2
Abstract

Logic (also called “synchronizing logic”) in a co-processor (that provides an interface to memory) receives a signal (called a “declaration”) from each of a number of tasks, based on an initial determination of one or more paths (also called “code paths”) in an instruction stream (e.g. originating from a high-level software program or from low-level microcode) that a task is likely to follow. Once a task (also called “disabled” task) declares its lack of a future need to access a shared data, the synchronizing logic allows that shared data to be accessed by other tasks (also called “needy” tasks) that have indicated their need to access the same. Moreover, the synchronizing logic also allows the shared data to be accessed by the other needy tasks on completion of access of the shared data by a current task (assuming the current task was also a needy task).

Claims (103)

1. A method of synchronizing a group of tasks in a microcontroller, the method comprising:

each task in the group of tasks in the microcontroller making an initial determination of one or more code paths that said each task is likely to follow;

each task, in the group of tasks in the microcontroller, declaring in a signal among a plurality of signals one of need or no need to access a shared resource expected at a synchronization point in said one or more code paths identified in the initial determination, prior to reaching the synchronization point;

receiving said signal from said each task in the group of tasks in the microcontroller;

granting access to the shared resource, based on the plurality of signals, to a second task in the group of tasks that declares in a second signal among the plurality of signals a need to access the shared resource if a first task in the group of tasks in the microcontroller has declared in a first signal among the plurality of signals no need to access the shared resource;

the first task executing without accessing the shared resource;

the second task accessing the shared resource only after said granting;

a third task in the group of tasks declares in a third signal in the plurality of signals, a need to access the shared resource; and

subsequent to said declaring by the third task in the third signal and when the synchronization point is reached, further declaring by the third task in a fourth signal in the plurality of signals, no need to access the shared resource thereby to indicate a change in expectation on the access to the shared resource by the third task.

2. The method of claim 1 wherein:

said initial determination by the first task is made based on information in a header of a first unit of data received by the microcontroller; and

said initial determination by the second task is made based on information in a header of a second unit of data received by the microcontroller.

3. The method of claim 2 wherein:

the first unit of data comprises a packet.

4. The method of claim 2 wherein:

the first unit of data comprises a cell.

5. A method of synchronizing a group of tasks in a microcontroller, the method comprising:

each task, in the group of tasks in the microcontroller, declaring in a signal one of need or no need to access a shared resource expected at a synchronization point in a code path, prior to reaching the synchronization point;

receiving said signal from said each task in the group of tasks in the microcontroller;

granting access to the shared resource, based on a plurality of signals comprising said signal, to a second task in the group of tasks that declares a need to access the shared resource if a first task in the group of tasks has declared no need to access the shared resource;

the first task executing without accessing the shared resource;

the second task accessing the shared resource only after said granting;

a third task in the group of tasks declaring a need to access the shared resource;

subsequent to said declaring by the third task, further declaring by the third task of no need to access the shared resource thereby to indicate a change in expectation on the access to the shared resource by the third task;

wherein said further declaring is performed after reaching the synchronization point in the third task;

wherein said declaring by the third task of the need is comprised in one signal output by the microcontroller; and

wherein said further declaring by the third task of no need is comprised in another signal output by the microcontroller.

6. The method of claim 5 wherein:

said declaring by the first task is made based at least partially on information in a header of a first unit of data received by the microcontroller; and

said declaring by the second task is made based at least partially on information in a header of a second unit of data received by the microcontroller.

7. The method of claim 6 wherein:

the first unit of data comprises a packet.

8. The method of claim 6 wherein:

the first unit of data comprises a cell.

9. The method of claim 5 wherein:

said declaring by the third task of the need is performed prior to reaching the synchronization point in the third task.

10. An apparatus comprising:

a microcontroller executing a group of tasks, each task in the group of tasks making an initial determination of one or more code paths that said each task is likely to follow, each task in the group declaring in a signal among a plurality of signals one of need or no need to access a shared resource expected at a synchronization point in said one or more code paths, based on the initial determination prior to reaching the synchronization point;

a co-processor coupled to the microcontroller, the co-processor receiving the plurality of signals from the microcontroller, the co-processor granting access to the shared resource, based on the plurality of signals, to a second task in the group of tasks that declares in a second signal a need to access the shared resource if a first task in the group of tasks has declared in a first signal no need to access the shared resource;

wherein the microcontroller executes said first task without accessing the shared resource and the microcontroller executes said second task by accessing the shared resource only after receiving a grant signal from the co-processor;

wherein within the microcontroller, a third task in the group of tasks declares in a third signal in the plurality of signals, a need to access the shared resource; and

wherein within the microcontroller, subsequent to said declaring by the third task in the third signal and when the synchronization point is reached, further declaring by the third task in a fourth signal in the plurality of signals, no need to access the shared resource thereby to indicate a change in expectation on the access to the shared resource by the third task.

11. The apparatus of claim 10 wherein:

the initial determination in the first task is made based on information in a header of a first unit of data received by the microcontroller; and

the initial determination in the second task is made based on information in a header of a second unit of data received by the microcontroller.

12. The apparatus of claim 11 wherein:

the first unit of data comprises a packet.

13. The apparatus of claim 11 wherein:

the first unit of data comprises a cell.

14. Circuitry for synchronizing a group of tasks, said circuitry comprising:

means for each task in the group of tasks to make an initial determination of one or more code paths that said each task is likely to follow;

means for each task in the group of tasks to declare in a signal among a plurality of signals one of need or no need to access a shared resource expected at a synchronization point in said one or more code paths, based on the initial determination prior to reaching the synchronization point;

means for receiving the plurality of signals from the group of tasks;

means for granting access to the shared resource, based on the plurality of signals, to a second task in the group of tasks that declares in a second signal a need to access the shared resource if a first task in the group of tasks has declared in a first signal no need to access the shared resource;

means for said first task to execute without accessing the shared resource; and

means for said second task to access said shared resource only after receiving a grant signal from the means for granting;

means for a third task in the group of tasks to declare in a third signal in the plurality of signals, a need to access the shared resource; and

means for further declaring by the third task, subsequent to said third signal and when the synchronization point is reached, in a fourth signal in the plurality of signals, no need to access the shared resource thereby to indicate a change in expectation on the access to the shared resource by the third task.

15. The circuitry of claim 14 wherein:

the initial determination in the first task is made based on information in a header of a first unit of data received by the circuitry; and

the initial determination in the second task is made based on information in a header of a second unit of data received by the circuitry.

16. The circuitry of claim 15 wherein:

the first unit of data comprises a packet.

17. The circuitry of claim 15 wherein:

the first unit of data comprises a cell.

18. An apparatus comprising:

a microcontroller executing a group of tasks, each task in the group declaring in a signal one of need or no need to access a shared resource expected at a synchronization point in a code path, prior to reaching the synchronization point;

a co-processor coupled to the microcontroller, the co-processor receiving said signal from each task in the group of tasks in the microcontroller, the co-processor granting access to the shared resource, based on the plurality of signals, to a second task in the group of tasks that declares in a second signal a need to access the shared resource if a first task in the group of tasks has declared no need to access the shared resource;

wherein the microcontroller executes said first task without accessing the shared resource and the microcontroller executes said second task by accessing the shared resource only after receiving a grant signal from the co-processor;

wherein within the microcontroller, a third task in the group of tasks declares a need to access the shared resource; and

wherein within the microcontroller, subsequent to said declaring by the third task, further declaring by the third task of no need to access the shared resource thereby to indicate a change in expectation on the access to the shared resource by the third task;

wherein said further declaring is performed after reaching the synchronization point in the third task;

wherein said declaring by the third task of the need is comprised in one signal output by the microcontroller; and

wherein said further declaring by the third task of no need is comprised in another signal output by the microcontroller.

19. The apparatus of claim 18 wherein:

said declaring by the first task is made based at least partially on information in a header of a first unit of data received by the microcontroller; and

said declaring by the second task is made based at least partially on information in a header of a second unit of data received by the microcontroller.

20. The apparatus of claim 19 wherein:

the first unit of data comprises a packet.

21. The apparatus of claim 19 wherein:

the first unit of data comprises a cell.

22. The apparatus of claim 18 wherein:

said declaring by the third task of the need is performed prior to reaching the synchronization point in the third task.

23. Circuitry for synchronizing a group of tasks, said circuitry comprising:

means for each task, in the group of tasks, for declaring in a signal one of need or no need to access a shared resource expected at a synchronization point in a code path, prior to reaching the synchronization point;

means for receiving said signal from said each task in the group of tasks;

means for granting access to the shared resource, based on a plurality of signals comprising said signal, to a second task in the group of tasks that declares a need to access the shared resource if a first task in the group of tasks has declared no need to access the shared resource;

means for the first task executing without accessing the shared resource;

means for the second task accessing the shared resource only after said granting;

means for a third task in the group of tasks declaring a need to access the shared resource;

means for further declaring by the third task, subsequent to said declaring by the third task, of no need to access the shared resource thereby to indicate a change in expectation on the access to the shared resource by the third task;

wherein said further declaring is performed after reaching the synchronization point in the third task;

wherein said declaring by the third task of the need is comprised in one signal; and

wherein said further declaring by the third task of no need is comprised in another signal.

24. The circuitry of claim 23 wherein:

said declaring by the first task is made based at least partially on information in a header of a first unit of data; and

said declaring by the second task is made based at least partially on information in a header of a second unit of data.

25. The circuitry of claim 24 wherein:

the first unit of data comprises a packet.

26. The circuitry of claim 24 wherein:

the first unit of data comprises a cell.

27. The circuitry of claim 23 wherein:

said declaring by the third task of the need is performed prior to reaching the synchronization point in the third task.

Assignments (4)
RELEASE (REEL 038041 / FRAME 0001) Recorded Jan 2, 2018
From: JPMORGAN CHASE BANK, N.A.
To: RPX CORPORATION; RPX CLEARINGHOUSE LLC
Reel/Frame 044970/0030 →
SECURITY AGREEMENT Recorded Mar 9, 2016
From: RPX CORPORATION; RPX CLEARINGHOUSE LLC
To: JPMORGAN CHASE BANK, N.A., AS COLLATERAL AGENT
Reel/Frame 038041/0001 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Feb 1, 2016
From: NET NAVIGATION SYSTEMS, LLC
To: RPX CORPORATION
Reel/Frame 037679/0953 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 21, 2013
From: PACKETQ SOLUTIONS LLC
To: NET NAVIGATION SYSTEMS, LLC
Reel/Frame 031645/0183 →