Strona 1 z 1

[Python]Banalny "wirus"

: 01 lut 2016, 02:34
autor: Kenjin
Witam,
prezentuje wam bardzo prostego "wirusa" mojego autorstwa oczywiscie w celach edukacyjnych. Jesli ktos zastanawial sie jak tego typu rzeczy dzialaja to na tym prostym kodzie mozna sie wiele nauczyc.

Nasz skrypt, tworzy nowe watki, wykonujace funkcje f, ktorej zadaniem jest wykonywanie operacji arytmetycznych (obciazajacych procesor) i operacji przypisania (obciazajacych pamiec). W ten sposob po krótkiej chwili program w 100% obciaza zarówno procesor jak i pamięć, co skutkuje jego zawieszeniem.

UWAGA: Na starszych systemach może dojść do uszkodzenia (spalenia) procesora lub uszkodzenia pamięci, NIE PONOSZE ODPOWIEDZIALNOŚCI za takie straty. Skrypt prezentuje tylko i wyłącznie w celach edukacyjnych!

Kiedyś popularne były tego typu robaki, ktore dodatkowo jeszcze replikowaly sie w systemie i dodawaly do autostartu, pozbycie sie czegos takiego bywa bardzo bolesne. Obrona moze byc zastrzezenie pewnej ilosci pamieci w systemie jak i uzycie pewnego rodzaju alarmu -> wylaczajacego proces gdy zabiera zbyt duza ilosc pamieci/procesora.

Oto kod:

Kod: Zaznacz cały

from multiprocessing import Pool

def f(x):
    t = []
    while True:
        t.append(x * x)

        #ile rdzeni chcemy wykorzystac (mozna podac dowolnie duza liczbe, i tak obciazenie nie przekroczy 100%
rdzeni = 15

if __name__ == '__main__':
    p = Pool(rdzeni)
    p.map(f, range(rdzeni))

Re: [Python]Banalny "wirus"

: 01 lut 2016, 17:46
autor: F3nix
RDZENIE != WĄTKI.

Re: [Python]Banalny "wirus"

: 01 lut 2016, 18:28
autor: Kenjin
F3nix pisze:RDZENIE != WĄTKI.
Chodzi tu o tzw. Parallelizm. Nie wiem jak to się fachowo nazywa ale użycie klasy Pool powoduje, że nasz proces jest dzielony na kilka równoległych processów, w pełni wykorzystując procesor. Użyłem słowa wątki bo bardzo podobnie działa moduł threading(jednak tam nie uda nam się zawiesić komputera, ze względu na Global interpretter Lock - czyli blokowanie nowych processow dopoki pierwszy nie zostanie zakonczony).

Re: [Python]Banalny "wirus"

: 01 lut 2016, 23:27
autor: Kenjin
I w tym wypadku jest to rownoznaczne ilosci rdzeni. Kazdy process w pelni wykorzystuje jeddn rdzen.

Re: [Python]Banalny "wirus"

: 03 lut 2016, 10:24
autor: F3nix
To nie jest do końca tak. Procesory mają różną ilość wątków (rdzeni logicznych i rdzeni (fizycznych). Spójrz na przykładową specyfikację dosyć popularnego procesorka:
http://ark.intel.com/products/77769/Int ... e-3_50-GHz

Zwróć uwagę na kartę Performance. Często jest też tak że to system i jego algorytmy bardziej decydują niż procesor.