"He brought Windows to the World." The year is 2046. I just finished reading an interesting account of the evolution of the computer user-interface. This quote hangs below an animation of Bill Gates lauding the release of "Cairo" at a conference in 1998. As everyone now recognizes, Bill Gates and Windows were the driving forces behind the 3-D interactive interface we all use today.
While this might sound funny, no one can deny that Microsoft's Windows family of products has changed the course of computing. I am not trying to be a revisionist by denying the existence of other graphical user interfaces (GUI), without which Microsoft Windows would never have been conceived. In fact, I have used with differing degrees of satisfaction so many different GUIs that I can't even count them with all my fingers.
However, it is definitely to Microsoft's (and Bill Gate's) credit that Windows has survived a very unstable childhood and grown into the incredibly robust and stable operating system called Windows NT.
Last week (we are now back in 1996!) I was leafing through the Washington Post Sunday Employment section, as I do occasionally to see what people are looking for, and everywhere I looked, I saw advertisements looking for people with Windows NT expertise. Not much longer than a year ago, most technical recruitersand many IT specialistsdidn't even know what NT was. Now, it is all the rage.
Why is that? To try to answer this question, let's look at what Windows NT is, and examine it in the context of 16- and 32-bit versions of Windows. Additionally, we'll take a look at how Windows NT is related to (or not related to) MS-DOS.
In 1988 Bill Gates commissioned the creation of a new operating system. The premise for the design of this new operating system was portability, security, compliance and compatibility, scalability, extensibility, and ease of internationalization. This meant that the system would need to run on different hardware platforms with minimal changes; it could be locked down through software, meeting NSA's C2-level criteria; it would be POSIX-compliant and run existing Windows applications; it would support symmetric multiprocessing (SMP); it could be easily expanded on by writing to a well-defined application programming interface (API); and it could easily be ported to run in numerous different languages and writing systems, with minimal modifications to the software. (See Table 1.1.)
Table 1.1. Foundation of Windows NT
|Portability||The system would need to run on different hardware platforms with minimal changes.|
|Security||It could be locked down through software, meeting NSA's C2-level criteria.|
|Compliance and compatibility||It would be POSIX-compliant, run existing Windows applications, and support open international standards.|
|Scalability||It would support symmetric multiprocessing (SMP).|
|Extensibility||It could be easily expanded on by writing to a well-defined application programming interface (API).|
|Ease of internationalization||It could easily be ported to run in numerous different languages and writing systems, with minimal modifications to the software.|
To design this system, Microsoft hired David Cutler, an operating system designer with Digital Equipment Corporation (DEC), and a group of his co-workers from DEC. David was renowned for his work on DEC operating systems, including RSX-11M (which helped turn DEC's PDP-11 mini-computer into a great world-wide success), and on his work with the VAX architecture.
It wasn't until almost 5 years and hundreds of millions of dollars later that Windows NT came to the market. The original version of Windows NT was called 3.1, which indicated its relationship to the Windows 3.1 user interface and its capability to run many Windows 3.1 programs. The similarities, however, stopped there.
The internals of Windows NT were written from scratch and centered around a microkernel-style architecture similar to UNIX. This microkernel gave Windows NT preemptive multitasking. Additionally, Windows NT made use of process threadsan idea popularized by Carnagie Mellon's MACH operating systemto support symmetric multiprocessing.
Using this microkernel as the foundation, Cutler's team added a number of features and services, including an integrated security subsystem, an abstracted, virtualized hardware interface, robust multiprotocol network support, fault tolerance, integrated GUI management tools, and much more.
When NT was finally released, Microsoft came to market with two different versions, Windows NT 3.1 and Windows NT Advanced Server 3.1. While these two products represented a tremendous achievement, their lack of compatibility with existing Windows programs and their steep hardware requirements prevented them from making significant in-roads in the network operating system environment, which was dominated by Novell's NetWare product.
In autumn 1994, Microsoft released NT 3.5. This release incorporated a number of important changes and enhancements, such as multiprotocol remote access services using the point-to-point protocol (PPP), a reduced memory footprint, extensive bug fixes, a rewritten TCP/IP stack, and much more. Additionally, Microsoft renamed the products to Windows NT Workstation and Windows NT Server, which, coupled with a further optimization of the internal architectures, helped to better define the exact role of each product.
It was with this release that Windows NT began to legitimize its claim in the server market. The computer press began to turn out favorable reviews of NT Server and some people even began to predict that it could challenge Novell's market dominance.
Now with the 4.0 release of NT, Microsoft has made a concerted effort to make Windows NT the standard by which all others are judged. NT Server 4.0 includes not only the Windows 95 user interface, but a host of other features, such as Network OLE, Internet Information Server (IIS) 2.0, RAS multilink and RAS autodial, Point-to-Point Tunneling Protocol (PPTP), fully integrated DNS and WINS, integrated multiprotocol router, expanded driver support, improved performance, and much more.
If you ask about the differences between a 16-bit and a 32-bit operating system, you'll get all kinds of responses. Very often they try to compare apples and oranges and mix them together with unrelated, but seemingly important "facts."
The essential difference between 16-bit and 32-bit operating systems is the way they handle internal structures. Additionally, some processors are optimized to work with structures of a particular size.
Recently Microsoft announced they would work on a pseudo-64-bit version of NT. Although the new system will not be fully 64-bit, it will permit 64-bit data structures and a 64-bit flat memory space. One area that will greatly benefit from this change will databases. Using 64-bit addressing, you can support extremely large databases.
I'm not saying there isn't a difference. In fact, when we're talking about Microsoft Windows operating systems, there is a big difference between 16-bit and 32-bit versions. For example, one of the features of the 32-bit Microsoft operating systems, is support for a 32-bit protected, flat memory model, which provides cleaner memory management than 16-bit Windows, and allows programs to create and address very large data structures.
The base of 32-bit Windows operating systems is a complete 32-bit kernel. The kernel does things such as system scheduling and memory management. Additionally, the 32-bit OS enables us to use 32-bit device drivers, which, among other advantages, enable the operating system to communicate with devices faster.
Most of the other features that come from 32-bit Windows operating systems come from their support of the Win32 API. This API set can only be fully implemented on a 32-bit kernel, such as Windows NT and Windows 95. Some of the advantages of the Win32 API are long filename support, 32-bit installable file systems, and better management of system resources.
Perhaps one of the greatest accomplishments for Windows NT was to get rid of DOS completely. In fact, when Microsoft first began work on the NT project, there were no firm plans to enable NT to run DOS or Windows applications. This, along with the fact that NT was conceived and designed by a group of programmers new to Microsoft, should be a convincing enough reason to believe that there is no DOS in Windows NT.
Windows NT contains no DOS code in the operating system. Everything is done through emulation of standard DOS calls. Windows 95, in comparison, still relies on actual DOS code to run DOS applications. Windows 95 is actually two full operating systems in one package: Windows 4.0 and DOS 7.0.
Although there is no DOS, Windows NT is still able to run the vast majority of DOS programs as long as they don't try to directly access the hardware or require special device drivers. It does this by creating a virtual DOS environment called the NT Virtual DOS Machine (NTVDM). The DOS program runs in this emulated DOS environment. NT traps the DOS calls and converts them to standard Win32 API calls. In fact, this process means that certain DOS programs, such as disk intensive programs, can actually run faster in Windows NT than on a standard machine running DOS. Additionally, because the NTVDM provides emulated support for things like mouse driver, network drivers, and CD-ROM drivers, you can actually get more free "conventional" memory in an NTVDM than would ever be possible running real MS-DOS.
As mentioned previously, there was a definite set of goals in mind when Microsoft began developing Windows NT. These goals played a fundamental role in making NT the product it is today, and no discussion of Windows NT could be complete without addressing them.
When David Cutler was first brought to Microsoft to design the operating system that became Windows NT, he was sold on the idea that the operating system should be based on a client/server design. Under this paradigm the entire operating system would be divided into small self-contained units and would communicate with each other by passing well-defined messages back and forth. A unit that needed a service would pass a message to a unit that could provide the service. The requestor is the client and the provider is the server.
User programs, for example, would usually be the clients. They would request services from the protected subsystems, which in this case would be the servers. The protected subsystem would in turn play the part of a client and request services from other parts of the system.
The idea here is that each small portion of the operating system would run in its own protected memory space and would be isolated from interference from errant or invasive programs running on the system. Additionally, if a single server went down, it would not take down the rest of the system.
Remember DOS? DOS was designed as a 16-bit operating system. This meant that memory structures could be addressed 16 bits at a time. Okay, so what does that mean? Well, two examples of where this 16-bit limit has created crippling effects on Windows 3.x today is in memory addressing and also in the file allocation table (FAT) scheme used for storing disk data.
With memory management, the 16-bit nature of DOS required that everything be written to 64k (16-bit) code segments because you couldn't address anything larger than that. This process made writing software more difficult and cumbersome.
With the FAT, the 16-bit limit meant that only 65,536 clusters could be addressed on a single volume. Because at the time DOS was developed disks were very low capacity, this was not an issue. However, with today's high-capacity hard drives, this is a problem that results in enormous amounts of wasted space on large drives.
To maintain compatibility, the NT version of FAT, called VFAT, still uses a 16-bit address for addressing clusters, limiting a FAT volume on FAT under NT to 65,536 clusters. Windows NT's solution to this limitation was to introduce a new file systemNTFS. Microsoft is also introducing a new 32-bit version of FAT for Windows 95 that corrects this problem, but the 32-bit version of FAT is incompatible with almost all existing disk tools.
Because Windows NT is a 32-bit operating system, it uses 32-bit addresses to access objects. This results in many advantages, one of which is NT's use of a 32-bit flat memory model as opposed to DOS's 16-bit segmented memory model. The 32-bit flat memory model enables NT to address 4,194,304KB (four gigabytes) of memory.
One of the other concepts NT introduced into the Windows product family is the protected memory model. Windows 3.x inherited its memory structure from DOS. In this model, all programs essentially had access to any memory location, including memory segments belonging to the operating system itself. This meant that if an application misbehaved, it could accidentally write to a memory location belonging to another program, or even to the operating system itself. This resulted in a great deal of the instability of the Windows 3.x products. One misbehaved application could, and usually did, bring down the entire system.
In addition to accidental problems, the other down-side of this model was that any application could read information belonging to another, and thus no data was secure. A virus, for instance, could be written to snatch information, such as passwords, as the user entered it.
In Windows NT's memory model all processes get their own 32-bit address space. This 4GB space is divided in half, and the application can only really use the lower 2GB of space. The upper 2GB is for interfacing with other parts of the system. In this way, every process effectively thinks it is the only thing running. There is no way for a process to read or write outside of its own memory space, either accidentally, or intentionally. This has two very positive results. First, it prevents ninety percent of the system crashes that occurred in Windows 3.x. Second, it provides security for each process.
Some 16-bit applications expect to run in a shared memory space with other programs, and some even rely on this to work properly. For this reason, Windows NT runs 16-bit applications in a shared memory space by default. This means that one 16-bit application could potentially interfere with other 16-bit applications in the shared memory space.
There are two major types of operating system multitasking: cooperative and preemptive. The most common form on personal computers is cooperative multitasking, which is used by Windows 3.x and Apple's Mac OS.
In a cooperative multitasking environment the operating system gives control of the system to a particular application so it can run. When that application is finished, it returns control of the system to the operating system, which then gives control to the next application. Windows 3.1 uses a message queue to signal when an application was supposed to give up control. Applications were supposed to be written to check this queue regularly.
In this methodology, applications are expected to be good citizens, keeping control of the system only as long as necessary before passing control back to the OS. The downside here is that a single misbehaved application can seize control of the system, leaving everything else, including the operating system itself, starving for CPU time. Additionally, if a program crashes without returning control to the operating system, the entire system can hang.
In contrast to this is the preemptive multitasking model. The most common foundation for preemptive multitasking is a micro-kernel design, such as Windows NT and UNIX. With preemptive multitasking, the micro-kernel always maintains control of the system. It gives processes specific slices of time in which to run. At the end of that allotted time, the micro-kernel preempts the running process, and passes control to the next process.
An additional factor that needs to be addressed when discussing multitasking is the presence of non-re-entrant code. In a multitasking system there is often the need for a single segment of code to be simultaneously executed by more than one process, or even by multiple threads in the same process. Code that is written to support this is known as re-entrant code, while code that was not designed with this in mind is called non-re-entrant. Thus, in order to support full multitasking, the operating system code and the application code must be fully -re-entrant. All the operating system code in Windows NT is re-entrant.
For comparison, note that although Windows 95 provides a preemptive multitasking environment, large portions of the GDI and User routines are non-re-entrant. This was done to maintain full backward compatibility. The result is that Windows 95 "turns off" preemptive multitasking whenever an application accesses a piece of the non-re-entrant code. It has to do this to prevent possible application deadlock where two or more processes fight for access to the same piece of non-re-entrant code. Windows NT does not have this limitation.
Two years ago or so, public opinion in the computing industry was that Intel's x86 architecture, which included the 8086, 80286, 80386, i486, Pentium processors, would eventually run out of steam. Intel's newer microprocessors would have to devote an increasing amount valuable silicon and transistors to maintain compatibility with the older chips. The prediction was that eventually this would reach a point of diminishing returns. DOS and Windows were tied to this Intel chip family both because of the programs that were written to run on them, and also because of the reliance on assembly language programming to squeeze speed out of the operating systems.
Intel has spent lots of money and come up with some very creative chip designs to prove the nay-sayers wrong and help keep the x86 family alive. The Pentium Pro processor is just the latest example of their ingenuity. However, ultimately, as the programs themselves become more and more portable, the need for hardware compatibility with the older architecture diminishes.
The ultimate design, then, would be a portable operating system. One which could be quickly and easily moved to new chip architectures as they became available. Recognizing the importance of this, and hedging their bets about the future of the Intel x86 microprocessor family, Microsoft made portability one of the original design goals in Windows NT.
It is this portability that enables Windows NT to run not only on Intel x86 microprocessors but also on RISC chips, such as the DEC Alpha AXP, the MIPS R4400, and Motorola PowerPC.
Part of the key to Windows NT's portability is the hardware abstraction layer (HAL), which hides the difference in actual hardware from the higher level operating system software. The HAL makes all hardware look essentially identical to the rest of Windows NT.
As it relates to Windows NT, scalability is used to refer to NT's capability to take full advantage of multiple processors in a single system. The key to scalability in Windows NT is symmetric multiprocessing (SMP). The SMP design in Windows NT Server enables you to run it on system with from 1 to 32 processors with up to four gigabytes of memory. NT dynamically assigns system and application threads for execution on different processors. The internal operations of Windows NT are designed to take full advantage of SMP systems.
Scalability, however, is not limited by the design of the operating system alone. Both the application software and hardware play a key role in determining the benefits of SMP. If an application is not designed to make effective use of the SMP environment, you might not gain worthwhile performance improvements by using SMP hardware. Likewise, the quality of the SMP hardware can greatly affect the performance of your system.
Personality is the key to compatibility. Most operating systems, such as DOS, are limited to a single personality. DOS can only run DOS programs. However, Windows NT was designed to support multiple simultaneous personalities. When Microsoft first began working on NT, they planned that it would support the OS/2 Presentation Manager interface as its primary personality. However, as the project continued, and the success of Windows grew, the Windows interface became the primary personality. In addition, Windows NT supports a POSIX personality, an OS/2 personality, and a DOS/Windows personality. Additional personalities, such as a full UNIX personality can easily be added.
Microsoft recognizes the value and importance of products that integrate into the global marketplace. Windows NT is available in localized versions for Brazilian, Chinese, Danish, Dutch, Finnish, French, German, Italian, Japanese, Korean, Norwegian, Portuguese, Russian, Spanish, and Swedish. In each of these versions, Microsoft has taken efforts to ensure that NT not only communicates in the particular language, but also employs standard idiom, uses correct punctuation in lists, dates, time, and numerical and currency output.
To support this localization, Windows NT uses the Unicode standard instead of the ASCII standard for representing characters. While the ASCII standard is popular in the United States, it lacks the capability to properly handle many of the characters needed in the international computing world. Unicode is a standard developed by a consortium of industry leaders, including Microsoft, Lotus, IBM, and Borland. While ASCII recognizes only 8-bit characters, meaning that a code-set can only contain 256 characters, the Unicode code-set is based on 16-bits, which means that it can represent 65,536 different characters.
Windows 95 also supports Unicode. However, although Windows NT uses Unicode exclusively for storing internal data, Windows 95 still uses a substantial amount of non-Unicode fields in order to maintain backward compatibility.
Even the next generation of the Mac OS, code named Copland, will support the Unicode standard.
Although Windows NT provides full support for the ASCII code-set, Windows NT stores and manipulates all internal data structures using Unicode. This enables Microsoft to quickly and easily localize Windows NT for different languages and regions, including full support for Japanese Kanji and Chinese traditional and simplified character sets.
When creating Windows NT, it was important that it meet a certifiable security standard. In this case, Microsoft chose to create Windows NT to meet the United States National Security Agency's C2 level evaluation criteria. By creating Windows NT based on a defined security model, Microsoft was able to guarantee that Windows NT would meet the most demanding corporate security needs. After all, the security of proprietary corporate data often translates directly into a monetary value for many corporations.
To enforce system security, NT has a robust security model that permeates every level of the operating system. This is unlike the flimsy security provided on other operating systems (including Windows 95), which is merely an easily broken wrapper on top of the operating system.
In order for Windows NT to be accepted as an enterprise workstation and server product, it was important to enable it to gracefully handle abnormal conditions. This is the essence of fault-tolerance. Windows NT has many features that provide varying levels of fault-tolerance for the system. Included in NT's list of fault-tolerant features are NT's journal-based, recoverable file system (NTFS), disk mirroring and disk stripping with parity (RAID 1 and RAID 5), disk sector sparing, and support for an uninterruptible power supply (UPS).
Windows NT is both an operating system and a network operating system. With LAN Manager, OS/2 was the operating system and LAN Manager was the network operating system. This integration of the OS and the NOS has proved to be a formidable combination in Windows NT.
A network operating system has traditionally been a method for describing the methods and protocols used by network clients when communicating with a network server. The most common transactions involved here are file and print services. This is a very simplified description, but it demonstrates the typical mentality used when designing these systems. Effectively, the NOS is centered at the server or servers.
Microsoft, however, has traditionally had a different approach to this concept, which has been heavily promulgated by Novell. Most of Microsoft's network-related products have obscured the line between operating system and network operating system. Windows NT is definitely no exception to this.
As we move into a period in computing when the network becomes more and more an integral part of the entire environment, the concept of and the need for a network operating system will disappear or, if you prefer, simply swallow up the underlying standalone operating system.
This chapter presented a high-level overview of Windows NT, discussing the premises upon which Windows NT was founded. You saw exactly how the designers of Windows NT implemented these goals in the final product.
You also saw how Windows NT represents the next generation of operating system, as well as a network operating system through its robust 32-bit design. You learned a little about the history of Windows NT, which shows that its designers took great care in crafting NT to be a true enterprise solution.