Hardware-Tutorial oder Was macht diese Kiste mit meinem Code

Übersicht Sonstiges Smalltalk

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

DAK

Betreff: Hardware-Tutorial oder Was macht diese Kiste mit meinem Code

BeitragSo, Mai 26, 2013 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Dieses Tutorial hat nicht den Anspruch wirklich tiefgehend oder vollständig zu sein, es soll nur Anfängern einen grundlegenden Überblick über die Vorgänge im Computer geben, da es damit doch öfters Schwierigkeiten gibt.

EINS: Zahlensysteme
Jeder weiß, dass Computer irgendwas mit 0en und 1en machen. Was genau das ist, da steigen die meisten schon aus. Also mal zu der ersten Verwirrung: Computer verarbeiten nicht einzelne Nullen und Einsen, sondern immer ein Set davon auf einmal. Wie viel das ist, lässt sich an der Bit-Zahl des Computers ablesen. Sehr frühe Computer haben eine 4-Bit-Architektur gehabt, was heißt, dass sie vier Bit, oder vierstellige Zahlen aus Nullen und Einsen auf ein mal verarbeiten. Später gab es 8-Bit Computer (z.B. C64, Gameboy), 16-Bit Computer (z.B. Amiga), 32-Bit Computer (z.B. die 32-Bit-PCs, Gameboy Advance, die meisten Smartphones) und jetzt 64-Bit Computer (z.B. 64-Bit-PCs, XBOX One, PS4). Es gibt auch noch Computer, die wesentlich höhere Bitzahlen haben.

Was machen diese Bits?
(Siehe Binärsystem)
Das binäre Zahlensystem funktioniert wie das normale Dezimalsystem, das wir im Alltag verwenden, nur dass es statt den Ziffern 0-9 nur die Ziffern 0 und 1 verwendet. Nach 0 kommt 1, danach kommt 10, 11, 100, 101, 110, 111 und so weiter.

Die Bit-Zahl gibt an, wie viele Stellen so eine Zahl haben kann. Bei einem Vier-Bit-Computer bestehen Zahlen aus vier Binärstellen. Die niedrigste Zahl, die man so darstellen kann ist 0000 (0 in Dezimal), die höchste ist 1111 (15 in Dezimal).
Ein 8-Bit-Computer verwendet Zahlen aus acht Binärstellen. Die darstellbaren Ganzzahlen (oft Integer oder int genannt) gehen also von 00000000 (0 in Dezimal) bis 11111111 (255 in Dezimal). Analog funktioniert es mit höheren Bit-Anzahlen.
Was passiert, wenn wir eine größere Zahl als die Möglichen eingeben?
Beispiel für den 8-Bit-Rechner: 11111111 (255 in Dezimal) +1 = 100000000. Das ist eine Stelle zu lang, der linkeste Wert wird also ignoriert. Der Computer übernimmt nur die rechten acht Bits. Ergebnis: 00000000 (0 in Dezimal).

Soviel zu den Ganzzahlen, wie macht man Kommazahlen?
Dafür verwendet man eine Gleitkommadarstellung (oft float, wie in Floating Point Number), wie man sie vom Taschenrechner gewohnt ist. Dazu wird die Binärzahl in zwei Teile gespalten, den Exponent und die Mantisse.
Machen wir das zuerst im dezimalen Zahlensystem, danach erst im Binären.
Haben wir die Zahl 1234,5678 als Ausgangswert, dann lässt sie sich auch anschreiben als 1,2345678 * 1000 = 1,2345678 * 10^3. Dann ist 10^3 der Exponent und 1,2345678 die Mantisse. Im dezimalen Zahlensystem ist dabei die Basis vom Exponenten immer 10, also brauchen wir sie nicht abspeichern. Alles was wir speichern müssen ist 3 für den Exponenten und 1,2345678 als Mantisse. Wenn wir jetzt noch festlegen, dass das Komma immer an der ersten Stelle steht (was bei Gleitkommazahlen ja der Fall ist), dann brauchen wir uns als Mantisse nur noch 12345678 speichern, und wir haben wieder zwei Ganzzahlen.

Im binären Zahlensystem geht das ähnlich. Nehmen wir als Beispiel die Zahl 110,01. Umgeformt in die Gleitkommadarstellung haben wir jetzt 1,1001 * 10^10 (Merke 10 in Binär entspricht 2 in Dezimal). Der Exponent ist also 10 und die Mantisse 11001.
Gehen wir davon aus, das wir uns auf einem 8-Bit-Computer befinden, und definieren hier unser Gleitkommazahlensystem wie folgt:
Wir haben ja bei einem 8-Bit-Computer acht Binärstellen pro Zahl. Desweiteren müssen wir diesen Platz aufteilen in Platz für den Exponenten und die Mantisse. Das ist etwas, was meist schon die Computerarchitektur fix für uns übernimmt, die Bestimmung, wie das Aufgeteilt ist. Nehmen wir an, auf unserem fiktiven 8-Bit-Rechner sind die ersten drei Stellen der Exponent und die letzten fünf die Mantisse. Jetzt schaut das Ergebnis mit unsren Zahlen von oben dann so aus:
Exponent: 010 (ist 3 Bit lang, muss also links mit Nullen aufgefüllt werden)
Mantisse: 11001
Ergebnis: 01011001

Das System ist super, da man so eine sehr große Menge Zahlen darstellen kann. Das Problem ist nur, dass wir hier nur Platz für fünf Stellen in der Mantisse haben. Haben wir eine Zahl, mit sieben Stellen, dann werden die letzten beiden Stellen weggerundet und sind verloren. Darum eignen sich Float-Zahlen nicht für Zahlen, die genau sein sollten. Währungen werden deswegen immer in Ganzzahlen gespeichert (WoW z.B. speichert die Geldmenge eines Spielers als Ganzzahl in Kupfer).


Soviel zu den Zahlendarstellungen, aber
ZWEI: Aus was besteht so ein Computer überhaupt? (Logikfunktionen)
Die kleinsten Bausteine, aus denen Computer gebaut werden, sind Transistoren. Man hört oft von der Transistorzahl eines Computers, was ist das?
(Ich werde hier nicht darauf eingehen, wie ein Transistor funktioniert, sondern nur was er macht)
In Computern werden hauptsächlich Logik-Transistoren verwendet. Ein paar Logikfunktionen wird hier jeder kennen. Eine Logikfunktion kann zwei Werte annehmen: Wahr oder Falsch.
Ich werde hier drei Logikfunktionen vorstellen, UND/AND, ODER/OR und NICHT/NOT.

UND: a UND b ist genau dann wahr, wenn a wahr ist, und b wahr ist. Ansonsten ist es falsch.
(Die logische Aussage, "Die Sonne scheint UND es ist heiß" stimmt nur an einem sonnigen und heißen Tag)

ODER: a ODER b ist dann wahr, wenn a oder b oder beide wahr sind.
(Die logische Aussage, "Die Pflanze wächst, wenn es Sommer ist ODER wenn es warm ist" ist wahr, wenn es entweder Sommer ist, oder warm ist, oder Sommer UND warm ist)

NICHT: NICHT a ist dann wahr, wenn a falsch ist.
("Es ist NICHT Nacht" ist dann wahr, wenn "Es ist Nacht" falsch ist).

Aus diesen Funktionen kann man sich dann größere und komplexere Funktionen basteln, wie z.B. eine Addierschaltung, und aus vielen solchen komplexeren Schaltungen kann man sich dann einen ganzen Computer aufbauen.

So weit so gut, jetzt kann das Ding addieren, aber das ist immer noch weit weg von einem Computer.
DREI: Wie ist ein Prozessor aufgebaut?
Was ist ein Prozessor überhaupt?
Der Prozessor ist quasi das Herzstück eines Computers. Seine Hauptaufgaben umfassen:
-) Rechnen: (Fast) Alles was der Computer gerechnet braucht, passiert hier drinnen.
-) Programme ausführen: Die Programme, die wir hier schreiben werden, nach ein paar Verarbeitungsschritten, in den Prozessor eingespeist, und der führt sie dann aus.
Ich werde jetzt ein wenig über diese Aufgaben im Einzelnen schreiben:

Rechnen
Wir haben vorhin ja schon angerissen, wie das Addieren geht. Davon lassen sich dann fast alle anderen Rechenarten ableiten. Das Subtrahieren ist ja das Gleiche, wie das Addieren mit der negierten Zahl
a - b = a + (-b)
das geht also sehr einfach. Im binären Zahlensystem lässt sich die Multiplikation auch sehr einfach auf die Addition zurück führen und auch mit den anderen Rechenarten geht das. Und so baut man sich aus den vorhandenen Rechenarten die benötigten und fertig.
Darum brauchen wir uns als Programmierer allerdings nicht kümmern, das haben die Prozessorarchitekten schon alles für uns gemacht.
Diese Rechenfunktionen stecken in einem Bauteil des Prozessors namens ALU (Arithmetical Logical Unit). Daneben haben noch viele Prozessoren eine FPU (Floating Point Unit), die auf das Rechnen mit Gleitkommazahlen spezialisiert ist. Daneben gibt es noch eine Reihe von weiteren Bauteilen, die den Prozessor beim Rechnen unterstützen können.

Programme ausführen
Das wird jetzt etwas komplexer. Wir haben ja schon etabliert, dass der Prozessor eine ALU hat, die rechnen kann. Dazu hat er direkt im Prozessor eingebaut ein paar wenige Variablenplätze, die Register. Davon gibt es je nach Prozessor zwischen zwei und 32, selten auch mehr. In diesen Registern werden genau wie in den Variablen fast jeder Programmiersprache Zahlenwerte gespeichert. Da es aber nur so wenige Register gibt, sind diese Register keine Langzeitspeicher sondern nur dazu da, das zwischen zu speichern, was gerade verrechnet wird. Zahlen in den Registern können mittels ALU mit einander verrechnet werden.
Beispiel: Ich will das Ergebnis von 17+5 haben. Dann lade ich zuerst 17 in das Register R1 und 5 in das Register R2 (die Namen der Register unterscheiden sich von Prozessortyp zu Prozessortyp und sind hier nur als Beispiel zu nehmen).
Danach sage ich dem Prozessor "Lade R1 und R2 in die ALU und befehle der ALU diese beiden Zahlen zu addieren". Dann spuckt die ALU am anderen Ende die Zahl 22 raus, die ich dann nur noch dort hin speicher muss, wo ich sie hin will.

Jetzt will ich das alles nicht immer händisch machen, sonst wär's ja nicht mehr als ein Taschenrechner. Da kommt jetzt die Programmflusssteuerung rein. Der Prozessor bekommt dazu die Befehle einen nach dem Anderen hinein. Früher wurden dafür gerne Lochkarten verwendet (siehe http://www.youtube.com/watch?v=VnIovFDwjrc), die das ganze schön sichtbar machen. Jede Zeile auf so einer Lochkarte entspräche dann einem Befehl an den Prozessor. Heutzutage verwendet man Lochkarten normalerweise nicht mehr, aber die Grundprinzipien bleiben gleich. Über Datenleitungen wird der Prozessor mit den Befehlen versorgt, die er dann einen nach dem Anderen abarbeitet.

Der Prozessor versteht allerdings nur Maschinensprache, und nicht einfach jede Programmiersprache. Wenn man jetzt ein Programm in z.B. BlitzBasic schreibt, dann wird der Computer mit dem Source Code direkt nix anfangen können. Damit der Prozessor den Code versteht, muss er zuerst Kompiliert werden. Dabei wird der Code in Maschinensprache übersetzt. Diese Maschinensprache ist Prozessortypabhängig. So spricht z.B. der x64-Prozessor in einem Laptop eine andere Sprache als der ARM-Prozessor in einem Smartphone.
Jeder Befehl in Maschinensprache hat ein Opcode, als der es gepeichert wird. Für den Z80-Prozessor (eine Abart davon ist im GameBoy verwendet worden) gibt es u.a. folgende Befehle:

INC B - Erhöht Register B um 1
DEC A - Vermindert Register A um 1
SUB B - A = A-B

Diese Befehle haben folgende Opcodes:
INC B : 04
DEC A : 05
SUB B : 90

Der Programmcode
A = A-1
B = B+1
A = A-B

Würde in Z80-Maschinensprache so ausschauen
DEC A
INC B
SUB B

Und in Opcodes so:
05 04 90

Der Compiler übersetzt den Programmcode in Maschinensprache und dann in Opcodes. Diese werden dann so als Programm gespeichert und auch so an der Prozessor geschickt. Der Prozessor bekommt dann einen nach dem anderen diese Opcodes rein, und arbeitet sie dann ab. Also zuerst kommt 05 rein, und der Prozessor weiß, dass er jetzt A um 1 verringern soll und tut das. Dann kommt 04 rein und so weiter.

So, wir können Rechnen und Programme führt das Ding auch aus. Wozu brauchen wir den ganzen Rest der Hardware-Bausteine?
VIER: RAM / Hauptspeicher
Dass ein schnellerer Prozessor den Computer schneller macht, das weiß quasi jeder. Welchen Beitrag der RAM (=Random Access Memory = Les- und Schreibbarer Speicher) zur Leistung des Computers beiträgt, das wissen weit weniger.

Wir haben ja schon besprochen, dass der Prozessor Register hat, die Zahlenwerte zwischenspeichern können, allerdings gibt es ja von denen nur sehr wenige. Wir haben da im besten Fall ein paar hundert Bit Speicher (zur Erinnerung: 8 Bit = 1 Byte). Das ist natürlich bei weitem zu wenig, um damit heutzutage, wo die meisten Spiele mehrere Gigabyte an Daten haben, irgendetwas Sinnvolles anzufangen.
Jetzt ist die Frage, wie man das Problem lösen kann. Mehr Register wären naheliegend, erweisen sich aber nach kurzem Nachdenken als unpraktikabel. Gründe wären u.A. folgende:

-) Register müssen extrem schnell sein, und werden deswegen in einer passenden Bauweise gebaut. Diese Bauweise kostet mehrere hundert Euro pro Megabyte und verbraucht sehr viel Platz.
-) Die Anzahl der Register ist fix in der Architektur des Prozessors vorgegeben. Um die Registeranzahl zu verändern bräuchte es eine veränderte Architektur, auf der dann wohl keine alten Programme mehr laufen. Die x86-Architektur, die von den meisten Computern unterstützt wird, existiert beinahe unverändert seit 1978. Solche Architekturen ändern heißt alle alten Programme wegschmeißen zu können.
-) Hat man viele Register braucht man (zum Adressieren welche Rechenoperation mit welchen Registern passiert) größere Opcodes. Statt zwei Hexadezimalstellen (=8 Bit) pro Opcode bräuchte man dann weit aus mehr Stellen, was die Verarbeitung verlangsamen würde.

Um dem auszuweichen hat man den RAM-Speicher erfunden. Dieser Speicher ist anders aufgebaut, als die Register, wodurch er weniger Platz braucht und deutlich billiger ist (DDR3-RAM-Module gibt es im Moment schon ab einen halben Cent das Megabyte). Dafür ist er etwas langsamer.
Außerdem ist dieser Speicher nicht mehr im Prozessor, was mehrere Vorteile hat. Man kann ihn austauschen (also z.B. einen besseren RAM einbauen um den Computer schneller zu machen) ohne den Prozessor wechseln zu müssen. Außerdem hat er somit nichts mehr mit der Architektur des Prozessors zu tun.

Jetzt aber noch mal zu den praktischen Effekten des RAM-Speichers.
Wie wirkt sich der RAM auf meinen Computer aus?
Der RAM heißt auch Arbeitsspeicher, weil dort (im Gegensatz zu einer Festplatte) nichts permanent gespeichert wird. Verliert der RAM den Strom (z.B. weil der Computer abgedreht wurde), dann ist der Inhalt weg.
Im RAM wird also nur das zwischengespeichert, was der Computer gerade jetzt bearbeitet. Er holt sich also von der Festplatte (die wesentlich langsamer ist als der RAM) die Daten, die für das Abspielen eines Programmes braucht, und legt sie im RAM ab. Von hier aus werden sie dann nach einander in den Prozessor gefüttert und von ihm ausgeführt.

Beispiel dafür, wo man das gut sehen kann: Wenn man ein größeres Spiel startet, dann gibt es ja meist einen Ladebildschirm, der fast immer viel zu lang da bleibt. Hier lädt der Computer alle Daten über die Spielewelt in den RAM. Sobald alles dort ist, kann das Spiel gestartet werden. Das rennt jetzt komplett aus dem RAM.

Hier kann man sich schon denken, wofür man mehr RAM braucht: was macht der Computer, wenn er mehr Daten braucht, als im RAM Platz haben?
Beispiel: Das Spiel braucht 2 GB Platz im RAM, man hat aber nur 1 GB. Die Daten müssen immernoch wo gespeichert werden. In dem Fall hat Windows (und alle anderen sinnvollen Betriebssysteme) die Auslagerungsdatei (heißt bei anderen Betriebssystemen anders, tut aber das Gleiche). Diese Datei ist quasi eine RAM-Erweiterung auf der Festplatte. Was nicht mehr in den RAM passt, muss auf die Platte ausgelagert werden. Und die ist bekanntlich extrem langsam im Vergleich zum RAM.


Ich habe vor ein paar Wochen einen alten XP-Computer mit 512 MB RAM bearbeiten müssen. Direkt nach dem Booten, bevor man noch irgend welche Programme offen gehabt hat, war der Computer extrem flott. Sobald aber die magische Grenze von 512 MB RAM voll war (so nach zwei offenen Tabs im Browser) war er aber plötzlich extrem langsam.

Mehr RAM erlaubt also mehr offene Programme.



Die Festplatte haben wir schon kurz angerissen, was macht die genau?
FÜNF: Festplatten und SSD
Der RAM haben wir ja gesagt, ist ein unglaublich schneller Speicher und den gibt es inzwischen auch schon in sehr groß. Wozu brauchen wir eine Festplatte?
Die Festplatte hat im Vergleich zum RAM drei Vorteile:
-) Sie ist sehr billig (gibt es im Moment schon ab €32 pro Terrabyte. Der billigste RAM den ich finde würde €4444 pro Terrabyte kosten)
-) Es passt extrem viel Speicher auf wenig Platz (Eine 3.5"-Festplatte für €150 fasst 4 TB)
-) Die Daten bleiben vorhanden, wenn der Strom aus ist.

Zieht man bei einem Computer den Stecker, dann braucht es ein paar Sekunden bis die Kondensatoren im RAM sich entladen und die Daten darin sind alle weg. Das ist der Grund, warum sich ein Computer, wenn man ihm den Strom nimmt und ihn wieder ansteckt, neu starten muss. Alle Programme die offen waren (=sich im RAM befunden haben) sind weg. Alles was bleibt ist, was auf der Festplatte gespeichert war.

Alte Windows Mobile-Geräte (ich glaube alles vor Version 5) haben keinen permanenten Speicher gehabt, sondern alle Daten im RAM gespeichert. Ist dem Gerät der Strom ausgegangen, dann war es automatisch auf Werkszustand.

Um das zu vermeiden, braucht es hald eine Festplatte.

Wie funktioniert so eine Festplatte?
Zuerst zum generellen Aufbau von so einem Ding: In der Festplatte befinden sich mehere Scheiben (nicht unähnlich einer CD oder DVD), die an einer gemeinsamen Achse rotieren. Diese Scheiben können aus verschiedenen Materialien gemacht werden. Oft nimmt man Aluminium-Legierungen, aber z.B. in den IBM-Festplatten von 2000-2002 wurde sogar Glas als Grundmaterial der Scheiben verwendet!
Auf diese Scheiben werden dann eine magnetisierbare Schicht aus Eisenoxid oder Kobalt aufgetragen. Diese Spuren haben die Eigenschaft, dass man einzelne Stellen darauf verschieden magnetisieren kann.
Für jede dieser Spule gibt es zwei Schreib-/Leseköpfe (einen für die Unterseite, einen für die Oberseite), sie bei modernen Festplatten nur noch wenige Nanometer von der Scheibe entfernt sind.
Diese Köpfe verhalten sich ähnlich wie der Lesekopf eines Schallplattenspielers. Auf der Festplatte sind Spuren, in denen die Daten gespeichert sind.
Zum Lesen schwebt der Kopf über die zu lesende Spur und nimmt dabei die Magnetisierungszustände der einzelnen Speicherblöcke auf der Spur auf.
Das Schreiben geht ähnlich, nur übt der Kopf dabei selbst magnetischen "Druck" auf die Spur aus, um so den Magnetisierungszustand der Speicherzelle zu ändern.

Vor fünfzehn Jahren hat man die Präzision die dafür erforderlich war hiermit vergleichen können:
Stell dir vor, eine 747 fliegt mit Überschallgeschwindigkeit einen Meter über dem Boden und sammelt dabei zielgerichtet einzelne Schafe aus einer Herde auf.

Inzwischen sind die Platten aber schneller, der Abstand zwischen Kopf und Platte geringer, und die einzelnen Speicherblöcke um ein Vielfaches kleiner als damals.

Hier zeigt sich aber auch ein weiterer Nachteil der Festplatte zum RAM:
Wenn die Daten, die man lesen will, alle direkt nach einander gespeichert sind, dann kann die Festplatte sie recht einfach ablesen: einfach die Spur gerade aus weiter lesen und fertig.
Wenn die Daten allerdings wild über die Platte verstreut sind (das ist der Fall, wenn man viele kleine Dateien lesen will, oder wenn die Dateien stark fragmentiert sind), dann muss der Kopf immer hin und her springen, um die einzelnen Dateien einzusammeln, und das braucht sehr viel Zeit.
Das heißt Sequentieller Zugriff geht halbwegs schnell, aber zufälliger Zugriff (Random Access) ist extrem langsam.
Beim RAM (=Random Access Memory) macht es keinen Unterschied, ob die Daten alle am gleichen Eck liegen, oder weit verstreut.


Es gibt aber noch eine andere (ok, es gibt viele andere, aber nur eine momentan relevante) Technik, mit der man Daten ohne Strom speichern kann, und das ist SSD.
Was ist SSD?
SSD kommt aus einem komplett anderen Eck der Speichertechnik, darum werde ich mal ausholen.
Da gab es ursprünglich einen Speichertyp namens ROM. ROM steht für Read Only Memory. Ein gutes Beispiel für ROM sind die ganz alten Gameboy-Spiele. Diese Dinger haben keine Möglichkeit gehabt, darauf Daten zu speichern (erst später gab es dafür Erweiterungen). Das liegt daran, dass sie nur ROM-Speicher gehabt haben. Beim ROM war der Inhalt des Speichers fix verdrahtet. Ab Werk wird genau das reingelötet, was drauf stehen soll.
Das ist aber aufwändig zu machen, da die Fabrik für jedenen verschiedenen ROM-Inhalt umgestellt werden muss. Kleinserienproduktion oder gar Einzelanfertigungen sind absolut unleistbar.
Darum hat man dann den PROM (Programmable ROM) entwickelt. Der PROM kann ein mal programmiert, also elektronisch beschrieben werden.
Man kann also Millionen unprogrammierter ROMs herstellen, und die Daten kann man dann später mit einer einfachen Programmierschaltung draufschreiben.
Möchte man aber die Daten ändern (z.B. Programmupdate), dann ging das nicht, also hat man die EPROMs (Eraseable PROM) entwickelt. Ihr merkts schon, da kommt immer ein Buchstabe dazu Wink
Die EPROMs hat man löschen können, indem man sie ein paar Minuten unter UV-Licht gehalten hat. Danach hat man sie neu beschreiben können. Das hat man so 100-200 Mal machen können, dann war das Ding hin.
Das ist allerdings auch blöd, weil da muss man das Ding immer aus dem Computer ausbauen, und wer hat schon eine UV-Lampe? Also hat man den EEPROM (Electronically Eraseable PROM) entwickelt. Das Ding lässt sich per elektronischer Schaltung löschen. Das Löschen geht also direkt in der Programmierschaltung. Es gibt immer noch eine Beschränkung, wie oft das geht, aber die ist irgendwo bei einer Million Schreibvorgänge. Allerdings braucht auch hier das Löschen noch ewig lange, weil bestenfalls ein paar Bytes auf ein mal gelöscht werden, also hat man den Flash-Speicher entwickelt (da war ihnen der Name wohl lang genug Wink ). Der Unterschied zwischen Falsh und EEPROM ist der, dass beim Flash-Speicher die Daten Blockweise gelöscht werden. Die Daten sind also in Speicherblöcke unterteilt, und die werden dann als ganzer Block gelöscht und neu geschrieben.
Flash-Speicher verwendet man heute in SSDs, USB-Sticks, Speicherkarten, Handyspeicher und vielem anderen.

Flash hat immer noch einen Geschwindigkeitsvorteil bei sequentiellen Daten, da dann der ganze Block gelöscht und geschrieben oder gelesen werden kann, allerdings ist dieser mangels mechanischer Teile, die erst in Position gebracht werden müssten, viel geringer als bei der Festplatte.

Wie schnell sind die alle im Vergleich?
(Die Werte zählen für Festplatten und SSD bei sequentiellen Daten)
Top-Festplatten schaffen rund um die 200 - 300 MB/s.
Top-SSDs schaffen zwischen 500 MB/s - 2 GB/s
Ein eher durchschnittlicher DDR3-1600 schafft 25.6 GB/s
GDDR5-RAM, wie er auf Grafikkarten und auch der PS4 verwendet wird, schafft bis zu 160 GB/s.



Und wenn wir schon bei Grafikkarten sind:
SECHS: Wozu brauche ich eine Grafikkarte?
Um diese Frage zu beantworten, lasst mich wieder ein wenig ausholen.
Den meisten wird beim Programmieren schon das Wort Buffer im Zusammenhang mit BackBuffer oder Double Buffering untergekommen sein.
Schaut man ein wenig in der Zeit zurück, dann sieht man, dass viele Computer keine speziellen Bildschirme verwenden, sondern man, wie z.B. beim C64 nur einen normalen Fernseher an den Computer gesteckt hat. Ein Fernseher nimmt von Haus aus nur analoge Signale, wie sie per Funk von den Fernsehstationen kommen. Der hat keinen Framebuffer, in den man hineinzeichnen hat können und RGB-Werte hat der auch nicht verstanden. Man hat also ein Gerät gebraucht, dass:
-) Einen Buffer (so quasi eine Zeichenfläche) hat, in dem man das Bild aufbauen kann, bevor man es am Bildschirm anzeigt
-) Diese digitalen Farbwerte in eine analoge Frequenz umwandelt, die der Fernseher versteht.

Ursprünglich ist das von der CPU übernommen worden, allerdings ist diese nicht darauf spezialisiert und deswegen langsam und in ihrem Funktionsumfang beschränkt.

Ein gutes Beispiel von CPU-Rendering versus Grafikkarten-Rendering ist Blitz2D versus BlitzMax. Blitz2D rendert nur per CPU. Der Effekt ist, dass da selbst moderne Prozessoren an ein paar tausend Vierecken pro Sekunde scheitern. Auch so Effekte wie Alpha-Transparenz und Bilder drehen sind extrem langsam. Komplexere Effekte sind teils gar nicht in Echtzeit möglich.

Deswegen wurden zuerst spezialisierte 2D-Grafikkarten gebaut. Diese Grafikkarten haben den Prozessor entlastet und wesentlich bessere und schnellere Ergebnisse geliefert als der Prozessor selbst es könnte. Der Funktionsumfang dieser Grafikkarten war noch sehr beschränkt. Ihr Herzstück war der RAMDAC (Random Acces Memory Digital/Analog Converter). Der Name des RAMDACs erklärt eigentlich schon alles was er tut. Er hat einen RAM in dem der Framebuffer liegt (da wird das Bild im digitalen Zustand gespeichert), sowie einen Digital-Analog-Konverter, der dieses digital gespeicherte Bild in Analoge Bildsignale für den Bildschirm umwandelt. Der RAMDAC hat bis heute überlebt und existiert in jeder Grafikkarte, mit einem analogen Ausgang (VGA ist zum Beispiel ein analoger Ausgang). Dazu gab es simple Funktionen wie den Blitter, der extrem schnell Datenblöcke verschieben oder kopieren konnte. Damit konnte man Sprites (=kleine 2D-Bilder, z.B. verwendet für Spielerfiguren) schnell über den Bildschirm schieben.

In den 90ern sind dann 3D-Spiele richtig aufgekommen. Hier wurde zuerst wieder alles 3D-Rendering vom Prozessor übernommen und dann nur noch von der Grafikkarte gezeichnet. Das das ineffizient war brauche ich gar nicht zu betonen. Viele dieser alten Spiele (z.B. das originale Unreal Tournament) bieten die Option an, nur per CPU zu rendern. Ist wirklich interessant dabei den Unterschied zwischen Hardware-Rendering (per Grafikkarte) und Software-Rendering (per CPU) zu sehen.

Dann kamen auch bald schon die ersten 3D-Unterstützungskarten. Anders als moderne Grafikkarten war das aber keine echte Grafikkarte. Diese Karten haben die 3D-Information von der CPU bekommen (also die Modelle, Texturen und die Positionen von allem), haben sie in 3D gerendert um daraus ein 2D-Bild zu bekommen, welches sie dann an die 2D-Grafikkarte weitergeleitet haben, die das dann per RAMDAC in analoge Bildsignale umgewandelt hat und das alles an den Bildschirm geschickt hat. 2D-Elemente, wie z.B. die GUI, sind von der CPU aber direkt an die 2D-Grafikkarte geschickt worden. Die Voodoo 1 war eine der ersten Karten, die so gearbeitet hat.

Mit der Voodoo Banshee (Nachfolger der Voodoo 2 und Vorläufer der Voodoo 3) sind dann der 2D- und der 3D-Chip kombiniert worden um die eine der ersten echten 3D-Grafikkarten zu formen, wie wir sie heute kennen.

Die Funktionen von 2D-Karten sind ja leicht verständlich, aber ...
Was kann so eine 3D-Karte?
Die erste Aufgabe der 3D-Karten war es, die 3D-Koordinaten der Spielwelt auf die 2D-Koordinaten des Bildschirms umzulegen. Das geht ganz einfach und hat schon die CPU des C64 bei Spielen wie Elite recht gut selbst hin bekommen. Dafür braucht es keine Hardwareunterstützung.
Was aber auffällt, wenn man sich 3D-Spiele für den C64 anschaut ist, dass es dort nur Kanten gibt, keine Flächen. Von den 3D-Objekten sieht man nur die Umrisse (Stichwort Wireframe). Die nächste Aufgabe, die diese 3D-Karten also bekommen haben, war das schnelle Füllen von Dreiecken. Dreiecke haben nämlich mehrere Vorteile gegenüber anderer Formen, wenn es zu 3D kommt:
-) Man kann aus Dreiecken die Oberfläche so ziemlich jeden Objekts aufbauen (solang es nicht perfekt rund sein muss)
-) Ihre Grenzen lassen sich recht leicht berechnen (um zu überprüfen, ob ein Pixel im Dreieck liegt und somit gefüllt werden muss oder nicht)
-) Vertex-Beleuchtung geht damit extrem einfach, im Vergleich zu anderen Formen, aber dazu später mehr.

Es gab vor der Voodoo 1 eine Grafikkarte von Nvidia, die NV1, die statt der Dreiecke gebogene Oberflächen verwendet hat, die zwar perfekt für runde Oberflächen sind, aber für den Programmierer schwer zu bändigen sind, und sich deswegen nicht durchgesetzt haben.

Jetzt war es schon möglich, Objekte aus einfarbigen Flächen darzustellen. Der nächste Schritt war recht klar: Texturen. Bei jedem Pixel, das gefüllt wird, wird überprüft, welches Pixel der Textur an dem Punkt sein muss, und der wird dann auf das zu füllende Pixel übertragen.

Danach kam die Vertex-Beleuchtung. Als Vertices bezeichnet man die Eckpunkte der Dreiecke. Man berechnet, welche Lichtfarbe wie stark auf jeden der drei Eckpunkte einstrahlt und interpoliert, wie sich dieses Licht auf die Punkte auf dem Dreieck auswirken.

Zu diesen Basiseffekten sind nach und nach haufenweise weitere Effekte gekommen, auf die ich hier nicht eingehen will.

Später kamen dann noch Spezialfunktionen wie CUDA (= Compute Unified Device Architecture) dazu gekommen, mit der man die Grafikkarte nicht nur für Grafik-Berechnungen, sondern für generelle Berechnungen einsetzen kann. Ein Beispiel für diese Verwendung ist PhysX, mit dessen Hilfe die Physikberechnungen in Spielen von der Grafikkarte übernommen werden können.



SIEBEN: Treiber
Was ist ein Treiber?
Einfach gesagt, ein Treiber sagt dem Betriebssystem, was es mit bestimmter Hardware anzufangen hat.

Ich habe vor ein paar Jahren ein bisschen Hardware gebastelt. Nichts Großartiges. Was es war, war ein Versuch eines Elektronischen Schlagzeugs, das ich über den Parallelport an den Computer gehängt habe (Der Parallelport ist eine alte Schnittstelle, die vor USB für Drucker verwendet wurde, und die die meisten Computer nicht mehr haben). Jetzt hat das Betriebssystem zwar gewusst, wie es mit einem Drucker am Parallelport klar kommt, nicht aber mit einem Schlagzeug (das Schlagzeug war ein extrem simples Design, was im Grunde auf ein paar Taster, die man per Klöppel auslösen hat können, hinausgelaufen ist). Von selbst lernt das System soetwas nicht, also habe ich dafür meinen eigenen Treiber schreiben müssen. Der Treiber hat den Stromzustand der einzelnen Pins des Parallelports ausgelesen, und je nach dem, an welchen Pins Strom war (=> welches Schlagzeugelement angeschlagen worden ist), hat er dann die passenden Töne abgespielt.

Nicht viel anders funktionieren die ganzen Treiber, die man nach dem Neuaufsetzen des Computers installieren muss.
Windows (und auch die meisten anderen Betriebssysteme) bringt von sich aus eine ganze Reihe an Klassentreibern mit. Ein Klassentreiber ist eine ganz tolle Sache. Normale Treiber gehen nur für ein bestimmtes Gerät. Habe ich zum Beispiel einen Treiber für eine bestimmte Webcam, dann wird der Treiber nur für Webcams dieser Art funktionieren. Ein Klassentreiber funktioniert für eine ganze Geräteklasse. Ein gutes Beispiel dafür sind die USB-Speichersticks. Man kann normalerweise einen beliebigen USB-Speicherstick an einen Windows-Computer anschließen, ohne vorher einen Treiber dafür installieren zu müssen. Das liegt nicht daran, dass der Stick einen Treiber braucht, sondern daran, dass Windows einen Klassentreiber für alle USB-Sticks hat (Windows vor 2000, also z.B. Windows 98 hatte noch keinen Klassentreiber für USB-Sticks, das heißt, für jeden Stick hat man erst per CD einen Treiber installieren müssen).

Jetzt die Frage, wenn man Klassentreiber hat, wozu dann noch spezielle Treiber verwenden?
Das Problem hierbei ist, dass Klassentreiber nur den gemeinsamen Nenner zwischen allen Geräten, die unterstützt werden, abdecken kann. Dafür sind Grafikkarten ein gutes Beispiel. Windows hat einen Klassentreiber für Grafikkarten, der es ihm ermöglicht, auch ohne dem Installieren eines bestimmten Treibers Bild auf den Schirm zu bringen. Versucht man allerdings ohne speziellen Treiber irgendwelche Spiele zu spielen, dann merkt man den Unterschied recht schnell. Selbst die beste Grafikkarte am Markt wird ohne ihren speziellen Treiber keine auch nur halbwegs sinnvolle Leistung bringen.

Wenn man an das Kapitel über Grafikkarten zurück denkt, dann kann man sich erinnern, dass Grafikkarten ja extrem viele verschiedene Funktionen haben können. Mit jeder Generation kommen wieder ein Dutzend neuer Features oder mehr dazu, mit denen versucht wird, die Konkurrenz auszustechen. Das ist auch gut so. Das Problem dabei ist aber, dass die unterstützten Features der verschiedenen Karten sich sehr stark von einander unterscheiden. Der Klassentreiber unterstützt aber nur die Funktionen, die ALLE Grafikkarten, die auf diesem Betriebssystem rennen sollen, unterstützen, und das ist nicht viel. Deswegen braucht jede Grafikkarte ihren eigenen Treiber um ihr volles Potential zu erreichen. Vor allem die Grafikkarten-Hersteller aktualisieren ihre Treiber regelmäßig (meist mehrmals im Quartal), um mehr Leistung aus der Hardware zu holen. Dabei gibt es oft Leistungssteigerungen von bis zu 50% mit einem neuen Treiber. Treiber updaten ist also sehr empfohlen!

Nvidia hat mit den Treibern einen interessanten Weg eingeschlagen (ich weiß nicht, ob AMD das auch tut, hab nur Nvidia). Sie kombinieren die Ansätze des Klassentreibers und des speziellen Treibers. Schaut man auf ihre Homepage, dann gibt es dort nur einen einzigen Treiber zum herunterladen (zumindest für modernere Grafikkarten). Dieser fungiert wie ein Klassentreiber auf der einen Seite, indem man ihn für die meisten Nvidia-Grafikkarten einsetzen kann, besteht aber eigentlich aus den Treibern für jede einzelne Grafikkarte, weswegen er nicht wirklich ein Klassentreiber ist (er könnte z.B. nicht ohne Update eine neue Karte unterstützen, für die er noch gar nicht vorgesehen war), sondern eher eine Sammlung von speziellen Treibern.

Eine Frage noch:
Wie kommuniziert der Prozessor, auf dem der Treiber als Programm läuft, mit der Hardware?
Gute Frage. Wie das genau passiert kann von Prozessor zu Prozessor verschieden sein, aber ich werde mal als Beispiel wieder den C64 heranziehen (ich mag den Computer, der ist so schön einfach). Ähnliche Systeme wie beim C64 werden auch bei vielen anderen Computern (wie auch dem x86) verwendet, also passt das gut.
Hierfür müssen wir wieder einen Sprung zurück zum RAM machen, weil der wird hier wichtig. Jede Speicherzelle im RAM hat eine Adresse, über die sie aufgerufen werden kann. In BlitzBasic sehen wir davon nichts mehr, da der Compiler das für uns übernimmt, aber wir können uns das so vorstellen, dass jede Variable die wir machen, auf eine bestimme Adresse im RAM zeigt, an der dann der Wert abgelegt ist.
Der RAM des C64 ist unterteilt in "normale" Speicherbereiche, die nur zum Lagern von Daten dienen, und dann aber auch spezielle Speicherbereiche, die von der Hardware gelesen und beschrieben werden können. So wird in der Speicherzelle 53281 die Hintergrundfarbe im Textmodus abgelegt. Schreibe ich also mit meinem Programm an die Adresse 53281 z.B. eine 1, dann wird die Hintergrundfarbe auf Weiß gesetzt. Der VIC (=Video Interface Chip, die 2D-Grafikkarte des C64) liest dann regelmäßig diesen Wert aus, und passt seine Bilddarstellung daran an. Das geht natürlich genauso in die andere Richtung, dass z.B. Tastatur, wenn eine Taste gedrückt wird, den Scancode der Taste an einer bestimmten Adresse ablegt, so dass sich der Prozessor diesen Wert abholen kann.



ACHT: USB und andere Datenschläuche
USB steht für Universal Serial Bus. Lass uns die Bedeutung des Namens Wort für Wort durchgehen.

Universal
Der USB hat im Vergleich zu vielen anderen Schnittstellen einen Vorteil: er ist universell, man kann dort nahezu alles anstecken. An den USB kann man Tastaturen und Mäuse anstecken, aber auch Internet, Massenspeicher, Handies, externe Soundkarten, Ventilatoren, Teetassenheizplatten und steuerbare Schaumstoff-Raketenwerfer (die Dinger gibt's mit Webcam zum Zielen und Steuerung per Internet!).
Die meisten Schnittstellen werden mit genau einem Zweck designt: Der Ethernet-Stecker ist für Internet da, der VGA-Ausgang gibt Bild, an die PS/2-Stecker kommen Maus und Tastatur und der Klinkenstecker ist für die Kopfhörer da. Einerseits ist das praktisch, da man weiß, wo man was anstecken muss, und sich die Stecker auf genau die Verwendung spezialisieren können, andererseits beschränkt das die ansteckbare Hardware. Hat man zum Beispiel nur Klinkenstecker und VGA-Out, sowie die PS/2-Stecker, wo sollte man dann den Raketenwerfer anstecken?
Das heißt, wenn Hardware nicht in das Standard-Schema fällt, dann kann sie bei einer nicht-universellen Schnittstelle nicht verwendet werden.

Außerdem, was wenn ich mal zwei Drucker anstecken muss, und dafür keine Maus brauche?

Der Vorläufer des USB, der Serielle Port war auch schon recht universell, aber USB hat es da noch wesentlich verbessert.

Serial
Der USB ist eine serielle Schnittstelle. Was heißt das? Man kann Daten im Grunde auf zwei Arten übertragen: Parallel oder Seriell. Parallel bedeutet, wenn wir 8-Bit-Wörter übertragen wollen, dann werden immer 8 Bit auf einmal übertragen. Seriell bedeut, diese 8 Bit werden eines nach dem anderen übertragen. Der Empfänger muss sie nach einander auslesen und wieder richtig zusammenstecken, um die 8-Bit-Wörter zu bekommen, die der Sender ihm geschickt hat.
Die Hauptunterschiede für den Nutzer sind, dass die parallele Übertragung zwar schneller ist, aber dafür wesentlich größere Stecker braucht, da für jedes Bit im Wort eine weitere Datenleitung gebraucht wird. Beim EPP (Enhanced Parallel Port: die alte Drucker-Parallelschnittstelle) gibt es dazu noch bidirektionale Kommunikation, also 8 Leitungen von PC zu Drucker plus 8 Leitungen vom Drucker zum PC. Dazu kamen noch 8 Erdungsleitungen (um die Stromkreise für die Datenleitungen zu schließen) plus eine Leitung, die den Takt angibt und schon braucht der Stecker 25 Pins. Der Stecker war (rein aus der Erinnerung geschätzt) gut über 5 cm breit. Also nicht gerade das Beste für einen handlichen USB-Stick.
Serielle Übertragung ist zwar etwas langsamer, dafür aber wesentlich schlanker. Alles, was man braucht, ist eine Leitung für Daten, eine Leitung für den Takt und eine Leitung als Erdung. Dazu hat der USB auch noch eine Leitung für 5 Volt-Stomversorgung. Vier Pins und man hat eine schön laufende, bidirektionale Verbindung.

Bus
Der Name Bus für Datenbusse kommt tatsächlich vom Bus, dem Verkehrsmittel, weil die Analogie wirklich passt.
Eine normale 1 zu 1 Datenverbindung läuft so ab: wir haben einen Sender und einen Empfänger, außerdem haben wir eine Leitung, die von dem Sender zu dem Empfänger geht. Auf dieser Leitung kommunizieren wirklich nur diese beiden. Will der Sender dem Empfänger was schicken, dann kann er das über diese Leitung tun. Soll der Empfänger zurück schicken können, dann brauchen wir eine zweite Leitung vom Empfänger zum Sender. Haben wir mehrere Empfänger, dann brauchen wir Leitungen von jedem Sender zu jedem Empfänger. Das sind, mit genügend Teilnehmern, wirklich viele Leitungen, die man da braucht. Kompliziert wird es aber wirklich dann, wenn wir eine variable Anzahl Teilnehmer haben (das passiert bei USB dank Hubs sehr häufig).
Deswegen hat man die Busse erfunden. Das ist eine Datenleitung, die alle gemeinsam benutzen können. An dieser Leitung hängen alle Teilnehmer dran. Es gibt zentrale und dezentrale Busse. Da USB ein zentraler Bus ist, werde ich auf die dezentralen Busse nur so weit eingehen, wie ich es muss, um den Unterschied zu erklären.

Eine der wichtigsten Schwierigkeiten bei einem Bus ist, dass (a) immer nur einer reden darf und (b) nur der, an den geredet wird, das auch aufnehmen soll. Alle anderen haben das Geredete zu ignorieren (sonst beginnt der Raketenwerfer auf einmal zufällig herumzufeuern, wenn man doch eigentlich nur den Tee warm machen wollte).
Dafür benötigt jeder Teilnehmer eine einzigartige ID, über die er angesprochen werden kann. So quasi einen Namen, wenn man so will.

Bei einem zentralen Bus gibt es einen Teilnehmer, den Host, der die IDs verteilt und der den Geräten sagt, wann sie dran sind zu reden. Bei einem dezentralen Bus machen sich die Teilnehmer alles untereinander aus. Es gibt keinen "Chef", der das ganze Ding managt.

USB ist ein zentraler Bus, und der Computer ist der Host, wärend alle Geräte, die man dran steckt, nur Teilnehmer sind.

Ein USB-Ablauf schaut ungefähr so aus:
-) Neues Gerät wird angesteckt und wartet erst mal.
-) Der Host sendet regelmäßig ein Signal aus, das neuen Geräten sagt, dass sie sich bitte melden sollen.
-) Das neue Gerät meldet sich beim Host und sagt bescheid, was es ist (z.B. eine Tastatur oder ein Raketenwerfer), welche Übertragunsgeschwindigkeit es unterstützt (es gibt vier Geschwindigkeitsprofile von 187.5 KB/s bis zu 500 MB/s), und wie viel Strom es haben will (bis zu 500 mA bei USB 1.1 und USB 2.0, bis zu 900 mA bei USB 3.0)
-) Der Host gibt dem Gerät eine ID und sagt ihm, was von den Sachen, die es haben will, es auch kriegt.
-) Das Gerät akzeptiert und wartet, bis der Host es wieder aufruft.
-) In regelmäßigen Intervallen ruft der Host das Gerät auf, schickt ihm Daten vom Computer (z.B. Steuerbefehle für den Raketenwerfer) und fragt, ob das Gerät auch Daten für den Host hat.
-) Das Gerät antwortet und schickt gegebenenfalls seine Daten (z.B. das Bild der eingebauten Webcam).

Bei USB geht der Datenaustausch immer vom Host aus. Die Geräte dürfen nur dann schicken, wenn der Host sie vorher dazu aufgefordert hat. Sollte der Host irgendwie auf eines der Geräte vergessen (passiert normalerweise nicht), Pech für das Gerät. Außerdem können die Geräte nicht direkt mit einander reden. Alles muss über den Host gehen.

Ein großer Vorteil der Bauart des USB ist, dass man dem Bus leicht mehrere Steckplätze geben kann. Hat man im Laptop zum Beispiel nur drei USB-Stecker, möchte aber sein ganzes Arsenal an USB-Geräten anschließen, dann braucht man nur einen Hub anstecken, und fertig. Der Hub ist im Grunde nichts anderes als ein Mehrfachstecker, wo jede der Leitungen an mehrere Steckplätze weitergeleitet wird. Geht ganz einfach und ohne Mühe. Einzig, der Stromanschluss wird oft nicht vom Computer weitergeleitet, sondern vom Hub selbst gestellt, da so mehr Stom verfügbar sein kann, als der Computer zur Verfügung stellt.

Bei der Vielfalt der USB-Geräte wird auch wieder mal klar, wozu man Treiber braucht. Für die meisten Tastaturen und Mäuse reicht der Standard-Klassentreiber, aber für die ganzen Spezialgeräte braucht man spezielle Treiber.

@Mods: Ich hab das hier her geschrieben, da es keine allgemeine Tutorialsektion gibt und es nicht unter eine der Programmiersprachen fällt. Falls ihr meint, dass es wo anders hin passt, bitte verschieben. Danke!
  • Zuletzt bearbeitet von DAK am Mo, Jun 10, 2013 8:46, insgesamt 12-mal bearbeitet

DAK

BeitragSo, Mai 26, 2013 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
[Reserviert für weitere Updates]
Gewinner der 6. und der 68. BlitzCodeCompo

DAK

BeitragDi, Jun 04, 2013 11:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Neuer Zusatz dazu über den Prozessor selbst.

Interessiert das irgendwen, oder kann ich mir die Mühe sparen? (das unglaublich rege Feedback lässt eher auf Zweiteres schließen...)
Gewinner der 6. und der 68. BlitzCodeCompo
 

PhillipK

BeitragDi, Jun 04, 2013 11:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Mich intressierts Smile
Mein infounterricht hat mich zwar einen teil davon schon wissen lassen (sowie meine anfännge beim programmieren, wo ich mir RAM, Bits und bytes ganz genau angesehen habe), aber einige neue sachen, über die man nicht einfach so stolpert, sind schon drinne.

Tut mir leid das ich kaum feedback gebe, aber wie ich gelernt habe: Keine kommentare sind gute kommentar; dh es gibt nichts zu kritisieren *grins*

Nagut, dann eben doch:
Saubere arbeit, weiterso! Lehrmeister DAK Smile

Addi

BeitragDi, Jun 04, 2013 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Mich würde es auch interessieren.
Vom ersten Tut wusste ich z.B nur 1/4 und fand es demnach auch extrem Inseressant. Ich weiß jetzt wie das mit den Floats ungefähr gemacht wird. Very Happy
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62

Dicker Hobbit

BeitragDi, Jun 04, 2013 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich fands auch sehr interessant!

Also wäre ein weiterer Teil super Smile

DAK

BeitragDi, Jun 04, 2013 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
@PhillipK: Keine Kommentare könnten aber auch genauso gut heißen, dass das keiner liest.

Freut mich aber, dass dem nicht so ist. Danke für das gute Feedback.

Gibt es irgendwelche Themen, die ihr euch wünscht, oder Themen, wo ich mehr in die Tiefe gehen soll?

Hab übrigens noch einen vierten Teil über Hauptspeicher eingefügt.
Gewinner der 6. und der 68. BlitzCodeCompo

Addi

BeitragDi, Jun 04, 2013 21:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wäre es mit der Funktionsweise einer Grafikkarte?
Oder wie das mit USB funktioniert?

Eine Frage habe ich schnell noch:
Wenn ich die Auslagerungsdatein auf einer SSD speichern lasse, dürfte es doch wesentlich schneller laufen, oder?

Edit:
Danke für den 4 Teil Wink. Hat die Registerzahl zufällig was mit der Unterscheidung zwischen 32 und 64 bit zu tun?

DAK

BeitragDi, Jun 04, 2013 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte vorgehabt, als nächstes die Festplatte zu machen, dann die Grafikkarte und dann Peripherie (da kann ich auch vielleicht USB vorschieben, weil viel Peripherie USB braucht).

Mit der Auslagerungsdatei auf der SSD bist du schon wesentlich besser dran als bei einer Festplatte, aber an RAM kommst du trotzdem nicht ran. Zum Vergleich:

Top-Festplatten schaffen rund um die 200 - 300 MB/s.
Top-SSDs schaffen zwischen 500 MB/s - 2 GB/s
Ein eher durchschnittlicher DDR3-1600 schafft 25.6 GB/s

Dabei ist das bei der Festplatte und der SSD sequentiell (nur bei Daten, die direkt nach einander gespeichert sind) und beim RAM komplett beliebiger Zugriff (Die HDD und die SSD schaffen diese Werte im optimalen Zustand, der RAM schafft das dauerhaft).

GDDR5-RAM, wie er auf Grafikkarten und auch der PS4 verwendet wird, schafft bis zu 160 GB/s.

Edit: Zu der Registerzahl und 32/64-Bit: Die Anzahl der Register nicht direkt, die Breite der Register schon. Im 32-Bit-Modus hat jedes Register 32-Bit-Speicher. Im 64-Bit-Modus hat jedes Register hald 64-Bit.
Gewinner der 6. und der 68. BlitzCodeCompo

Addi

BeitragDi, Jun 04, 2013 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool, ich freu mich schon drauf Very Happy.
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62

BladeRunner

Moderator

BeitragDi, Jun 04, 2013 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu den Floats möchte ich anmerken dass eine 8-Bit-Architektur keineswegs auf 8-Bit-Float beschränkt sein muß.
Der C64 hat zB 40 Bit-Floats verwendet welche damit deutlich präziser waren als der Standard-32-Bit-Float heutiger PCs Wink
Zugegeben: Alle Float-Operationen waren in Maschinencode als Subroutine im Kernal hinterlegt und damit echt langsam, dennoch waren sie implementiert.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

PhillipK

BeitragDi, Jun 04, 2013 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Mich würde auch die arbeitsweise von Treibern intressieren.
Wir alle kennen das: Neues gerät angeschlossen, windowsnormaltreiber geladen und... naja saft kriegt es.
Aber stunden muss man nach treibern suchen Very Happy
Oder ganz wichtig: Grafikkartentreiber. Ohne dei geht ja garnichts was auch nur an das wort "spiel" denkt, obwohl man mit nem Frisch aufgesetzten win7 ja doch tolle farben sieht.

Meine frage also: Wie arbeiten diese kleinen softwarebausteine und wie schaffen sie es, die hardware für uns zu überreden? Smile

Ein weiterer punkt bezieht sich auf IDE/Sata VS SSD VS Ram

Im Infounterricht habe ich gelernt, wie eine festplatte läuft (so krass mit lese / schreibkopf/köpfen!)
Über SSD weiß ich erschreckend wenig. Man hört nur immer, das sie wie RAM funktionieren - aber wie genau kann man sich das vorstellen? Wie sind die unterschiede in der entwicklung der festplatten / flashdrives? Smile

(ich finde, rein subjektiv, das jeder der mit software bastelt auch erweitertes hardwarewissen haben sollte)

Hummelpups

BeitragMi, Jun 05, 2013 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
PhillipK hat Folgendes geschrieben:
(ich finde, rein subjektiv, das jeder der mit software bastelt auch erweitertes hardwarewissen haben sollte)


Erleichert das entwicklen auf jeden Fall Wink

Mir war die Materie bereits bekannt, bis auf die Zusammensetzung von Float Zahlen im binärsystem, was
mich beim lesen dann wirklich sehr interessiert hat, immerwieder interessant so gut geschriebe
Zusammenfassungen zu lesen Smile Weiter so!
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

DAK

BeitragMi, Jun 05, 2013 10:36
Antworten mit Zitat
Benutzer-Profile anzeigen
@BladeRunner: Danke für die Anmerkung. Ich wollt hald eher beim generellen bleiben und nicht so speziell hinein gehen. Die 8-Bit-Floats wären natürlich für echte Verwendung viel zu klein und ungenau (Float in BB ist 32Bit, Float in Java auch, Double in Java ist 64Bit), aber ich hab mir gedacht, wenn ich größere Floats hier als Beispiel verwende, dann wird's nur unübersichtlich. Das Prinzip kommt hier auch rüber.

@PhillipK: Danke für die Anregung, dazu schreib ich dann im nächsten Teil, wenn es um Festplatten geht, mehr.

Edit: Teil Fünf über Festplatten und SSD ist drinnen!
Gewinner der 6. und der 68. BlitzCodeCompo
 

feider

ehemals "Decelion"

BeitragMi, Jun 05, 2013 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum Thema Auslagerungsdatei auf SSD:

Ja, pfeilschnell ist es - aber du schrottest dir die SSD.
Die ist nämlich nicht für dauendes beschreiben/überschreiben ausgelegt.

cheers
feider

DAK

BeitragMi, Jun 05, 2013 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Will man's wirklich extrem schnell und verschleißfrei haben, dann holt man sich 8 GB extra RAM, konfiguriert sie als RAM-Disc und legt die Auslagerungsdatei da drauf.
Windows lagert nämlich gerne auch dann schon aus, wenn es dazu noch gar keinen Bedarf gibt. Auf die Art geht es dann extrem schnell und du machst dir damit auch nix hin.

SSDs kann man rund eine Million mal beschreiben. Das hat man bei Verwendung als Auslagerungsdatei recht schnell drin.
Gewinner der 6. und der 68. BlitzCodeCompo

BladeRunner

Moderator

BeitragMi, Jun 05, 2013 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist ein bösartiges Gerücht dass eine SSD bei Nutzung mit der Auslagerungsdatei rasch den Geist aufgeben würde. Du hast pro Speicherzelle im Schnitt bis 100.000 (Schreib-)Zugriffe bevor die Zelle den Geist aufgibt.
Dazu sind in jeder SSD Pufferzellen verbaut die ausfallende Zellen kompensieren können, je nach Hersteller 2% bis 7% der Gesamtkapazität.
Noch dazu sorgt die Steuersoftware dafür dass die Zellen möglichst gleichmäßig ausgelastet werden, sprich, es findet eine Rotation der Zellen statt.
Bis da mal was wegen Abnutzung verendet geht eine Riesenweile ins Land.

Die Gerüchte stammen noch aus Zeiten als eben diese gleichmäßige Nutzung nicht gegeben war, es gab da auch den Fall fehlerhafter Firmware welche Totalausfälle verursacht hat.

Die Hersteller geben mittlerweile eine Nutzungsrate von 20 - 30 GB/d an Schreibzugriffen über 5 Jahre hinweg als Leistungsgrenze an, ein Wert den Ottonormalverbraucher grad auf der Systemplatte idR nie erreichen wird. Die c't hat dazu Testreihen gemacht und sogar noch deutlich mehr Datendurchsatz forciert und sie hatten dennoch keine nennenswerten Ausfälle zu beklagen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

FWeinb

ehemals "ich"

BeitragMi, Jun 05, 2013 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Top-SSDs machen auch schon mehr als 400Mbit/s Write und mehr als 500 Mbit/s Read.

Und die Abnutzung ist wie schon erwähnt ein ziemlich hartnäckiges Gerücht.

[Edit]
Das hier sollte der von BladeRunnner gemeinte Artikel sein:
http://www.heise.de/artikel-ar...erstoerung
Kostet aber 1,50€

[Edit2]

Hab da auch ein Zitat aus dem Artikel gefunden:
Zitat:
[...] Nach mehreren Wochen [...] erfreuen sich zwei von vier Testkandidaten bester Gesundheit. Eine uralte OCZ Onyx [...] meldet nach 48TByte eine verbleibende Lifetime von 65%. Der Media Wear Out Indicator von Intels SSD320 ist erst von 100 auf 83 gefallen, obwohl wir bereits 35TByte geschrieben haben. In etwa so viel spezifiziert Intel für eine "typical client workload" und einen Zeitraum von 5 Jahren [...]
Am längsten in unserem Testsystem befindet sich eine 100GByte-SSD von GSkill [...], die nach eindrucksvollen 152TByte Daten ihre Transferrate auf 7MByte/s gedrosselt hat.
[...]

DAK

BeitragMi, Jun 05, 2013 22:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab hier und hier ein paar Vergleiche von 2012er SSDs. Die kommen auf 525 MB/s Lesen und 482 MB/s Schreiben (MB, keine MBit)
Gewinner der 6. und der 68. BlitzCodeCompo

Spark Fountain

Betreff: Sehr informativ!

BeitragDo, Jun 06, 2013 1:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde es auch super, dass du dieses Tutorial machst, obwohl ich zwar vieles schon aus dem Informatik-Studium kenne, aber das mit der Funktionsweise der SSD-Platten war mir z.B. neu.

Vielleicht könntest du ja Folgendes noch etwas erläutern: Ich hatte ein Softwareprojekt, wo wir mit CUDA programmieren sollten (auf NVidia Karten), und da gab's auch einiges Lesematerial, wo z.B. auch stand, dass die modernen Grafikprozessoren aufgrund ihrer Struktur inzwischen viel schneller sind bzw. sein können, als die normale CPU (wenn alles parallel programmiert wird). Ich hab allerdings noch nicht so wirklich verstanden, wie so ein gigantischer Speed-Up überhaupt möglich ist; zumal mir irgendwann auch mal beigebracht wurde, dass zu viele Threads auch nix bringen wegen der ganzen Verwaltung im Speicher etc. Bzw. könntest du vielleicht erklären, warum man - wenn die Grafikkarten so schnell sind - dann nicht auf CPU's komplett verzichten könnte. Klingt zwar erstmal unlogisch, aber solange kein Gegenargument vorliegt, der für die CPU im Vergleich zur GPU spricht... Smile

Aber bis hierhin schonmal vielen Dank, dein Schreibstil ist auch sehr gelungen und motiviert den Leser zum Weiterlesen Wink.
Gewinner der MiniBCC's #11, #13 und #28

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group