Zarządzanie priorytetami procesów w systemie Windows

Porozmawiajmy Priorytety procesu Windows. W większości przypadków nie trzeba „bawić się” ustawianiem priorytetów, ale czasami kompetentny administrator systemu może pomóc systemowi w lepszym rozłożeniu czasu procesora między uruchomionymi zadaniami. Nie ma jednego przepisu, ale poprzez „selekcję i wyliczenie” jest to całkiem wykonalne. Gdzie to może być potrzebne? Na przykład w pakiecie 1C-SQL możesz wydłużyć czas procesora 1C i SQL, jako najbardziej krytyczne procesy dla zasobów.

Zasadniczo za pomocą Menedżera zadań można przeglądać i zmieniać priorytet uruchomionego procesu

Windows NT / 2000 /7/ 2008

W systemie Windows 2012 jest „zakopany” nieco głębiej

Jak widać z powyższych przykładów, dostępnych jest tylko 6 priorytetów (jak się później okaże) klasy priorytetowe) Dosyć? Microsoft uważa, że ​​tak. Ale przypomnijmy sobie „legendarne” zdanie Billa Geista, które mówiło, że „640 KB pamięci RAM wystarczy dla wszystkich.” Ale czas pokazał, że tak nie jest. :)

Zobaczmy teraz, jak to naprawdę jest.

W systemie Windows istnieją 32 poziomy priorytetów, od 0 do 31.

Są one pogrupowane w następujący sposób:

  • 31–16 poziomy czasu rzeczywistego;
  • 15 - 1 poziomy dynamiczne;
  • 0 - poziom systemu zarezerwowany dla wątku zerowej strony.

Podczas tworzenia procesu jest on przypisywany do jednego z sześciu klasy priorytetowe:

  1. Klasa czasu rzeczywistego (wartość 24),
  2. Wysoka klasa (wartość 13),
  3. Powyżej normalnej klasy (wartość 10),
  4. Klasa normalna (wartość 8),
  5. Poniżej normalnej klasy (wartość 6),
  6. lub klasa bezczynności (wartość 4).

Możesz zobaczyć priorytet procesu za pomocą Menedżera zadań..

Uwaga: Priorytety Powyżej normalnej i Poniżej normalnej pojawiły się od Windows 2000.

Priorytet każdego wątku (podstawowy priorytet wątku) składa się z priorytetu procesu i względny priorytet sam przepływ. Istnieje siedem względnych priorytetów wątków:

  1. Normalny: taki sam jak proces;
  2. Powyżej normalnego: +1 do priorytetu przetwarzania;
  3. Poniżej normy: -1;
  4. Najwyższy: +2;
  5. Najniższy: -2;
  6. Krytyczny czasowo: ustawia podstawowy priorytet strumienia dla klasy czasu rzeczywistego na 31, dla innych klas na 15.
  7. Bezczynność: ustawia podstawowy priorytet strumienia dla klasy czasu rzeczywistego na 16, dla pozostałych klas na 1.

Poniższa tabela pokazuje priorytety procesu, względne i podstawowe priorytety wątków..

Priorytet przepływuKlasa procesuKlasa procesu
Bezczynna klasaPoniżej normalnej klasyNormalna klasaPowyżej normalnej klasyWysoka klasaKlasa czasu rzeczywistego
1BezczynnieBezczynnieBezczynnieBezczynnieBezczynnie
2)Najniższy
3)Poniżej ...
4Bezczynna klasa NormalneNajniższy
5Powyżej ... Poniżej ...
6Poniżej normalnej klasy NajwyższyNormalneNajniższy
7Powyżej ... Poniżej ...
8Normalna klasa NajwyższyNormalneNajniższy
9Powyżej ... Poniżej ...
10Powyżej normalnej klasy NajwyższyNormalne
11Powyżej ... Najniższy
12NajwyższyPoniżej ...
13Wysoka klasa Normalne
14Powyżej ...
15Najwyższy
15Czas krytycznyCzas krytycznyCzas krytycznyCzas krytycznyCzas krytyczny
16Bezczynnie
17
18
19
20
21
22Najniższy
23Poniżej ...
24Klasa czasu rzeczywistego Normalne
25Powyżej ...
26Najwyższy
27
28
29
30
31Czas krytyczny

Teraz, kiedy wszyscy się tego nauczyliśmy, co możemy z tym wszystkim zrobić? Na przykład zacznij używać.

Jak inaczej możesz rozpocząć proces z „niestandardowym” priorytetem lub zmianą?

Metoda 1. Uruchom zadanie / proces i zmień priorytet za pomocą Menedżera zadań.

Wady metody:

  • Dostępne tylko 6 priorytetów
  • Priorytetowe przełączanie odbywa się za pomocą myszy; nie jest zautomatyzowane.

Metoda 2. Możesz użyć polecenia START z odpowiednimi klawiszami

Dostępne klucze priorytetów są następujące (celowo pomijam opcje wiersza polecenia) START niezwiązane z opisanym procesem pracy z priorytetami):

C: \> start /?
Uruchamia osobne okno, aby uruchomić określony program lub polecenie.
START [„tytuł”] [/ D ścieżka] [/ I] [/ MIN] [/ MAX] [/ SEPARATE | / DZIELONE]
[/ LOW | / NORMAL | / HIGH | / W CZASIE RZECZYWISTYM | / ABOVENORMAL | / BELOWNORMAL]
[/ NODE] [/ AFFINITY] [/ WAIT] [/ B]
[polecenie / program] [parametry]
Niski       Uruchom aplikację w klasie priorytetu IDLE.
Normalne     Uruchom aplikację w klasie priorytetu NORMAL.
Wysoki       Rozpocznij aplikację w klasie WYSOKIEGO priorytetu.
W CZASIE RZECZYWISTYM   Rozpocznij aplikację w klasie priorytetu REALTIME.
ABOVENORMAL Rozpocznij aplikację w klasie priorytetowej ABOVENORMAL.
BELOWNORMAL Rozpocznij aplikację w klasie priorytetowej BELOWNORMAL.

Jak widać, polecenie START umożliwia rozpoczęcie procesu z tymi samymi 6 priorytetami, które są dostępne za pośrednictwem Menedżera zadań

Metoda minus:

  • Dostępne tylko 6 priorytetów

Metoda 3. Korzystanie z narzędzia wmic.exe

Jak pokazano powyżej, Menedżer zadań i polecenie START są wystarczająco niezdarne, aby wykonać zadanie ustalania priorytetów. Zobaczmy, jak zastosować go bardziej elastycznie. Użyjemy narzędzia wmic.exe.

Wiersz poleceń:

wmic process where name = "AppName" CALL setpriority ProcessIDLevel

Przykład:

proces wmic gdzie name = "calc.exe" CALL setpriority 32768

lub

proces wmic gdzie name = "calc.exe" CALL setpriority "powyżej normy"

Priorytety (predefiniowane):

  • stan bezczynności: 64
  • poniżej normy: 16384
  • normalna: 32
  • powyżej normy: 32768
  • wysoki priorytet: 128
  • w czasie rzeczywistym: 256
Odwrót. Co się stanie, jeśli istnieje kilka procesów o tej samej nazwie? Priorytet procesu można zmienić zarówno przez nazwę procesu, jak i za pomocą PID (ID procesu) procesu.

Oto krótki przykład uruchamiania wmic.exe w celu uzyskania niezbędnych informacji

Używamy polecenia:

krótka lista procesów wmic

Uwaga: Nie podam przykładu wykonania tego polecenia. Otrzymano zbyt dużą listę procesów. Zrób to sam, jeśli chcesz.

Otrzymasz listę procesów uruchomionych na twoim komputerze lokalnym. Teraz uruchom polecenie:

krótka lista procesów wmic znajdź „cmd.exe”

Wynik:

Specjalnie uruchomiono kilka kopii programu cmd.exe, aby ilustracja była bardziej kompletna.

Teraz lista procesów jest ograniczona tylko do tych procesów, których nazwa to moduł wykonywalny, w którym znajduje się wiersz „cmd.exe”. Zwróć uwagę na PID procesu (procesów).

Teraz spróbujmy wybrać interesujące nas procesy, używając bezpośrednio WMI i bez uciekania się do standardowych narzędzi wiersza poleceń. Aby to zrobić, po prostu napisz:

wmic process where description = "cmd.exe" lista skrótów

Wynik:

Porównaj wyniki. Zapamiętaj PID procesu CMD.EXE.

Wiersz polecenia, aby uruchomić wmic.exe

proces wmic gdzie processid = "XXXX" CALL setpriority ProcessIDLevel

Teraz możemy zmienić priorytet określonego procesu (na przykład PID = 8476):

proces wmic gdzie processid = "8476" CALL setpriority 32768

lub

proces wmic gdzie processid = "8476" CALL setpriority "powyżej normy"

Co dalej Oszacuj, spróbuj, wybierz i precyzyjnie dostosuj priorytety. Poprawa pracy usług i procesów, a także pracy użytkowników końcowych.