Towards Trustworthy Computing Systems: Taking Microkernels to the Next Level continued

2. OPERATING-SYSTEM COMPLEXITY AND ROBUSTNESS

2.1 Main-stream operating systems

The kernel of an operating system is usually defined as the part of the software that executes in the processor’s privileged mode, giving it unrestricted access to all hardware resources and functions. In customary “monolithic” system design, the kernel provides most of the core OS functionality, including interrupt handling, memory management, access control, device drivers, network stacks, file systems, etc.

Novel hardware, increased hardware variety (e.g., multithreading, multicores, bus-connected SMP, NUMA) and more varied usage contexts (ranging from embedded systems to supercomputers) have lead to a strong growth in the number and complexity of OS services. This is reflected by an immense growth in the size of kernel code. The Linux kernel now comprises about 4.1 millions lines of code (MLOC), having grown by a factor of 33 within 13 years (see Figure 1). Windows Vista is said to have 20 MLOC of kernel code.

This growth is developing into a formidable challenge to system reliability. Well-engineered code can be expected to have of the order of 2 defects per kLOC [42], which puts the number of kernel bugs in modern operating systems literally into the tens of thousands. Since all this code executes in privileged mode, each bug has the potential to cause arbitrary damage. In fact, the majority of OS code is contained in drivers, which are on average of much lesser quality [6], meaning that the number of kernel bugs is probably up in the hundreds of thousands.

Download complete White Paper


More White Papers and Publications

▲ Back to Top