Boot-Up Blues

October 4, 2009

The “Gadget Lab” column in Wired has an interesting article about the efforts of PC makers, and developers of the BIOS firmware used in them, to speed up the process of “booting” the machine.  The length of time this initialization process takes depends on the BIOS, the operating system being used, and the hardware itself, but it can take two or three minutes in some cases, which can seem an eternity when you are hurrying to finish those slides for the meeting.

Mindful of how frustrating the wait is, makers of PCs’ basic input/output systems (BIOS) are working on bringing instant-on computing closer to reality with promises of significantly faster boot time.

“People want PCs to be like their toaster. Push a button and it is ready,” says Steve Jones, vice-president and chief scientist of core systems at Phoenix Technologies, one of the biggest BIOS makers.

Work on the BIOS is apparently beginning to pay off.  Phoenix announced a new BIOS last week that it claims can complete its operation in about one second.  Microsoft claims that Windows 7, its new version of Windows to be released on October 22, will complete its start-up process in less than 30 seconds.  But why does this take so long in the first place?

To attempt to answer that question, let’s start by trying to understand what work is being done.  When the PC is first turned on, it has no idea what to do, so it is configured in hardware to start by executing machine instructions from a particular memory address, in order to start the BIOS.  (Often, that address just contains an instruction to branch to the actual location of the BIOS code, but that’s just a detail.)  The BIOS is responsible for:

  • Getting the hardware initialized to a known, stable state.
  • Conducting the basic POST (Power-On Self Test) diagnostics
  • Identifying the hardware that is present
  • Setting up a table of hardware information for the use of the OS
  • Determining which device (e.g., hard disk, CD-ROM) holds the OS
  • Loading the initial segment(s) of the OS, and passing control to the OS

A modern BIOS provides fairly detailed information about the system configuration to the OS when it starts.  Here, for example, is a portion of the BIOS data from the Acer laptop on which I’m writing this port, as displayed by the Linux dmidecode(8) command:

Handle 0x0004, DMI type 4, 35 bytes.
Processor Information
Socket Designation: U1
Type: Central Processor
Family: Pentium M
Manufacturer: Intel
ID: EC 06 00 00 FF FB E9 BF
Signature: Type 0, Family 6, Model 14, Stepping 12
FPU (Floating-point unit on-chip)
VME (Virtual mode extension)
DE (Debugging extension)
PSE (Page size extension)
TSC (Time stamp counter)
MSR (Model specific registers)
PAE (Physical address extension)
MCE (Machine check exception)
Version: Genuine Intel(R) CPU           T2
Voltage: 3.3 V
External Clock: 133 MHz
Max Speed: 1600 MHz
Current Speed: 1600 MHz
Status: Populated, Enabled
Upgrade: ZIF Socket
L1 Cache Handle: Not Provided
L2 Cache Handle: 0x0005
L3 Cache Handle: Not Provided
Serial Number: Not Specified
Asset Tag: Not Specified
Part Number: Not Specified

The job of the BIOS is basically to set up the hardware into a configuration that the OS is able to recognize and deal with.  Once the BIOS has finished, and passed control to the operating system, the OS then initializes itself, does additional hardware identification and classification, loads any necessary device drivers, and finally moseys along to the point where you can get a login prompt.  The additional hardware checking done by the OS can add significantly to the start-up time.

There is a new BIOS standard being introduced, the Unified Extensible Firmware Interface [UEFI], that promises to help speed things up to some extent.  However, as the Wired article suggests, a certain amount of this may be effort directed at solving the wrong problem:

There’s a way to get instant-on. It’s called the sleep mode.

“People assume they get instant-on with their cellphones but no one reboots their cellphone everyday,” says Richardson [Brian Richardson, senior technical marketing engineer for American Megatrends Inc., a major BIOS maker]. “So one form of instant-on is never to turn it off.”

PC users, especially those that have been around for a while, got accustomed to fixing many of the numerous software and hardware problems they encountered by re-booting the machine.  Even if it was in principle possible to recover from a particular problem, it was often easier to just hit CTRL-ALT-DEL.

(At a ceremony marking the 20th anniversary of the introduction of the IBM PC, David Bradley, an IBM engineer, was cited as the original inventor of CTRL-ALT-DEL. He explained that it originated as a development tool in the early days of developing the hardware and software, and that “I may have invented it, but I think Bill [Gates] made it famous”. Gates, who was present as seen in the YouTube video, was Not Amused.)

If one takes a step back, though, there is really no reason that one should need to re-boot a computer system often.  I’ve been working with UNIX and Linux systems for many years, and re-booting is something that, barring very unusual emergencies, is something one does when (1) the hardware is changed, or (2) there is an upgrade to the OS kernel.   Right before I started writing this post, I checked the status of my desktop PC (which is running Ubuntu Linux), and found:

rgibbs@rich02:~$ uptime
16:55:05 up 32 days, 18 min,  2 users,  load average: 0.10, 0.05, 0.01

My laptop, of course, does get re-booted more often, but only because it travels with me, and sometimes it needs to be off longer than I am confident the battery will last in sleep mode.

Of course, if it is possible to make start-up faster by writing the BIOS and OS initialization code more intelligently, it’s a good thing.  But it would be a better thing if the bugs that cause systems to hang could be smoked out and squashed, so that fewer re-boots were necessary.  And Mr. Richardson is right: it would be great to make configuring and using sleep mode easier

%d bloggers like this: