Archive for the ‘Computing’ Category

Taking the JVM beyond Java — The Da Vinci Machine

Monday, February 4th, 2008

Da Vinci JVM

From the Da Vinci Machine website:

We are extending the JVM with first-class architectural support for languages other than Java, especially dynamic languages. This project will prototype a number of extensions to the JVM, so that it can run non-Java languages efficiently, with a performance level comparable to that of Java itself.

Our emphasis is on completing the existing bytecode and execution architecture with general purpose extensions, as opposed to a new feature for just one language, or adjoining an unrelated new execution model.
:
:

ceo

Physical Computing and Making Things Talk

Sunday, November 4th, 2007

It has been a while since I work on true embedded stuff, which is an area that I enjoyed experimenting with. So it is time to do something fun related to this, while relating such efforts to an area that I’m spending an increasing amount of time on these days: (mobile) physical connections and computing (areas I spent investigating and working on but from the pure software/application side of things). So I just ordered the following two books, both by Tom Igoe:


Physical Computing: Sensing and Controlling the Physical World with Computers (May 28, 2004)


Making Things Talk: Practical Methods for Connecting Physical Objects (Sep 28, 2007)

As “free” time becomes available, I’m hoping to actually play with this beyond pure reading… As I do, I’ll blog about it.

ceo

Computing is a natural science

Tuesday, September 11th, 2007

I recently read a great article on how Computing is perceived today, a natural science. Written by Peter J. Denning, director of the Cebrowski Institute for Innovation and Information Superiority at the Naval Postgraduate School in Monterey, CA, you can find this article in the ACM magazine Communications of the ACM July 2007 (Volume 50, Issue 7).

I will quote a couple of great paragraphs from the article (I hope it is OK to do so):

“This acceptance of computing as science is a recent development. In 1983, Richard Feynman told his Caltech students: “Computer science differs from physics in that it is not actually a science. It does not study natural objects. Neither is it mathematics. It’s like engineering—about getting to do something, rather than dealing with abstractions.” (Lectures on Computation, Addison-Wesley, 1996, p. xiii.)

Feynman’s idea was consistent with the computational science view at the time. Less than a generation later, his colleagues had come to see information processes as natural occurrences and computers as tools to help study them.

This is a striking shift. For a long period of time many physicists and scientists claimed that information processes are manmade phenomena of manmade computers.”

I like the next paragraph:

“The old definition of computer science—the study of phenomena surrounding computers—is now obsolete. Computing is the study of natural and artificial information processes. Computing includes computer science, computer engineering, software engineering, information technology, information science, and information systems.”

The article also covers (revisits) a top-level framework of seven (overlapping) fundamental principles (the Great Principles of Computing) that applies across many technologies (from natural such as biology, to artificial such as computers):

  • Computation (meaning and limits of computation);
  • Communication (reliable data transmission);
  • Coordination (cooperation among networked entities);
  • Recollection (storage and retrieval of information);
  • Automation (meaning and limits of automation);
  • Evaluation (performance prediction and capacity planning); and
  • Design (building reliable software systems)

From the article:

“We found that most computing technologies draw principles from all seven categories. This finding confirms our suspicion that a principles interpretation will help us see many common factors among technologies.”

One of the key points to take away from the article is that computation goes beyond artificial, and computers, and that computing is part of everything and is found everywhere: biology/DNA, social networking, physics and quantum computing, and so on.

ceo

On Self-Modifying Code and the Space Shuttle OS

Saturday, August 18th, 2007

I was doing some reading about Metaprogramming and Self-modifying code at Wikipedia, a fascinating topic with many uses from optimization, patching, and genetic programming.

And it reminded me of my days during the early 1990s working as a software engineer on the Space Shuttle operating system (FCOS). Many people don’t know that the Space Shuttle OS implements self-modifying code for the purpose of “fault-tolerance”. The Shuttle computer systems consist of four primary computers running the same software, and a fifth backup computer running different software that is equal in functionality. The goal is to be Fail Operational if one or more computers fail, and Fail Safe if all primary computers fail; this is called a Fail Operational/Fail Safe system. The four primary computers run redundantly during critical phases such as launch or re-entry, all synchronizing many times per second, at critical points in the code, at every I/O, and at every timer expiration. Those computers are all connected to 24 I/O buses controlling different parts of the vehicle, with 8 of the 24 buses being flight critical data buses (to fly the vehicle), 5 are for inter-computer communication, four are for the displays, and so on, see diagram below:






(Image credit: NASA Office of Logic Design)

Each of the data buses are controlled by a micro-computer called the Bus Control Element (BCE) that runs I/O code. A simple yet effective self-patching mechanism is used to patch BCE I/O code, to bypass I/O errors, where the OS changes the BCE code at runtime when I/O errors are encountered, effectively bypassing (branching around) I/O instructions that result in I/O errors; this is referred to as “BCE bypass”. This is self-modifying code for the purpose of fault-tolerance.

Other fault-tolerance techniques implemented in the vehicle is redundant set voting, where I/O is also self-patched to assign which computer controls (talk/listen to) what data buses. As mentioned above, the primary four computers can be configured into a redundant set, synchronizing many times per second. If a computer fails to synchronize, the other computers will vote against the failing computer. While no computer can shutdown any other computers, they can take control of flight critical data buses assigned to the failed (voted-out) computer(s). I once worked on a mission where a single computer failed to sync, and I was put under tremendous pressure trying to investigate the cause, only using limited data that is down-linked every 160 ms.; I ended-up attributing the fail to sync to a specific code section where divergent code paths (branching) took place due space radiation alteration of non-radiation-hard registers. The worst case fail to sync that could happen is to have two computers vote against the other two, but that never has happened during a mission, and it is unlikely to ever happen — the action to take if that were to happen is to engage the Backup Flight Computer, a kind of scary thought as the backup computer has never been engage (during a real mission) to fly the vehicle.

An alternative to self-modifying or patching code is to use conditions (if statements) and local store (such as in-memory) to store flags that are used determine the paths to take (assuming such paths are known ahead of time, which might not be the case on genetic programming). Being the Space Shuttle a memory-limited, non-dynamic memory map and management environment, it is cheaper, less complex, and safer to patch specific instructions directly.

I’ve modified the Wikipedia entry on Self-modifying code and added “fault-tolerance” as one of the uses for self-modifying code.

ceo