Imagine having a team of mechanics pull apart and retune your car’s engine as you hurtle down the highway, without making the engine miss a stroke. That’s the nature of the challenge that motivates Kim Hazelwood, an assistant professor of computer science, who has created tools to rewrite software as a computer is executing it. Before she started working on the problem in grad school, “I would have said there’s no way you can just take programs and change them and have every program work,” says Hazelwood. But industry giants like Intel and researchers around the world have used her subsequent achievements to do just that.
Hazelwood’s approach contradicts one of the most important notions in computer programming–abstraction. Abstraction means that software is built in layers: an application runs on top of an operating system, which runs on top of the hardware. Each layer does its best to conceal its inner workings. That way, someone writing, say, a Web browser doesn’t have to know all the engineering that went into a processor. At times, however, it would be useful for the application and hardware layers to communicate more directly. For example, some modern processors reduce electricity consumption by turning off portions of the chip until they are needed, but an application that causes this to happen excessively can shorten the life of the chip. Hazelwood’s software can monitor the processor and detect when subsystems are being turned off and on too often. It then analyzes the software instructions that are triggering the problem and substitutes more hardware-friendly commands that do the same job.
The ability to monitor and modify applications while they’re running could be widely useful. For example, it could make it easier to compensate for hardware bugs, divide tasks among multiple processors, run software on different processor architectures, and even defend against malicious software. –Stephen Cass