I've been very busy baking and cooking in the lead-up to my surgery on Monday (osteoarthritis in my thumb — ~65 years of typing have taken their toll): anadama bread, semolina rye, English muffins, a 24-hour sourdough, skordalia, and (tomorrow evening, with my partner) a spicy tamarind cod dish. I thought about another loaf, but the freezer is kinda full right now… I've also been visiting my favorite birding spots in the area, since I won't be able to hold my camera for at least several weeks.
The doctor assures me that I'll be able to type very soon, as long as I don't try to use that thumb to hit the space bar. That should mean it'll be a great time for writing and programming…
But if I'm unexpectedly silent on Mastodon for a few days, you'll know why…
Yesterday, I briefly mentioned "adjunct processors" for phone switches without saying much about what they are or how they came about. It's an interesting history, and I think it goes back to the 2ESS. (ESS, in AT&T-speak, is "electronic switching system", a phone switch controlled by an embedded computer rather than by electromagnetic components such as relays and the like. (No, I won't give a tutorial on how step switches or cross-bar switches worked.)
Phone switches had to do a lot of things. Obviously, they had to carry existing voice calls. They also had to accept call requests, either from locally dialed numbers or from "trunks" from other switches. (I'm omitting the difference between local switches and "toll switches", which didn't have any local phone lines attached but just relayed calls between other switches. In the old AT&T network—it doesn't work that way today; it's mostly IP-based—a remarkably small number of toll switches handled the entire US.) Then there's generation of "call detail records" for billing and engineering, operator assistance, the data network connecting switches, and more. (How switches set up calls before this "out-of-band" network is another weird topic I won't discuss today.)
Anyway, the computers running the switches ran out of capacity. One solution was a "brain transplant"—replace the CPU with a faster one with more RAM. Thus, the 2ESS was supplanted by the 2A ESS. But you can only do that a very few times, before you start running into things like hardware address space limits. And you can't just use a new architecture without a *lot* of effort porting the code. Remember, too, that phone switches have to be ultra-reliable, with allowable downtime measured in minutes per year, very fast reboot, stringent performance constraints, and more. (Anyone who says "just run Linux" doesn't know what they're talking about. Ignore them. Let it suffice to say that 40-50 years ago, there was no way a standard commercial OS could do this. For several years, I worked in the Software Engineering Research Department of the phone switch development organization at Bell Labs; I saw all of this up close and personal.)
There was a need for a new feature. The CPU in the relevant switches were out of capacity and a brain transplant wasn't feasible. The solution was adjunct processors: other computers connected to the switch computer via a local area network. Call forwarding? Call out to the proper adjunct processor to see if this number is being forwarded, and if so to where. 800 numbers? Call out to translate the number and do the appropriate billing magic. Local number portability, a government-mandated feature? You guessed it. How to route phone calls to avoid busy areas? Reserving switch capacity in disaster areas to favor outbound calls? Etc. Without intending to, they had invented a new architectural principle!
The ultimate expression was a complete separation of the control functions of the switch from the so-called "switching fabric", the part of the switch that carried calls from an input port to an output port. If you had to reboot the control computer, the switching fabric wasn't touched, and ongoing calls were not affected. Instead, the control computer would read the state of the fabric to know what calls were in progress. In other words: strong separation of control and data.
One footnote: the 5ESS, the last conventional phone switch that Bell Labs developed, had a separate microprocessor per "line card"—and the switch could have, as I recall, 10s of thousands of line cards. In other words, you had a multiprocessor computer with 10s of thousands of CPUs. Enjoy designing, implementing, and testing your operating system… I wasn't in the switch development organization during those years, but there were reverberations from the effort throughout Bell Labs.
Had dinner tonight at a Tibetan restaurant here in Bloomington, IN, where they asked me how spicy, on a 1-5 scale. I got to wondering: is that linear? Logarithmic? Exponential? (And what do those quantitative values even mean?)
Not know the restaurant, I opted for 3 but should have gone higher—maybe it's on a Midwestern scale instead of a coastal scale…