Powszechnie wiadomo, że kod jest pisany przez programistę i jak ludzie komunikują się z komputerami. Jednak czy kiedykolwiek zastanawiałeś się, w jaki sposób oprogramowanie, takie jak kod, współdziała ze sprzętem komputerowym, takim jak procesor (Central Processing Unit)? Jeśli odpowiedź brzmi tak, to trafiłeś we właściwe miejsce.
Aby zrozumieć, w jaki sposób kod jest wykonywany na komputerze, musisz zrozumieć, co sprawia, że komputer działa i jak można nim manipulować. Najpierw porozmawiajmy o podstawowych ideach sprzętu komputerowego, zanim przejdziemy do strony oprogramowania.
Co to jest binarny?
Binary to system liczbowy o podstawie 2, którego procesory i pamięć używają do wykonywania kodu. Liczby binarne mogą mieć tylko 1 lub 0, stąd ich nazwa. Jeśli zgrupujesz osiem liczb binarnych (00000000), otrzymasz tak zwany bajt, podczas gdy pojedyncza liczba binarna (0) jest nazywana bitem.
Jak prosty przełącznik generuje sygnały binarne
Wszystko, co logiczne w obliczeniach na maszynach, zaczyna się od prostego przełączenia. Prosty wyłącznik ma dwa przewody oraz mechanizm łączący i rozłączający. Połączenie obu przewodów umożliwia przepływ prądu, który wytwarza sygnał do drugiego końca przewodu. Z drugiej strony, jeśli przewody są odłączone, prąd nie popłynie, co oznacza, że nie będzie wytwarzany żaden sygnał.
Ponieważ przełącznik może być włączony lub wyłączony tylko na raz, zapewniają idealny mechanizm do wytwarzania wysokich i niskich sygnałów używanych do wytwarzania sygnałów o fali prostokątnej.
Po naciśnięciu przełącznika wytwarza sygnał lub jeden bit danych. Zwykłe zdjęcie zrobione smartfonem zawierałoby około pięciu megabajtów danych, czyli 40 000 000 bitów. Oznaczałoby to, że będziesz musiał przesunąć przełącznik dziesiątki milionów razy, aby wygenerować wystarczającą ilość danych dla jednego zdjęcia zrobionego smartfonem.
Ze względu na mechaniczne ograniczenia przełącznika inżynierowie potrzebowali czegoś, co nie miałoby żadnych ruchomych części i zapewniało szybsze prędkości przełączania.
Tranzystory używane jako przełącznik
Dzięki odkryciu domieszkowania (manipulowania przewodnością elektryczną półprzewodników, takich jak krzem), inżynierowie byli w stanie wykonać elektrycznie sterowane przełączniki znane jako tranzystory. Ten nowy wynalazek umożliwił szybsze przetwarzanie, które wymagało niewielkiego napięcia do zasilania, co ostatecznie umożliwiło umieszczenie ponad miliarda tych tranzystorów na jednym nowoczesnym procesorze.
Co to jest architektura procesora?
Tranzystory są następnie sprytnie rozmieszczone w celu tworzenia bramek logicznych, półsumatorów, sumatorów, przerzutników, multiplekserów, rejestrów i różnych komponentów, które sprawiają, że procesor działa. Sposób, w jaki te komponenty zostały ułożone w stos, definiuje tak zwaną architekturę procesora.
Architektura procesora dyktuje również architekturę ISA (Instruction Set Architecture) procesora. ISA zawiera wbudowaną listę instrukcji, które procesor może wykonywać natywnie. Instrukcje te są następnie kolejno mieszane ze sobą za pomocą języka programowania, aby utworzyć tak zwany program. Zwykle na procesorze są łatwo dostępne setki instrukcji, w tym dodawanie, odejmowanie, przenoszenie, zapisywanie i ładowanie.
Oto przykładowy zestaw instrukcji:
Każda instrukcja w zestawie instrukcji ma swój własny adres binarny, znany jako kod operacji. Kod operacyjny będzie pierwszymi kilkoma bitami binarnymi, które informują, której operacji z zestawu instrukcji użyć.
Po opcodzie następuje operand. Operand zawiera wartości i adresy, pod którymi zostanie użyty kod operacji.
Diagram przedstawia instrukcję 8-bitową. Jeśli procesor ma architekturę 64-bitową, instrukcje mogą obejmować do 64 bitów w szerokości instrukcji, co czyni go bardziej wydajnym procesorem.
Związane z: Czym różnią się procesory RISC i CISC?
Asembler
Teraz, gdy rozumiesz sygnały binarne, możesz dowiedzieć się, jak komputer je interpretuje. Sposób interpretacji kodu maszynowego zależy od rodzaju logiki używanej w asemblerze (program niskiego poziomu używany do dekodowania i asemblowania kodu do odpowiedniego pliku binarnego).
Na przykład, jeśli nasz asembler używa standardu ASCII (American Standard Code for Information Interchange), nasz asembler wziąłby podany kod maszynowy i zinterpretował go tak samo, jak z ASCII w tabeli poniżej.
00101001 | A | 00101111 | g | 00110101 | m | 00111011 | S | 01000001 | Y |
00101010 | b | 00110000 | h | 00110110 | n | 00111100 | T | 01000010 | Z |
00101011 | C | 00110001 | i | 00110111 | 0 | 00111101 | U | ||
00101100 | D | 00110010 | J | 00111000 | P | 00111110 | V | ||
00101101 | mi | 00110011 | K | 00111001 | Q | 00111111 | W | ||
00101110 | F | 00110100 | L | 00111010 | r | 0100000 | x |
Ponieważ nasz asembler używa ASCII (wersja 8-bitowa), każde osiem liczb binarnych w binarnym jest interpretowane jako jeden znak. Asembler wziąłby ten bajt i zinterpretował go zgodnie z podanymi standardami. Na przykład 01000001 01101001 01010100 przełoży się na słowo „bit”.
Zrozumienie języka asemblera
Asembler to czytelny dla człowieka język programowania niskiego poziomu, który bezpośrednio manipuluje kodami operacyjnymi i operandami architektury procesora.
Oto przykład prostego kodu asemblera wykorzystującego pokazany wcześniej zestaw instrukcji:
1. LODA # 5
2. LODB #7
3. DODAJ R3
4. STRE M12
Ten blok kodu jest przechowywany w pamięci RAM, dopóki procesor nie pobierze każdej linii kodu jeden po drugim.
Cykl pobierania, dekodowania i wykonywania procesora
Procesor wykonuje kod w cyklu znanym jako Fetch, Decode i Execute. Ta sekwencja pokazuje, jak procesor przetwarza każdy wiersz kodu.
Aportować: Licznik instrukcji w procesorze pobiera jedną linię instrukcji z pamięci RAM, aby poinformować procesor, którą instrukcję wykonać w następnej kolejności.
Rozszyfrować: Asembler zdekoduje czytelny dla człowieka blok kodu i zmontuje go jako odpowiednio sformatowane pliki binarne, aby komputer mógł je zrozumieć.
1. 00010101
2. 00100111
3. 00110011
4. 01011100
Wykonać: Procesor następnie wykonuje binaria, stosując instrukcje wskazane przez kod operacji do dostarczonych operandów.
Komputer będzie wykonać to w następujący sposób:
- Załaduj pierwszy rejestr z 5
- Załaduj drugi rejestr z 7
- 5 + 7 = 12, zapisz 12 w trzecim rejestrze
- Zapisz wartość trzeciego rejestru pod adresem RAM M12
Komputer pomyślnie dodał do siebie dwie liczby i zapisał wartość pod określonym adresem RAM.
Świetny! Teraz wiesz, jak komputer wykonuje kod. Jednak na tym się nie kończy.
Idąc dalej
Z odpowiednim sprzętem, asemblerem i językiem asemblera, ludzie mogliby wykonywać kod z rozsądną łatwością. Ponieważ jednak zarówno programy, jak i sprzęt komputerowy stały się jeszcze bardziej złożone, inżynierowie i programiści musieli: wymyśl sposób, aby programowanie było mniej uciążliwe i zapewniło kompatybilność z różnymi rodzajami procesorów architektura. Stąd powstanie kompilatorów i interpretatorów.
Co to jest kompilator i tłumacz?
Kompilator i interpreter są programami tłumaczącymi, które pobierają kod źródłowy (programy wykonane z języków programowania wysokiego poziomu) i przetłumaczyć je na język asemblera, który asembler następnie zdekoduje na binarny.
jakiś interpretator zajmie jeden wiersz kodu i natychmiast go wykona. Jest to zwykle używane w terminalach, takich jak terminal Linux Bash Shell i terminal Windows PowerShell. Świetne do wykonywania prostych, jednorazowych zadań.
W przeciwieństwie do tego kompilator zajmie wiele linii kodu i skompiluje je, aby stworzyć program. Przykładami takich programów są Microsoft Word, Photoshop, Google Chrome, Safari i Steam.
Wraz z tworzeniem kompilatorów i interpreterów powstały języki programowania wysokiego poziomu.
Języki programowania wysokiego poziomu
Języki programowania wysokiego poziomu to dowolny język po asemblerze. Niektóre z tych języków, które możesz znać, to C, Python, Java i Swift. Te języki programowania sprawiły, że programowanie stało się bardziej czytelne dla człowieka i prostsze niż język asemblera.
Oto porównanie obok siebie, aby zilustrować, jak trudniej jest programować w asemblerze niż w języku programowania wysokiego poziomu, takim jak Python:
Oba kody wypiszą „Hello World”.
Dzięki tym językom programowania programiści mogą programować gry, witryny internetowe, aplikacje i sterowniki w rozsądnym czasie.
Związane z: Python kontra Java: najlepszy język na rok 2022
Komputery mogą wykonywać wszystkie sposoby kodu
Komputer to urządzenie, które może odczytywać tylko pliki binarne. Te pliki binarne są wytwarzane przez ponad miliard mikroskopijnych tranzystorów umieszczonych wewnątrz procesora. Układ tranzystorów dyktuje architekturę ISA (Instruction Set Architecture) procesora, która zapewnia setki instrukcji, które procesor może łatwo wykonać, gdy jego kod operacyjny zostanie wywołany za pomocą kodu. Programiści mieszają i dopasowują te instrukcje sekwencyjnie, co tworzy cały program, taki jak silniki gier, przeglądarki internetowe, aplikacje i sterowniki.
Procesor wykonuje kod w sekwencji znanej jako cykl pobierania, dekodowania i wykonywania. Gdy fragment kodu zostanie załadowany do pamięci RAM, procesor pobierze jego zawartość jeden po drugim, zdekoduje zawartość do postaci binarnej za pomocą asemblera, a następnie wykona kod.
Ponieważ asembler może tłumaczyć tylko kod stworzony specjalnie dla architektury procesora, kompilatory i interpretery zostały zbudowane na asemblerze (podobnie jak adapter) do pracy na różnych typach procesora architektura. Tłumacz weźmie jedno polecenie i natychmiast je wykona. W przeciwieństwie do tego, kompilator weźmie wszystkie twoje polecenia i skompiluje je do programu wielokrotnego użytku.
Języki programowania wysokiego poziomu, takie jak Python, C i Java, zostały stworzone, aby programowanie było łatwiejsze, szybsze i wygodniejsze. Ogromna większość programistów nie musi już kodować w języku asemblerowym, ponieważ ich łatwe w użyciu języki programowania wysokiego poziomu mogą zostać przetłumaczone na asembler przez kompilator.
Mamy nadzieję, że teraz lepiej rozumiesz podstawy komputerów i sposób, w jaki wykonują kod.
To proste pytanie, ale od czasu do czasu wszyscy się zastanawiają: jak właściwie działa ten komputer przed tobą?
Czytaj dalej
- Wyjaśnienie technologii
- Programowanie
- Procesor komputerowy
- Przetwarzanie
Pragnąc dowiedzieć się, jak wszystko działa, Jayric Maning zaczął majstrować przy wszelkiego rodzaju urządzeniach elektronicznych i analogowych, gdy był jeszcze nastolatkiem. Zaczął kryminalistykę na Uniwersytecie w Baguio, gdzie zapoznał się z informatyką śledczą i cyberbezpieczeństwem. Obecnie zajmuje się samodzielną nauką i majsterkowaniem przy technologii, zastanawiając się, jak działają i jak możemy ich użyć, aby ułatwić życie (lub przynajmniej fajniej!).
Zapisz się do naszego newslettera
Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!
Kliknij tutaj, aby zasubskrybować