The history of Windows dates back
to September 1981, when Chase Bishop, a computer scientist, designed the first
model of an electronic device and project "Interface Manager" was
started. It was announced in November 1983 (after the Apple Lisa, but before the Macintosh) under the name
"Windows", but Windows 1.0 was
not released until November 1985. The shell of Windows 1.0 was a program known as
the MS-DOS Executive. Other supplied programs were Calculator, Calendar, Card file, Clipboard viewer, Clock, Control Panel, Notepad, Paint, Reversi, Terminal, and Write. Windows 1.0 did not allow
overlapping windows. Instead all windows were tiled.
Only dialog boxes could appear over other windows.
Windows 2.0 was
released in October 1987 and featured several improvements to the user
interface and memory management. Windows
2.0 allowed application windows to overlap each other and also introduced more
sophisticated keyboard-shortcuts. It could also make use of expanded memory.
Windows 2.1 was released in two different versions: Windows/386 employed the 386 virtual 8086 mode to multitask several DOS programs, and
the paged memory model to emulate expanded memory using available extended memory. Windows/286 (which, despite its name,
would run on the 8086) still ran in real
mode, but could make use of the high
memory area.
The early versions of Windows were often thought of as simply
graphical user interfaces, mostly because they ran on top of MS-DOS and used it for file system services. However, even the earliest 16-bit
Windows versions already assumed many typical operating system functions;
notably, having their own executable
file format and providing their
own device drivers (timer, graphics, printer, mouse,
keyboard and sound) for applications. Unlike MS-DOS,
Windows allowed users to execute multiple graphical applications at the same
time, through cooperative multitasking. Windows implemented an elaborate,
segment-based, software virtual memory scheme, which allowed it to run
applications larger than available memory: code segments and resources were swapped in and thrown away when
memory became scarce, and data segments moved in memory when a given
application had relinquished processor control.


