Wie speichert und verarbeitet ein Computer Daten?

6 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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.


NoHumanBeing  09.01.2017, 15:15

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.

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.


Kieselsaeure  10.01.2017, 07:43

zum verständnis: long long int wäre dann 64bit integer

Kieselsaeure  10.01.2017, 07:42

oh ne sr die -1 ist unnötig. vorzeichenbit wird nur bei signed benötigt

Die beste Antwort könnte in den restlichen 4 Antworten stecken - registriere Dich jetzt!