Dynamic software updating c
In this paper, we present a DSU implementation for C that aims to meet this challenge.We compile programs specially so that they can be dynamically patched, and generate most of a dynamic patch automatically.While rebootless patching is convenient for everyone, it’s a game changer for some applications.For example, web and cloud hosting services normally require customers to experience some downtime while the OS infrastructure is upgraded; with rebootless patching, upgrades happen seamlessly.When a process makes a system call after the patch is installed, k Graft sets a “new universe” flag on that process.From that point on, that process will always use the patched code.The problem with multi-version execution is that processes running two different code versions could interact, e.g., through common data structures, and thereby potentially violate new (or outdated) invariants.This problem would be particularly acute if the old and new version changed a data structure’s format. Given that the original data-structure has no space for new fields, the idea is to create a separate data-structure just for them and rewrite the original binary code to use the new structure when manipulating the new fields.
Once the flag is set on all processes, k Graft drops the now-redundant indirection and jumps straight to the patched code.DSU is appealing compared to other approaches for on-line upgrades because it is quite general and requires no redundant hardware.The challenge is in making DSU practical: it should be flexible, and yet safe, efficient, and easy to use.Or, if the new code uses two threads to perform some functionality which in the old version requires only one thread, then we need to map the existing thread’s stack to an equivalent one for the new code, and start a new thread to handle the extracted functionality.Changes to in-memory data, like the first example, we call These two descend from earlier research, by Jeff Arnold and Frans Kaashoek, on a solution called Ksplice, which was bought by Oracle in 2011. The basic approach to dynamically updating a function f is to overwrite the first few instructions of the current f to jump to its new version.
In total, we dynamically patched each program with three years' worth of releases.