Unități centrale de procesare
Unitatea centrală de procesare (cunoscută prin acronimul CPU , Unitatea centrală de procesare în engleză ) sau procesorul este o componentă hardware dintr-un computer , smartphone-uri și alte dispozitive programabile.
Funcția sa este de a interpreta instrucțiunile unui program de calculator prin efectuarea de operații de bază aritmetice, logice și externe (care provin de la unitatea de intrare/ieșire). Designul și progresul său s-au schimbat considerabil de la crearea sa, crescându-i eficiența și puterea și reducând consumul și costurile de energie.
Un computer poate conține mai mult de un procesor ( multiprocesare ). În prezent, microprocesoarele sunt alcătuite dintr-un singur circuit integrat ( cip ), deși există procesoare cu mai multe nuclee (mai multe procesoare într-un singur circuit integrat). Un circuit integrat care conține un CPU poate conține, de asemenea, dispozitivele periferice și alte componente ale unui sistem informatic; similar cu un microcontroler (mai puțin puternic în RAM) se numește sistem pe un cip ( SoC ).
Componentele CPU sunt:
- Arithmetic Logic Unit (ALU): Efectuează operații aritmetice și logice.
- Unitatea de control (CU): direcționează traficul de informații între registrele CPU și conectează instrucțiunile extrase din memorie cu ALU.
- Registre interne : nu sunt accesibile (instrucțiuni, magistrală de date și magistrală de adrese) și sunt accesibile pentru utilizare specifică (contor de programe, indicator de stivă, acumulator, steaguri etc.) sau pentru uz general.
Istoric
Calculatoarele timpurii, cum ar fi ENIAC , au trebuit să fie reconectate fizic pentru a îndeplini diferite sarcini, ceea ce a făcut ca aceste mașini să fie numite „calculatoare cu program fix”. Întrucât termenul „CPU” este definit în general ca un dispozitiv pentru executarea software-ului (program de calculator), primele dispozitive pe care le-am putea numi pe bună dreptate CPU au venit odată cu apariția computerului cu program stocat .
Ideea unui computer cu program stocat era deja prezentă în designul lui John Presper Eckert și în ENIAC lui John William Mauchly , dar această caracteristică a fost omisă inițial, astfel încât aparatul să poată fi gata mai devreme. La 30 iunie 1945, înainte ca ENIAC să fie construit, matematicianul John von Neumann a distribuit Prima schiță a unui raport asupra EDVAC . A fost proiectul pentru un computer cu program stocat, finalizat în august 1949. [ 1 ] EDVAC a fost conceput pentru a efectua o serie de instrucțiuni (sau operații) de diferite tipuri. În mod semnificativ, programele scrise pentru EDVAC au fost create pentru a fi stocate în memoria de mare viteză a computerului și pentru a nu fi specificate de cablarea fizică a acestuia. Acest lucru a făcut posibilă depășirea unei limitări serioase a ENIAC, care a fost timpul și efortul necesar pentru reconfigurarea echipamentului pentru a îndeplini o nouă sarcină. Cu designul lui von Neumann, programul (sau software-ul ) care rulează pe EDVAC ar putea fi schimbat pur și simplu prin modificarea conținutului memoriei. Cu toate acestea, EDVAC nu a fost primul computer cu program stocat: Manchester Small-Scale Experimental Machine , un mic prototip de computer cu program stocat, a rulat primul său program la 21 iunie 1948. [ 2 ] Succesorul său, Manchester Mark I , a difuzat primul său program în noaptea de 16–17 iunie 1949.
Procesoarele timpurii au fost proiectate personalizat ca parte a unui computer mai mare, de obicei un computer unic. Cu toate acestea, această metodă de proiectare personalizată a CPU-urilor pentru o anumită aplicație a dispărut în mare măsură și a fost înlocuită de dezvoltarea unor clase de procesoare ieftine, standardizate, adaptate pentru unul sau mai multe scopuri. Această tendință de standardizare a început, în general, în era tranzistoarelor discrete , calculatoarelor mainframe și microprocesoarelor și s-a accelerat rapid odată cu popularizarea circuitului integrat (IC). Acest lucru a permis ca CPU-uri mai complexe să fie proiectate și fabricate în spații mici, de ordinul nanometrilor . Datorită miniaturizării și standardizării CPU-urilor, prezența acestor dispozitive digitale în viața modernă a crescut cu mult dincolo de aplicațiile limitate ale mașinilor de calcul dedicate. Microprocesoarele moderne apar în orice, de la automobile la telefoane mobile (celulare) la jucării pentru copii .
În timp ce von Neumann a fost de multe ori creditat pentru proiectarea computerului cu program stocat datorită designului său al EDVAC, idei similare au fost propuse și aplicate de alții înaintea lui, cum ar fi Konrad Zuse . Așa-numita arhitectură Harvard a Harvard Mark I , care a fost finalizată înainte de EDVAC, a folosit și un design de program stocat folosind bandă de hârtie perforată în loc de memorie electronică. Diferența cheie dintre arhitecturile von Neumann și Harvard este că cea din urmă separă manipularea instrucțiunilor CPU și manipularea datelor în stocare, în timp ce prima utilizează același spațiu de memorie pentru ambele. Cele mai multe procesoare moderne sunt de design von Neumann, dar procesoarele cu arhitectură Harvard sunt văzute mai ales în aplicațiile încorporate; de exemplu, microcontrolerele Atmel AVR sunt procesoare cu arhitectură Harvard.
Releele electrice și tuburile de vid (supape termoionice) au fost utilizate în mod obișnuit ca elemente de comutare; un computer util necesita mii sau zeci de mii de dispozitive de comutare. Viteza totală a unui sistem depinde de viteza comutatoarelor. Calculatoarele cu tub, cum ar fi EDVAC, obișnuiau să aibă o medie de opt ore între defecțiuni, în timp ce calculatoarele releu (mai devreme și mai lente), cum ar fi Harvard Mark I , defeau foarte rar. [ 3 ] În cele din urmă, procesoarele bazate pe tuburi au devenit dominante, deoarece avantajele semnificative ale vitezei produse au depășit în general problemele de fiabilitate. Cele mai multe dintre aceste procesoare sincrone timpurii au funcționat la rate de ceas scăzute în comparație cu modelele microelectronice moderne. Frecvențele semnalului de ceas variind de la 100 kHz la 4 MHz erau foarte frecvente în acest moment , limitate în mare parte de viteza dispozitivelor de comutare cu care au fost construite.
Procesoare cu tranzistori și circuite integrate discrete
Complexitatea designului CPU a crescut împreună cu ușurința de a construi dispozitive electronice mai mici și mai fiabile. Prima dintre aceste îmbunătățiri a venit odată cu apariția tranzistorului . Procesoarele cu tranzistori în timpul anilor 1950 și 1960 nu au trebuit să fie construite cu elemente de comutare voluminoase, nesigure și fragile, cum ar fi tuburile de vid și releele electrice. Cu această îmbunătățire, procesoarele mai complexe și mai fiabile au fost construite pe una sau mai multe plăci de circuite imprimate care conțineau componente (individuale) discrete.
În această perioadă, o metodă de fabricare a multor tranzistoare într-un spațiu mic a câștigat popularitate. Circuitul integrat ( IC ) a permis fabricarea unui număr mare de tranzistoare pe un simplu wafer sau „cip” pe bază de semiconductor . La început, doar circuitele digitale de bază, nespecializate, cum ar fi porțile NOR, au fost miniaturizate în circuite integrate . Procesoarele bazate pe aceste circuite integrate „bloc de construcție” sunt, în general, denumite dispozitive de „integrare la scară mică” ( SSI ). În mod normal, circuitele integrate SSI, cum ar fi cele utilizate în Apollo Guidance Computer , conțineau tranzistori care erau numărați în număr de multipli de zece. Construirea unui procesor complet folosind circuite integrate SSI a necesitat mii de cipuri individuale, dar totuși a consumat mult mai puțin spațiu și putere decât modelele anterioare de tranzistori discrete. Pe măsură ce tehnologia microelectronică a avansat, un număr tot mai mare de tranzistori au fost plasați pe circuite integrate, scăzând astfel numărul de circuite integrate individuale necesare pentru un procesor complet. Circuitele integrate MSI și LSI (integrare la scară medie și mare) au crescut numărul de tranzistori la sute și apoi la mii.
În 1964, IBM a introdus arhitectura sa de computer System/360 , care a fost folosită într-o serie de computere care puteau rula aceleași programe la viteze și performanțe diferite. Acest lucru a fost semnificativ într-un moment în care majoritatea calculatoarelor electronice erau incompatibile între ele, chiar și cele produse de același producător. Pentru a facilita această îmbunătățire, IBM a folosit conceptul de microprogram , adesea numit „ microcod ”, încă folosit pe scară largă în procesoarele moderne. [ 4 ] Arhitectura System/360 a fost atât de populară încât a dominat piața mainframe -urilor în următoarele decenii și a lăsat o moștenire care încă trăiește în computerele moderne, cum ar fi IBM zSeries . În același an 1964, Digital Equipment Corporation (DEC) a introdus un alt computer extrem de influent, destinat piețelor de cercetare și științifice: PDP-8 . DEC a introdus ulterior linia foarte populară a PDP-11 , care a fost construită inițial cu circuite integrate SSI, dar implementată cu componente LSI pe măsură ce au devenit practice. Spre deosebire de predecesorii săi fabricați cu tehnologii SSI și MSI, prima implementare LSI a PDP-11 conținea un procesor format din doar patru circuite integrate LSI. [ 5 ]
Calculatoarele bazate pe tranzistori au avut mai multe avantaje față de predecesorii lor. Pe lângă fiabilitatea crescută și consumul de energie mai mic, tranzistorii au permis procesorului să funcționeze la viteze mult mai mari datorită timpului scurt de comutare al unui tranzistor în comparație cu un tub sau un releu. Mulțumită atât acestei fiabilități sporite, cât și creșterii uriașe a vitezei elementelor de comutare, care în acest moment erau aproape exclusiv tranzistori, s-au atins frecvențe de ceas a CPU de zeci de megaherți. De asemenea, în timp ce procesoarele cu tranzistoare discrete și cu circuite integrate erau utilizate în mod obișnuit, au început să apară modele mai noi de înaltă performanță, cum ar fi procesoarele vectoriale SIMD ( single instruction multiple data ) . Aceste proiecte experimentale timpurii au dat naștere mai târziu erei supercalculatoarelor specializate , cum ar fi cele realizate de Cray Inc.
Microprocesoare
În anii 1970 , invențiile fundamentale ale lui Federico Faggin (Silicon Gate MOS ICs cu porți auto-aliniate cuplate cu noua sa metodologie de proiectare logică aleatorie) au schimbat pentru totdeauna proiectarea și implementarea CPU. De la introducerea primului microprocesor disponibil comercial, Intel 4004 , în 1970, și a primului microprocesor utilizat pe scară largă, Intel 8080 , în 1974, această clasă de CPU a înlocuit aproape complet toate celelalte metode de implementare a Unității Centrale de Procesare. Producătorii de mainframe și minicalculatoare din acea vreme au lansat programe de dezvoltare IC proprietare pentru a-și moderniza arhitecturile mai vechi de computer și pentru a produce microprocesoare cu seturi de instrucțiuni care erau compatibile cu hardware-ul și software-ul mai vechi. Combinat cu apariția și succesul vast al computerului personal , acum omniprezent , termenul „CPU” este acum aplicat aproape exclusiv microprocesoarelor.
Generațiile anterioare de procesoare au fost implementate ca componente discrete și circuite integrate la scară mică integrate pe una sau mai multe plăci de circuite. Pe de altă parte, microprocesoarele sunt procesoare realizate cu un număr foarte mic de circuite integrate; de obicei doar unul. Dimensiunea mai mică a procesorului, ca urmare a implementării pe un singur cip, înseamnă timpi de comutare mai mici din cauza factorilor fizici, cum ar fi capacitatea redusă a porții parazite . Acest lucru a permis microprocesoarelor sincrone să aibă timpi de ceas variind de la zeci de megaherți la câțiva gigaherți. În plus, pe măsură ce capacitatea de a construi tranzistori foarte mici pe un circuit integrat a crescut, complexitatea și numărul de tranzistori dintr-un singur CPU a crescut, de asemenea, enorm. Această tendință observată pe scară largă este descrisă de legea lui Moore , care s-a dovedit a fi un predictor destul de precis al creșterii complexității CPU-urilor și a altor circuite integrate. [ 6 ] Deși, în ultimii șaizeci de ani, complexitatea, dimensiunea, construcția și forma generală a procesoarelor s-au schimbat dramatic, este de remarcat faptul că designul și funcționarea de bază nu s-au schimbat prea mult. Aproape toate procesoarele obișnuite de astăzi pot fi descrise cu acuratețe drept mașini cu programe stocate von Neumann . Pe măsură ce legea lui Moore menționată mai sus continuă să fie valabilă, [ 6 ] au fost ridicate preocupări cu privire la limitele tehnologiei tranzistoarelor cu circuit integrat. Miniaturizarea extremă a porților electronice face ca efectele fenomenelor să devină mult mai semnificative, cum ar fi electromigrarea și subpragul de blocare . Aceste noi preocupări se numără printre numeroșii factori care îi determină pe cercetători să studieze noi metode de calcul, cum ar fi calculul cuantic , și să extindă utilizarea paralelismului și a altor metode care extind utilitatea modelului von Neumann clasic.
Operațiune
Funcția fundamentală a majorității CPU-urilor este de a executa o secvență de instrucțiuni stocate numită „program”. Programul este reprezentat de o serie de numere care sunt păstrate într-un fel de memorie a computerului. Există patru pași pe care aproape toate procesoarele cu arhitectură von Neumann îi folosesc în funcționarea lor: preluare , decodare , execuție și scriere înapoi (citire, decodare, execuție și scriere).
Preluare
Primul pas, citirea , presupune preluarea unei instrucțiuni (care este reprezentată printr-un număr sau o secvență de numere) din memoria programului. Locația de memorie a programului este determinată de un numărător de programe (PC), care stochează un număr care identifică adresa următoarei instrucțiuni care trebuie preluată. După ce o instrucțiune este citită, PC-ul crește lungimea instrucțiunii în termeni de unități de memorie, astfel încât va conține adresa următoarei instrucțiuni din secvență. Adesea, instrucțiunea de citit trebuie preluată din memoria relativ lentă, ceea ce oprește CPU-ul în timp ce așteaptă ca instrucțiunea să revină. Această problemă este abordată în mare măsură în procesoarele moderne prin cache-urile și arhitecturile pipeline (vezi mai jos).
Decodificare
În pasul de decodare , instrucțiunea este împărțită în părți care au semnificație pentru alte unități ale CPU. Modul în care este interpretată valoarea instrucțiunii numerice este definit de arhitectura setului de instrucțiuni (ISA) a procesorului. Adesea, un grup de numere din instrucțiune, numit opcode , indică operația de efectuat. Părțile rămase ale numărului oferă de obicei informațiile necesare pentru acea instrucțiune, cum ar fi operanzii pentru o operație de adăugare . Astfel de operanzi pot fi dați ca o valoare constantă (numită valoare imediată) sau ca un loc pentru a localiza o valoare, care, așa cum este determinată de un anumit mod de adresă , poate fi un registru sau o adresă de memorie . În modelele mai vechi, unitățile CPU responsabile pentru decodarea instrucțiunilor erau dispozitive hardware fixe. Cu toate acestea, în CPU-urile și ISA-urile mai abstracte și complicate, un firmware este adesea folosit pentru a ajuta la traducerea instrucțiunilor în diferite semnale de configurare pentru CPU . Acest firmware poate fi uneori rescris în așa fel încât să poată fi modificat pentru a schimba modul în care CPU-ul decodifică instrucțiunile chiar și după ce a fost fabricat.
Execută
După pașii de citire și decodare, se realizează pasul de execuție a instrucțiunii . În timpul acestui pas, diferite unități CPU sunt conectate astfel încât să poată efectua operația dorită. Dacă, de exemplu, a fost solicitată o operație de adăugare, o unitate logică aritmetică (ALU) ar fi conectată la un set de intrări și la un set de ieșiri. Intrările furnizează numerele de adăugat, iar ieșirile vor conține suma finală. ALU conține circuitele pentru a efectua operații aritmetice și logice simple pe intrări, cum ar fi operații de adunare și pe biți . Dacă operația de adăugare produce un rezultat prea mare pentru ca CPU să îl poată gestiona, poate fi setat și un flag de depășire aritmetică situat într-un registru de steag (vezi secțiunea despre intervalul întregului de mai jos).
Scriere înapoi
Pasul final, scrie , pur și simplu „scrie” rezultatele pasului de execuție la o anumită adresă de memorie. Foarte des, rezultatele sunt scrise într-un registru intern al CPU pentru acces rapid prin instrucțiunile ulterioare. În alte cazuri, rezultatele pot fi scrise în memoria principală mai lentă, dar mai ieftină și mai mare . Unele tipuri de instrucțiuni manipulează contorul programului în loc să producă direct date rezultate. Acestea sunt denumite în general „sărituri” și facilitează comportamente precum bucle , execuția condiționată a programelor (cu utilizarea de salturi condiționate) și funcțiile din programe. Multe instrucțiuni modifică, de asemenea, starea cifrelor dintr-un registru „steag”. Aceste steaguri pot fi folosite pentru a influența modul în care se comportă un program, deoarece indică adesea rezultatele diferitelor operațiuni. De exemplu, o instrucțiune de tip „comparare” ia în considerare două valori și stabilește un număr, în registrul de steaguri, în funcție de care este mai mare. Apoi, o instrucțiune de ramificare ulterioară poate folosi acest flag pentru a determina fluxul programului.
După executarea instrucțiunii și scrierea datelor rezultate, întregul proces se repetă cu următorul ciclu de instrucțiuni, citind de obicei următoarea instrucțiune în secvență datorită valorii incrementate în contorul programului. Dacă instrucțiunea finalizată a fost un salt, contorul programului este modificat pentru a conține adresa instrucțiunii la care a fost sărit, iar execuția programului continuă normal. În procesoarele mai complexe decât cel descris aici, mai multe instrucțiuni pot fi citite, decodate și executate simultan. Această secțiune descrie este de obicei numită „Classic RISC pipeline”, care este de fapt destul de comună printre procesoarele simple utilizate în multe dispozitive electronice, adesea numite microcontrolere .
Proiectare și implementare
Interval întreg
Modul în care un procesor reprezintă numerele este o alegere de design care afectează cele mai elementare moduri de funcționare a dispozitivului. Unele dintre primele calculatoare digitale au folosit, pentru a reprezenta numere în interior, un model electric al sistemului numeric zecimal comun (baza zece). Alte computere au folosit sisteme de numerotare mai exotice, cum ar fi ternar (baza trei). Aproape toate procesoarele moderne reprezintă numere în formă binară : fiecare cifră este reprezentată de o anumită cantitate fizică de două valori, cum ar fi o tensiune „înaltă” sau „joasă” .
Legat de reprezentarea numerică este dimensiunea și precizia numerelor pe care le poate reprezenta un procesor. În cazul unui procesor binar, un bit se referă la o poziție semnificativă în numerele cu care lucrează un procesor. Numărul de biți (sau poziții numerice sau cifre) pe care un procesor îi folosește pentru a reprezenta numere este adesea numit „dimensiunea cuvântului”, „lățimea biților”, „lățimea căii de date” sau „precizia punctului.” întreg” atunci când se ocupă strict cu numere întregi (spre deosebire de numerele în virgulă mobilă). Acest număr diferă între arhitecturi și adesea în cadrul diferitelor unități ale aceluiași CPU. De exemplu, un procesor pe 8 biți gestionează o serie de numere care pot fi reprezentate prin opt cifre binare, fiecare dintre ele având două valori posibile, iar în combinație cei 8 biți au 2 8 sau 256 de numere discrete. De fapt, dimensiunea numărului întreg stabilește o limită hardware pentru intervalul de numere întregi pe care software-ul „rulează” și pe care CPU-ul le poate folosi direct.
Intervalul întregului poate afecta, de asemenea, numărul de locații de memorie pe care CPU le poate adresa (aloca). De exemplu, dacă un CPU binar folosește 32 de biți pentru a reprezenta o adresă de memorie și fiecare adresă de memorie reprezintă un octet (8 biți), cantitatea maximă de memorie pe care o poate adresa CPU este de 232 de octeți sau 4 GB . Aceasta este o vedere foarte simplă a spațiului de adrese CPU, iar multe modele moderne folosesc metode de adresă mult mai complexe, cum ar fi paginarea , pentru a aloca mai multă memorie decât ar permite întreaga lor gamă cu un spațiu de adrese plat.
Nivelurile mai înalte ale intervalului întreg necesită mai multe structuri pentru a gestiona cifrele suplimentare și, prin urmare, mai multă complexitate, dimensiune, consum de energie și, în general, costuri. Prin urmare, nu este cu totul neobișnuit să vedem microcontrolere pe 4 și 8 biți utilizate în aplicațiile moderne, chiar dacă sunt disponibile procesoare de ultimă generație (16, 32, 64 și chiar 128 de biți). Microcontrolerele mai simple sunt în general mai ieftine, folosesc mai puțină energie și, prin urmare, disipă mai puțină căldură. Toate acestea pot fi considerații importante de design pentru dispozitivele electronice. Cu toate acestea, în aplicațiile high-end, beneficiile gamei suplimentare (cel mai adesea spațiu de adresa suplimentar) sunt mai semnificative și afectează adesea opțiunile de proiectare. Pentru a obține unele dintre avantajele oferite atât de lungimi de biți mai mici, cât și de mari, multe procesoare sunt proiectate cu lățimi de biți diferite pentru diferite unități de dispozitiv. De exemplu, IBM System/370 a folosit un procesor care era în principal pe 32 de biți, dar a folosit precizie de 128 de biți în unitățile sale în virgulă mobilă pentru a facilita o precizie și o gamă mai mare de numere în virgulă mobilă. [ 4 ] Multe modele de CPU ulterioare folosesc o combinație similară de lățime de biți, mai ales atunci când procesorul este proiectat pentru utilizări de uz general unde este necesar un echilibru rezonabil între capacitatea de număr întreg și virgulă mobilă.
Frecvența ceasului
Majoritatea CPU-urilor și, într-adevăr, cele mai multe dispozitive logice secvenţiale , sunt de natură sincronă. Adică sunt proiectate și funcționează pe baza unui semnal de sincronizare. Acest semnal, cunoscut sub numele de semnal de ceas , ia de obicei forma unei unde pătrate periodice . Calculând timpul maxim în care semnalele electrice se pot mișca pe diferitele ramuri ale numeroaselor circuite ale unui CPU, proiectanții pot selecta o perioadă adecvată pentru semnalul de ceas.
Această perioadă trebuie să fie mai mare decât timpul necesar pentru ca un semnal să se miște sau să se propage în cel mai rău caz. Prin setarea perioadei de ceas la o valoare cu mult peste întârzierea de propagare în cel mai rău caz, este posibil să se proiecteze întregul procesor și modul în care acesta mută datele în jurul „marginelor” semnalului ascendent și descendent al ceasului. Acest lucru are avantajul de a simplifica semnificativ CPU-ul, atât din perspectiva designului, cât și din perspectiva numărului de componente. Totuși, acest lucru are și dezavantajul că întregul procesor trebuie să aștepte elementele sale cele mai lente, chiar dacă unele unități ale acestuia sunt mult mai rapide. Această limitare a fost în mare măsură compensată de diferite metode de creștere a paralelismului CPU (vezi mai jos).
Cu toate acestea, îmbunătățirile arhitecturale singure nu abordează toate dezavantajele CPU-urilor sincrone la nivel global. De exemplu, un semnal de ceas este supus întârzierilor oricărui alt semnal electric. Vitezele de ceas mai mari în procesoarele din ce în ce mai complexe fac mai dificilă menținerea semnalului de ceas în fază (sincronizat) pe întreaga unitate. Acest lucru a condus la multe procesoare moderne care necesită mai multe semnale de ceas identice să le fie furnizate, pentru a evita întârzierea unui singur semnal suficient de mult pentru a cauza funcționarea defectuoasă a procesorului. O altă problemă majoră când viteza ceasului crește dramatic este cantitatea de căldură care este disipată de procesor. Semnalul ceasului se schimbă constant, ceea ce face ca multe componente să schimbe (schimba starea), indiferent dacă sunt în uz curent. În general, o componentă care își schimbă starea folosește mai multă energie decât un element în stare statică. Prin urmare, pe măsură ce viteza ceasului crește, la fel și disiparea căldurii, determinând CPU-ul să necesite soluții de răcire mai eficiente.
O metodă de a face față comutării componentelor inutile este numită clock gating , care implică oprirea semnalului de ceas către componentele inutile, dezactivarea efectivă a acestora. Cu toate acestea, acest lucru este adesea considerat dificil de implementat și, prin urmare, nu vede o utilizare obișnuită în afara proiectelor de putere foarte scăzută. Un design târziu notabil al procesorului care folosește o poartă largă de ceas pentru a reduce cerințele de putere ale consolei de jocuri video este cel al Xbox 360 bazat pe IBM PowerPC . [ 7 ] O altă metodă de a trata unele dintre problemele cu un semnal de ceas global este eliminarea completă a acestuia. În timp ce eliminarea semnalului de ceas global face procesul de proiectare considerabil mai complex în multe privințe, în comparație cu proiectele sincrone similare, modelele asincrone (sau fără ceas) au avantaje marcante în ceea ce privește consumul de energie și disiparea căldurii. Deși rare, procesoarele complete au fost construite fără a utiliza un semnal de ceas global. Două exemple notabile în acest sens sunt AMULET , care implementează arhitectura ARM și MiniMIPS , care este compatibil cu MIPS R3000. În loc să elimine complet semnalul de ceas, unele modele de procesoare permit anumitor unități de dispozitiv să fie asincrone, cum ar fi utilizarea ALU -urilor împreună cu pipeline-ul superscalar pentru a obține unele câștiguri în performanța aritmetică. Deși nu este complet clar dacă modelele complet asincrone pot funcționa la un nivel comparabil sau mai bun decât omologii lor sincron, este clar că cel puțin excelează la cele mai simple operații matematice. Acest lucru, combinat cu consumul lor excelent de energie și caracteristicile de disipare a căldurii, le face foarte potrivite pentru sistemele „încorporate” . [ 8 ]
Paralelism
Descrierea funcționării de bază a CPU oferită în secțiunea anterioară descrie cea mai simplă formă pe care o poate lua un CPU. Acest tip de CPU, numit în mod obișnuit „subscalar”, operează și execută o singură instrucțiune cu una sau două date odată.
Acest proces are ca rezultat o ineficiență inerentă CPU-urilor subscalare. Deoarece este executată o singură instrucțiune la un moment dat, întregul procesor trebuie să aștepte finalizarea acelei instrucțiuni înainte de a trece la următoarea instrucțiune. Ca rezultat, procesorul subscalar se blochează pe instrucțiuni care durează mai mult de un ciclu de ceas pentru a se finaliza. Chiar și adăugarea unei a doua unități de execuție (vezi mai jos) nu îmbunătățește prea mult performanța. În loc să fie înghețată o cale, acum două căi se îngheață și numărul de tranzistori neutilizați crește. Acest design, în care resursele de execuție ale CPU pot funcționa cu o singură instrucțiune la un moment dat, poate atinge doar performanță scalară (o instrucțiune pe ciclu de ceas). Cu toate acestea, performanța este aproape întotdeauna subscalare (mai puțin de o instrucțiune pe ciclu).
Încercările de a obține o performanță mai bună și scalabilă au dus la o varietate de metodologii de proiectare care fac CPU-ul să se comporte mai puțin liniar și mai mult în paralel. Când ne referim la paralelism în CPU, doi termeni sunt în general folosiți pentru a clasifica aceste tehnici de proiectare.
- Instruction level parallelism , în limba engleză instruction level parallelism ( ILP ), urmărește să crească rata la care instrucțiunile sunt executate într-un CPU, adică să crească utilizarea resurselor de execuție pe cip.
- Paralelism the level of execution thread , în limba engleză thread level parallelism ( TLP ), care are ca scop creșterea numărului de fire de execuție (efectiv programe individuale) pe care un CPU le poate executa simultan.
Fiecare metodologie diferă atât prin modul în care sunt implementate, cât și prin eficiența relativă pe care o produc în creșterea performanței CPU pentru o aplicație.
ILP: Segmentare și arhitectură superscalară
Una dintre cele mai simple metode de a obține un paralelism crescut este să începeți primii pași de citire și decodare a instrucțiunii înainte ca instrucțiunea anterioară să se termine de executat. Aceasta este cea mai simplă formă de tehnică cunoscută sub numele de pipelining de instrucțiuni și este folosită în aproape toate procesoarele moderne de uz general. Împărțind calea de execuție în etape discrete, conducta permite executarea mai multor instrucțiuni la un moment dat. Această separare poate fi comparată cu o linie de asamblare, în care o instrucțiune este făcută mai completă la fiecare etapă până când iese din conducta de execuție și este îndepărtată din aceasta.
Cu toate acestea, conducta introduce posibilitatea unei situații în care este necesară încetarea rezultatului operațiunii anterioare pentru a finaliza operațiunea următoare; o condiție numită adesea conflict de dependență de date. Pentru a face față acestui lucru, trebuie să se acorde o atenție deosebită pentru a verifica aceste tipuri de condiții și, dacă se întâmplă acest lucru, o parte din conducta de instrucțiuni trebuie amânată. Desigur, realizarea acestui lucru necesită circuite suplimentare, procesoarele cu conducte sunt mai complexe decât subscalari, dar nu cu mult. Un procesor pipeline poate deveni aproape complet scalar, inhibat doar de opriri bruște în conductă (o instrucțiune care durează mai mult de un ciclu de ceas într-o etapă).
O îmbunătățire suplimentară a ideii de pipeline de instrucțiuni a condus la dezvoltarea unei metode care scade și mai mult timpul de inactivitate al componentelor CPU. Desenele despre care se spune că sunt superscalare includ o conductă lungă de instrucțiuni și mai multe unități de execuție identice. [ 9 ] Într-o conductă superscalar, instrucțiunile multiple sunt citite și transmise unui dispecer, care decide dacă instrucțiunile pot fi executate sau nu în paralel (simultan). Dacă da, acestea sunt expediate către unitățile de execuție disponibile, rezultând posibilitatea ca mai multe instrucțiuni să fie executate simultan. În general, cu cât un CPU superscalar este capabil să trimită simultan mai multe instrucțiuni către unitățile de execuție în așteptare, cu atât mai multe instrucțiuni vor fi completate într-un ciclu dat.
Cea mai mare dificultate în proiectarea unei arhitecturi CPU superscalare constă în crearea unui dispecer eficient. Dispecerul trebuie să poată determina rapid și corect dacă instrucțiunile pot fi executate în paralel, precum și să le trimită într-un mod care să mențină cât mai multe unități de execuție ocupate. Acest lucru necesită ca conducta de instrucțiuni să fie completată cât mai des posibil și crește nevoia, în arhitecturile superscalare, pentru cantități semnificative de memorie cache a CPU . Acest lucru face, de asemenea, că tehnicile de evitare a pericolelor , cum ar fi predicția ramurilor , execuția speculativă și execuția necorespunzătoare, sunt cruciale pentru menținerea unor niveluri ridicate de performanță. Încercând să prezică ce ramură (sau cale) va lua o instrucțiune condiționată, CPU poate minimiza numărul de ori în care întreaga conductă trebuie să aștepte ca o instrucțiune condiționată să se finalizeze. Execuția speculativă oferă adesea câștiguri modeste de performanță prin executarea unor porțiuni de cod care ar putea să nu fie necesare după finalizarea unei operațiuni condiționate. Ordinea în afara execuției schimbă cumva ordinea în care sunt executate instrucțiunile pentru a reduce întârzierile din cauza dependențelor de date. De asemenea, în cazul instrucțiunilor unice cu date multiple — procesoarele moderne, în cazul în care a fost procesată o cantitate mare de date de același tip, pot opri părți ale conductei, astfel încât atunci când o singură instrucțiune este executată de mai multe ori, procesorul sări peste faze de preluare și decodare și astfel crește dramatic performanța în anumite ocazii, în special în motoarele de programe extrem de monotone, cum ar fi software-ul de creare video și de procesare a fotografiilor.
În cazul în care o porțiune a CPU este superscalar și o porțiune nu este, porțiunea care nu este superscalar suferă în performanță din cauza blocării programului. Intel Pentium (P5 ) original avea două ALU superscalare care puteau accepta fiecare câte o instrucțiune per ciclu de ceas, dar FPU-ul său nu putea accepta o instrucțiune per ciclu de ceas. Astfel, P5 era superscalar pe partea întreagă, dar nu era superscalar pe numerele în virgulă mobilă. Succesorul arhitecturii Intel Pentium, P6 , a adăugat capabilități superscalare funcțiilor sale în virgulă mobilă și a produs astfel o creștere semnificativă a performanței acestor tipuri de instrucțiuni.
Atât modelele superscalare, cât și cele simple, măresc ILP-ul unui procesor, permițând unui singur procesor să finalizeze execuția instrucțiunilor la rate care depășesc o instrucțiune pe ciclu ( IPC ). Cele mai multe design-uri moderne de procesoare sunt cel puțin oarecum superscalare, iar în ultimul deceniu aproape toate design-urile CPU de uz general sunt superscalare. În ultimii ani, o parte din accentul pus pe proiectarea computerelor cu ILP ridicat s-a mutat de la hardware-ul CPU la interfața sa software, sau ISA. Cuvântul de instrucțiune foarte lung , sau strategia VLIW , face ca unele ILP să fie direct implicate de software, reducând cantitatea de muncă pe care trebuie să o facă CPU pentru a oferi ILP-ului un impuls semnificativ și reducând astfel complexitatea designului.
Paralelism la nivel de fir
O altă strategie pentru a obține performanță este să rulați mai multe programe sau fire în paralel. Acest domeniu de cercetare este cunoscut sub numele de calcul paralel. În taxonomia lui Flynn, această strategie este cunoscută sub numele de instrucțiuni multiple pentru date multiple sau MIMD.
O tehnologie folosită în acest scop a fost multiprocesarea (MP). Demararea acestei tehnologii este cunoscută sub numele de multiprocesare simetrică (SMP), în care un număr mic de procesoare împărtășesc o vedere coerentă asupra memoriei sistemului lor. În această schemă, fiecare CPU are hardware suplimentar pentru a păstra o vizualizare actualizată constant a memoriei. Pentru a evita accesările de memorie învechită, procesoarele pot coopera la același program, iar programele pot migra de la un procesor la altul. Pentru a crește numărul de procesoare cooperante dincolo de câteva, scheme precum accesul neuniform la memorie ( NUMA ) și protocoalele de consistență bazate pe directoare au fost introduse în anii 1990 . Sistemele SMP sunt limitate la un număr mic de procesoare, în timp ce sistemele NUMA au fost construite cu mii de procesoare. Inițial, multiprocesarea a fost construită folosind mai multe procesoare și plăci discrete pentru a implementa interconectarea dintre procesoare. Când procesoarele și interconectarea lor au fost implementate pe un singur cip de siliciu, tehnologia este cunoscută ca procesor multicore .
Ulterior, sa recunoscut că există o paralelă foarte strânsă cu un singur program. Un singur program poate avea mai multe fire de execuție (sau funcții) care ar putea fi executate separat sau în paralel. Unele dintre cele mai vechi exemple ale acestei tehnologii au implementat procesarea de intrare/ieșire , cum ar fi accesul direct la memorie ca un fir separat de firul de execuție calculat. O abordare mai generală a acestei tehnologii a fost introdusă în anii 1970, când sistemele au fost proiectate să ruleze mai multe fire de calcul în paralel. Această tehnologie este cunoscută sub numele de multithreading (MT).
Această abordare este considerată mai rentabilă decât multiprocesarea, deoarece doar un număr mic de componente dintr-un CPU sunt replicate pentru a suporta MT, spre deosebire de întregul CPU în cazul MP. În MT, unitățile de execuție și memoria de sistem, inclusiv memoria cache, sunt partajate între mai multe fire. Dezavantajul MT este că suportul hardware pentru multithreading este mai vizibil pentru software decât cel al MP și, prin urmare, software-ul de supraveghere și sistemele de operare trebuie să sufere modificări mai mari pentru a suporta MT. Un tip de MT care a fost implementat este cunoscut sub numele de bloc multithreaded, în care un fir rulează până când nu mai așteaptă ca datele să revină din memoria externă. În această schemă, procesorul ar trebui apoi să treacă rapid la un alt fir care este gata de funcționare, comutatorul acționând de multe ori pe CPU, cum ar fi tehnologia UltraSPARC . Un alt tip de MT se numește simultan multithreading , în care instrucțiunile din mai multe fire de execuție sunt executate în paralel în cadrul unui ciclu de ceas al procesorului.
Paralelism de date
O paradigmă mai puțin obișnuită, dar din ce în ce mai importantă a CPU (și într-adevăr a calculului în general) se ocupă de vectori. Procesoarele discutate mai sus sunt toate denumite un tip de dispozitiv scalar. După cum sugerează și numele lor, procesoarele vectoriale se ocupă cu mai multe bucăți de date în contextul unei instrucțiuni, acest lucru este în contrast cu procesoarele scalare, care se ocupă cu o singură bucată de date per instrucțiune. Aceste două scheme de manipulare a datelor sunt denumite în general SISD ( instrucțiune unică, date unice ) și respectiv SIMD ( instrucțiune unică, date multiple ). Marea utilitate în crearea CPU-urilor care se ocupă de vectori de date constă în optimizarea sarcinilor care tind să necesite aceeași operațiune, de exemplu, o sumă sau un produs punctual , care urmează să fie efectuate pe un set mare de date. Câteva exemple clasice ale acestui tip de sarcină sunt aplicațiile multimedia (imagini, video și sunet), precum și multe tipuri de sarcini științifice și de inginerie. În timp ce un CPU scalar trebuie să finalizeze întregul proces de citire, decodare și execuție a fiecărei instrucțiuni și valoare dintr-un set de date, un CPU vectorial poate efectua o operație simplă pe un set de date relativ mare cu o singură instrucțiune. Desigur, acest lucru este posibil numai atunci când aplicația tinde să necesite mulți pași care aplică o operație unui set mare de date.
Majoritatea CPU-urilor vectoriale timpurii, cum ar fi Cray-1 , au fost aproape exclusiv asociate cu aplicațiile de criptare și cercetare științifică. Cu toate acestea, pe măsură ce multimedia s-a mutat în mare parte către media digitală, nevoia unei anumite forme de SIMD în procesoarele de uz general a devenit semnificativă. La scurt timp după ce a devenit obișnuită includerea unităților în virgulă mobilă în procesoarele de uz general, au început să apară și specificațiile și implementările unităților de execuție SIMD pentru procesoarele de uz general. Unele dintre aceste specificații SIMD timpurii, cum ar fi MMX -ul Intel , au fost doar pentru numere întregi. Acest lucru s-a dovedit a fi un impediment semnificativ pentru unii dezvoltatori de software, deoarece multe dintre aplicațiile care au beneficiat de SIMD se ocupau în primul rând de numere în virgulă mobilă. Treptat, aceste modele timpurii au fost rafinate și refăcute în unele dintre specificațiile SIMD mai comune și moderne, care sunt în general asociate cu un ISA. Câteva exemple moderne notabile sunt SSE Intel și AltiVec-ul PowerPC (cunoscut și ca VMX).
Performanță
„Performanța” sau viteza unui procesor depinde, printre mulți alți factori, de viteza de ceas (de obicei dată în multipli de herți) și de instrucțiunile per ciclu de ceas (IPC), care împreună sunt factorii pentru instrucțiunile pe secundă (IPS). ) pe care CPU-ul le poate realiza. [ 10 ] Multe rapoarte ale valorilor IPS au reprezentat rate de execuție „de vârf” la secvențe de instrucțiuni artificiale cu puține ramuri, în timp ce sarcinile de lucru realiste constau într-un amestec de instrucțiuni și aplicații, dintre care unele necesită mai mult timp pentru a fi executate decât altele. Performanța ierarhiei memoriei afectează foarte mult și performanța procesorului, o problemă care este rareori luată în considerare în calculele MIPS. Datorită acestor probleme, în acest scop, au fost dezvoltate mai multe teste standardizate – precum SPECint – adesea numite „ benchmarks ” – pentru a încerca să măsoare performanța efectivă efectivă în aplicațiile de zi cu zi.
Performanța de procesare a computerelor este crescută prin utilizarea procesoarelor multicore , care este în esență conectarea a două sau mai multe procesoare individuale (numite nuclee în acest sens) pe un singur circuit integrat . [ 11 ] În mod ideal, un procesor dual-core ar fi aproape de două ori mai puternic decât un procesor single-core. În practică, câștigul de performanță este mult mai mic, doar în jur de 50%, [ 12 ] datorită implementării unor algoritmi software imperfecti. [ 13 ] Creșterea numărului de nuclee dintr-un procesor (adică dual-core, quad-core etc) crește volumul de lucru pe care îl poate gestiona. Aceasta înseamnă că procesorul poate gestiona acum numeroase evenimente asincrone, întreruperi etc., care pot afecta CPU (unitatea centrală de procesare) atunci când sunt copleșite. Aceste miezuri pot fi considerate ca etaje diferite într-o fabrică de procesare, fiecare etaj responsabil cu o sarcină diferită. Uneori, aceste nuclee se vor ocupa de aceleași sarcini ca și nucleele adiacente lor dacă un singur nucleu nu este suficient pentru a gestiona informațiile.
Datorită capacităților specifice ale procesoarelor moderne, cum ar fi HyperThreading și Uncore , care implică partajarea resurselor CPU reale, în timp ce se urmărește o utilizare mai mare, monitorizarea nivelurilor de performanță și utilizarea hardware-ului a devenit treptat o problemă mai complexă. Ca răspuns, unele procesoare implementează o logică hardware suplimentară care monitorizează utilizarea reală a diferitelor părți ale unui procesor și oferă diverse contoare accesibile software-ului; un exemplu este tehnologia Intel Performance Counter Monitor . [ 14 ]
Vezi și
Referințe
- ↑ Prima schiță de raport asupra EDVAC . Moore School of Electrical Engineering , Universitatea din Pennsylvania . 1945. Arhivat din original la 23 aprilie 2004.
- ↑ Enticknap, Nicholas (vara 1998), „Computing's Golden Jubilee” , Resurrection ( The Computer Conservation Society) 20 , ISSN 0958-7403 , arhivat din original la 9 ianuarie 2012 , preluat 2008-04-19 .
- ^ Weik , Martin H. (1961). Un al treilea studiu asupra sistemelor electronice de calcul digitale domestice . Laboratoare de Cercetare Balistică .
- ^ a b Amdahl, GM , Blaauw, GA și Brooks, FP Jr. (1964). Arhitectura sistemului IBM/360 (în engleză) . IBM Research. Arhivat din original pe 5 februarie 2007.
- ↑ Digital Equipment Corporation (noiembrie 1975). „Descrierea modulelor LSI-11” . Manual de utilizare LSI-11, PDP-11/03 (în engleză) (ediția a 2-a). Maynard, Mass.: Digital Equipment Corporation. pp. 4-3. Arhivat din original pe 24 mai 2006.
- ↑ a b Extrase din O conversație cu Gordon Moore: Legea lui Moore (PDF ) . Intel. 2005. Arhivat din original la 29.10.2012 . Accesat 2012-07-25 .
- ^ Brown, Jeffery (2005). Design CPU personalizat pentru aplicație . IBM developerWorks . Consultat la 17 decembrie 2005 .
- ^ Garside, JD, Furber, SB și Chung, SH (1999). AMULET3 Dezvăluit . Departamentul de Informatică al Universității din Manchester . Arhivat din original pe 10 decembrie 2005.
- ^ Huynh, Jack (2003). „Procesorul AMD Athlon XP cu cache L2 de 512 KB ” . Universitatea din Illinois—Urbana-Champaign. pp. 6-11. Arhivat din original pe 28 noiembrie 2007 . Recuperat la 6 octombrie 2007 .
- ↑ „Frecvența CPU” . Glosar mondial CPU . CPUWorld. 25 martie 2008 . Recuperat la 1 ianuarie 2010 .
- ^ „Ce este (un) procesor cu mai multe nuclee?” . Definiții ale centrului de date . SearchDataCenter.com. 27 martie 2007 . Recuperat la 1 ianuarie 2010 .
- ↑ „Ghid pentru configurarea și asamblarea unui PC Gaming pe piese” . Recuperat la 9 mai 2018 .
- ^ „Quad Core vs. Dual Core” . http://www.buzzle.com/ . Arhivat din original pe 25 iulie 2015 . Consultat la 26 noiembrie 2014 .
- ↑ Thomas Willhalm; Roman Dementyev; Patrick Fay (18 decembrie 2014). „Intel Performance Counter Monitor O modalitate mai bună de a măsura utilizarea CPU ” . Recuperat la 17 februarie 2015 .
Bibliografie
- Amdahl, G.M., Blaauw, G.A., & Brooks, F.P. Jr. (1964). Arhitectura sistemului IBM/360 . IBM Research.
- Brown, Jeffrey (2005). „Design CPU personalizat pentru aplicație” . IBM developerWorks . Consultat la 17 decembrie 2005 .
- Digital Equipment Corporation (noiembrie 1975). „Descrierea modulelor LSI-11”. Manual de utilizare LSI-11, PDP-11/03 (ediția a 2-a). Maynard, Mass.: Digital Equipment Corporation. pp. 4-3.
- Garside, JD, Furber, S.B. și Chung, S.H. (1999). AMULET3 Dezvăluit . Departamentul de Informatică al Universității din Manchester .
- Hennessy, John A.; Goldberg, David (1996). Arhitectura calculatoarelor: o abordare cantitativă . Editura Morgan Kaufman. ISBN 1-55860-329-8 .
- MIPS Technologies, Inc. (2005). Arhitectura MIPS32® pentru programatori Volumul II: Setul de instrucțiuni MIPS32® . MIPS Technologies , Inc. Arhivat din original pe 18 martie 2006.
- Smotherman, Mark (2005). „Istoria Multithreadingului” . Consultat la 19 decembrie 2005 .
- von Neumann, John (1945). Prima schiță de raport privind EDVAC . Moore School of Electrical Engineering, Universitatea din Pennsylvania . Arhivat din original pe 23 aprilie 2004.
- Weik, Martin H. (1961). Un al treilea studiu asupra sistemelor electronice de calcul digitale domestice . Laboratoare de Cercetare Balistică .
Link- uri externe
Wikimedia Commons găzduiește o categorie media pe Unitatea centrală de procesare .
Design de microprocesoare
Wikiversity găzduiește proiecte de învățare despre Unitatea Centrală de Procesare . (în limba engleză)- Cum funcționează microprocesoarele la HowStuffWorks . (în limba engleză)
- 25 de microcipuri care au zguduit lumea – un articol de la Institutul de Inginerie Electrică și Electronică . (în limba engleză)
- Advanced Micro Devices - Advanced Micro Devices , un designer de procesoare de computere personale compatibile în principal x86 . (în limba engleză)
- ARM Ltd - ARM Ltd , unul dintre puținii designeri de procesoare care profită exclusiv din acordarea de licențe a designurilor lor, mai degrabă decât din fabricarea acestora. Microprocesoarele cu arhitectură ARM sunt printre cele mai populare din lume pentru aplicațiile încorporate. (în limba engleză)
- Freescale Semiconductor (fostă Motorola ) – Freescale Semiconductor , proiectant al diferitelor procesoare încorporate și SoC -uri bazate pe PowerPC . (în limba engleză)
- IBM Microelectronics - Divizia de Microelectronics a IBM , care este responsabilă pentru o mare parte din proiectele bazate pe POWER și PowerPC , inclusiv multe dintre procesoarele utilizate în consolele de jocuri video de la sfârșitul anului 2012 .
- Intel Corp - un producător al mai multor linii de procesoare notabile, inclusiv IA-32 , IA-64 și XScale . Este, de asemenea, un producător de diferite cipuri periferice pentru utilizare cu procesorul său. (în limba engleză)
- MIPS Technologies - MIPS Technologies , dezvoltatori ai arhitecturii MIPS , pionier în proiectarea RISC . (în limba engleză)
- Sun Microsystems – Sun Microsystems , dezvoltatori ai arhitecturii SPARC , un design RISC. (în limba engleză)
- Texas Instruments ( link întrerupt disponibil la Internet Archive ; vezi istoricul , prima și ultima versiune ). - Texas Instruments , divizia de semiconductori. Proiectează și produce diverse tipuri de microcontrolere de putere redusă printre multe alte produse semiconductoare ale sale. (în limba engleză)
- Transmeta - Corporația Transmeta . Creatori x86 de consum redus, cum ar fi Crusoe și Efficeon . (în limba engleză)
Lectură suplimentară
- Design procesor: o introducere - introducere detaliată în proiectarea microprocesorului. (în limba engleză)
- Cum funcționează microprocesoarele . (în limba engleză)
- Pipelining: O prezentare generală - Introducere bună și prezentare generală a tehnicilor de pipeline CPU de către personalul de la Ars Technica . (în limba engleză)
- Arhitecturi SIMD - Introducere și explicație despre SIMD, în special modul în care acesta se referă la computerele personale. Tot de Ars Technica . (în limba engleză)
- Lista procesoarelor - Denumirea CPU-urilor și principalele caracteristici. (în limba engleză)
- Această lucrare conține o traducere completă derivată din „ Unitatea centrală de procesare ” a Wikipedia în limba engleză , în special această versiune , lansată de editorii săi sub Licența pentru documentație liberă GNU și Licența Creative Commons Attribution-ShareAlike 3.0 Unported .
- [1] - software de securitate cibernetică , dezvoltator de software. (în limba engleză)