O condiție cursă

În acest termen, există alte utilizări, a se vedea. Racing.

condiție cursa (condiție cursa engleză.) - eroarea de proiectare sistem multi-threaded sau aplicație în care funcționarea sistemului sau a cererii depinde de ordinea în care sunt executate părți ale codului. Numele erorii obținute printr-un circuit electronic erori de proiectare similare (vezi. Semnale Racing).

Stare Race - „plutitoare“ de eroare (heisenbug), prezentat la momente aleatorii și „intermitent“ atunci când încercați să-l localizeze.

Luați în considerare exemplul codului (în Java). int volatilă x; // Subiect 1: în timp ce (oprire!)

// Stream 2: în timp ce (oprire!)

Fie x = 0. Să presupunem că programul are loc în următoarea ordine:

  1. în cazul în care operatorul în fluxul 2 controale de paritate pe x.
  2. Operatorul «x ++» în fluxul 1 x crește cu unul.
  3. operatorul O în ieșire de stream 2 «x = 1" , deși s-ar părea, variabila verificate pentru paritate.

moduri de a rezolva

copie locală

sincronizare

O metodă mai complexă, dar, de asemenea, mai universale de rezolvare - sincronizare fir, și anume: int x;

// Subiect 1: în timp ce (oprire!)

// Stream 2: în timp ce (oprire!)

Acolo se întâmplă înainte de semantica nu necesită cuvinte cheie volatile.

metoda combinată

Să presupunem că variabilele - două (și cuvântul cheie volatile nu funcționează), iar al doilea flux în loc de valoare System.out.println de procesare mai complexe. În acest caz, ambele metode nu sunt satisfăcătoare: prima - astfel încât o variabilă poate fi modificată în timp ce cealaltă este copiat; în al doilea rând - pentru că prea mare volum sincronizate de cod.

Aceste metode pot fi combinate prin copierea variabilelor „periculoase“ într-un bloc sincronizat. Pe de o parte, se va elimina o limită de instrucțiune mașină, pe de altă parte - va scăpa de prea mult de sincronizare.

x1 int volatilă, x2;

// Subiect 1: în timp ce (oprire!)

// Stream 2: în timp ce (oprire!)

modalități de a identifica și evidente care se stabilesc condițiile de rasă nu există. Cel mai bun mod de a scapa de curse - proiectarea corectă a unui sistem multi-tasking.

cu Therac-25 caz

Aparate de radioterapie Therac-25 a fost primul dispozitiv medical din SUA, în care problemele de securitate au fost atribuite în mod exclusiv la software-ul. Acest dispozitiv funcționează în trei moduri:

  1. E-terapie: un tun de electroni iradiază direct pacientului; PC specifică o energie de electroni de la 5 până la 25 MeV.
  2. Terapia cu raze X: un tun de electroni iradiază țintă de tungsten, iar pacientul este iradiat cu raze X care trec prin difuzor în formă de con. În acest mod, energia electronului este constantă: 25 MeV.
  3. nu radiații a fost în al treilea modul. Pe calea de electroni (în caz de accident) este un reflector din oțel, iar radiația de lumină simulată. Acest mod este folosit pentru a aduce cu precizie fascicolul de pe inflamat la fața locului.

Aceste trei moduri au fost stabilite disc rotativ, în care o gaură a fost Devierea magneți pentru țintă terapia de electroni și o lentilă pentru o radiografie. Din cauza o condiție cursă între programul de control și de tratare a tastaturii, uneori, sa întâmplat că, în raze X modul drive terapie este în poziția „E-terapie“, iar pacientul este iradiat direct cu un fascicul de electroni de 25 MeV, ceea ce duce la supraexpunere. În acest caz, terminalele senzorului de „doză zero“, astfel încât operatorul poate repeta procesul, exacerbarea situației. Ca urmare, omorând cel puțin patru pacienți.

Unele cod a fost luat de la Therac-6 și Therac-20. În Therac-6 nu au avut terapie cu raze X, iar în Therac-20 au fost măsuri de securitate bazate pe hardware, care nu sunt permise pentru a porni lumina când discul a fost în poziție greșită.

Break-uri prin exploatarea unei condiții de rasă

Există o clasă de erori (și de a exploata tipurile lor de atac), care permit programul non-privilegiat afecta alte programe prin capacitatea de a schimba resursele publice (de obicei -. Fișiere temporare de rasă engleză / tmp - o condiție cursă în directorul temporar), într-un anumit interval de timp, în care de eroare de fișier programator este scris de toate sau o parte a utilizatorilor sistemului.

Programul Atacarea poate distruge conținutul fișierului, determinând programul să se prăbușească victimă, sau înlocuirea stabilit programul pentru a efectua o acțiune la nivelul privilegiilor lor de date.

Acesta este motivul pentru care software-ul cu cerințele de securitate severe, cum ar fi un browser web. Acesta utilizează numere aleatoare de calitate criptografic pentru a denumi fișierele temporare.

notițe