Wielozadaniowość w Windows

Łatwo zauważyć, że w środowisku Windows wiele aplikacji działa jednocześnie (aby się o tym przekonać wystarczy wywołać zegar i zamienić go na ikonę; czas będzie wskazywany prawidłowo, nawet przy jednoczesnym wykonywaniu prac obliczeniowych, drukowaniu dokumentu lub pisaniu tekstu). Sposób wykorzystania wielozadaniowości przez program (ang. multitasking) stanowi o jego poprawnym lub błędnym działaniu, a nawet może decydować o poprawności pracy całego systemu.

Łatwo zauważyć, że w środowisku Windows wiele aplikacji działa jednocześnie (aby się o tym przekonać wystarczy wywołać zegar i zamienić go na ikonę; czas będzie wskazywany prawidłowo, nawet przy jednoczesnym wykonywaniu prac obliczeniowych, drukowaniu dokumentu lub pisaniu tekstu). Sposób wykorzystania wielozadaniowości przez program (ang. multitasking) stanowi o jego poprawnym lub błędnym działaniu, a nawet może decydować o poprawności pracy całego systemu.

Wielozadaniowość przez przekazywanie komunikatów

Istnieją dwie popularne metody realizacji wielozadaniowości w systemach operacyjnych dla komputerów osobistych. Pierwszy jest analogiczny do przekazywania pałeczki przez sztafetę i nosi czasem taką poglądową nazwę (baton passing). Polega on na przekazywaniu komunikatów (message passing) między aplikacją a systemem, tzn. środowiskiem Windows.

Każde zadanie (aplikacja) w środowisku Windows musi obsługiwać dotyczące zdarzenia (event) w systemie. Zdarzeniem jest naciśnięcie klawisza przez operatora, poruszenie myszą, wywołanie menu itd. System obsługuje każdą z tych akcji decydując, któremu z działających zadań należy przekazać informację o zdarzeniu. System wstawia te informacje do kolejki zdarzeń konkretnej aplikacji. Ta odczytuje co jakiś czas kolejkę i decyduje o reakcji, którą może nią być odnowienie obrazu okna aplikacji na ekranie, przyjęcie danych przychodzących z klawiatury itp. Po wykonaniu niezbędnych czynności program sprawdza, czy w kolejce zdarzeń są jeszcze jakieś informacje wymagające obsłużenia. Jeśli ich nie ma, to aplikacja powinna przekazać sterowanie procesorem do środowiska Windows, które uaktywni następną aplikację. Oczywiście, oprócz obsługi zdarzeń program wykonuje tę część swego kodu, która stanowi o jego przydatności użytkowej.

Przy tym sposobie pracy wielozadaniowej może się więc zdarzyć, że źle napisana aplikacja nie odda sterowania do systemu Windows po przejęciu procesora i obsłużeniu kolejki zdarzeń. Nastąpi więc blokada systemu w jednej aplikacji, co w Windows 3.0 na pewno skończy się koniecznością wystartowania komputera od nowa. W wersji 3.1 wystarczy usunąć źle napisaną aplikację z pamięci. Na szczęście, zajmie się tym sam system. W każdym przypadku kończy się to utratą danych w "trefnej" aplikacji lub nawet we wszystkich działających programach.

Wielozadaniowość typu "preemptive multitasking"

W systemach operacyjnych OS/2 i Unix zadania działające w systemie korzystają z procesora tak długo, aż upłynie przydzielony im odcinek czasu. Następnie są one usuwane z pamięci, a kontrolę nad procesorem przejmuje inne zadanie (program lub system operacyjny). Program może wcześniej przekazać sterowanie do systemu (co następuje zwykle przy oczekiwaniu na dane z klawiatury), nie może natomiast przedłużyć dostępnego mu czasu.

W takich systemach nie jest możliwe zmonopolizowanie zasobów systemu przez jedną aplikację. Nie może więc nastąpić blokada systemu z powodu źle napisanej aplikacji. Jest to więc znacznie bezpieczniejsza forma wielozadaniowości, dająca środowisku lepszą stabilność pracy.

Wszystkie dotychczasowe wersje Windows korzystały z wielozadaniowości typu "przekazywanie komunikatów". Dopiero wersja 3.1 Windows for Workgroups i Windows NT oparte są na wielozadaniowości typu "preemptive".

Opcje wielozadaniowości w Windows

Użytkownik MS Windows nie ma wpływu na typ wielozadaniowości zrealizowany przez system operacyjny. Może jednak wpływać na wielkość czasu przydzielonego poszczególnm zadaniom. W zasadzie ma to znaczenie jedynie dla programów DOS-owych, uruchamianych z Windows.

Wielozadaniowość programów DOS-owych można realizować tylko wtedy, gdy Windows pracuje w trybie 386. W oknie Control Panel pojawia się wtedy ikona "386 Enhanced" (rys. 1), gdzie można określić priorytet przydzielony programom działającym w tle (Background) oraz w oknie zasadniczym (Foreground). Zwykle nie ma potrzeby dokonywania zmian wartości domniemanych (50 dla tła i 100 dla głównej aplikacji). Można wtedy uruchomić w tle długo działający program obliczeniowy i oczekując na wyniki wykonywać inne prace, korzystając np. z edytora lub innego programu, nie absorbującego zanadto procesora.

Należy w tym miejscu wyjaśnić, że liczby w okienkach przydziału czasu pracy wielozadaniowej mają znaczenie czysto umowne. Jeśli działa tylko jedna aplikacja w tle i jedna aplikacja główna, to suma tych liczb wynosi 150, co oznacza, że przez 2/3 czasu działać będzie aplikacja główna, zaś aplikacja w tle otrzyma jedynie 1/3 dostępnego czasu. Jeśli będą działać dwie aplikacje w tle, to suma czasów wynosi teraz 200, i każda z nich otrzyma 1/4 czasu pracy procesora; reszta przypadnie aplikacji głównej. Odcinki czasu przydzielane aplikacji są domyślnie wielokrotnościami 20 ms.

Istnieją jednak takie programy, które działają poprawnie tylko wtedy, gdy korzystają z całej mocy obliczeniowej procesora. Dotyczy to głównie programów komunikacyjnych, które muszą szybko reagować na sygnały z łącza szeregowego. Bez wyłącznego dostępu do procesora, istniałoby ryzyko zgubienia części znaków lub całego faksu, idącego po łączu. Wyłączność tę można zapewnić przez zaznaczenie kratki "Exclusive in Foreground" we wspomnianym oknie lub przez podanie odpowiednich opcji w pliku PIF (Program Information File), służącym do uruchamiania programu.

Program Information File (PIF)

Najlepsza metoda uruchamiania programów DOS-owych w środowisku Windows polega na przygotowaniu pliku informacyjnego, mającego rozszerzenie PIF. Na rys. 2 pokazano postać okna edytora plików PIF, a na rys. 3 dalszą część jego zaawansowanych opcji. Jak wynika z tych rysunków wynika, także tu mamy możliwość określenia jaką część czasu procesora zajmie aplikacja działająca w środowisku. Opcje ustawiane w pliku PIF stanowić będą przedmiot innego artykułu.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200