Garbage Collector Memory Accounting in Language-Based Systems
- Authors
- David W. Price
Algis Rudys
Dan S. Wallach
- Abstract
- Language run-time systems are often called upon to safely
execute mutually distrustful tasks within the same runtime, protecting them
from other tasks' bugs or otherwise hostile behavior. Well-studied access
controls exist in systems such as Java to prevent unauthorized reading or
writing of data, but techniques to measure and control resource usage are
less prevalent. In particular, most language run-time systems include no facility
to account for and regulate heap memory usage on a per-task basis. This oversight
can be exploited by a misbehaving task, which might allocate and hold live
enough memory to cause a denial-of-service attack, crashing or slowing down
other tasks. In addition, tasks can legitimately share references to the same
objects, and traditional approaches that charge memory to its allocator fail
to properly account for this sharing. We present a method for modifying the
garbage collector, already present in most modern language run-time systems,
to measure the amount of live memory reachable from each task as it performs
its regular duties. Our system naturally distinguishes memory shared across
tasks from memory reachable from only a single task without requiring incompatible
changes to the semantics of the programming language. Our prototype implementation
imposes negligible performance overheads in a variety of benchmarks, yet provides
enough information for the expression of rich policies to express the limits
on a task's memory usage.
- Published
- Proceedings of the 2003 IEEE Symposium on Security &
Privacy, Oakland, California, May 2003.
- Text
- PDF (210 kbytes)
- Additional Notes
- The multitasking
garbage collector microbenchmark we used in this paper is available.
Dan Wallach, CS
Department, Rice University
Last modified:
Fri 28-Feb-2003 22:17