A porting layer takes software developed using a single threaded modeling tool to a multiple threaded environment. The single threaded modeling tool is used to model the software. The porting layer ports in variables into a multiple threaded operating environment by reference and not as variables so that each thread can access variables by reference.
|
1. A wireless communication device comprising:
a system processor;
a communication processor;
a communication module, in communication with the system processor and the communication processor to facilitate communication between the system processor and the communication processor; and
a shared memory associated with the communication module;
wherein the system processor is configured to receive variables from a single thread in a single threaded operating environment, port the received variables via a porting layer for use in a multiple threaded environment wherein the porting the received variables into the multiple threaded operating environment is performed by reference such that each of an independent thread can access variables by reference without stopping on another independent thread's variable.
2. The wireless communication device of
3. The wireless communication device of
4. The wireless communication device of
5. The wireless communication device of
|
This application claims priority from U.S. provisional application No. 60/405,995, filed Aug. 26, 2002, which is incorporated by reference as if fully set forth.
This invention generally relates to wireless devices. In particular, the invention relates to developing software to run on hardware of such devices.
Developing software to effectively use hardware, such as communication processors and system processors, of wireless devices is difficult. Wireless devices have limited memory storage capacity, making it desirable that software operating systems, interfaces and applications have a small footprint. However, using reduced footprint software design techniques limits the flexibility accorded to software designers.
To illustrate, one tool for producing software modeling language SDL code is TELELOGIC TAU. That tool allows for software programmers to produce a model of the software and the tool produces code from the model. TELELOGIC TAU has two potential code generators, C ADVANCED and C MICRO. C ADVANCED allows a software designer to use all the features of SDL. C MICRO limits the available features with the advantage of producing a smaller code footprint.
TELELOGIC TAU supports both light and tight integration. In light integration, the entire SDL system executes in a single thread. In tight integration, each SDL process becomes a thread. To minimize the code footprint, C MICRO is desirable to be used. However, C MICRO only supports light integration and, accordingly, multiple threads of execution are not supported. Accordingly, it is desirable to have code with a reduced footprint that supports multiple threads of execution.
A porting layer takes software developed using a single threaded modeling tool to a multiple threaded environment. The single threaded modeling tool is used to model the software. The porting layer ports in variables into a multiple threaded operating environment by reference and not as variables so that each thread can access variables by reference.
The wireless device has a system processor 100, such as a RISC. The system processor 100 typically runs the system applications, such as web browsing, calendars, etc. A communication processor 102, such as a DSP, typically runs the wireless communication protocols. A communication module 104 allows for communication between the system and communication processor. A shared memory 106 is accessible by both processors 100 and 102 via the communication module 104.
The SDL porting layer 110 represents the conversion of SDL model elements (processes, signals, partitions, etc.) into operating environment constructs through the OS API 120. The operating environment 112 provides an OS/hardware independent environment via the OS API 120. The OS abstraction layer 114 implements the OS API 120 for a particular underlying operating system and hardware platform. It maps the OS API 120 constructs into their underlying OS representations.
The OS abstraction layer 122 interfaces with the communication module 104 to support inter-processor communication. The communication module 104 provides the communication path between the OS API threads 1281 to 1282 (128) across the system/communication processor boundary and is responsible for the transfer for both data and control. As shown in
Although, all of the layers work together in the preferred software structure, each layer can be typically used with other layers in alternate software structures.
Initially, the signal from one SDL process 1182 is converted to an OS message by the SDL kernel 1321 in a first environment. The message is routed to an SDL kernel 1322 in a second environment. In other words, the message is “put” in the second environments queue 1302. The SDL kernel 1322 in the second environment detects the message, and converts the received message back to its signal format. The second environment SDL kernel 1322 signals the appropriate process.
Fundamentally, each SDL light integration partition resolves to a thread with a single message queue within the operating environment. Communication between partitions occurs via messaging. Each SDL kernel/environment knows what SDL processes 118 are internal, and what SDL processes 118 are external. Each SDL kernel/environment knows where to route external signals (i.e. what partition their recipient resides) and each SDL kernel/environment knows how to convert signals to messages, and vice versa.
For a first SDL process 1181 to signal a second SDL process 1182, the first process 1181 converts the signal into an OS message. That message is routed to the second SDL process thread 1282 via its message queue 1302. That SDL Process thread 1282 wakes up on the message and the message is converted back to a SDL signal. The second SDL Process 1182 receives the signal from first SDL Process 1181.
This procedure facilitates talking across processor boundaries. The partitions can by targeted to a specific processor and to function across the boundaries external tasks 136 may be used.
Abbreviations
In the preferred embodiment, an SDL porting layer 110 is used. The preferred SDL porting layer allows for software modeled using a single threaded code generation tool to run as multi-threaded software. The most preferred application is to code generated using C MICRO light integration of TELELOGIC TAU. The SDL porting layer 110 effectively converts the light integration (single thread) to a tight integration (multiple threads). The most preferred application allows for reduced code footprint (C MICRO, light integration) with the added benefits a multi-threaded environment.
In the preferred embodiment, an SDL porting layer 110 is used. The preferred SDL porting layer allows for software modeled using a single threaded code generation tool to run as multi-threaded software. The most preferred application is to code generated using C-Micro light integration of Telelogic Tau. The SDL porting layer 110 effectively converts the light integration (single thread) to a tight integration (multiple threads). The most preferred application allows for reduced code footprint (C-micro, light integration) with the added benefits a multi-threaded environment.
In other embodiments, the other tools can be used without the SDL porting layer. Additionally, aspects of the SDL porting layer can be used with other single thread code generation tools as well as multi-thread code generation tools other than C MICRO.
The basic requirement of the porting layer 110 is to produce the same SDL system behavior as the SDT provided C MICRO kernel. This includes the ability to support the following SDL model features (SDT-imposed restrictions in parentheses).
SDL Feature:
The options chosen for the preferred code generation are as follows, although others may be used.
The options chosen for the preferred code generation are as follows, although others may be used.
Analyze & generate code (only)
The code generated by SDT consists mainly of data structures. The only pieces that translate to operational code are the transition functions associated with each process. The structure of the generated data types is represented in
The root process table 138 is a global array, sized to the maximum number of process types in the system, plus one to allow for an end marker. This array is composed of process description block entries, one for each process type in the SDL system. The contents of each process description 140 are static variables, placed in the process's source file, along with the transition function. The root process table 138 is placed in the system source file.
The enumerations (process type and timer/signal IDs) are placed in header files 142. Process types are preferably numbered beginning at 0. To accommodate multiple instances of a single process type running in the system, an instance number is combined with the process type to come up with the process ID, or PID. Instance numbers begin at 0. Timer ID's and signal ID's share a common enumeration. Timers ID's are defined first, beginning at 1 (0 is reserved for the Start signal).
An SDL system can be partitioned using either automatic or manual partitioning. Automatic partitioning is accomplished preferably via an SDT build script. When the system is partitioned, send-via signals that cross a partition's boundary get translated into signals that are sent-to an “environment” SDL process. The identity of the true intended recipient is lost. Enough information may be available in the SDT-generated PR file to construct a mapping table (signal ID+sending process ID=destination process ID), which the environment process could use to forward the signals. However, this imposes more restrictions on the design of the system and adds extra hops to the signal's route.
Manual partitioning is done after code generation. A copy is made of the system source file, and the two are edited. The root process table entries for processes not in the partition are replaced with null entries. Next, the files are grouped according to partition and compiled using an appropriate make file. Full separation is required during the code generation step so that this grouping can occur. The main drawback to manual partitioning is the need to edit a generated code file. However, it produces more efficient code, and it does not impose limitations on the system.
For SDL system startup, each partition within the SDL system is compiled into a single executable (exact form is both OS and HW platform dependent). At startup, the partition's “main” (main thread) loops through the root process table 138. Each non-null entry represents a local process type. The process description 140 for each process type contains an instance data table, sized to the maximum number of instances of the type that can be running simultaneously in the system. A thread group is created, containing a synchronized thread for each possible process instance. A process control block is created for each instance, containing the process ID and a pointer to the process description. A pointer to the process control block is passed to the thread so that it has scoped access to its own information.
For SDL signal inputs, each SDL process instance runs in its own operating environment thread. Its responsibility is to receive and react to signals. Signals are received in messages through the thread's associated message queue. There are three ways an SDL process may react to a signal: discard it, save it for later, or initiate a state transition.
Once a signal has been identified as the current signal, the SDL process decides how to react to it. The framework for processing a signal resides in the porting layer and uses data accessed through the process control block 144. The following is the processing of the signal.
As illustrated in the flow chart of
If the current state is neither Dormant nor Start, the signal is checked to see if it represents a timer, 178. When a timer is set, the sender ID of the signal is set to a reserved Timer process value, and an entry is added to the active timer list 180. If a timer is cancelled, its entry is removed from the list. If a signal 172 is received whose sender has been set to the reserved Timer process value, it is identified as a timer signal. If an entry for that timer is found on the active list 180, 182, the entry is removed and processing continues. If it is not found, the timer is invalid, and the transition ID is set to Discard, 184.
If the transition ID has not yet been set, the expected signals 188 for the current state are checked. In the state index table, each state maps to an index into the transition table, 190, where the signals expected in that state begin. The transition table entries are state-ordered the same as the state index table, so by also using the subsequent state's index, a range of indices into the Transition Table 190 is obtained. Within this range, if a signal ID is found that matches the current signal 188, or if the Asterisk signal ID is defined for this state, the corresponding transition ID is taken, 194.
If a valid transition ID has still not been found, the Asterisk State is checked. If the Asterisk State is defined for this process, the first entry in the state index table is not a 0, since the Asterisk state entries in the transition table come first. Therefore, this bottom range is checked the same as the current state.
If the transition ID is Discard, 198, or if all attempts to obtain a valid transition ID fail, a Null, (the signal is unexpected), the signal is discarded, 208. If the transition ID is “Save”, 200, the signal is saved via advance itorator 210, (on the save list 212). All other transition ID's are fed into the process description's transition function 214, the behavior of which is defined in SDL, and a new state ID is returned.
If the new state is not Dash, 202, the instance state table 216 is updated to the new state. If the new state is Dormant, 206, all active timers are cancelled, 218, 220. The save list 212 and the message queue are not flushed, 204, but are handled through normal processing. If the process is quickly started again, this may result in stale signals reaching the new process (since Start signals are sent with High priority and could jump ahead of stale signals in the queue). However, this is preferable to mistakenly discarding signals intended for the new process.
For signal output, SDL processes send signals from within the transition function. A connection is acquired to the destination message queue. Since opening and closing a connection to a message queue each time a message is put on it is undesirable, connections are opened as needed, and kept in a shared area for all threads in the process to use until system shutdown. This is accomplished via a lookup function, provided by the OS abstraction layer 122.
Timers can be set by an SDL process. When a timer goes off, it is received and processed as a signal. An SDL process can also cancel timers. Once a timer has been cancelled, it should not appear on the incoming message queue.
Gazda, Robert, Hergenhan, Scott
Patent | Priority | Assignee | Title |
8332830, | Feb 08 2005 | KANTOROWITZ, ELIEZER | Environment-independent software |
9348568, | Aug 24 2011 | Accenture Global Services Limited | Software application porting system |
Patent | Priority | Assignee | Title |
5493692, | Dec 03 1993 | UBICOMM, LLC | Selective delivery of electronic messages in a multiple computer system based on context and environment of a user |
5555416, | Sep 22 1992 | Sun Microsystems, Inc. | Automated software installation and operating environment configuration for a computer system based on classification rules |
5946487, | Jun 10 1996 | AVAGO TECHNOLOGIES GENERAL IP SINGAPORE PTE LTD | Object-oriented multi-media architecture |
6029000, | Dec 22 1997 | Texas Instruments Incorporated | Mobile communication system with cross compiler and cross linker |
6226788, | Jul 22 1998 | Cisco Technology, Inc | Extensible network management system |
6256637, | May 05 1998 | VMWARE, INC | Transactional virtual machine architecture |
6256775, | Dec 11 1997 | International Business Machines Corporation | Facilities for detailed software performance analysis in a multithreaded processor |
6263213, | Dec 23 1997 | Sony International (Europe) GmbH | Component-based control structure for wireless communication |
6272519, | May 14 1996 | BMC Software, Inc. | Dynamic alteration of operating system kernel resource tables |
6407751, | Jan 28 1998 | International Business Machines Corporation | Method and apparatus of generating mobile objects and storage medium storing an object generating mobile objects |
6493740, | Jun 16 1998 | Oracle International Corporation | Methods and apparatus for multi-thread processing utilizing a single-context architecture |
6505228, | Jul 22 1998 | Cisco Technology, Inc | Dynamic determination of execution sequence |
6606742, | Jul 19 1993 | Apple Inc | Object-oriented interface for portability to diverse operating systems or hardware platforms |
6628965, | Oct 22 1997 | Dynamic Mobile Data Systems, Inc. | Computer method and system for management and control of wireless devices |
6631516, | Apr 25 2000 | GOOGLE LLC | Extended syntax record for assembler language instructions |
6711739, | Nov 08 1999 | Sun Microsystems, Inc. | System and method for handling threads of execution |
6721945, | Sep 18 2000 | International Business Machines Corporation | Optimization of calls in programming languages using pointers for passing reference parameters |
6721949, | Mar 27 2000 | General Instrument Corporation | Kernel abstraction layer for digital television set-top box firmware |
6725451, | Dec 17 1997 | Fujitsu Siemens Computers GmbH | Method for converting a system call |
6754885, | May 17 1999 | Invensys Systems, Inc | Methods and apparatus for controlling object appearance in a process control configuration system |
6757904, | Mar 10 2000 | Microsoft Technology Licensing, LLC | Flexible interface for communicating between operating systems |
6804682, | Apr 29 2002 | CODEGEAR LLC | System and methodology providing compiler-assisted refactoring |
6807548, | Apr 29 2002 | CODEGEAR LLC | System and methodology providing automated selection adjustment for refactoring |
6813764, | May 07 2001 | International Business Machines Corporation | Compiler generation of instruction sequences for unresolved storage references |
6842433, | Apr 24 2001 | QWIKKER, INC | System and method for communicating information from a computerized distributor to portable computing devices |
6851110, | Jun 07 2001 | VALTRUS INNOVATIONS LIMITED | Optimizing an executable computer program having address-bridging code segments |
6854108, | May 11 2000 | International Business Machines Corporation | Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors |
6856950, | Oct 15 1999 | Hewlett Packard Enterprise Development LP | Abstract verification environment |
6901587, | Nov 16 1998 | RPX Corporation | Method and system of cache management using spatial separation of outliers |
6920634, | Aug 03 1998 | IBM Corporation | Detecting and causing unsafe latent accesses to a resource in multi-threaded programs |
6952825, | Jan 14 1999 | INTERUNIVERSITAIRE MICRO-ELEKTRONICA CENTRUM IMEC | Concurrent timed digital system design method and environment |
6954922, | Apr 29 1998 | Oracle America, Inc | Method apparatus and article of manufacture for time profiling multi-threaded programs |
6968541, | Oct 04 2000 | ServiceNow, Inc; International Business Machines Corporation | Apparatus and method for template instantiation with a cross compiler |
6976253, | Jul 30 2003 | Microsoft Technology Licensing, LLC | Method and apparatus for configuring a mobile device |
7028305, | May 16 2001 | Microsoft Technology Licensing, LLC | Operating system abstraction and protection layer |
7039738, | Nov 16 1998 | RPX Corporation | Method and system for handling device driver interrupts |
7062766, | Jan 21 1998 | WSOU Investments, LLC | Embedded system with interrupt handler for multiple operating systems |
7082432, | Apr 24 2003 | Oracle America, Inc | Specifying transaction manager type at various application levels |
7082604, | Apr 20 2001 | Mobile Agent Technologies, Incorporated | Method and apparatus for breaking down computing tasks across a network of heterogeneous computer for parallel execution by utilizing autonomous mobile agents |
7162718, | Dec 12 2000 | LinkedIn Corporation | Language extension for light weight threading in a JVM |
7174554, | Dec 20 2002 | Microsoft Technology Licensing, LLC | Tools and methods for discovering race condition errors |
20010027464, | |||
20020006137, | |||
20020091800, | |||
20020174215, | |||
20030233647, | |||
20040025042, | |||
20040054821, | |||
20040162103, | |||
WO74368, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Aug 26 2003 | InterDigital Technology Corporation | (assignment on the face of the patent) | / | |||
Jan 06 2004 | GAZDA, ROBERT | InterDigital Technology Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 014728 | /0369 | |
Jan 06 2004 | HERGENHAN, SCOTT | InterDigital Technology Corporation | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 014728 | /0369 |
Date | Maintenance Fee Events |
Mar 19 2012 | REM: Maintenance Fee Reminder Mailed. |
Aug 05 2012 | EXP: Patent Expired for Failure to Pay Maintenance Fees. |
Date | Maintenance Schedule |
Aug 05 2011 | 4 years fee payment window open |
Feb 05 2012 | 6 months grace period start (w surcharge) |
Aug 05 2012 | patent expiry (for year 4) |
Aug 05 2014 | 2 years to revive unintentionally abandoned end. (for year 4) |
Aug 05 2015 | 8 years fee payment window open |
Feb 05 2016 | 6 months grace period start (w surcharge) |
Aug 05 2016 | patent expiry (for year 8) |
Aug 05 2018 | 2 years to revive unintentionally abandoned end. (for year 8) |
Aug 05 2019 | 12 years fee payment window open |
Feb 05 2020 | 6 months grace period start (w surcharge) |
Aug 05 2020 | patent expiry (for year 12) |
Aug 05 2022 | 2 years to revive unintentionally abandoned end. (for year 12) |