Este cunoscut faptul că codul este scris de un dezvoltator și modul în care oamenii comunică cu computerele. Cu toate acestea, v-ați gândit vreodată la modul în care software-ul, cum ar fi codul, interacționează cu hardware-ul computerului, cum ar fi un procesor (unitate centrală de procesare)? Dacă răspunsul este da, atunci ai ajuns la locul potrivit.
Pentru a înțelege cum este executat codul pe un computer, trebuie să înțelegeți ce face ca un computer să funcționeze și cum poate fi manipulat. În primul rând, să vorbim mai întâi despre ideile fundamentale ale hardware-ului computerului înainte de a trece la partea software a lucrurilor.
Ce este binar?
Binar este un sistem numeric de bază 2 pe care procesoarele și memoria îl folosesc pentru a executa codul. Numerele binare pot fi doar 1 sau 0, de unde și numele. Dacă grupați opt numere binare (00000000), obțineți ceea ce este cunoscut sub numele de octet, în timp ce un singur număr binar (0) este numit bit.
Cum un comutator simplu produce semnale binare
Tot ceea ce este logic despre calcularea cu mașini începe cu comutatorul simplu. Un comutator simplu are doi conductori și un mecanism de conectare și deconectare. Conectarea ambelor conductori permite curgerea curentului, care produce un semnal la celălalt capăt al conductorului. Pe de altă parte, dacă conductoarele sunt deconectate, curentul nu va curge, ceea ce înseamnă că nu va fi produs niciun semnal.
Deoarece un comutator poate fi pornit sau oprit doar la o instanță, acestea oferă mecanismul ideal pentru a produce semnalele înalte și joase utilizate pentru a produce semnale cu undă pătrată.
Când apăsați un comutator, acesta produce un semnal sau un bit de date. O fotografie obișnuită făcută de pe un smartphone ar fi în jur de cinci megaocteți de date, echivalentul a 40.000.000 de biți. Aceasta ar însemna că va trebui să apăsați comutatorul de zeci de milioane de ori doar pentru a produce suficiente date pentru o fotografie făcută de pe smartphone.
Cu limitările mecanice ale unui comutator, inginerii aveau nevoie de ceva care să nu aibă piese în mișcare și să ofere viteze de comutare mai mari.
Tranzistoare utilizate ca comutator
Datorită descoperirii dopajului (manipulând conductivitatea electrică a semiconductorilor, cum ar fi siliciul), inginerii au reușit să realizeze comutatoare controlate electric cunoscute sub numele de tranzistori. Această nouă invenție a permis viteze de procesare mai mari care au nevoie de puțină tensiune pentru a alimenta, făcând în cele din urmă posibilă stivuirea a peste un miliard de acești tranzistori pe un singur CPU modern.
Ce este arhitectura CPU?
Tranzistoarele sunt apoi aranjate inteligent pentru a face porți logice, semi-adunatoare, sumatoare, flip flops, multiplexoare, registre și diverse componente care fac CPU-ul funcțional. Modul în care aceste componente au fost stivuite definește ceea ce este cunoscut ca arhitectură CPU.
Arhitectura procesorului dictează, de asemenea, ISA (Arhitectura set de instrucțiuni) a procesorului. Un ISA deține o listă încorporată de instrucțiuni pe care un procesor le poate executa în mod nativ. Aceste instrucțiuni sunt apoi amestecate secvențial printr-un limbaj de programare pentru a face ceea ce este cunoscut ca un program. De obicei, sute de instrucțiuni sunt disponibile pe un procesor, inclusiv adunarea, scăderea, mutarea, salvarea și încărcarea.
Iată un exemplu de set de instrucțiuni:
Fiecare instrucțiune dintr-un set de instrucțiuni are propria sa adresă binară cunoscută sub numele de opcode. Opcode-ul va fi primii câțiva biți binari care spun ce operație din setul de instrucțiuni să folosească.
După codul operațional este operandul. Operandul conține valori și adrese la care va fi utilizat opcode.
Diagrama prezintă o instrucțiune pe 8 biți. Dacă un procesor are o arhitectură pe 64 de biți, atunci instrucțiunile se pot întinde pe o lățime de instrucțiune de până la 64 de biți, ceea ce îl face un procesor mai capabil.
Legate de: Cum sunt diferite procesoarele RISC și CISC?
Asamblatorul
Acum că înțelegeți semnalele binare, puteți afla despre modul în care computerul interpretează astfel de semnale. Modul în care trebuie interpretat codul de mașină depinde de tipul de logică utilizat pe un asamblator (un program de nivel scăzut utilizat pentru a decoda și a asambla codul într-un binar corespunzător).
De exemplu, dacă asamblatorul nostru utilizează standardul ASCII (American Standard Code for Information Interchange), asamblatorul nostru ar lua codul mașinii dat și îl va interpreta la fel ca din ASCII din tabel de mai jos.
00101001 | A | 00101111 | G | 00110101 | M | 00111011 | S | 01000001 | Y |
00101010 | B | 00110000 | H | 00110110 | N | 00111100 | T | 01000010 | Z |
00101011 | C | 00110001 | eu | 00110111 | 0 | 00111101 | U | ||
00101100 | D | 00110010 | J | 00111000 | P | 00111110 | V | ||
00101101 | E | 00110011 | K | 00111001 | Q | 00111111 | W | ||
00101110 | F | 00110100 | L | 00111010 | R | 0100000 | X |
Deoarece asamblatorul nostru folosește ASCII (versiunea de 8 biți), fiecare opt numere binare din binar sunt interpretate ca un caracter. Asamblatorul va lua acest octet și îl va interpreta conform standardelor date. De exemplu, 01000001 01101001 01010100 s-ar traduce în cuvântul „bit”.
Înțelegerea limbajului de asamblare
Limbajul de asamblare este un limbaj de programare de nivel scăzut, care poate fi citit de om, care manipulează direct codurile operaționale și operanzii arhitecturii CPU.
Iată un exemplu de cod de asamblare simplu folosind setul de instrucțiuni prezentat mai devreme:
1. LODA #5
2. LODB #7
3. ADAUGĂ R3
4. STRE M12
Acest bloc de cod este stocat în RAM până când CPU preia fiecare linie de cod una câte una.
Ciclul de preluare, decodare și execuție a procesorului
CPU execută codul printr-un ciclu cunoscut sub numele de Fetch, Decode și Execute. Această secvență arată modul în care un procesor procesează fiecare linie de cod.
Preluare: Contorul de instrucțiuni din CPU preia o linie de instrucțiuni din RAM pentru a-i spune procesorului ce instrucțiune să execute în continuare.
Decodare: Asamblatorul va decoda blocul de cod care poate fi citit de om și îl va asambla ca fișiere binare formatate corespunzător pentru ca computerul să le înțeleagă.
1. 00010101
2. 00100111
3. 00110011
4. 01011100
A executa: CPU-ul execută apoi binarele aplicând instrucțiunile indicate de opcode operanzilor furnizați.
Computerul va a executa aceasta după cum urmează:
- Încărcați primul registru cu 5
- Încărcați al doilea registru cu 7
- 5 + 7 = 12, salvați 12 în al treilea registru
- Stocați valoarea celui de-al treilea registru pe adresa RAM M12
Computerul a adăugat cu succes două numere împreună și a stocat valoarea la adresa RAM specificată.
Grozav! Acum știi cum un computer execută cod. Totuși, nu se oprește aici.
Mergând mai departe
Cu hardware-ul adecvat, un asamblator și un limbaj de asamblare, oamenii ar putea executa codul cu ușurință rezonabilă. Cu toate acestea, pe măsură ce atât programele, cât și hardware-ul computerului au devenit și mai complexe, inginerii și programatorii au trebuit să facă acest lucru Gândiți-vă la o modalitate de a face programarea mai puțin obositoare și de a asigura compatibilitatea cu diferite tipuri de CPU arhitectură. Astfel, crearea de compilatori și interpreți.
Ce este un compilator și un interpret?
Compilatorul și interpretul sunt programe de traducere care preiau cod sursă (programe realizate din limbaje de programare de nivel înalt) și le traduc în limbaj de asamblare, pe care asamblatorul îl va decoda apoi la binar.
Un interpret va lua o linie de cod și o va executa imediat. Acesta este de obicei folosit pe terminale precum terminalul Linux Bash Shell și terminalul Windows PowerShell. Excelent pentru a efectua sarcini simple, unice.
În contrast, a compilator va lua mai multe linii de cod și le va compila pentru a crea un program. Exemple de aceste programe ar fi Microsoft Word, Photoshop, Google Chrome, Safari și Steam.
Odată cu crearea compilatoarelor și interpreților, au fost create limbaje de programare de nivel înalt.
Limbaje de programare la nivel înalt
Limbajele de programare de nivel înalt sunt orice limbaj după codul de asamblare. Unele dintre aceste limbi cu care este posibil să fiți familiarizat sunt C, Python, Java și Swift. Aceste limbaje de programare au făcut programarea mai ușor de citit și mai simplă decât limbajul de asamblare.
Iată o comparație una lângă alta pentru a ilustra cât de greu este să programați în asamblare decât cu un limbaj de programare de nivel înalt precum Python:
Ambele coduri vor tipări „Hello World”.
Cu aceste limbaje de programare, dezvoltatorii pot programa jocuri, site-uri web, aplicații și drivere, cu un timp rezonabil.
Legate de: Python vs. Java: Cel mai bun limbaj pentru 2022
Calculatoarele pot executa toate tipurile de coduri
Un computer este un dispozitiv care poate citi doar binare. Aceste binare sunt produse de peste un miliard de tranzistori de dimensiuni microscopice ambalate în interiorul unui procesor. Aranjamentul tranzistorului dictează ISA (Arhitectura setului de instrucțiuni) al procesorului, care oferă sute de instrucțiuni pe care un procesor le poate executa cu ușurință odată ce codul operațional este apelat prin cod. Dezvoltatorii amestecă și potrivesc aceste instrucțiuni secvențial, ceea ce creează un program întreg, cum ar fi motoare de jocuri, browsere web, aplicații și drivere.
Un procesor execută cod printr-o secvență cunoscută sub numele de ciclu de preluare, decodare, execuție. Odată ce o bucată de cod este încărcată în RAM, CPU-ul își va prelua conținutul unul câte unul, va decoda conținutul în binar prin asamblator și apoi va executa codul.
Deoarece asamblatorul poate traduce doar codul creat explicit pentru arhitectura CPU, compilatoare și Interpreții au fost construiti deasupra asamblatorului (la fel ca un adaptor) pentru a funcționa pe diferite tipuri de CPU arhitectură. Un interpret va prelua o comandă și o va executa imediat. În schimb, un compilator va prelua toate comenzile și le va compila într-un program reutilizabil.
Limbaje de programare de nivel înalt, cum ar fi Python, C și Java, au fost create pentru a face programarea mai ușoară, mai rapidă și convenabilă. Marea majoritate a programatorilor nu mai trebuie să codifice în limbaj de asamblare, deoarece limbajele lor de programare de nivel înalt ușor de utilizat pot fi traduse în asamblare printr-un compilator.
Sperăm că acum înțelegeți mai bine elementele fundamentale ale computerelor și modul în care acestea execută codul.
Este o întrebare simplă, dar la care toată lumea se gândește din când în când: cum funcționează de fapt acel computer din fața ta?
Citiți în continuare
- Tehnologia explicată
- Programare
- Procesor de calculator
- Prelucrare
Tânjind să afle cum funcționează lucrurile, Jayric Maning a început să lucreze cu tot felul de dispozitive electronice și analogice în timpul adolescenței sale. A început știința criminalistică la Universitatea din Baguio, unde s-a familiarizat cu criminalistica informatică și securitatea cibernetică. În prezent, el face o mulțime de auto-studiu și schimbă tehnologia pentru a descoperi cum funcționează și cum le putem folosi pentru a face viața mai ușoară (sau cel puțin mai cool!).
Aboneaza-te la newsletter-ul nostru
Alăturați-vă buletinului nostru informativ pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!
Click aici pentru a te abona