Gdzie i w jaki sposób oprogramowanie spotyka się ze sprzętem? [zamknięte]

Gdzie w komputerze abstrakcja (litery na ekranie) spotyka się z rzeczywistością (prąd elektryczny przepływający przez obwody w pamięci i procesorach). Jak doszło do tej ewolucji?

Mówię głębiej niż assembler tutaj, myślę. Może Poziom głębszy niż instrukcje procesora? W pewnym momencie polecenia są faktycznie interpretowane przez sprzęt, ale nie rozumiem, gdzie/jak to się dzieje.

Nie chodziłem na studia, więc nie brałem udziału w kursie CS ' a. Jak wielu, Jestem hobbystą, który stał się "zawodowcem". W rezultacie, jest wiele elementów układanki myślę, że brakuje. Znam trochę C++ i Rozumiem pojęcie pointerów itp (choć nie używałem ich zbyt często), jednak pracowałem tylko na wysokim poziomie. Nie jestem pewien, czy wiedza o takich rzeczach mi pomoże, czy nie, ale to na pewno interesujące.

Author: Neil Barnwell, 2009-03-30

15 answers

Procesor operuje tzw. cyklem fetch-decode-execute. Instrukcje kodu maszynowego są dość niskopoziomowe(tzn. nie robią tego wszystkiego w jednej instrukcji). Na przykład, dodanie dwóch liczb miałoby ciąg instrukcji z semantyką jak:

  • załaduj wskaźnik na adres operandu 1 do rejestru 1
  • załaduj wartość zapisaną pod adresem zapisanym w rejestrze 1 do rejestru 2
  • załaduj wskaźnik na adres operandu 2 do rejestr 1
  • załaduj wartość zapisaną pod adresem w rejestrze 1 do rejestru 3
  • Dodaj zawartość rejestru 2 i rejestru 3 i przechowuj ją w rejestrze 4
  • załaduj wskaźnik do miejsca docelowego do rejestru 1
  • przechowuj zawartość rejestru 4 na adres podany w rejestrze 1

Wewnątrz procesora znajduje się specjalny zestaw szybkiej pamięci znany jako "plik rejestru", który zawiera pamięć, której procesor używa do przechowywania danych, na których pracuje wtedy. Plik rejestru zawiera kilka rejestrów, które są jednoznacznie identyfikowane. Instrukcje zazwyczaj działają na rejestrach, zwłaszcza na architekturach RISC; choć nie zawsze tak jest, jest to na razie wystarczająco dobra abstrakcja.

Zazwyczaj procesor musi załadować lub zapisać dane do rejestru, aby cokolwiek z nim zrobić. Operacje takie jak praca arytmetyczna na rejestrach, pobieranie operandów z dwóch rejestrów i umieszczanie wyniku w trzecim (na korzyść peanut gallery, i have used a 6502-lets not confuse the issue ; -). Procesor posiada specjalne instrukcje ładowania lub przechowywania danych z rejestrów do pamięci głównej maszyny.

Procesor posiada specjalny rejestr zwany 'licznikiem programu', który przechowuje adres następnej operacji do wykonania. Tak więc Sekwencja wykonywania instrukcji wygląda mniej więcej tak:

  • pobranie instrukcji zapisanej pod bieżącym adresem w programie licznik.
  • dekoduj instrukcję, wybierając rzeczywistą operację, jakich rejestrów używa, "tryb adresowania" (jak to działa, gdzie można uzyskać lub przechowywać Dane) i kilka innych bitów i bobów.
  • wykonaj instrukcję.

Wykonanie instrukcji spowoduje zmianę wartości w różnych rejestrach. Na przykład instrukcja "load" skopiuje wartość do rejestru. Arytmetyka lub logika (And, Or, Xor) pobierze dwie wartości i obliczy jedną trzecią. Skok lub gałąź Instrukcja zmieni adres w liczniku programu, więc procesor zacznie pobierać instrukcje z innej lokalizacji.

Procesor może mieć specjalne rejestry. Przykładem takiego jest opisywany powyżej licznik programu. Innym typowym jest condition flags register. Będzie to miało kilka bitów o specjalnych znaczeniach. Na przykład może mieć flagę, która jest ustawiona, jeśli wynik ostatniej operacji arytmetycznej był zerowy. Jest to przydatne w przypadku operacji warunkowych. Możesz porównać dwie liczby. Jeśli są równe, ustawiana jest flaga "zero". Procesor może mieć instrukcję warunkową, która jest wykonywana tylko wtedy, gdy ten znacznik jest ustawiony.

W tym przypadku można zmniejszyć licznik w rejestrze i jeśli jest to zero, ustawia się flagę warunku. Warunkowa (odgałęzienie na zero) może być użyta dla pętli, w której Dekrementuje się licznik i opuszcza pętlę, jeśli wynikiem instrukcji dekrementacji jest zero. Na niektórych procesorach (np. z rodziny ARM) wszystkie instrukcje są warunkowe, ze specjalnym warunkiem "rób zawsze" dla instrukcji nie warunkowych.

Przykłady typowych instrukcji procesora to:

  • Zwiększenie lub zmniejszenie rejestru
  • załaduj lub Zapisz zawartość rejestru do pamięci. Możesz również mieć adres do załadowania lub przechowywania przesunięty o zawartość innego rejestru. Pozwala to na łatwe zapętlenie tablicy danych przez zwiększenie drugiego rejestru.
  • Dodawanie, odejmowanie, mnożenie, operacje logiczne aby obliczyć wartości. Pobierają one operandy z dwóch rejestrów i umieszczają wynik w jednej trzeciej.
  • Jump to another location - przenosi zawartość tej lokalizacji do licznika programu i zaczyna pobierać instrukcje z nowej lokalizacji.
  • Push lub pop wartości na stosie.

Ten post stackoverflow zawiera przykład małego fragmentu skompilowanego kodu C i wyjścia języka asemblacji z tego fragmentu. Powinno dać przykład takiego związek między językiem wysokiego poziomu a kodem maszynowym, do którego jest kompilowany.

Najlepszym sposobem, aby się tego nauczyć, jest zdobycie asemblera i wypróbowanie go. Kiedyś było to znacznie łatwiejsze na starszych, prostszych komputerach, takich jak 8-bitowe micro z lat 80. najbliższą rzeczą do tego typu architektury dostępnej w dzisiejszych czasach są systemy wbudowane. Płytkę programistyczną dla wbudowanego procesora jak mikrochip pic można kupić dość tanio. Ponieważ ten typ architektury ma mniejszy bagaż niż nowoczesny system operacyjny jest mniej i-datowania i T-crossingu, aby korzystać z wywołań systemowych. Ułatwi to uruchomienie programu języka asemblacji na tego typu architekturze; prostsza architektura jest również łatwiejsza do zrozumienia.

Inną opcją jest uzyskanie emulatora, takiego jak SPIM . To emuluje procesor i pozwala montować i uruchamiać na nim programy. Zaletą takiego emulatora jest to, że będą one również miały udogodnienia dla pojedynczych programów krokowych (podobnie jak debugger) i pokazanie zawartości pliku rejestru. Może to być pomocne w uzyskaniu wglądu w to, co się naprawdę dzieje.

 11
Author: ConcernedOfTunbridgeWells,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:59

Sugerowałbym przeczytanie książki Code , która zawiera szczegółową historię ewolucji komputera z różnych systemów.

Jest to bardzo wciągające i wyjaśni Ci, jak rzeczy ewoluowały od kodu morse ' a do prostej maszyny dodawania, a następnie do jakiegoś montażu. Powinno to dać obraz dokładnie jak instrukcje maszynowe są interpretowane i używane przez sprzęt procesora, pamięci itp.

 5
Author: Henry B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 09:09:11

Jest jeszcze jedna warstwa pod językiem maszynowym, którą dowiedziałem się niedawno od przyjaciela. Nazywa się Microcode.

Zobacz ten artykuł na Wikipedii po szczegóły: http://en.wikipedia.org/wiki/Microcode

 3
Author: maxyfc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 08:31:23

Przyjmijmy, że najbardziej realny jest prąd i napięcie (jeśli wejdziesz głębiej, może się okazać, że nawet elektron jest abstrakcją). Pierwszym krokiem abstrakcji jest rozważenie, że napięcie +5V reprezentuje bit ustawiony na "1", A Napięcie 0V reprezentuje bit ustawiony na "0". Za pomocą przełącznika możesz zdecydować o wartości swojego przewodu.

Z drugim przewodem i drugim przełącznikiem, otrzymujesz dwie wartości binarne. Najciekawsze jest łączenie ich wartości binarnych z operacjami takimi Albo i nie. Istnieją tu dwa pojęcia: tranzystor dla rzeczywistości i logika dla abstrakcji. Dzięki temu możesz wykonywać dodawanie, odejmowanie i wiele innych operacji na dwóch wejściach binarnych. Możesz dodać więcej przewodów, aby reprezentować wartości inne niż " 0 " i "1". Idąc tą drogą, otrzymujesz ALU .

Teraz nadszedł czas, aby włączyć czas. Jeśli chcesz uzyskać kilka wyników z ALU, musisz podać dane wejściowe pojedynczo, dlatego potrzebujesz zegara i jednostka sterująca do operacji sekwencyjnych. Potrzebna jest również pamięć do przechowywania wartości wejściowych i wyników oraz urządzenia wejściowe i wyjściowe do dowodzenia i obserwacji. Idąc tą drogą, otrzymujemy architekturę Von Neumana , która jest podstawą prawie wszystkich architektur komputerowych.

Następny poziom abstrakcji jest wtedy, gdy zdecydujesz, przy użyciu odpowiedniej elektroniki, że ten konkretny bit w pamięci będzie stymulował ten konkretny Piksel Wyświetlacza LCD.

 3
Author: mouviciel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 09:24:03
 3
Author: Damian Powell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-04 18:16:43

Przesłanka twojego pytania jest błędna. Nie ma podziału. Oprogramowanie jest wprowadzane i zapisywane elektronicznie. Po prostu oprogramowanie jest wyświetlane w języku angielskim, aby ludzie mogli go łatwo śledzić.

Więc na przykład, po wpisaniu" Zmień ekran pulpitu na Zielony " za pomocą klawiatury, przechodzi on bezpośrednio na metal elektronicznie (przeczytaj, jak działa klawiatura / mysz/ekran dotykowy). Po prostu widzisz go jako tekst w języku angielskim na ekranie. Zrób krok dalej, wprowadzany tekst jest w języku wysokiego poziomu, jest konwertowany na kod maszynowy, dzięki czemu procesor może na nim wykonywać logikę. Kod maszynowy jest również w formie elektronicznej. Na przykład, tekst zostanie przekonwertowany na opcodes itp, ale opcodes są w formie elektronicznej i procesor może je przetworzyć.

Najważniejsze jest to, że wszystko w Twoim komputerze jest w formie elektronicznej od momentu jego wprowadzenia. Znajduje się na dysku twardym lub w pamięci (Tranzystory itp.). Po prostu widzisz to w tekst na ekranie.

Znowu nie ma podziału. Oprogramowanie zapisane w pamięci (Tranzystory itp.) lub dysk twardy jest już tam elektronicznie. Sprzęt (hard logic-gates) jest potrzebny do uruchomienia oprogramowania(co chcesz sprzęt zrobić z oprogramowaniem). Nie można wprowadzać niczego w formie elektronicznej.

Mam nadzieję, że to ma sens.

 2
Author: Rajiv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-03 14:25:07

Cóż, faktyczny punkt, w którym spotykasz sprzęt, zależy oczywiście od tego, co robisz. Ale weźmy (doskonały) przykład "wyświetlania tekstu":

From abstract to hardware:

  • użytkownik wpisuje litery do edytora tekstu (wp)
  • wp software najpierw przechowuje litery w pamięci jako część edytowanego dokumentu
  • wp software informuje bibliotekę interfejsu użytkownika, której używa, że chce wyświetlić edytowany tekst w oknie (dzieje się tak stale, oczywiście). Biblioteka interfejsu użytkownika będzie zależna od systemu (Windows API na MS Windows, X Windows lub QT itp. na Linuksie, AWT/Swing na Javie itp.)
  • biblioteka interfejsu użytkownika przekaże dane przez kilka kolejnych warstw abstrakcji. W szczególności, będzie wykonywać rasteryzację (konwertować informacje "pokaż A" na siatkę pikseli, która reprezentuje A)
  • ostatecznie informacja zostanie przekazana do sterownika urządzenia karty graficznej. Tu spotykamy" prawdziwy " sprzęt: -). Zwykle karta graficzna wyświetla "pamięć wideo", czyli pamięć na karcie, na którą procesor może zapisywać. Sterownik karty graficznej (który działa na procesorze) zapisze piksele dla pamięci a do wideo.
  • obwody karty graficznej odczytują pamięć wideo i konwertują tam dane na sygnał wideo, który wychodzi ze złącza wideo na karcie i na monitor.
  • monitor wyświetli to, co wygląda, mam nadzieję, jak A: -)
 1
Author: sleske,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 08:53:50

To wyjaśnienie może nie jest zbyt akademickie, ale tak to rozumiem(nie poszedłem też na uniwersytet).

Pierwszy krok obejmuje algebrę Boole'a , która udowodniła w XIX wieku, że każda operacja matematyczna może być wyrażona za pomocą szeregu symboli i niektórych powiązanych operatorów. Tak więc arytmetyka bazy 10 ze wspólnymi operatorami+, -,*, / może być wyrażona za pomocą tylko dwóch symboli (0, 1/ true, false) i operatorów logicznych (and, or etc) prowadzących do Logika logiczna, która jest matematycznym fundamentem informatyki cyfrowej.

Drugim krokiem jest praca Alana Turinga , która skonstruowała matematyczny model wyimaginowanej maszyny, która może przetwarzać symbole. Naiwnym opisem maszyny Turinga byłby każdy automat, który ma pamięć (do przechowywania swojego stanu), operuje na serii symboli, które reprezentują jego stan i interpretuje kolejną serię symboli, które definiują przejście z jednego stanu do drugiego.

The procesor cyfrowy jest implementacją maszyny Turinga, która używa algebry logicznej Boole 'a jako bazy symboli i operatorów (spójrz na Jak to działa szczegółowe wyjaśnienie logiki Boole' a w pracy). Powodem tego jest to, że Stany logiczne prawda/fałsz mogą być łatwo odwzorowane na sygnały elektryczne ( + , -), a powiązane z nimi operatory mogą być zaimplementowane w obwodach tranzystorowych, które dane wejście binarne (sygnał elektryczny) może wyprowadzić wynik zgodnie z operatory logiczne. Więc każdy nowoczesny komputer jest maszyną, która ma pamięć aby zapisać jego stan (zakodowany w postaci binarnej elektrycznej / magnetycznej) oraz szereg obwodów, które przyjmują impulsy elektryczne i operatorów (instrukcje procesora) i odpowiednio generują wyniki z bardzo dużą prędkością.

Tak więc każdy program napisany w dowolnym języku komputerowym jest ostatecznie tłumaczony przez kompilator lub runtime na serię operacji logicznych dla procesora do wykonania

 1
Author: AZ.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 09:46:56

Kod maszynowy, jak sądzę, jest tak niski, jak tylko można. Jest on bezpośrednio rozumiany przez procesor i wykonywany bez interpretera. Procesor jest zbudowany z pewnego zestawu instrukcji, które definiują kod maszynowy dla danej architektury (x86, PPC, ARM, itp.).

Wszystko, od rysowania liter na ekranie po obliczanie pi, jest na najbardziej podstawowym poziomie, uruchamiane w kodzie maszynowym. Rysowanie liter na ekranie to tylko kwestia stworzenia jakiegoś kodu maszynowego, który oblicza wysokość liter, kolor i lokalizacje pikseli i wykresy ich na ekranie za pomocą urządzenia wyjściowego wideo.

 0
Author: Eric Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 08:28:14

Cóż, jeśli wiesz, jak procesor uzyskuje dostęp do pamięci, to już znasz odpowiedź. Pamięć i inne urządzenia są dostępne w (prawie) ten sam sposób, w zależności od tego, w jaki sposób procesor używa "memory mapped IO" lub "IO mapped IO". W pierwszym przypadku procesor po prostu próbuje odczytać i zapisać na adres pamięci - ale nie ma tam pamięci - zamiast tego jest to jakieś inne urządzenie sprzętowe, ale procesor naprawdę nie może odróżnić. Ten ostatni przypadek jest bardzo podobny.

Na z drugiej strony, jeśli nie masz pojęcia, w jaki sposób procesor uzyskuje dostęp do pamięci, powinieneś sprawdzić, czym jest "szyna adresowa" i "szyna danych", aby zacząć.

 0
Author: Dan Byström,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 08:35:53

Mylisz się.

Wszystko, co komputer robi, czy to pokazuje litery na ekranie, czy robi obliczenia, można oglądać na różnych (wielu) poziomach abstrakcji, od prądu elektrycznego do manipulacji abstrakcyjnych pojęć, takich jak pieniądze na koncie bankowym.

To powiedziawszy, zbudowanie obwodu dla prostego mikroprocesora nie jest takie trudne, ALU, niektóre rejestry i trochę logiki sterowania. Altera ma to jako zaawansowane samouczki do rozrusznika Cyclone II board, ale nie mogę znaleźć go w sieci.

 0
Author: starblue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 08:47:24
 0
Author: Pete Kirkham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 09:35:08

Oto prawdziwa okazja. Mój punkt wyjścia. Wszystko wymaga energii do działania. Włączanie / wyłączanie jest zdefiniowane w określonym limicie. na przykład, jeśli między 3 a 5 v jest włączony, jeśli mniej niż 3 V jest wyłączony. Koncepcja alfabetu morse ' a. Pracuję nad termometrem, więc muszę zrobić lub kupić czujnik. Więc muszę to skalibrować. Tłumaczenie sygnałów z sygnału brak sygnału lub Siły sygnału na temperaturę. Tu teraz jestem.

 0
Author: will Wood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-29 04:40:00

Nie jest łatwo odpowiedzieć jednym zdaniem. Przeczytaj książkę o architekturze komputera, naucz się montażu i jestem pewien, że zrozumiesz, jak to się dzieje.

 -1
Author: Chrys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-30 09:07:31

Gdy wpiszemy dowolny klawisz lub podamy jakąkolwiek komendę wtedy małe fale elektryczne stały się spowodowane przez naciśnięcie klawisza to faktycznie zakończymy Obwód

 -1
Author: Manish anand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 15:35:26