Door SirDice: Door Anoniem: Trouwens windows 3.1 of 3.11 was geen eigen besturingsysteem,maar een grafische schil die je appart kon draaien onder ms dos in die tijd.
Correct.
Dat is pertinent onjuist. MS DOS is een single tasking en "real mode" (CPU) OS. Windows 3.1 en hoger heeft een eigen kernel die geen real mode meer ondersteunt [1]. Met name een 80386 CPU bood applicaties de mogelijkheid om veel meer geheugen te gebruiken [2] en maakte bovendien gebruik van virtueel gehelen (swap file). Harddisk-IO was ook veel sneller omdat een Windows driver meestal met 16 sectors/interrupt minder overhead veroorzaakte dan de BIOS (die DOS gebruikt voor disk-I/O). Wat weinig mensen weten is dat in elk geval Windows for Workgroups 3.11 (WfW3.1 weet ik niet meer) al preemptive schedulers [3] aan boord hadden, waardoor netwerktaken in de achtergond uitgevoerd konden worden. Er waren echter twee grote problemen (die ook Win32S niet kon wegnemen en die deels bleven slepen t/m in Windows ME):
(1) Program Manager met alle van daaruit gestartte user-applicaties draaide als 1 van de preemptive scheduleded taken. Binnen die taak moest non-preemptive (a.k.a. cooperative) multitasking plaatsvinden, wat wil zeggen dat elk programma
bewust de besturing aan de shell moet teruggeven om te zorgen dat de shell zelf en andere applicaties "iets kunnen doen". Dit had als gevolg dat als 1 programma "hing", andere niet meer aan de beurt kwamen. Als je dat programma al kon afschieten werden vaak zoveel geheugenresources e.d. niet vrijgegeven dat je beter meteen kon rebooten. Win9x bood wel preemptive multitasking, maar o.a. door gebrek aan geheugenbescherming betekende een programma-crash vaak een instabiel systeem.
(2) Het hele grafische subsysteem (GDI) bestond uit 16-bit code. GDI zelf had een "kladblok" voor opslag van lokaal gebruikte resources van 64KB, dat t.g.v. memory leaks vaak snel vol liep. Ook dan kon je rebooten.
Microsoft heeft een deel van de bovenstaande problemen op kunnen lossen in W9x en ME, maar al met al bleef het systeem erg instabiel t.g.v. slecht geschreven applicaties en drives (GDI bleef 16bit in die besturingssystemen).
Kortom, een berg nadelen t.o.v. moderne besturingsystemen, maar Win3.1 (en vooral WfW3.11) was echt veel meer dan een grafische schil om DOS; sterker, die grafische schil was 1 van de zwakkere onderdelen.
[1] Zie
http://en.wikipedia.org/wiki/Windows_3.1x[2] Hoewel de meeste programmeertalen (waaronder Borland C++ 3.1) de programmeur geen slim memory-management boden (het bleef gedoe met segmenten en keuzes tussen kansloze memory-modellen (zie
http://en.wikipedia.org/wiki/Intel_Memory_Model), kon je in GFA Basic voor Windows 3.1 gewoon een array van (okay, enkele bytes kleiner dan) 16MB aanmaken (verder was die Basic versie voor Windows nagenoeg waardeloos, in tegenstelling tot de Atari ST uitvoering).
[3] Preemptive multitasking betekent dat applicaties, drivers etc., meestal op regelmatige basis, door de kernel worden onderbroken waarna andere code de kans gegeven wordt haar werk te doen.