Kiedy kod maszynowy jest faktycznie wykonywany przez sprzęt i procesor, jak to wygląda?
Czy wyglądałoby to na binarne, jak w instrukcjach reprezentowanych przez jedynki i zera, czy może byłoby to coś, co składa się z cyfr szesnastkowych, w których kody są bajtami przedstawionymi jako liczby szesnastkowe, które można rozbić na liczby binarne, jak kod bajtowy?
computer-architecture
cpu
Tim prawie nie
źródło
źródło
Odpowiedzi:
Najlepsza odpowiedź, jaką mogę udzielić, to, że tak naprawdę „nie wygląda” jak nic. Instrukcja wykonywana obecnie przez CPU jest reprezentowana przez szereg drutów, z których niektóre mają wysokie napięcie, a niektóre mają niskie napięcie.
Wysokie i niskie napięcia można interpretować jako zera i jedynki, ale równie dobrze można interpretować grupy wysokich i niskich napięć jako cyfry szesnastkowe lub jako instrukcję składania podobną
ADD $0 $1
(która jest najbliższa interpretacji CPU). Te liczby i mnemoniki same w sobie są udogodnieniami dla ludzi do czytania; wewnętrznie są to tylko napięcia na przewodach.Z tych opcji, binarny jest „najbliżej metalu”, w tym znaczeniu, że zera i jedynki są mapowane bezpośrednio na wysokie i niskie napięcie na przewodach. Ale żadne z pozostałych nie jest niepoprawne i często są bardziej przydatne: istnieje powód, dla którego ludzie patrzą na zrzuty plików wykonywalnych w trybie szesnastkowym, ale prawie nigdy nie są to zrzuty binarne.
źródło
„Wyglądać” oznacza metaforę. Jeśli weźmiemy „jak to będzie wyglądać” dosłownie, będzie to wyglądało jak fantazyjnie wytrawiony kawałek krzemu siedzący na płycie głównej. Wyraźnie celem była metafora. Aby zbudować metaforę, musimy spojrzeć na to, co naprawdę jest pierwsze. Następnie możemy zbudować metaforę, która będzie akceptowalna. To jest trochę długie, ale na szczęście kończy się dla ciebie metaforą wideo .
Kod maszynowy jest faktycznie przechowywany w pamięci jako bity. Chipy pamięci są zazwyczaj DRAM , który przechowuje te bity jako napięcia na kondensatorze i elektronach. Oba są ze sobą połączone - trudno mówić o napięciach bez elektronów. Czasami wygodnie jest rozmawiać o jednym lub drugim, ale rozumiem, że gdziekolwiek idzie, drugi podąża za nim.
Podróż kodu maszynowego rozpoczyna się od „pobrania”. Szczególny wzór napięć jest przykładany do drutów układu pamięci RAM, wskazując, że ten konkretny zestaw bitów powinien zostać przesłany do procesora. Dlaczego? Nie wiem, nie obchodzi mnie to. Zazwyczaj ten sygnał jest wysyłany, ponieważ procesor zakończył ostatnią instrukcję i prosi o nową jako instynktowną odpowiedź, jak pies proszący o drugą ucztę po tym, jak dałeś jej pierwszą. Proces ten rozpoczyna się od pewnego pierwotnego kopnięcia w spodnie, spowodowanego naturalną niestabilnością procesora. Kiedy zasilacz przykłada stałe napięcie do układu, wzrost napięcia ostatecznie prowadzi do tego, że procesor umieszcza prawidłowe napięcie na układach pamięci RAM, aby uzyskać pierwsze instrukcje (trochę zmieniam warstwę BIOS-u, ponieważ nie jest to ważne do historii. Spójrz na to).
Współczesna pamięć przesyła dane równolegle. Oznacza to, że bity, które składają się na kod maszynowy, są dzielone na „tory” (32 lub 64 są wspólne), co jest logicznym sposobem na przekazanie przewodów 32/64 z pamięci RAM do procesora. Napięcie na tych liniach jest podnoszone i obniżane w razie potrzeby, aby przesłać je do procesora.
Gdy znajdzie się w procesorze, może wykonać swoją pracę. Jest to dziedzina mikroarchitektury i może się skomplikować, ponieważ jest to dosłownie przemysł wart miliard dolarów. Napięcia te wpływają na tranzystory, które wpływają na inne napięcia, w sposób, który możemy opisać jako „dodawanie bitów” lub „mnożenie”. W rzeczywistości wszystkie są tylko napięciami reprezentującymi te bity, w taki sam sposób, w jaki możemy napisać 5-znakowy ciąg „2 + 2 = 4” na kartce papieru i powiedzieć, że zrobiliśmy matematykę. Ołówkowy grafit nie jest numerem dwa. To tylko fizyczna reprezentacja, której używamy dla tego numeru.
Tak właśnie działa prawdziwy system na niezwykle wysokim poziomie. Pominąłem dobrze ... właściwie wszystko ... ale jest wystarczająco przyzwoite, aby móc wrócić do twojego rzeczywistego pytania. Jak by to wyglądało [metaforycznie]?
Tak się składa, że myślę, że Martin Molin mógł zbudować najlepszą metaforę za pomocą swojej marmurowej maszyny . Kod maszynowy jest kodowany (ręcznie) na niektórych paskach Lego Technics w środku jako kołki, a nie napięcia na kondensatorze. To bardziej przypomina EPROM niż DRAM, ale oba przechowują dane. Kulki są jak elektrony, które poruszają się pod wpływem napięć (lub grawitacji, w przypadku kul). A gdy elektrony się poruszają, przykładają siłę do bram, które wykonują różne czynności.
Jego maszyna jest prosta w porównaniu z nowoczesnym procesorem, ale nie jest aż tak źle, jeśli chodzi o metafory. I to jest chwytliwe!
źródło
Sprawdź ten film , w szczególności od 1:00 do 1:17. Dokładnie tak to wygląda, gdy program działa na komputerze. Dwa rzędy lampek pokazują aktualną zawartość rejestru adresów i rejestru danych. PDP-11 nie ma rejestru instrukcji, ale gdyby taki był, a z przodu znajdowały się lampki pokazujące jego zawartość, wyglądałby prawie tak samo. 16 świateł - niektóre z nich włączone, niektóre wyłączone.
Jeśli naprawdę podobały Ci się migające światła, możesz mieć więcej świateł, aby pokazać bieżącą zawartość sześciu rejestrów, wskaźnik stosu, licznik programu ... dla kolejnych 32768 świateł możesz mieć światło dla każdego bitu pamięci podręcznej. Możesz nawet mieć światło na każdy kawałek pamięci ... ale to naprawdę byłoby dużo świateł.
Jest to PDP11-70, który działa z częstotliwością 15,2 MHz, a wykonanie każdej instrukcji zajmuje około 1,5 mikrosekundy. Ludzkie oko może wykryć zmiany do 1/10 sekundy iw tym czasie PDP-11 może wykonać 60 000 instrukcji. Zasadniczo wszystko jest rozmyciem.
źródło
Projektanci sprzętu wdrażający i testujący (oraz testujący i testujący) procesor faktycznie używają modeli wizualnych, aby zobaczyć, co robią ich projekty. Większość (jeśli nie wszystkie) narzędzia do symulacji HDL generują widoki fal wszystkich rejestrów i przewodów, aby umożliwić łatwe debugowanie. Poniższy zrzut ekranu (pobrany tutaj ) pokazuje te fale z symulatora VCS dla procesora RISC-V z kilkoma instrukcjami.
Jest to dość prosty przykład, który pokazuje niewielki podzbiór logiki zaangażowanej w projektowanie pełnego procesora. Możesz otworzyć te widoki dla całego procesora i obserwować, jak dane rozprzestrzeniają się za pomocą logiki. Jeśli chcesz, aby kod maszynowy działał, jak wspomniałeś, możesz spojrzeć na fale rejestru instrukcji lub magistrali, której procesor używa do odczytu instrukcji z pamięci. Większość przeglądarek fal ma elastyczne opcje wyświetlania dla magistrali i rejestrów, które pozwalają wyświetlać ich wartości jako etykiety binarne, szesnastkowe, ósemkowe, a nawet jako enum. W niektórych można nawet zdefiniować własne funkcje do odwzorowywania wzorów bitów w celu wyświetlenia wartości.
Warto zauważyć, że jest to tylko reprezentacja symulacji procesora. Nie ma sposobu na uzyskanie takich widoków dla już wyprodukowanego układu procesora.
źródło
Wyobraź sobie ślepca potykającego się w trakcie budowy zaułka. Wszędzie są dziury i szczeliny, więc naturalnie powinien upaść. Nie ten ślepiec, bo ma papierowy zwój z instrukcjami, kiedy czekać, kiedy się poruszać, gdzie się poruszać i jak manipulować otoczeniem, by dotrzeć do końca drogi. Oto, czym jest zgromadzenie, ślepo przestrzegane listy instrukcji - mają sens tylko dla tej alei i dla tego ślepca. Teoretycznie można nawet zrekonstruować model 3d na podstawie samych instrukcji (Dekompilacja).
Każda zmiana platformy wymaga ponownego skompilowania instrukcji dla niewidomego. Musisz znać sprzęt (układ placu budowy), instrukcje intencji napisane przez człowieka (kod wysokiego poziomu), takie jak: „Chcę, abyś przeskakiwał przez wszystkie ogrodzenia, które napotkasz z rzędu, dopóki nie będziesz mieć 12 ogrodzeń za sobą” i zdolności niewidomych (CPU). Czy ma pamięć krótkotrwałą, umiejętność robienia kilku rzeczy naraz?
Zbieranie wszystkich tych informacji i tworzenie spójnego zwoju instrukcji jest zadaniem kompilatora.
Czy mogę opisać, jak wygląda program? Nie. Ale czy możemy opisać, jak to byłoby wykonać? Tak, to byłoby jak skakanie i bieganie, jak zwierciadło, nie widząc niczego, postępując zgodnie z dokładną listą instrukcji, gdziekolwiek to może cię zabrać.
źródło