September 18th, 2009

Windows 95's ticking death

A few years ago, Larry Osterman explained the famous beeping death. Windows 95 had its own noise-related death, what nobody has called ticking death, but that’s what I’m going to call it. (Let’s see how long before somebody decide to add it to Wikipedia.) When your machine fell into ticking death, each time you moved the mouse or pressed a key, it was acknowledged with nothing more than a tiny click from the speaker. What was the cause of ticking death? When the hardware drivers report a mouse or keyboard event on Windows 95, they call the mouse_input or keybd_input function. Since this happens at hardware input time, those functions are very limited in what they can do. All they do is appends the new input to a queue of “input that arrived while I was busy doing something else.” When the window manager reaches a stable state, it takes the input from the “input waiting to be processed” queue and farms them out to the appropriate application input queues. The window manager needs to be stable, since mouse input gets routed depending on which window is under the mouse pointer when the pointer moves, and you don’t want to do this while some other part of the window manager is in the process of rearranging the windows (and the window tree is consequently unstable). For compatibility reasons, the window manager promises not to change anything while 16-bit code is running, so that a 16-bit application doesn’t see, for example, a window becoming destroyed behind its back. (Recall that 16-bit Windows is a co-operatively multi-tasked system, which means that applications have control of the CPU until they voluntarily relinquish it.) If a 16-bit application hangs, then the buffer for holding all of these “distribute this input to application queues as soon as it is safe to do so” fills up and can’t accept any more input. If new input arrives and there’s nowhere to save it, the window manager emits a little tick sound as a mini-error message.

Of course, as the end user, you probably knew something was up because the screen hasn’t changed in a long time. Some 16-bit application is not responding and is preventing the window manager from doing anything. To get out of this situation, you can hit Ctrl+Alt+Del and try to kill the hung application.

Topics
History

Author

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

0 comments

Discussion are closed.