User Kernel Space Communication via Shared Memory FIFO

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Conventional programming environments for data storage devices are often static, non-expandable, and lack a common interface for integrating software components, making it difficult to develop component-oriented software and adding functionality to storage devices with different operating systems.

Innovation Solution

A scalable, common software environment that provides a unified architecture for integrated management of network attached storage (NAS) and object and storage block services, using APIs to insulate code from platform dependencies and enable execution in both user and kernel modes, facilitating inter-module communication through shared memory and system calls.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Adaptability or versatility

If conventional programming environments are used for data storage devices, then the system structure is simple, but the environment becomes static and non-expandable, lacking a common interface for integrating software components

Engineering Contradiction:
Improvesoftware component integrationVSAvoidprogramming environment structure
Core Design Contradiction:
Adaptability or versatilityVSDevice complexity

Solution Approach 1:

The programming environment is segmented into distinct layers: a common software environment layer that provides platform-independent interfaces, and underlying platform-specific layers. This segmentation allows software components to be developed and integrated at the common layer without being tied to specific storage device platforms, thereby improving adaptability while managing complexity through clear architectural boundaries.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

A common software environment acts as an intermediary layer between the host system and storage device-specific code. This intermediary provides standardized interfaces and abstraction mechanisms that enable software components to communicate uniformly across different platforms, enhancing versatility without requiring direct integration with each platform's proprietary interfaces.

Inventive Principle:
Principle #24Intermediary (Mediator)

2Adaptability or versatility

If additional functionality is added to storage devices with different operating systems, then the system becomes more versatile, but the difficulty of integrating software components increases

Engineering Contradiction:
Improvefunctionality expansionVSAvoidsoftware development ease
Core Design Contradiction:
Adaptability or versatilityVSEase of manufacture

Solution Approach 1:

The common software environment implements universal interfaces and data structures that can accommodate multiple functionalities across different operating systems. By designing the architecture to be platform-agnostic at the common layer, new features can be added and integrated uniformly, making software development easier despite the diversity of underlying platforms and the need for expanded functionality.

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

3Adaptability or versatility

If code modules execute in both user space and kernel space, then the system becomes more flexible, but the complexity of inter-module communication increases

Engineering Contradiction:
Improvecode execution flexibilityVSAvoidinter-module communication structure
Core Design Contradiction:
Adaptability or versatilityVSDevice complexity

Solution Approach 1:

The common software environment serves as an intermediary communication layer between code modules executing in user space and those in kernel space. It provides standardized interfaces and communication protocols that abstract the complexity of cross-space interaction, allowing modules to communicate flexibly without directly managing the complexities of user-kernel transitions.

Inventive Principle:
Principle #24Intermediary (Mediator)

Solution Approach 2:

The architecture introduces an additional dimensional layer (the common software environment) between user space and kernel space. This intermediate dimension provides a unified interface layer that simplifies communication between modules across the user-kernel boundary, transforming a complex two-space interaction into a more manageable three-layer structure.

Inventive Principle:
Principle #17Another dimension (Dimensionality change)

4Reliability

If a common software environment with unified architecture is implemented, then scalability and reliability are enhanced, but the device complexity increases

Engineering Contradiction:
Improvesystem reliabilityVSAvoidsoftware architecture structure
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The software architecture is segmented into distinct functional layers with well-defined interfaces. The common software environment is separated from platform-specific code, and further segmented into modules handling different concerns (interface management, data processing, communication). This segmentation enhances reliability by isolating faults to specific modules while managing complexity through clear architectural boundaries and reduced coupling between components.

Inventive Principle:
Principle #1Segmentation

Data Source

PatentUS8209704B1Techniques for user space and kernel space communication
Publication Date: 2012.06.26 EMC IP HLDG CO LLC
  • US8209704B1 patent drawing
  • US8209704B1 patent drawing
  • US8209704B1 patent drawing

AI summary

Described are techniques for intermodule communication between a first code module and a second code module wherein one of the first and second code modules executing in user space and the other of the first and second code modules executing in kernel space. A shared memory portion includes storage for one or more commands. A first first-in-first-out (FIFO) structure is used to send a location in the shared memory portion from the first to the second code module. A second FIFO structure is used for sending a location in the shared memory portion from the second to the first code module. The first code module stores command data for a command at a first location in the shared memory portion. A command is issued from the first to the second code module by sending the first location using the first FIFO structure.