|
ABSTRACT
Out-of-memory errors are a serious source of unreliability in most embedded systems. Applications run out of main memory because of the frequent difficulty of estimating the memory requirement before deployment, either because it depends on input data, or because certain language features prevent estimation. The typical lack of disks and virtual memory in embedded systems has two serious consequences when an out-of-memory error occurs. First, there is no swap space for the application to grow into, and the system crashes. Second, since protection from virtual memory is usually absent, the fact that a segment has exceeded its bounds is not even detected and hence no pre-crash remedial action is possible.This work improves system reliability in two ways. First it proposes a low-overhead system of run-time checks by which the out-of-memory errors are detected just before they will happen, by using carefully optimized compiler-inserted run-time check code. Such error detection enables the designer to incorporate system-specific remedial action, such as transfer to manual control, shutting down of non-critical tasks, or other actions. Second, this work proposes five related techniques that can grow the stack or heap segment after it is out of memory, into previously un-utilized space such as dead variables and space freed by compressed live variables. These techniques can avoid the out-of-memory error if the extra space recovered is enough to complete execution.Results from our benchmarks show that the overheads from the system of run-time checks for detecting memory overflow are extremely low: the run-time and code-size overheads are 1.1% and 0.09% on average. When the reuse functionality is included, the run-time and code-size overheads increase to only 3.2%and 2.33%, but the method is able to grow the stack or heap beyond its overflow by an amount that ranges from 0.7% to 93.5% of the combined stack and heap size.
REFERENCES
Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.
| |
1
|
High availability design for embedded systems. Technical report, Wind River, Inc. http://www.windriver.com/-whitepapers/high availability design.html.
|
| |
2
|
|
| |
3
|
Atmel Microcontrollers based on 8051 Architecture. http://www.atmel.com/products/8051.
|
| |
4
|
Joel F. Bartlett. Compacting Garbage Collection with Ambiguous Roots. Technical report, DEC Western Research Laboratory, Palo Alto, CA, February 1988.
|
 |
5
|
Rob von Behren , Jeremy Condit , Feng Zhou , George C. Necula , Eric Brewer, Capriccio: scalable threads for internet services, Proceedings of the nineteenth ACM symposium on Operating systems principles, October 19-22, 2003, Bolton Landing, NY, USA
|
| |
6
|
|
| |
7
|
D. Brylow, N. Damgaard, and J. Palsberg. Stack-size Estimation for Interrupt-driven Microcontrollers. Technical report, Purdue University, June 2000. http://www.brics.dk/ damgaard/Download/zilog-test.pdf.
|
| |
8
|
G. Chen , R. Shetty , M. Kandemir , N. Vijaykrishnan , M. J. Irwin , M. Wolczko, Tuning Garbage Collection in an Embedded Java Environment, Proceedings of the 8th International Symposium on High-Performance Computer Architecture, p.92, February 02-06, 2002
|
 |
9
|
|
 |
10
|
Amer Diwan , J. Eliot B. Moss , Kathryn S. McKinley, Simple and effective analysis of statically-typed object-oriented programs, Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, p.292-305, October 06-10, 1996, San Jose, California, United States
|
| |
11
|
Document No. ARM DDI 0084D, ARM Ltd. ARM7TDMI-S Data sheet, October 1998.
|
| |
12
|
Michael Durrant. Running Linux on low cost, low power MMU-less processors. August 2000. http://www.linuxdevices.com/articles/AT6245686197.html.
|
| |
13
|
|
| |
14
|
M. Game and A. Booker. Codepack: Code compression for PowerPC processors. MicroNews 5(1), 1999.
|
| |
15
|
|
| |
16
|
Intel i960Sx 32-bit Microprocessor. Intel Corporation. http://www.intel.com/design/i960/documentation/docs sx.htm.
|
| |
17
|
David Kleidermacher and Mark Griglock. Safety-Critical Operating Systems. Embedded Systems Programming, 14(10), September 2001. http://www.embedded.com/story/OEG20010829S0055.
|
| |
18
|
|
| |
19
|
|
| |
20
|
Doug Lea. A Memory Allocator. April 2000. http://gee.cs.oswego.edu/dl/html/malloc.html.
|
| |
21
|
C.D. Lo. The Design of a Self-Maintained Memory Module for Real-Time Systems. In The 3rd IEEE International Workshop on System-on-Chip for Real-Time Applications, Alberta, Canada, July 2003. IEEE.
|
| |
22
|
Windows CE.NET. Microsoft Corporation. http://www.microsoft.com/embedded/ce.net/default.aspx.
|
| |
23
|
Motorola. M68000 User's Manual. Prentice Hall, Englewood Cliffs, NJ.
|
| |
24
|
M-CORE - MMC2001 Reference Manual. Motorola Corporation, 1998. http://www.motorola.com/SPS/-MCORE/info documentation.htm.
|
 |
25
|
|
 |
26
|
Patrik Persson, Live memory analysis for garbage collection in embedded systems, Proceedings of the ACM SIGPLAN 1999 workshop on Languages, compilers, and tools for embedded systems, p.45-54, May 05-05, 1999, Atlanta, Georgia, United States
|
| |
27
|
Wind River. High Availability Design for Embedded Systems. http://www.windriver.com/whitepapers/-highavailability design.html.
|
| |
28
|
Matthew Simpson, Surupa Biswas, and Rajeev Barua. Analysis of Compression Algorithms for Program Data. Technical report, U. of Maryland, ECE department, August 2003. http://www.ece.umd.edu/ barua/matt-compress-tr.pdf.
|
| |
29
|
|
 |
30
|
|
| |
31
|
|
| |
32
|
MSP430 Ultra-Low-Power MCUs. Texas Instruments, 2004. http://focus.ti.com/lit/ml/slab034g/slab034g.pdf.
|
 |
33
|
|
| |
34
|
Paul R. Wilson, Scott F. Kaplan, and Yannis Smaragdakis. The case for compressed caching in virtual memory systems. In Proceedings of the USENIX Annual Technical Conference, Monterey, CA, June 1999.
|
| |
35
|
|
CITED BY 6
|
|
|
|
|
Bhuvan Middha , Matthew Simpson , Rajeev Barua, MTSS: multi task stack sharing for embedded systems, Proceedings of the 2005 international conference on Compilers, architectures and synthesis for embedded systems, September 24-27, 2005, San Francisco, California, USA
|
|
|
Matthew Simpson , Bhuvan Middha , Rajeev Barua, Segment protection for embedded systems using run-time checks, Proceedings of the 2005 international conference on Compilers, architectures and synthesis for embedded systems, September 24-27, 2005, San Francisco, California, USA
|
|
|
|
|
|
|
|
|
|
REVIEW
"David Beaulieu : Reviewer"
This paper describes compiler techniques that can improve the reliability of embedded systems, by detecting and alleviating out-of-memory errors caused by overflow of stack or heap memory. The authors acknowledge the difficulty of estimating stack
more...
|