About four decades ago, the widespread availability of low-cost, general-purpose microprocessors allowed them to be incorporated into many real-world systems, where they replaced analog or purpose-built digital controls. For instance, small microprocessors are embedded in systems as diverse as laser printers, DVD players, and digital watches. However, these microprocessors are incapable of hosting a general-purpose operating system, so programming them has required specialized technically adept programmers. In recent years, with the advent of low-cost multi-GHz microprocessors that can host a general-purpose operating system, such as Linux or Android, even naïve programmers can use a sophisticated high-level development environment to engage with the physical world. Under the broad banner of cyber-physical systems, this has allowed computation to make inroads into areas as diverse as the electrical grid, water distribution systems, building heating, ventilation and air conditioning systems, and electric vehicles.
How should such systems be designed? A time-tested principle in computer systems design is to use an interface to separate an abstraction from its implementations.a This separation allows independent evolution of each component and for complex policies to be layered over underlying simple mechanisms, which in turn could be composed from yet simpler ones. A remarkable success of this design philosophy is the architecture of the Internet, where each layer of abstraction adds a limited level of additional complexity, and the top level of the layered protocol stack allows even naïve programmers to access the entire power of the Internet: a novice Python programmer can, in a few lines of code, obtain a reliable, byte-ordered, end-to-end connection from any Internet endpoint to any other endpoint, a task that requires a considerable amount of complex protocol machinery to accomplish.
No entries found