Köztudott, hogy a kódot a fejlesztő írja, és az emberek hogyan kommunikálnak a számítógépekkel. Azonban gondolt már arra, hogy az olyan szoftverek, mint a kód, hogyan működnek együtt a számítógépes hardverekkel, például a CPU-val (Central Processing Unit)? Ha a válasz igen, akkor jó helyen jár.
Ahhoz, hogy megértsük, hogyan futnak le a kódok a számítógépen, meg kell értenünk, mi okozza a számítógépet, és hogyan lehet manipulálni. Először is beszéljünk a számítógépes hardver alapvető gondolatairól, mielőtt a dolgok szoftveres oldalára lépnénk.
Mi az a bináris?
A bináris egy 2-es alapszámrendszer, amelyet a processzorok és a memória használnak a kód végrehajtására. A bináris számok csak 1 vagy 0 lehetnek, innen ered a neve is. Ha nyolc bináris számot (00000000) csoportosít, akkor az úgynevezett bájtot kapja, míg egyetlen bináris számot (0) bitnek nevezünk.
Hogyan állít elő egy egyszerű kapcsoló bináris jeleket
Minden, ami logikus a gépekkel történő számítástechnikával kapcsolatban, az egyszerű kapcsolóval kezdődik. Egy egyszerű kapcsolónak két vezetéke és egy összekötő és leválasztó mechanizmusa van. Mindkét vezető csatlakoztatása lehetővé teszi az áram áramlását, amely jelet ad a vezető másik végére. Másrészt, ha a vezetékeket leválasztják, az áram nem folyik, vagyis nem keletkezik jel.
Mivel egy kapcsolót csak egy példányban lehet be- vagy kikapcsolni, ideális mechanizmust biztosítanak a négyszögjelek előállításához használt magas és alacsony jelek előállításához.
Ha megnyom egy kapcsolót, az jelet vagy egy bitnyi adatot állít elő. Egy okostelefonról készített normál fénykép körülbelül öt megabájt adatmennyiséget jelentene, ami 40 000 000 bitnek felel meg. Ez azt jelentené, hogy tízmilliószor kell megnyomnia a kapcsolót ahhoz, hogy elegendő adatot állítson elő az okostelefonról készített egyetlen fényképhez.
A kapcsolók mechanikai korlátai miatt a mérnököknek olyasmire volt szükségük, amely nem tartalmaz mozgó alkatrészt, és gyorsabb kapcsolási sebességet biztosított.
Kapcsolóként használt tranzisztorok
A dopping felfedezésének köszönhetően (a félvezetők, például a szilícium elektromos vezetőképességének manipulálása) a mérnökök képesek voltak tranzisztorként ismert, elektromosan vezérelt kapcsolókat készíteni. Ez az új találmány nagyobb feldolgozási sebességet tett lehetővé, amelyhez kis feszültség kellett, és végül lehetővé tette több mint egymilliárd ilyen tranzisztor egymásra helyezését egyetlen modern CPU-n.
Mi az a CPU architektúra?
A tranzisztorokat ezután okosan úgy rendezik el, hogy logikai kapukat, félösszeadókat, összeadókat, flip-flopokat, multiplexereket, regisztereket és különféle komponenseket készítsenek, amelyek a CPU-t működőképessé teszik. Ezeknek az összetevőknek a halmozási módja határozza meg az úgynevezett CPU architektúrát.
A CPU architektúra a processzor ISA-ját (Instruction Set Architecture) is előírja. Az ISA olyan utasítások beépített listáját tartalmazza, amelyeket a CPU natív módon végrehajthat. Ezeket az utasításokat azután egy programozási nyelven keresztül egymás után összekeverik, hogy létrehozzák az úgynevezett programot. Általában több száz utasítás érhető el a CPU-n, beleértve az összeadást, kivonást, mozgatást, mentést és betöltést.
Íme egy példa egy utasításkészletből:
Az utasításkészlet minden utasításának megvan a maga bináris címe, amelyet műveleti kódként ismerünk. Az opcode lesz az első néhány bináris bit, amely megmondja, hogy az utasításkészletből melyik műveletet kell használni.
A műveleti kódot követi az operandus. Az operandus értékeket és címeket tartalmaz, ahol a műveleti kódot használni fogják.
A diagram egy 8 bites utasítást mutat. Ha egy CPU-nak 64 bites architektúrája van, akkor az utasítások akár 64 bites utasításszélességet is tartalmazhatnak, így a processzor jobb képességű.
Összefüggő: Miben különböznek a RISC és CISC CPU-k?
Az Assembler
Most, hogy megértette a bináris jeleket, megtudhatja, hogyan értelmezi a számítógépe az ilyen jeleket. A gépi kód értelmezése attól függ, hogy milyen típusú logikát használnak az assemblerben (alacsony szintű program, amely a kód dekódolására és megfelelő binárissá való összeállítására szolgál).
Például, ha az összeszerelőnk az ASCII (amerikai szabványos információcsere kód) szabványt használja, az assemblerünk a megadott gépi kódot venné és ugyanúgy értelmezné, mint a táblázatban szereplő ASCII-ből lent.
00101001 | A | 00101111 | G | 00110101 | M | 00111011 | S | 01000001 | Y |
00101010 | B | 00110000 | H | 00110110 | N | 00111100 | T | 01000010 | Z |
00101011 | C | 00110001 | én | 00110111 | 0 | 00111101 | U | ||
00101100 | D | 00110010 | J | 00111000 | P | 00111110 | V | ||
00101101 | E | 00110011 | K | 00111001 | K | 00111111 | W | ||
00101110 | F | 00110100 | L | 00111010 | R | 0100000 | x |
Mivel az assemblerünk ASCII-t (8 bites verzió) használ, a binárisban minden nyolc bináris szám egy karakterként értelmeződik. Az assembler veszi ezt a bájtot és értelmezi a megadott szabványok szerint. Például a 01000001 01101001 01010100 „bit” szóra fordítódik.
Az Assembly nyelv megértése
Az Assembly Language egy ember által olvasható, alacsony szintű programozási nyelv, amely közvetlenül manipulálja a CPU architektúra műveleti kódjait és operandusait.
Íme egy példa egy egyszerű összeállítási kódra, amely a korábban bemutatott utasításkészletet használja:
1. LODA #5
2. LODB #7
3. ADD R3
4. STRE M12
Ez a kódblokk a RAM-ban tárolódik mindaddig, amíg a CPU egyesével le nem kéri az egyes kódsorokat.
A CPU lekérési, dekódolási és végrehajtási ciklusa
A CPU a kódot a Fetch, Decode és Execute néven ismert cikluson keresztül hajtja végre. Ez a sorozat megmutatja, hogy a CPU hogyan dolgozza fel az egyes kódsorokat.
Letöltés: A CPU-n belüli utasításszámláló egy utasítássort vesz át a RAM-ból, hogy tudatja a CPU-val, hogy milyen utasítást hajtson végre ezután.
Dekódolás: Az Assembler dekódolja az ember által olvasható kódblokkot, és megfelelően formázott binárisként állítja össze, hogy a számítógép megértse.
1. 00010101
2. 00100111
3. 00110011
4. 01011100
Végrehajtás: A CPU ezután úgy hajtja végre a binárisokat, hogy az opkód által jelzett utasításokat alkalmazza a megadott operandusokra.
A számítógép fog végrehajtani a következőképpen:
- Töltse be az első regisztert 5-tel
- Töltse be a második regisztert 7-tel
- 5 + 7 = 12, a 12-t mentse a harmadik regiszterbe
- Tárolja a harmadik regiszter értékét az M12 RAM-címen
A számítógép sikeresen összeadott két számot, és eltárolta az értéket a megadott RAM-címen.
Nagy! Most már tudja, hogyan hajtja végre a kódot a számítógép. Azonban ez nem áll meg itt.
Tovább haladva
A megfelelő hardverrel, assemblerrel és assembly nyelvvel az emberek ésszerű könnyedén futtathatták a kódot. Mivel azonban mind a programok, mind a számítógépes hardver még bonyolultabbá vált, a mérnököknek és a programozóknak ezt kellett tenniük gondoljon arra, hogy a programozás kevésbé fárasztó, és biztosítsa a kompatibilitást a különböző típusú CPU-kkal építészet. Így a fordítók és értelmezők létrehozása.
Mi az a fordító és tolmács?
A fordító és a tolmács fordítóprogramok, amelyek forráskódot vesznek fel (a programból készült programok magas szintű programozási nyelvek), és lefordítja őket assembly nyelvre, amelyet az assembler ezután dekódol binárisra.
An tolmács egy sor kódot vesz, és azonnal végrehajtja. Ezt általában olyan terminálokon használják, mint a Linux Bash Shell terminál és a Windows PowerShell terminál. Kiválóan alkalmas egyszeri, egyszeri feladatok elvégzésére.
Ezzel szemben a fordítóprogram több sornyi kódot vesz fel, és lefordítja őket egy program elkészítéséhez. Ilyen programok például a Microsoft Word, a Photoshop, a Google Chrome, a Safari és a Steam.
A fordítók és tolmácsok létrehozásával magas szintű programozási nyelvek jöttek létre.
Magas szintű programozási nyelvek
A magas szintű programozási nyelvek bármely nyelv az assembly kód után. Néhány ilyen nyelv, amelyeket ismerhet, a C, a Python, a Java és a Swift. Ezek a programozási nyelvek a programozást ember által olvashatóbbá és egyszerűbbé tették, mint az assembly nyelv.
Íme egy egymás melletti összehasonlítás annak szemléltetésére, hogy mennyire nehezebb összeállításban programozni, mint egy olyan magas szintű programozási nyelven, mint a Python:
Mindkét kódban a „Hello World” felirat jelenik meg.
Ezekkel a programozási nyelvekkel a fejlesztők ésszerű időn belül programozhatnak játékokat, webhelyeket, alkalmazásokat és illesztőprogramokat.
Összefüggő: Python vs. Java: A legjobb nyelv 2022-ben
A számítógépek minden kódot képesek végrehajtani
A számítógép olyan eszköz, amely csak binárisan tud olvasni. Ezeket a bináris fájlokat több mint milliárd mikroszkopikus méretű tranzisztor állítja elő, amelyek egy CPU-ba vannak csomagolva. A tranzisztorok elrendezése a CPU ISA-ját (Instruction Set Architecture) diktálja, amely utasítások százait ad, amelyeket a CPU könnyen végrehajthat, amint az opkódját kódon keresztül kihívják. A fejlesztők szekvenciálisan keverik és illesztik ezeket az utasításokat, ami egy teljes programot hoz létre, például játékmotorokat, webböngészőket, alkalmazásokat és illesztőprogramokat.
A CPU a lekérési, dekódolási és végrehajtási ciklusként ismert szekvencián keresztül hajtja végre a kódot. Amint egy kódrészlet be van töltve a RAM-ba, a CPU egyenként lekéri annak tartalmát, az assembleren keresztül binárisan dekódolja a tartalmat, majd végrehajtja a kódot.
Mivel az assembler csak kifejezetten a CPU architektúrára készült kódot tudja lefordítani, a fordítók ill A tolmácsok az assembler tetejére épültek (hasonlóan egy adapterhez), hogy különböző típusú CPU-kon működjenek építészet. A tolmács felvesz egy parancsot, és azonnal végrehajtja. Ezzel szemben a fordító minden parancsodat átveszi, és újrafelhasználható programmá fordítja.
Magas szintű programozási nyelvek, mint például a Python, C és Java azért jöttek létre, hogy a programozást könnyebbé, gyorsabbá és kényelmesebbé tegyék. A programozók nagy többségének már nem kell assembly nyelven kódolnia, mivel könnyen használható, magas szintű programozási nyelveiket fordítóprogramon keresztül le lehet fordítani az assembly-re.
Remélhetőleg most már jobban megérti a számítógépek alapjait és azt, hogy hogyan hajtják végre a kódot.
Ez egy egyszerű kérdés, amelyen időnként mindenki elgondolkodik: hogyan működik valójában az előtted lévő számítógép?
Olvassa el a következőt
- Technológia magyarázata
- Programozás
- Számítógépes processzor
- Feldolgozás
Jayric Maning, aki arra vágyott, hogy megtanulja, hogyan működnek a dolgok, tinédzser korában mindenféle elektronikus és analóg eszközzel kezdett bütykölni. A Baguio Egyetemen tanult törvényszéki tudományt, ahol megismerkedett a számítógépes kriminalisztika és a kiberbiztonság kérdéseivel. Jelenleg sok önálló tanulást végez, és trükközik a technológiával, hogy kitalálja, hogyan működnek, és hogyan használhatjuk őket az élet megkönnyítésére (vagy legalább hűvösebbé!).
Iratkozzon fel hírlevelünkre
Csatlakozzon hírlevelünkhöz műszaki tippekért, ismertetőkért, ingyenes e-könyvekért és exkluzív ajánlatokért!
Kattintson ide az előfizetéshez