Wie funktionieren Computer (derealisation)?

7 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Oh man. Ich bin jetzt echt zu müde dafür. Aber schließlich hast du eine der besten Fragen heute auf dieser Plattform gestellt.

Stell dir das in Schichten vor. Die unterste Schicht ist die Physik. Dort geht es hauptsächlich um Teilchenbewegung. Darüber kommt die Elektrotechnik. Da hast du es mit Strom, Spannung, Widerständen und Transistoren zu tun. Transistoren sind bereits unheimlich komplex. Und ich als M.Sc. der Informatik hab sie nie ganz verstanden. Aber sie können Stromkreise steuern, sowie Zustände speichern.

Digitale 0en und 1en gibt es eigentlich nicht. Auf elektronischer Ebene ist alles im Endeffekt analog. Und entweder es liegt eine Spannung von z.B. 5 Volt an, oder gar keine Spannung. Schon hast du die Zahlen bzw. Zustände 0 oder 1.

Dann kommt schon die Ebene der Hardwarekomponenten. Der Prozessor, die CPU besteht aus Milliarden von Transistoren. Die CPU arbeitet mit Hauptspeicher, Grafikkarte, Laufwerken etc. zusammen. Darüber kommt die Ebene der Betriebssysteme. Hier sind wir schon im Software Bereich. Betriebssysteme haben zwei Aufgaben:

  1. Dem Nutzer eine Schnittstelle anbieten
  2. Verwaltung von Ressourcen wie Arbeitsspeicher, Ein-/Ausgabe etc.

Darüber liegen Anwendungsprogramme. Wie Skype oder der Browser. Diese sind ja von programmieren entwickelt. Und der Compiler (Übersetzer) übersetzt sie im Endeffekt in Maschinencode, also quasi Folgen aus 0 und 1.

Und darüber liegt schon der Nutzer, der den Computer und damit Anwendung, Betriebssystem und Hardware benutzt.

Die Erklärung könnte ewig weiter gehen. Was aber noch wichtig ist, ist die theoretische Informatik. Die verfolgt eher mathematische Ansätze. Und ohne sie wäre das Ganze auch nicht denkbar. Da geht es um endliche Automaten, Touring-Maschinen usw. Aber das zu erklären ist eigentlich noch komplexer.

Woher ich das weiß:Studium / Ausbildung – Informatik studiert und mit PCs & Technik beschäftigt

fragenoderso302 
Fragesteller
 10.02.2022, 23:48

Danke dir vielmals :))

0
fragenoderso302 
Fragesteller
 10.02.2022, 23:51

Ich würde dir gerne den Stern geben, aber finde die Option nicht??

0
fragenoderso302 
Fragesteller
 10.02.2022, 23:55
@ranger1111

Eine ja, aber beantworte sie nicht wenn du dir dann wieder die Seele aus dem Leib schreiben musst. Wie genau werden Dateien gespeichert? Ich meine wie kann der Zustand von elektrischen Impulsen denn einfach beibehalten werden oder wieder draufgeladen werden?

0
ranger1111  11.02.2022, 00:00
@fragenoderso302

Ja, genau dazu müsste man Transistoren verstehen. Du kannst dir z.B. die SRAM Zelle anschauen:

"Static random-access memory – Wikipedia" https://de.m.wikipedia.org/wiki/Static_random-access_memory

Auf den HDDs dagegen wurden Daten durch magnetische Aufladung gespeichert. SSD funktionieren meist nach NAND flash Prinzip. Das ist eine digitale Schaltung, die auch auf Verwendung mehrerer Transistoren aufbaut.

Um Transistoren zu verstehen, muss man diesen blöden pn-Übergang verstehen, sowie den Arbeitspunkt usw. An besten ist es sogar, wenn man etwas Ahnung von Elektrochemie halt. Sind schon Wunderwerke, diese Halbleiter.

1

Das was dich so fasziniert scheint die Erfindung der Fotolithografie zu sein.

Klar, da gehört einiges mehr dazu, und die Herstellung von Halbleiterchips ist für sich enorm komplex, aber Fotolithografie heißt so viel wie, dass man eine Schablone im groß erstellt, und sie dann mit Hilfe von Licht auf eine Siliziumplatte die davor mit einem Photolack beschichtet wurde "projektiert". An den Stellen wo die Schablone das Licht durchgelassen hat, wurde der fotolack dann weggelasert, an allen anderen Stellen nicht. Dann kann man die stellen ohne Photolack weiter bearbeiten usw.

Dass dich das mit dem binärsysten so fasziniert dass dadurch so viele Pixel angesteuert wrtden ist viel mehr "Augenwischerei" 😂 wenn man in Relation sieht wie viele Transistoren sich mittlerweile auf Halbleitern befinden. In heutigen Computern sind das mehr als eine Milliarde, und wenn du dir jetzt Mal ausrechnest, mit dieser Anzahl an Transistoren "nur" knapp 2 Mio Bildpunkte anzusteuern ist im Vergleich ja sogar relativ wenig. Insofern das braucht dich nicht zu beeindrucken :)


Also die Antwort musste ich einen Tag nach hinten verschieben weil das doch etwas komplexer ist. Wie schon in anderen Antworten erwähnt ist es sehr wichtig für das Verständnis, die einzelnen Abstraktionsebenen zu betrachten. Hier mal alle wichtigen Ebenen von der Hardware und Software in PCs:

1. Grundlegende Elektronik

In digitalen Systemen gibt es prinzipiell zwei Spannungslevel, welche die Zustände 0 und 1 repräsentieren. In der Regel sind das 0V/Ground und die Versorgungsspannung (meist 5V, 3,3V oder noch deutlich niedriger bei CPUs um Strom zu sparen). Das ist ein großer Unterschied zu analogen Signalen, welche stufenlos sind. Das ist für eine ganz grundlegende Übertragung einfacher, jedoch hat man dabei immer Störeinflüsse, die das Signal verfälschen.

Um Logik zu implementieren verwendet man dabei Transistoren, welche man sich wie schon sonst überall erzählt wird als elektrische Schalter vorstellen kann. Also gibt einen Eingang, einen Ausgang und einen zusätzlichen Steuerungseingang. Man braucht unglaublich viele Transistoren für komplexe Schaltungen, jedoch kann man mit modernen Fotolithografieverfahren auch extrem kleine Transistoren fertigen (schon in der Größenordnung von Atomen). Der neue M1 Max hat beispielsweise 57 Milliarden Transistoren.

2. Logikgatter

Mit einzelnen Schaltern kann man noch nicht so viel anfangen, aber simple Logikgatter lassen sich relativ leicht umsetzen. Ein ODER-Gatter sind zum Beispiel einfach nur zwei parallele Transistoren. Die Gesamtzahl an verschiedenen Gattern, die man häufig verwendet, ist auch noch relativ überschaubar.

Das ganze beschränkt sich aber noch auf simple logische Operatoren.

3. Schaltnetze

Den Teil hier könnte man noch etwas weiter aufteilen. Mit Gattern kann man dann noch ein paar andere Schaltungen umsetzen, wie etwa einen 1-Bit Addierer. Schaltet man mehrere davon zusammen kann man einen Addierer für beliebig viele Bits bauen. Dabei kommen aber auch schon Einschränkungen auf, da solche Schaltungen entweder langsam oder sehr komplex (hohe Transistorzahl) sind.

Natürlich sind hier auch noch etliche andere Dinge möglich, wie etwas auch ein Invertierer Multiplexer (schaltet einen mehrere Eingänge an einen einzigen Ausgang).

Hier ist auch wichtig zu erwähnen, wie eine parallele Datenübertragung funktioniert. Mit einer einzigen Leitung kann man ja nur ein Bit übertragen. Legt man mehrere Leitungen nebeneinander (=> parallel) kann man komplexere Signale übertragen. Bei einfachen Ganzzahlen funktioniert das im Prinzip wie das Dezimalsystem, bloß dass die Stellen eine andere Wertigkeit haben. Die Stellen in dezimal repräsentieren 1, 10, 100, 1000 usw. während es in binär 1, 2, 4, 8, 16, 32 usw. sind.

Parallele Übertragungen werden aber heute meist in geschlossenen Systemen ohne Kabel verwendet, da die Geschwindigkeiten so hoch sind, dass das Timing zum Problem wird wenn die Leitungen nicht gleich lang sind. Busse über Kabel wie USB sind meist seriell, d.h. es wird lediglich über eine Leitung mit zeitlichem Versatz übertragen.

Im nächsten Schritt kann man aus den Schaltungen auch noch komplexere Dinge machen wie eine ALU (Arithmetic Logic Unit), was im Prinzip das Rechenwerk einer CPU ist. Dort gibt es mehrere Eingänge (mit z. B. jeweils 64 Leitungen bei einer 64 Bit CPU), einen Ausgang und mehrere Steuerleitungen, welche bestimmen was die ALU gerade machen soll (addieren, invertieren, usw.).

Dazu kann man sich auch einfache flüchtige Speicher bauen, die u. a. für den RAM genutzt werden.

4. Prozessoren

Hier eine Übersicht was die wichtigsten Komponenten sind (von http://simplecpudesign.com/simple_cpu_v1a_bread_board/index.html )

Bild zum Beitrag

Ein zentrale Neuerung ist hier noch, dass Prozessoren Taktgesteuert sind. D.h. anstatt kontinuierlich ein Ergebnis zu bestimmten Eingängen zu erzeugen, werden bestimmte Operationen nur zu spezifischen Zeiten in einem Taktzyklus ausgeführt. Das verhindert zum einen, dass durch die Verzögerungen unvorhersehbare Ergebnisse ausgegeben werden und es ermöglicht mehrere Befehle nacheinander abzuarbeiten.

Der Takt kommt dabei häufig von einem Quartzoszillator, welcher genauso funktioniert wie der einer Uhr, und geht dann an das Schaltwerk. Von dort aus kommen sämtliche Steuerleitungen, welche bestimmen was die Prozessorkomponenten tun sollen. Was getan werden soll steht dabei im Instruktionsregister in Form einen Datenwortes was der Architektur entspricht (64 Bit auf modernen CPUs). Darin wird eine ganze Reihe von Befehlen codiert, welche alles abdecken was eine CPU berechnen kann.

Im Prinzip wird dann in jedem Taktzyklus der Program Counter inkrementiert, wodurch der nächste Befehl aus dem Speicher geladen und ausgeführt wird. Falls Interesse besteht kann ich das auch noch etwas detaillierter erklären.

5. Maschinenbefehle

Jede CPU hat entsprechend einen Befehlssatz, welcher meist aus einigen Standardbefehlen für die Grundarchitektur (x86, ARM) sowie einigen Erweiterungen (wie für Multiplikation, oder Fließkommaoperationen) besteht. Das erklärt auch warum man native Programme nicht so ohne weiteres auf einer anderen Architektur nutzen kann.

Ein Befehl sieht dann beispielsweise so aus:

0011 0001 0000 1000 0010 1110 0000

Eine 32 Bit ARM CPU instruiert das dazu, Register r2 und r3 zu addieren und das Ergebnis in r1 zu speichern. Auf einer x86 CPU würde der Befehl dagegen etwas völlig anderes tun falls es denn überhaupt einer valider Befehl ist.

6. Assemblersprachen

Maschinenbefehle von Hand zu schreiben ist offensichtlich ein richtiger Krampf. Deshalb nutzt man stattdessen eine Assemblersprache, welche von einem Assembler in Maschinenbefehle konvertiert wird. Der obige Befehl sieht in ARM assembly beispielsweise so aus:

add r1, r2, r3

Das ist schon deutlich verständlicher. Somit ist ein Assembler eines der ersten Programme, welches man schreibt. Der Prozess sich hier in den Abstraktionsebenen hochzuarbeiten nennt sich in der Informatik Bootstrapping.

Hier stellt sich aber womöglich noch die Frage, wie man denn überhaupt Buchstaben darstellt. Im Grunde ist das ganz einfach, man zählt sie durch. Früher hat man sich dort auf ein Byte (=8 Bit) beschränkt und konnte nur 256 (=2^8) Symbole repräsentieren. Mittlerweile ist das ganze auch wieder deutlich komplexer.

7. Betriebssysteme

Ich schiebe das hier mal dazwischen, da es keinen richtigen Platz in diesen Abstraktionsebenen hat, aber dennoch wichtig ist.

Der Kernel ist hier der eigentlich interessante Teil. Das ist das einzige Programm, welches direkten Zugriff auf die Hardware hat. Der Kernel folglich als Aufgabe, Zugriffe auf die Hardware zu steuern. Dazu ist die Verwaltung von Prozessen eine wichtige Aufgabe. Dabei arbeitet der Kernel sehr eng mit vielen Hardwarefunktionen wie Speichervirtualisierung zusammen, um einzelne Prozesse voneinander zu isolieren und einen gemeinsame Nutzung der Hardware zu ermöglichen.

Denn im Prinzip entwickelt man Programme erst mal so, als hätten sie alleinigen Zugriff auf die Systemressourcen. Das funktioniert aber nicht, da eine CPU (mit einem Kern) beispielweise nur eine Sache gleichzeitig machen kann.

Das Betriebssystem ermöglicht es aber, jedem Prozess eine eigene virtuelle Umgebung zu schaffen, um diese Form der Entwicklung zu ermöglichen. Für alle Aktionen welche die Hardware betreffen muss ein Programm definierte Schnittstellen des Betriebssystems nutzen. Das ist auch einer der Hauptgründe, warum sich native Programme nicht einfach so auf völlig verschiedenen Betriebssystemen nutzen lassen

8. Hochsprachen

Höhere Programmiersprachen sind alles, was nicht 1:1 Maschinenbefehlen entspricht. Dazu ist ein Compiler nötig, welcher Anweisungen einer Programmiersprache in Maschinenbefehle übersetzt.

Viele Hochsprachen gehen aber noch viel weiter und bieten viele Möglichkeiten, um komplexere Programme deutlich einfacher zu schreiben. Beispielsweise sieht eine Funktion, die die Fakultät berechnet, in Python so aus:

def factorial(n):
   if n < 1:
       return 1
   else:
       return n * factorial(n - 1)

Einfache Programme auf modernen Systemen lassen sich damit sehr schnell umsetzen. Viele Programme sind aber selbst auf dieser Ebene noch unglaublich komplex und bestehen aus vielen Millionen Zeilen Code.

Schlusswort

Ich habe hier unglaublich viel verallgemeinert, um einen kurzen Überblick zu geben wie eine solche Komplexität erreichbar ist. Falls jemand grobe Fehler findet (habe nicht noch mal alles durchgelesen) oder Interesse an weiteren Aspekten besteht kann ich allerdings noch etwas nacharbeiten.

Auch habe ich lediglich im Detail betrachtet, was sich auf einer CPU abspielt. Ein Computer besteht noch aus wesentlich mehr Komponenten. Dazu habe ich auch Dinge wie Datenübetragungen zwischen Geräten kaum erklärt, da ich für sowas gerne auf die Funktionalität des Internets eingehen würde, was den Rahmen der Antwort bei Weitem sprengen würde.

 - (Computer, Gesundheit und Medizin, Technik)

Ja, es ist schwer zu überschauen, quasi auf einem Blick zu haben, wie man von simplen Ein/Aus Schaltern zu Hyperrealistischer 3D Grafik, und quasi zu ganzen (virtuellen) Welten kommt.

Dazu musst du dich Schritt für Schritt vortasten. Stromkreise, Schalter -> Logikbausteine (AND, OR, XOR, etc.) -> einfache Logikschaltkreise (Addierer, etc.) -> Prozessorgrundlagen, Speicher, etc. -> Software

Vor 30 Jahren war das alles noch einfacher zu begreifen. Damals kamen die "Homecomputer" auf. Einfache Systeme, die man tatsächlich noch von vorne bis hinten als einzelne Person verstehen konnte...

Vielleicht hilft dir dies ein wenig: hier baut jemand zu Fuß einen Computer - mit einfachen Kabeln und Logikbausteinen. Inklusive Grafikkarte!

Erster Teil der Playlist (du wirst vielleicht nicht alles im Detail verstehen, wie alles zusammenwirkt, aber vielleicht vermittelt dir das ein besseres "Gefühl", wie ein Computer arbeitet):

https://www.youtube.com/watch?v=kRlSFm519Bo


fragenoderso302 
Fragesteller
 10.02.2022, 23:49

Vielen Dank und einen schönen Abend/Nacht Nacht noch :)

0

Grundsätzlich gibt es kurze Strom Impulse und lange Strom Impulse. Das eine ist 1, das andere 0. Je nachdem wo dieser Impuls hingeht, wird er erfasst und von dem jeweiligen Teil wird ein neuer Strom Impuls los geschickt. Und das dann bis ganz viele Impulse zusammen führen und nen Code aus null und eins bilden welcher dann wiederum umgewandelt wird in Strom impulse die dann letztendlich zum Display gelangen. Ich hoffe ich konnte dir helfen :)


Leonieeee2005  10.02.2022, 23:40

Das ist jetzt sehr stark zusammengefasst natürlich

0
FireEraser  11.02.2022, 00:58

In den seltensten Fällen werden binäre Signale über die Länge von Impulsen übertragen. Es gibt zwar Signale mit Pulsweitenmodulation, dort beschreibt die Pulslänge bzw. der duty cycle allerdings eine komplexere Information.

In ganz simplen digitalen Systemen sind 0 und 1 lediglich zwei Spannunglevel.

2