[Python]Banalny "wirus"

Zbiór ciekawych kodów źródłowych, skryptów i gotowców.
Regulamin forum
-Staraj się poprzedzać nazwę tematu prefiksem z nazwą języka programowania np. [Python] nazwa tematu.
-Wklejaj źródła w znaczniku

Kod: Zaznacz cały

[/b].
-Staraj się w skrócie opisać do czego dane źródło służy.
[b]-Zawsze podaj stronę domową autora (jeśli znasz te informacje)[/b]. Szanujemy cudzą prace!
Kenjin
Ekipa HEP
Posty: 122
Rejestracja: 04 sty 2016, 22:10

[Python]Banalny "wirus"

Post 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))
Awatar użytkownika
F3nix
Posty: 332
Rejestracja: 28 kwie 2015, 20:51

Re: [Python]Banalny "wirus"

Post autor: F3nix »

RDZENIE != WĄTKI.
Kenjin
Ekipa HEP
Posty: 122
Rejestracja: 04 sty 2016, 22:10

Re: [Python]Banalny "wirus"

Post 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).
Kenjin
Ekipa HEP
Posty: 122
Rejestracja: 04 sty 2016, 22:10

Re: [Python]Banalny "wirus"

Post autor: Kenjin »

I w tym wypadku jest to rownoznaczne ilosci rdzeni. Kazdy process w pelni wykorzystuje jeddn rdzen.
Awatar użytkownika
F3nix
Posty: 332
Rejestracja: 28 kwie 2015, 20:51

Re: [Python]Banalny "wirus"

Post 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.
ODPOWIEDZ