Wie speichert und verarbeitet ein Computer Daten?
Ich weiß, dass man sich das Speichern vorstellen kann, wie bei einem See. Ist der See leer, also keine Spannung vorhanden, dann ist das 0. Ist der See voll, also Spannung vorhanden, dann ist das 1. Aber, wenn ich beispielsweise ein Word-Dokument öffne, dann sendet der Computer an den Bildschirm: dieses Pixel weiß, das auch weiß, das schwarz, usw. Aber was sendet der Computer an den Bildschirm, wenn das nächste jetzt blau ist, oder rot. Bei Weiß könnte ich mir vorstellen, dass es dann als 0 abgespeichert ist und Schwarz als 1, aber was sind dann die anderen Farben? Und woher weiß der Computer welches Pixel wo abgespeichert ist, wenn zB. Rot 01 wäre, woher weiß der Computer dann, das diese 0 und diese 1 jetzt auf einmal zusammenhängen? Ist das dann so, dass der Computer das geordnet abspeichert, damit er es wieder findet, oder ist das kreuz und quer, und der Computer hat eine Tabelle, wie eine Karte, mit der er weiß, welches Pixel mit welcher Farbe wo am Bildschirm angezeigt werden muss und welche Codes wie bei Rot (01) zusammenhängen? Der Computer denkt sich ja auch nicht, wenn ich eingebe "Text-Datei", ah okay, das ist eine Text-Datei, dann muss ich das jetzt so öffnen. Es könnte auch genauso gut ein Lied sein, dann müsste er es in Tönen wiedergeben.
Und warum, hat man noch nichts erfunden, dass der "See" nur halb voll ist oder dreiviertel voll, das wäre doch viel effektiver, dann wäre weiß 0, schwarz 1, rot 3, blau 4, usw.
Wäre gut, wenn mir das jemand, für einen Laien verständlich, erklären könnte und vielen Dank schon mal.
6 Antworten
Farbwerte werden z. B. mit 24 Bit pro Pixel gespeichert, das sind 3 Byte. Jedes Byte repräsentiert die Intensität eines Subpixels, der bestimmte Farben hat (rot, grün, blau). Da für jeden Subpixel ein Byte an Information zur Verfügung steht, kann dieser 256 verschiedene Intensitäten annehmen, wobei 0 ganz dunkel und 255 ganz hell bedeutet.
Ein paar Beispiele:
(0, 0, 0) = schwarz
(255, 0, 0) = rot
(0, 255, 0) = grün
(0, 0, 255) = blau
(255, 255, 0) = gelb (denn rot + grün = gelb)
(0, 255, 255) = türkis (denn grün + blau = türkis)
(255, 0, 255) = violett (denn rot + blau = violett)
(255, 255, 255) = weiß
Das sind nur "vollständig gesättigte" Farben. Indem man die Farben (als "Vektor") mit einem Skalar zwischen 0 und 1 multipliziert, kann man verschiedene Helligkeiten erreichen und indem man sie addiert, kann man sie mischen. So wäre z. B. ist (127, 127, 127) ein "halb helles" Grau ("halb schwarz, halb weiß", wenn man so möchte).
Die Festplatte selbst speichert Daten in Sektoren. Ein Sektor hat dabei eine bestimmte Größe, früher meist 512 Byte, inzwischen meist 4096 Byte. Der Computer kann der Festplatte nur sagen "gib mir mal den Sektor 5609". Von Dateien hat die Festplatte selbst keine Ahnung.
Wie Dateien organisiert sind, entscheidet ein Stück Software, der Dateisystemtreiber, der Bestandteil des Betriebssystems ist. Dieser merkt sich, welche Sektoren alloziert (mit Daten befüllt) und welche noch frei sind. Wenn Du eine Datei anlegst, nimmt er so viele Sektoren, wie er benötigt, um die enthaltenen Daten abzulegen, markiert sie als belegt und erstellt dann einen Dateisystemeintrag, eine so genannte I-Node (intermediate node), die besagt, dass bestimmte Sektoren (in einer bestimmten Reihenfolge) zu einer Datei gehören. Die I-Node enthält quasi eine Liste aller Sektornummern einer Datei.
Das gesamte Dateisystem, also auch Verzeichnisse, etc., bestehen ebenfalls aus I-Nodes, die auf andere I-Nodes verweisen können. So kann ein Verzeichnis Unterverzeichnisse und schließlich Dateien enthalten. Dateien sind I-Nodes, die eine Liste von Sektoren enthalten, in denen dann schließlich die Daten liegen. Wenn Du eine Datei löscht, werden die zugehören I-Nodes verworfen und die Sektoren wieder als "frei" markiert. Der Inhalt der Sektoren bleibt bei Festplatten in der Regel so lange erhalten, bis sie vom Dateisystemtreiber "zufällig" neu alloziert und mit anderen Daten beschrieben werden. Bei SSDs gibt es ein spezielles "TRIM"- bzw. "Discard"-Kommando, das die SSD anweist, die entsprechenden Speicherseiten tatsächlich zu löschen, sodass die Seiten anschließend nur noch Nullen enthalten.
Es gibt verschiedene datentypen für nummern. char/byte, short, int, long long int und auchnoch signed/unsigned. Der unterschied ist die maximale länge. Nimmst du zb um die zahl 1 darzustellen unnötigerweise den datentyp unsigned int (max länge 2^(32)-1) hast du 31nullen und danach eine 1. Die nullen könnte man sich ja theoretisch sparen allerdings würde das das system durcheinander werfen. Der prozessor wird dann theoretisch sowieso falls es ein 64bit prozessor ist noch mit 32bit mehr rechnen aber es wird weniger speicher reserviert als wenn jetzt long long int als datentyp gewählt wurde.
oh ne sr die -1 ist unnötig. vorzeichenbit wird nur bei signed benötigt
Achja, und die Pixeldaten für den Bildschirm liegen in einem bestimmten Speicherbereich im Grafikspeicher, dem so genannten "framebuffer".
Alles, was dort drin steht, erscheint auf Deinem Bildschirm.
Die Struktur des Framebuffers ist sehr einfach. In der Regel sind einfach die Farbwerte (z. B. 24 Bit, je 8 Bit für Rotanteil, dann Grünanteil, dann Blauanteil) hintereinander gespeichert. Also 24 Bit = 3 Byte pro Pixel, erstes Byte rot, zweites Byte grün, drittes Byte blau. Und dann kommt direkt der nächste Pixel, also das vierte Byte ist dann der Rotanteil des zweiten Pixels und so weiter.
Und die Pixel fangen im oberen linken Eck des Bildschirms an, dort sitzt der erste Pixel. Der nächste Pixel ist der unmittelbar rechts daneben und so weiter, bis die Zeile zuende ist. Der Pixel, der auf den gaaanz rechts in der ersten Zeile folgt ist dann der gaaanz linke Pixel in der zweiten Zeile. Und so geht das dann, bis alle Zeilen des Monitors abgedeckt sind.
Bei einem 1920x1080 (FullHD) Bild mit 24 Bit (3 Byte) Farbtiefe ist der gesamte Framebuffer somit 1920*1080*3 = 6 220 800 Byte groß.
Und ja, die Struktur ist auf der Ebene wirklich so trivial. ;-)
In der Regel gibt es von diesem "Framebuffer" zwei oder drei, von denen man einen als "Frontbuffer" und den anderen, bzw. die anderen beiden als "Backbuffer" bezeichnet.
Der "Frontbuffer" ist das, was gerade am Bildschirm angezeigt wird. In den "Backbuffer" berechnet die CPU oder GPU das Bild, das als nächstes angezeigt werden soll. Wenn diese Berechnung fertig ist, werden die beiden Puffer "vertauscht", was einfach nur dadurch passiert, dass eine Speicheradresse in einem Register verändert wird. Die Puffer müssen dafür nicht kopiert werden. Somit erreicht man, dass immer ein "vollständig berechnetes" Bild angezeigt werden kann und der Benutzer keine "unfertigen" Bilder zu sehen bekommt, weil der Prozessor an dem Bild noch rechnen muss.