Hral som Hypnospace Outlaw, hru o operačnom systéme s retro tematikou. Tento OS má zvláštne správanie, že pri načítavaní webovej stránky sa stránka načíta rýchlejšie, ak sa krúti kurzorom myši.
To mi niečo pripomenulo. Keď som bol mladý, ak si dobre pamätám, Windows 95(ak nie 98) mal také zvláštne správanie, že pri inštalácii programov sa pohybom kurzora myši zrýchlil postup. Čo to spôsobovalo? Hľadal som to na Googli, ale nič súvisiace som nenašiel.
Ospravedlňujem sa za nejasné vysvetlenie.
Dôvodom je chyba v spôsobe, akým systém Windows 95 generuje udalosti, a skutočnosť, že mnohé aplikácie sú riadené udalosťami.
Aplikácie systému Windows 95 často používajú asynchrónny vstup/výstup, t. j. žiadajú o vykonanie nejakej operácie so súborom, napríklad kopírovanie, a potom oznámia operačnému systému, že ich možno uspať, kým sa táto operácia neskončí. Tým, že sa uspia, umožnia spustiť iné aplikácie, namiesto toho, aby mrhali časom procesora nekonečným pýtaním sa, či sa operácia so súborom už dokončila.
Z nie celkom jasných dôvodov, ale pravdepodobne kvôli problémom s výkonom na počítačoch nižšej triedy, má systém Windows 95 tendenciu spájať správy o dokončení I/O operácií do balíkov a neprebudí okamžite aplikáciu, aby ich obslúžila. Aplikácia sa však prebudí na vstup od používateľa, pravdepodobne preto, aby sa zachovala jej odozva, a keď sa aplikácia prebudí, spracuje aj všetky čakajúce správy o vstupe/výstupe.
Pohybovanie myšou teda spôsobuje, že aplikácia rýchlejšie spracúva I/O správy a rýchlejšie sa inštaluje. Efekt bol dosť výrazný; veľké aplikácie, ktorých inštalácia by mohla trvať aj hodinu, sa vhodným vstupom myši skrátili na 15 minút.
Áno, je to skutočný efekt, ktorý spôsobuje merateľné zrýchlenie a dá sa ľubovoľne reprodukovať:
Skúste otvoriť veľký súbor pomocou Poznámkového bloku na súčasnom počítači. Okno nesmie byť na celú obrazovku. Po načítaní označte všetok text pomocou myši (klávesnica funguje tiež, len to chce viac manuálnej zručnosti). Počas stáleho držania stlačeného tlačidla (a označovania) pohybujte myšou nadol, aby sa text označil a posúval. Teraz porovnajte rýchlosť posúvania pri nehybnom držaní myši v porovnaní s jej pohybom. V závislosti od vášho počítača môže byť zrýchlenie niekoľkonásobné.
Úžasné, však?
Dá sa to pozorovať aj v mnohých iných programoch, Notepad je len ľahko reprodukovateľný príklad. Súvisí to'so spôsobom, akým fungoval multitasking v prvých verziách systému Windows. Tu sa všetko točilo okolo frontu správ. Pohybovanie myšou malo za následok záplavu správ o pohybe myšou, čo zasa spôsobilo, že programy sa častejšie prebúdzali a (v závislosti od ich štruktúry) zakaždým aktualizovali svoje stavy, opäť prechádzali do slučky správ, dávali čas na aktualizáciu obrazovky, čo viedlo k celkovo rýchlejšej reakcii. Ukazuje to záblesk spôsobov, ktoré MS používal na to, aby Windows reagoval pomerne rýchlo napriek svojej kooperatívnej vláknovej povahe.
Windows pred NT (Windows 1,2,3,3.11,95,98) bol kooperatívny multitasking oproti NT's (2000, XP, Vista, 7 & 10) preemptívny multitasking.
Pri kooperatívnom multitaskingu sa aplikácia v popredí musí vzdať riadenia iných úloh. Ak sa teda aplikácia v popredí zasekla, celý počítač zamrzol.
Pri preemptívnom multitaskingu mal systém zvyčajne hardvérové prerušenie, zvyčajne časovač, ktorý si vynútil odovzdanie.
V systéme Windows 95 klávesnica a myš generovali prerušenia, pohyb myšou spôsobil, že sa spustilo prerušenie a operačný systém obslúžil svoj front udalostí. Išlo o formu preemptívneho multitaskingu, namiesto pevného prerušenia časovača ste to robili vy.
OS by pri prerušení aktualizoval stav na obrazovke a potom by išiel obsluhovať ostatné úlohy. Vďaka aktualizácii obrazovky by sa zdalo, že OS spracováva dáta rýchlejšie.
EDIT - 1/2 práva ... Nemôže preemptívne multitaskovať aplikácie Win16, pretože na spúšťanie aplikácií Win16 používa rovnaký model systémového virtuálneho stroja (VM) ako vo Windows 3.1. Systém Windows 95 sa teda pri spúšťaní aplikácií Win16 vráti do prostredia kooperatívneho multitaskingu a poskytne im výhradnú kontrolu nad procesorom, kým sa aplikácie vykonávajú. Výsledkom je, že pri multitaskingu kombinácie aplikácií Win16 a Win32 nie je možná skutočná preemptívna prevádzka.