| Spis treści | Poprzedni | Następny | Windows

Windows. Podstawowe pojęcia

Proces - na potrzeby tego referatu proces możemy zdefiniować jako pojemnik na wątki. Zawiera wiele różnych informacji w tym kod i dane programu.

Wątek - odpowiada za wykonywanie kodu w kontekście procesu.

Z punktu widzenia algorytmu szeregowania ważne są następujące fakty:

  1. Scheduler zajmuje się wątkami a nie procesami. Do wykonania wybierane są wątki nie procesy, czas przyznawany jest wątkom nie procesom.
  2. Zarówno proces jak i wątek mają określone przez użytkownika priorytety. Priorytet wątku używany przez algorytm szeregowania jest określany na ich podstawie.
  3. Zawsze wykonywany jest wątek o najwyższym priorytecie.

Win32 API

Użytkownik może określić klasę priorytetową procesu jako:

  1. Real-time
  2. High
  3. Above Normal
  4. Normal
  5. Below Normal
  6. Idle

Względny priorytet wątku może zostać określony jako:

  1. Time-critical
  2. Highest
  3. Above-normal
  4. Normal
  5. Below-normal
  6. Lowest
  7. Idle

Jądro systemu

Klasa priorytetowa procesu i względny priorytet wątku tłumaczone są na priorytet wątku. Może on przyjmować wartości od 0 do 31:

Rysunek z książki "Inside Microsoft Windows 2000"

Tłumaczenie odbywa się w różny sposób dla różnych wersji Windows. Poniżej przykładowe tłumaczenie dla systemu Windows2000. Oś X - klasa priorytetowa procesu, oś Y - względny priorytet wątku, wartością jest priorytet wątku.

Klasa priorytetowa procesu
Względny priorytet wątku Idle Below Normal Normal Above Normal High Real-Time
Time-critical 15 15 15 15 15 31
Highest 6 8 10 12 15 26
Above normal 5 7 9 11 14 25
Normal 4 6 8 10 13 24
Below normal 3 5 7 9 12 23
Lowest 2 4 6 8 11 22
Idle 1 1 1 1 1 16

Cykl życia wątku

Cykl życia wątku wątku w Windowsie przebiega podobnie jak w linuksie. Przedstawia go poniższy rysunek.

Rysunek z książki "Inside Microsoft Windows 2000"

Priorytet aktualny

W systemie Windows w przeciwieństwie do Linuksa i FreeBSD nie ma pojęcia epoki. Proces któremu skończy się czas otrzymuje go znowu i trafia na koniec kolejki procesów o danym priorytecie. Odpowiada to obsłudze procesów klasy SCHED_RR w Linuksie.

Zamiast epoki z każdym procesem poza bazowym priorytetem (tym który przyjmuje wartości od 0 do 31) wprowadzono priorytet aktualny (też przyjmuje wartości od 0 do 31). Algorytm szeregowania wybiera proces o najwyższym priorytecie aktualnym.

Priorytet aktualny zazwyczaj ma wartość taką samą jak priorytet bazowy. W pewnych sytuacjach priorytet bazowy jest podnoszony a później co kwant czasu spada o 1 aż osiągnie priorytet bazowy. Dla zwykłego procesu priorytet aktualny nie może być większy niż 15.

Rysunek z książki "Inside Microsoft Windows 2000"

Podniesienie priorytetu aktualnego zachodzi:

Kwant przyznawany procesom

Wszystkie wątki otrzymują kwant takiej samej wielkości. Wynosi on domyślnie 6 dla Windows 2000 Professional i 36 dla dla Windows 2000 Server. Wartości te mogą być modyfikowane. Przerwanie zegarowe powoduje jego zmniejszenie o 3. Odpowiedź na pytanie dlaczego 3 a nie 1 zostawiam dociekliwym czytelnikom.