it-swarm.dev

Wie funktionieren Computer?

Das ist fast peinlich zu fragen ... Ich habe einen Abschluss in Informatik (und einen zweiten in Bearbeitung). Ich habe fast fünf Jahre als Vollzeit-.NET-Entwickler gearbeitet. Ich scheine im Allgemeinen kompetent zu sein, was ich tue.

Aber ich weiß nicht, wie Computer funktionieren!

Bitte, entblößen Sie mich für eine Sekunde. Ein kurzes Google von "Wie ein Computer funktioniert" wird viele, viele Ergebnisse liefern, aber ich hatte Mühe, eines zu finden, das wirklich das beantwortet, wonach ich suche. Mir ist klar, dass dies eine große, große Frage ist, also wirklich, wenn Sie mir nur einige Schlüsselwörter oder eine Richtung geben können.

Ich weiß, dass es Komponenten gibt ... das Netzteil, das Motherboard, den RAM, die CPU usw. ... und ich bekomme eine "allgemeine Vorstellung" davon, was sie tun. Aber ich verstehe wirklich nicht, wie Sie von einer Codezeile wie Console.Readline() in .NET (oder Java oder C++) ausgehen und sie tatsächlich haben mache Sachen.

Klar, mir ist MSIL (im Fall von .NET) vage bewusst, und dass mit dem JIT-Compiler etwas Magie passiert und sich in nativen Code verwandelt (glaube ich). Mir wurde gesagt, Java ist ähnlich, und C++ schneidet den mittleren Schritt aus.

Ich habe eine Mainframe-Montage durchgeführt, es war jetzt ein paar Jahre her. Ich erinnere mich, dass es einige Anweisungen und einige CPU-Register gab, und ich schrieb Code ... und dann passierte etwas Magie ... und mein Programm würde funktionieren (oder abstürzen). Soweit ich weiß, würde ein 'Emulator' simulieren, was passiert, wenn Sie eine Anweisung aufrufen, und die CPU-Register aktualisieren. Aber wie funktionieren diese Anweisungen so?

Wird dies zu einer Elektronikfrage und nicht zu einer Computerfrage? Ich vermute, es gibt keinen praktischen Grund für mich, dies zu verstehen, aber ich denke, ich sollte es können.

(Ja, das passiert, wenn Sie einen Tag mit einem kleinen Kind verbringen. Es dauert ungefähr 10 Minuten und fünf Iterationen, bis Sie nach dem Warum fragen, um festzustellen, wie viel Sie nicht wissen.)

59
Rob P.

Ich werde von der niedrigsten Ebene ausgehen, die relevant sein könnte (ich kann von einer noch niedrigeren Ebene ausgehen, aber sie sind wahrscheinlich viel zu irrelevant), angefangen von Atom über Elektrizität, Transistoren, Logikgatter bis hin zu integrierten Schaltkreisen (Chip/CPU) ) und endet bei der Versammlung (ich würde annehmen, dass Sie mit den höheren Ebenen vertraut sind).

Am Anfang

Atom

Atom ist eine Struktur aus Elektronen, Protonen und Neutronen (die selbst aus Elementarteilchen bestehen). Der interessanteste Teil des atom für Computer und Elektronik sind die Elektronen , weil Elektronen mobil sind (dh sie können sich relativ leicht bewegen, im Gegensatz zu Protonen und Neutronen, die schwieriger zu bewegen sind) und Sie können von selbst frei schweben, ohne in einem Atom gehalten zu werden.

Normalerweise hat jedes Atom die gleiche Anzahl von Protonen und Elektronen, wir nennen dies "neutralen" Zustand. Es ist möglich, dass ein atom zusätzliche Elektronen verliert oder gewinnt. Atome in diesem unausgeglichenen Zustand sollen "positiv geladen" atom (mehr Proton als Elektronen) bzw. "negativ geladen" atom (mehr Elektron als Proton) sein.

Elektronen sind nicht konstruierbar und unzerstörbar (nicht so in der Quantenmechanik, aber das ist für unseren Zweck irrelevant); Wenn also ein atom ein Elektron verliert, musste ein anderes atom in der Nähe die zusätzlichen Elektronen empfangen oder das Elektron musste in ein frei schwebendes Elektron freigesetzt werden, umgekehrt, da das Elektron nicht konstruierbar ist, um zusätzliches Elektron zu gewinnen atom musste es von nahe gelegenen Atomen oder von einem frei schwebenden Elektron abpressen. Die Mechanik der Elektronen ist so, dass, wenn sich in der Nähe eines positiv geladenen Atoms ein negativ geladenes atom befindet, einige Elektronen wandern, bis beide Atome die gleiche Ladung haben.

Elektrizität

Elektrizität ist nur ein Elektronenfluss von einem Gebiet mit einer sehr hohen Anzahl negativ geladener Atome zu einem Gebiet mit einer sehr hohen Anzahl positiv geladener Atome. Bestimmte chemische Reaktionen können dazu führen, dass wir einen Knoten mit vielen negativ geladenen Atomen ("Anode" genannt) und einen anderen Knoten mit vielen positiv geladenen Atomen ("Kathode" genannt) haben. Wenn wir zwei entgegengesetzt geladene Knoten mit einem Draht verbinden, fließen Elektronenmassen von der Anode zur Kathode, und dieser Fluss wird als "elektrischer Strom" bezeichnet.

Nicht alle Drähte können Elektronen gleich leicht übertragen, Elektronen fließen in "leitenden" Materialien viel leichter als in "widerstandsfähigen" Materialien. Ein "leitendes" Material hat einen geringen elektrischen Widerstand (z. B. Kupferdrähte in Kabeln) und ein "widerstandsfähiges" Material hat einen hohen elektrischen Widerstand (z. B. Gummikabelisolierung). Einige interessante Materialien werden als Halbleiter (z. B. Silikone) bezeichnet, da sie ihren Widerstand leicht ändern können. Unter bestimmten Bedingungen kann ein Halbleiter als Leiter fungieren und unter anderen Bedingungen kann er sich in einen Widerstand verwandeln.

Elektrizität fließt immer lieber mit dem geringsten Widerstand durch das Material. Wenn also eine Kathode und eine Anode mit zwei Drähten verbunden sind, von denen einer einen sehr hohen Widerstand und der andere einen sehr niedrigen Widerstand aufweist, fließt der Großteil der Elektronen durch das Kabel mit niedrigem Widerstand und nahezu es fließt kein Material durch das hochohmige Material.

Das Mittelalter

Schalter und Transistoren

Schalter/Flip-Flops sind wie normale Lichtschalter. Ein Schalter kann zwischen zwei Drahtstücken platziert werden, um den Stromfluss zu unterbrechen und/oder wiederherzustellen. Transistoren funktionieren genauso wie Lichtschalter, mit der Ausnahme, dass ein Transistor anstelle des physischen Verbindens und Trennens von Drähten den Stromfluss verbindet/trennt, indem er seinen Widerstand ändert, je nachdem, ob sich Strom im Basisknoten befindet, und wie Sie vielleicht bereits vermutet haben Ich weiß, Transistoren bestehen aus Halbleitern, weil wir Halbleiter so verändern können, dass sie entweder ein Widerstand oder ein Leiter werden, um elektrische Ströme zu verbinden oder zu trennen.

Ein üblicher Transistortyp, der NPN Bipolar Junction Transistor (BJT), hat drei Knoten: "Basis", "Kollektor" und "Emitter". In einem NPN-BJT kann Elektrizität nur dann vom "Emitter" -Knoten zum "Kollektor" -Knoten fließen, wenn der "Basis" -Knoten geladen ist. Wenn der Basisknoten nicht geladen ist, kann praktisch kein Elektron durchfließen, und wenn der Basisknoten geladen ist, können Elektronen zwischen dem Emitter und dem Kollektor fließen.

Das Verhalten eines Transistors

(Ich empfehle Ihnen dringend, this durchzulesen, bevor Sie fortfahren, da dies mit interaktiven Grafiken besser erklärt werden kann als ich.)

Nehmen wir an, wir haben einen Transistor an seiner Basis und seinem Kollektor an eine elektrische Quelle angeschlossen und verdrahten dann ein Ausgangskabel in der Nähe seines Kollektors (siehe Abbildung 3 in http://www.spsu.edu/cs/faculty)/bbrown/web_lectures/transistors / ).

Wenn wir weder Basis noch Kollektor mit Strom versorgen, kann überhaupt kein Strom fließen, da es keinen Strom gibt, über den wir sprechen könnten:

B   C  |  E   O
0   0  |  0   0

Wenn wir Elektrizität an den Kollektor, aber nicht an die Basis anlegen, kann keine Elektrizität zum Emitter fließen, da die Basis zu einem hochohmigen Material wird und die Elektrizität zum Ausgangsdraht entweicht:

B   C  |  E   O
0   1  |  0   1

Wenn wir Strom an die Basis, aber nicht an den Kollektor anlegen, kann auch kein Strom fließen, da zwischen dem Kollektor und dem Emitter kein Ladungsunterschied besteht:

B   C  |  E   O
1   0  |  0   0

Wenn wir sowohl die Basis als auch den Kollektor mit Strom versorgen, fließt Strom durch den Transistor. Da der Transistor jetzt einen niedrigeren Widerstand als der Ausgangsdraht hat, fließt fast kein Strom durch den Ausgangsdraht:

B   C  |  E   O
1   1  |  1   O

Logikgatter

Wenn wir den Emitter eines Transistors (E1) mit dem Kollektor eines anderen Transistors (C2) verbinden und dann einen Ausgang nahe der Basis des ersten Transistors (O) anschließen (siehe Abbildung 4 in http: // www .spsu.edu/cs/Fakultät/bbrown/web_lectures/Transistoren / ), dann passiert etwas Interessantes. Nehmen wir auch an, wir legen immer Strom an den Kollektor des ersten Transistors (C1) an und spielen daher nur mit den Basisknoten der Transistoren (B1, B2) herum:

B1   B2   C1   E1/C2  |  E2   O
----------------------+----------
0    0    1    0      |  0    1
0    1    1    0      |  0    1
1    0    1    0      |  0    1
1    1    1    1      |  1    0

Fassen wir die Tabelle so zusammen, dass nur B1, B2 und O angezeigt werden:

B1   B2  |  O
---------+-----
0    0   |  1
0    1   |  1
1    0   |  1
1    1   |  0

Siehe da , wenn Sie mit Boolean Logic und/oder Logic Gates vertraut sind, sollten Sie beachten, dass dies genau das NAND-Gate ist. Und wenn Sie mit Boolescher Logik und/oder Logikgattern vertraut sind, wissen Sie möglicherweise auch, dass ein NAND (sowie NOR) funktional vollständig ist, dh wenn Sie nur NAND verwenden, können Sie die gesamte andere Logik erstellen Tore und der Rest der Wahrheitstabellen. Mit anderen Worten, Sie können einen ganzen Computerchip nur mit NAND-Gattern entwerfen.

Tatsächlich werden die meisten CPUs nur mit NAND entwickelt (oder war es früher so?), Da die Herstellung billiger ist als die Verwendung einer Kombination aus NAND, NOR, AND, OR usw.

Ableiten der anderen booleschen Operatoren von NAND

Ich würde nicht beschreiben, wie man alle booleschen Operatoren macht, nur das NOT- und das AND-Gatter. Den Rest finden Sie woanders.

Wenn ein NAND-Operator gegeben ist, können wir ein NOT-Gatter konstruieren:

Given one input B
O = NAND(B, B)
Output O

Wenn ein NAND- und ein NOT-Operator gegeben sind, können wir ein UND-Gatter konstruieren:

Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O

Wir können andere Logikgatter auf ähnliche Weise konstruieren. Da das NAND-Gatter funktional vollständig ist , ist es auch möglich, Logikgatter mit mehr als 2 Eingängen und mehr als 1 Ausgang zu konstruieren diskutieren hier, wie solche Logikgatter konstruiert werden.

Aufklärungszeitalter

Bau einer Turingmaschine aus Booleschen Toren

Eine CPU ist nur eine kompliziertere Version einer Turingmaschine. Die CPU-Register sind der interne Status der Turing-Maschine, und RAM ist das Band einer Turing-Maschine.

Eine Turing-Maschine (CPU) kann drei Dinge tun:

  • lesen Sie eine 0 oder 1 vom Band (lesen Sie eine Speicherzelle aus dem RAM)
  • seinen internen Zustand ändern (seine Register ändern)
  • nach links oder rechts bewegen (mehrere Positionen aus dem RAM lesen)
  • schreiben Sie eine 0 oder 1 auf das Band (schreiben Sie in eine Speicherzelle in den RAM)

Für unseren Zweck bauen wir Wolframs 2-Zustands-Turing-Maschine mit 3 Symbolen unter Verwendung kombinatorischer Logik (moderne CPUs würden Mikrocode verwenden, aber sie sind komplexer als für unseren Zweck erforderlich).

Die Zustandstabelle der Wolfram (2,3) Turingmaschine lautet wie folgt:

    A       B
0   P1,R,B  P2,L,A
1   P2,L,A  P2,R,B
2   P1,L,A  P0,R,A

Wir möchten die obige Statustabelle als Wahrheitstabelle neu codieren:

Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)

      R  0          1
I1,I2
(0,0)    (0,1),1,1  (1,0),0,0
(0,1)    (1,0),0,0  (1,0),1,1
(1,0)    (0,1),0,0  (0,0),1,0

The truth table for the state table above:

I1  I2  R(t) | O1  O2  M   R(t+1)
-------------+--------------------
0   0   0    | 0   1   1   1
0   0   1    | 1   0   0   0
0   1   0    | 1   0   0   0
0   1   1    | 1   0   1   1
1   0   0    | 0   1   0   0
1   0   1    | 0   0   1   0

Ich werde ein solches Logikgatter nicht wirklich konstruieren (ich bin nicht sicher, wie ich es in SE zeichnen soll und es wird wahrscheinlich ziemlich groß sein), aber da wir wissen, dass das NAND-Gatter ist ) funktional vollständig , dann haben wir eine Möglichkeit, eine Reihe von NAND-Gattern zu finden, die diese Wahrheitstabelle implementieren.

Eine wichtige Eigenschaft von Turing Machine ist, dass es möglich ist, einen Computer mit gespeichertem Programm mit einer Turing-Maschine zu emulieren, die nur eine Tabelle mit festen Zuständen hat. Daher kann jede Universal Turing Machine ihr Programm vom Band (RAM) lesen, anstatt ihre Anweisung in der internen Statustabelle fest codieren zu müssen. Mit anderen Worten, unsere (2,3) Turing-Maschine kann ihre Anweisungen von I1-, I2-Pins (als Software) lesen, anstatt in der Logikgatter-Implementierung (als Hardware) fest codiert zu sein.

Mikrocodes

Aufgrund der zunehmenden Komplexität moderner CPUs wird es unerschwinglich schwierig, kombinatorische Logik allein zum Entwerfen einer gesamten CPU zu verwenden. Moderne CPUs werden normalerweise als Interpret von Mikrocode-Anweisungen entwickelt. Ein Mikrocode ist ein kleines Programm, das in die CPU eingebettet ist und von der CPU zur Interpretation des tatsächlichen Maschinencodes verwendet wird. Dieser Mikrocode-Interpreter selbst wird im Allgemeinen unter Verwendung einer kombinatorischen Logik entworfen.

Registrieren, Cache und RAM

Wir haben oben etwas vergessen. Wie erinnern wir uns an etwas? Wie implementieren wir das Band und den RAM? Die Antwort liegt in einer elektronischen Komponente namens Kondensator. Ein Kondensator ist wie eine wiederaufladbare Batterie. Wenn ein Kondensator aufgeladen wird, hält er zusätzliche Elektronen zurück und kann auch Elektronen an die Schaltung zurückgeben.

Um in einen Kondensator zu schreiben, füllen wir den Kondensator mit Elektronen (schreiben Sie 1) oder entleeren alle Elektronen im Kondensator, bis er leer ist (schreiben Sie 0). Um den Wert eines Kondensators abzulesen, versuchen wir, ihn zu entladen. Wenn beim Entladen kein Strom fließt, ist der Kondensator leer (0 anzeigen). Wenn wir jedoch Elektrizität erkennen, muss der Kondensator aufgeladen werden (1 lesen). Möglicherweise stellen Sie fest, dass das Lesen eines Kondensators seinen Elektronenspeicher leert. Moderne RAMs verfügen über die Schaltung, um den Kondensator regelmäßig aufzuladen, damit sie ihren Speicher behalten können, solange Strom vorhanden ist.

Es gibt mehrere Arten von Kondensatoren, die in einer CPU verwendet werden. Die CPU-Register und die CPU-Caches höherer Ebene werden unter Verwendung von "Kondensatoren" mit sehr hoher Geschwindigkeit hergestellt, die tatsächlich aus Transistoren aufgebaut sind (daher gibt es fast keine "Verzögerung" zum Lesen/Schreiben sie), diese werden statisch RAM (SRAM) genannt; Während der Hauptspeicher RAM mit geringerer Leistung, aber langsameren und viel billigeren Kondensatoren hergestellt wird, werden diese als Dynamic RAM (DRAM) bezeichnet.

Uhr

Ein sehr wichtiger Bestandteil einer CPU ist die Uhr. Eine Uhr ist eine Komponente, die regelmäßig "tickt", um die Verarbeitung zu synchronisieren. Eine Uhr enthält typischerweise einen Quarz oder andere Materialien mit bekannter und relativ konstanter Schwingungsperiode, und die Taktschaltung behält diese Schwingung bei und misst sie, um ihr Zeitgefühl aufrechtzuerhalten.

CPU-Operationen werden zwischen Takt-Ticks ausgeführt und Lese-/Schreibvorgänge werden in ausgeführt. die Häkchen, um sicherzustellen, dass sich alle Komponenten synchron bewegen und in Zwischenzuständen nicht ineinander treten. In unserer (2,3) Turing-Maschine durchläuft zwischen Taktstrichen Elektrizität die Logikgatter, um die Ausgabe von der Eingabe (I1, I2, R) zu berechnen (t)); und in tickt die Uhr, der Bandschreiber schreibt O1, O2 auf das Band, der Motor bewegt sich abhängig vom Wert von M und dem internen Das Register wird aus dem Wert von R (t + 1) geschrieben, dann liest der Bandleser das aktuelle Band und legt die Ladung in I1, I2 ein, und das interne Register wird erneut auf R (t) zurückgelesen.

Mit Peripheriegeräten sprechen

Beachten Sie, wie die (2,3) Turingmaschine mit ihrem Motor verbunden ist. Dies ist eine sehr vereinfachte Ansicht, wie eine CPU mit einer beliebigen Hardware verbunden werden kann. Beliebige Hardware kann eine bestimmte Leitung für Ein-/Ausgänge abhören oder darauf schreiben. Bei der (2,3) Turingmaschine besteht die Schnittstelle zum Motor nur aus einem einzigen Draht, der den Motor anweist, sich im oder gegen den Uhrzeigersinn zu drehen.

Was bei dieser Maschine nicht gesagt wird, ist, dass der Motor eine andere "Uhr" haben musste, die synchron mit der internen "Uhr" der Maschine läuft, um zu wissen, wann der Betrieb gestartet und gestoppt werden muss. Dies ist also ein Beispiel für ein synchron) Datenübertragung . Die andere häufig verwendete Alternative, die asynchrone Übertragung, verwendet eine andere Leitung, die als Interrupt-Leitung bezeichnet wird, um Synchronisationspunkte zwischen der CPU und dem asynchronen Gerät zu kommunizieren.

Digitales Zeitalter

Maschinencode und Montage

Assemblersprache ist eine vom Menschen lesbare Mnemonik für Maschinencodes. Im einfachsten Fall gibt es eine Eins-zu-Eins-Zuordnung zwischen Assembly zu Maschinencode. Obwohl in modernen Assemblersprachen einige Anweisungen mehreren Opcodes zugeordnet sein können.

Programmiersprache

Wir alle kennen das, nicht wahr?


Puh, endlich fertig, ich habe das alles in nur 4 Stunden getippt, also bin ich mir sicher, dass irgendwo ein Fehler vorliegt (ich bin hauptsächlich ein Programmierer, kein Elektrotechniker oder Physiker, also könnte es einige Dinge geben, die offensichtlich falsch sind). Wenn Sie einen Fehler gefunden haben, zögern Sie nicht, ein @yell zu geben oder ihn selbst zu beheben, wenn Sie den Repräsentanten haben oder eine ergänzende Antwort erstellen.

139
Lie Ryan

In 12 Schritten von Nand nach Tetris

Ich denke, das wird absolut perfekt für Sie sein:

Von Nands zu Tetris in 12 Schritten

12
Darknight

Wenn Sie die Montage abgeschlossen haben, sind nur noch zwei oder drei Ebenen zu verstehen:

  • Logic Gates , so wird Logik über sich bewegende Elektronen implementiert - hier wird es zu einer elektronischen Frage
  • CPU- und Systemdesign, bei dem Logikgatter zu einer CPU zusammengesetzt und mit RAM und Peripheriegeräten) verbunden sind. Moderne CPUs sind äußerst komplex, aber für Ihren Wunsch zu verstehen, wie die Dinge im Grunde funktionieren, funktioniert es sollte ausreichen, um eine klassische einfache CPU wie die Z8 zu betrachten.
  • Microcode Auf diese Weise werden Assembly-Anweisungen interpretiert und in Hardware-Level-Aktionen von Registern und Logikschaltungen umgewandelt.

Der letzte (Microcode) hat es für mich zum "Klicken" gebracht, weil er die Lücke zwischen Elektronik und Code gefüllt hat.

10

Ein Beispiel für einen Lehrplan für einen CS-Grundkurs, der genau erklärt, worüber Sie gefragt haben, finden Sie hier (IDC.AC.IL-Kurs CS101) . Es basiert auf diesem MIT Pressebuch: " Die Elemente von Computersystemen: Aufbau eines modernen Computers nach ersten Prinzipien ".

7
littleadv

Um diese Frage vollständig zu beantworten, wäre ein ganzes Buch erforderlich. Zum Glück hat jemand dieses Buch bereits geschrieben. Es heißt Code: Die verborgene Sprache der Computerhardware und -software von Charles Petzold. Es ist eine sehr informative und sehr unterhaltsame Lektüre.

7
Bill the Lizard

Ich kann es nur empfehlen Code von Charles Petzold. Das Buch ist sowohl eine Geschichtsstunde als auch ein technischer Überblick über den Bau eines Computers. Beginnend mit der Erklärung einfacher Telegraphenschalter zeigt das Buch, wie Transistoren funktionieren, dann zu Logikgattern, programmierbaren Computern und komplexeren Dingen. Es ist auch sehr gut geschrieben und könnte wahrscheinlich von jedem mit genügend Neugier verstanden werden.

4
Doug T.

Es wird viel zu schwierig (und lang!) Sein, alles aufzulisten, was Sie wissen müssen, um ein ausreichendes Verständnis für das zu erlangen, was Sie wissen müssen. Ein berühmtes Buch, das all diese Fragen tatsächlich beantwortet, stammt von Andrew Tanenbaum: Structured Computer Organization .

Dieses Buch führt Sie vom physischen Computer auf Ihrem Schreibtisch bis hinunter zu Logikgattern und boolescher Algebra und zeigt Ihnen dann eine Beispielarchitektur, die Sie durch die tatsächlichen Abläufe in einem solchen System führt.

(Ein Hinweis: Es ist sehr teuer, da es ca. 800 Seiten umfasst. Es ist wahrscheinlich gut, nur eine gebrauchte Version oder eine ältere Ausgabe zu erwerben. Die Konzepte haben sich nicht geändert.)

3
Deckard

Nun, es braucht eine Menge Bälle, um das zu sagen und zu fragen, denke ich.

Der Code wird so ziemlich immer weiter auf komplizierteren Code niedrigerer Ebene reduziert. Bis zum Code auf Baugruppenebene mit Push- und Move-Registern .. etc ...

Dann nimmt die Hardware diesen Code und reagiert darauf. In den meisten Fällen verfügt die Hardware über eigene Anweisungen zur Vorgehensweise. Es kann also eine einfache Anweisung wie einen Push geben, bei der ein Register (Speicherort) einen Wert wie 1 oder 2 oder was auch immer erhält.

Es ist definitiv eine Computerfrage. Und auch eine Programmierung. Einige Programmierer programmieren die Hardware, die Ihren Code aufnimmt und ihn dazu bringt, etwas zu tun, wenn auch auf einem sehr niedrigen Niveau. Es ist auch eine Elektronikfrage.

2
Ross

Obwohl ich es erstaunlich finde, dass jemand einen Kurs in CS absolvieren kann, ohne die Hardware zu verstehen, ist es durchaus möglich, dass sich ein Kurs nur auf die Theorie als Zweig der Mathematik konzentriert und nicht auf die technischen und Implementierungsdetails. Die ehrwürdigen SICP Vorträge (wie sie in den 1980er Jahren gehalten wurden) schienen so zu sein.

In meinem CS-Kurs vor zwei Jahrzehnten musste im ersten Jahr eine frühere Ausgabe von Computer: Von der Logik zur Architektur gelesen werden.
So etwas sollte die Lücken füllen.

Alternativ sollte MITs Open Courseware etwas haben, das hilft.

1
njd

Es gibt Geräte.

Dann gibt es Gerätetreiber, die mit diesen Geräten interagieren. Teil in C geschrieben, Teil in Assembly typisch.

Das Betriebssystem interagiert an einem Ende mit Anwendungssoftware und am anderen mit Gerätetreibern, um mit der eigentlichen Hardware zu kommunizieren.

Wenn Sie wirklich interessiert sind, warum nicht einen Linux-Kernel hacken, um mehr zu erfahren?

1
Fanatic23

Im Kern handelt es sich um eine elektronische Frage, obwohl die Grundlagen hierfür im Umfragekurs für jeden CS-Abschluss behandelt werden sollten. Die gesamte Hardware basiert auf Gates, die auf Komponentenebene darin programmiert sind. Dies sind die grundlegendsten logischen Operationen: NOT, AND, OR, XOR, NAND, NOR. Jedes Tor hat eine bestimmte Funktion:

Das Gate NOT nimmt einen Eingabewert und erzeugt einen Ausgabewert, erhält eine 0 oder 1 und gibt das Gegenteil aus.

Das Gatter UND verwendet zwei Eingabewerte und erzeugt einen Ausgabewert. Es erhält eine beliebige Kombination von 0 und 1 und gibt 0 für eine beliebige Kombination aus, außer für zwei, für die es gibt eine 1 aus.

Das Gatter ODER funktioniert ähnlich wie das UND-Gatter, erzeugt jedoch eine 1 für jede Kombination von 0 und 1, die es erhält, mit Ausnahme von zwei Nullen, für die es a ausgibt 0.

Das Gatter XOR ähnelt wieder dem Gatter AND und OR Gatter), erzeugt jedoch eine 0, wenn beide Eingänge vorhanden sind das gleiche und eine 1, wenn beide Eingänge unterschiedlich sind.

Das NAND Gate ist das logische Gegenteil des AND-Gates und das NOCH Gate das logische Gegenteil des Gates OR).

Mit anderen Worten, auf Hardwareebene kommt es auf die grundlegendsten binären logischen Ausdrücke an. Alles andere ist nur ein Übergang von einer höheren zu einer niedrigeren Programmierebene, bis diese letzte Ebene erreicht ist.

1
MaQleod

Für den Teil zum Transformieren eines Programms in eine Hochsprache in Maschinenanweisungen sollte jedes Compiler-Buch die Rechnung füllen. Zum Beispiel das Drachenbuch .

Für den Teil "Wie werden Anweisungen ausgeführt?" Computerorganisation und -design: Die Hardware-/Software-Schnittstelle sollte die Rechnung füllen.

1
AProgrammer