Co-routine Stack Frame Management via Driver Routine

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing programming languages lack direct support for co-routines, leading to inefficient implementation of suspension and resumption mechanisms on linear machine call stacks, which results in high overhead due to unnecessary stack frame copying and locking issues.

Innovation Solution

A driver routine manages co-routine execution by copying only suspended stack frames to the heap once and reactivating the topmost frame upon resumption, avoiding repeated copying and handling exceptions by replacing the callee's stack frame with the caller's.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If traditional co-routine implementation copies all stack frames to heap on each suspension, then co-routine can be suspended and resumed, but the overhead becomes O(d) per suspension where d is stack depth

Engineering Contradiction:
Improveco-routine suspension and resumption capabilityVSAvoidsuspension and resumption overhead
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

The patent extracts only the necessary stack frame information (return address and local variables) to the heap, rather than copying the entire stack. This selective extraction reduces the copying overhead from O(d) to O(1) per suspension, while maintaining the ability to restore the stack state when needed.

Inventive Principle:
Principle #2Taking out (Extraction)

Solution Approach 2:

The patent applies different handling strategies to different parts of the stack. Frequently accessed stack frames are kept in a cache structure for fast restoration, while less frequently accessed frames remain on the heap. This local optimization reduces the average restoration time without compromising the ability to restore any frame.

Inventive Principle:
Principle #3Local quality

2Adaptability or versatility

If additional stacks are allocated for co-routines to maintain state, then co-routine execution can be managed, but memory usage and stack management complexity increases

Engineering Contradiction:
Improveco-routine state management capabilityVSAvoidstack management complexity
Core Design Contradiction:
Adaptability or versatilityVSDevice complexity

Solution Approach 1:

The patent creates a universal stack management mechanism that handles both traditional subroutine calls and co-routine suspensions/resumptions through a single unified approach. The same stack frame structure and copying mechanism is used for both purposes, eliminating the need for separate stack management code paths and reducing overall complexity.

Inventive Principle:
Principle #6Universality (Multi-functionality)

Solution Approach 2:

The patent introduces a driver routine as an intermediary that manages the interaction between co-routines and the stack. This driver routine handles the complexity of suspension and resumption, providing a clean interface for co-routine implementation while centralizing the complex management logic in a single component.

Inventive Principle:
Principle #24Intermediary (Mediator)

3Reliability

If stack size for co-routine is fixed and cannot grow during execution, then stack overflow can be avoided, but memory efficiency decreases due to allocating larger stacks than needed

Engineering Contradiction:
Improvestack overflow preventionVSAvoidmemory usage
Core Design Contradiction:
ReliabilityVSQuantity of substance

Solution Approach 1:

The patent implements dynamic stack management where the stack frame size and allocation are adjusted based on the actual needs of each co-routine execution. Stack frames are allocated on-demand and can be freed when no longer needed, allowing the stack to grow and shrink dynamically rather than being fixed in size.

Inventive Principle:
Principle #15Dynamics

4Speed

If functions are written in assembly for co-routine context saving and restoration, then execution speed improves, but portability across processor families is lost

Engineering Contradiction:
Improveco-routine context restoration speedVSAvoidportability
Core Design Contradiction:
SpeedVSAdaptability or versatility

Solution Approach 1:

The patent uses a copying-based approach where stack frames are copied to and from the heap using high-level language operations. This copying mechanism is processor-independent and can be implemented efficiently in high-level languages, providing portability while maintaining acceptable performance through the use of optimized memory operations.

Inventive Principle:
Principle #26Copying

Data Source

PatentUS9003377B2Efficient resumption of co-routines on a linear stack
Publication Date: 2015.04.07 MICROSOFT TECHNOLOGY LICENSING LLC
  • US9003377B2 patent drawing
  • US9003377B2 patent drawing
  • US9003377B2 patent drawing

AI summary

Unsuspended co-routines are handled by the machine call stack mechanism in which the stack grows and shrinks as recursive calls are made and returned from. When a co-routine is suspended, however, additional call stack processing is performed. A suspension message is issued, and the entire resume-able part of the call stack is removed, and is copied to the heap. A frame that returns control to a driver method (a resumer) is copied to the call stack so that resumption of the co-routine does not recursively reactivate the whole call stack. Instead the resumer reactivates only the topmost or most current frame called the leaf frame. When a co-routine is suspended, it does not return to its caller, but instead returns to the resumer that has reactivated it.