Computer

  Teil des NASA-Columbia-Supercomputers.   Vergrößern Teil des NASA-Columbia-Supercomputers.

EIN Computer ist eine Maschine zur Manipulation von Daten gemäß einer Liste von Anweisungen, oder Programm .

Die Fähigkeit, gespeicherte Programme zu speichern und auszuführen – d. h. Programmierbarkeit – macht Computer extrem vielseitig und unterscheidet sie von Taschenrechnern. Die Church-Turing-These ist eine mathematische Aussage über diese Vielseitigkeit: Jeder Computer mit einer bestimmten Mindestleistung ist im Prinzip in der Lage, die gleichen Aufgaben zu erfüllen wie jeder andere Computer. Daher sind Computer mit Fähigkeiten und Komplexitäten, die von denen eines Personal Digital Assistant bis zu einem Supercomputer reichen, alle in der Lage, die gleichen Rechenaufgaben auszuführen, solange Zeit und Speicherkapazität nicht berücksichtigt werden.

  Ein Computer in einer Armbanduhr.   Vergrößern Ein Computer in einer Armbanduhr.

Computer nehmen zahlreiche physische Formen an. Frühe elektronische Computer hatten die Größe eines großen Raums und verbrauchten so viel Strom wie mehrere hundert moderne Personal Computer. Heutzutage können Computer so klein gemacht werden, dass sie in einen passen Armbanduhr und von einer Uhrenbatterie gespeist. Es gibt jedoch immer noch große Rechenanlagen für spezialisierte wissenschaftliche Berechnungen und für die Transaktionsverarbeitungsanforderungen großer Organisationen. Die Gesellschaft erkennt Personal Computer und ihr tragbares Äquivalent, den Laptop-Computer, als Ikonen des Informationszeitalters an; Sie sind das, was die meisten Leute als 'einen Computer' betrachten. Die heute am weitesten verbreitete Computerform ist jedoch der eingebettete Computer. Eingebettete Computer sind kleine, einfache Geräte, die häufig zur Steuerung anderer Geräte verwendet werden – beispielsweise zur Steuerung von Maschinen von Kampfflugzeugen bis hin zu Industrierobotern, Digitalkameras und sogar Kinderspielzeug .



Geschichte des Rechnens

  Der Jacquard-Webstuhl war eines der ersten programmierbaren Geräte.   Vergrößern Der Jacquard-Webstuhl war eines der ersten programmierbaren Geräte.

Die Frage, welches der früheste Computer war, ist schwierig. Die eigentliche Definition dessen, was ein Computer ist, hat sich im Laufe der Jahre geändert, und es ist daher unmöglich, die Frage endgültig zu beantworten. Viele Geräte, die einst als „Computer“ bezeichnet wurden, würden nach heutigen Maßstäben nicht mehr als solche gelten.

Ursprünglich bezeichnete der Begriff 'Computer' eine Person, die numerische Berechnungen durchführte (ein menschlicher Computer), oft mit Hilfe eines mechanischen Rechengeräts. Beispiele für frühe mechanische Rechengeräte waren die Abakus , der Rechenschieber und wohl das Astrolabium und der Antikythera-Mechanismus (der aus dem Jahr 87 v. Chr. stammt). Das Ende des Mittelalter sah eine Wiederbelebung der europäischen Mathematik und Ingenieurskunst, und Wilhelm Schickards Gerät von 1623 war der erste einer Reihe von mechanischen Rechnern, die von europäischen Ingenieuren konstruiert wurden.

Keines dieser Geräte entspricht jedoch der modernen Definition eines Computers, da sie nicht programmiert werden konnten. Im Jahr 1801 verbesserte Joseph Marie Jacquard den Textilwebstuhl, der eine Reihe von gestanzten Papierkarten als Vorlage verwendete, damit sein Webstuhl automatisch komplizierte Muster weben konnte. Obwohl der resultierende Jacquard-Webstuhl nicht als Computer angesehen wird, war dies ein wichtiger Schritt, da die Verwendung von Lochkarten zur Definition von Webmustern als eine frühe, wenn auch begrenzte Form der Programmierbarkeit angesehen werden kann.

1837, Karl Babbage war der erste, der einen vollständig programmierbaren mechanischen Computer konzipierte und entwarf, den er 'The Analytical Engine' nannte. Aus finanziellen Gründen und der Unfähigkeit, dem Herumbasteln am Design zu widerstehen, hat Babbage seine Analytical Engine nie wirklich gebaut.

Für die US-Volkszählung im Jahr 1890 wurde eine groß angelegte automatisierte Datenverarbeitung von Lochkarten mit Tabelliermaschinen durchgeführt, die von Herman Hollerith entworfen und von der Computing Tabulating Recording Corporation (CTR) hergestellt wurden, die später zu IBM wurde. So tauchten Ende des 19. Jahrhunderts eine Reihe von Technologien auf, die sich später bei der Realisierung praktischer Computer als nützlich erweisen sollten: die Lochkarte, die boolesche Algebra, die Vakuumröhre (thermionisches Ventil) und der Fernschreiber.

In der ersten Hälfte des 20. Jahrhunderts wurden viele wissenschaftliche Rechenanforderungen durch immer ausgefeiltere analoge Computer erfüllt, die eine direkte mechanische oder elektrisch Modell des Problems als Berechnungsgrundlage. Diese waren jedoch nicht programmierbar und hatten im Allgemeinen nicht die Vielseitigkeit und Genauigkeit moderner digitaler Computer.

Computer Nation Funktioniert gezeigt Binär Elektronisch Programmierbar Turing
Komplett
Zuse Z3 Deutschland Mai 1941 Ja Durch gestanztes Filmmaterial Ja
Atanasoff-Berry-Computer Hirsch Sommer 1941 Ja Ja
Colossus-Computer Vereinigtes Königreich 1943 Ja Ja Teilweise durch Neuverkabelung
Harvard Mark I/IBM ASCC Hirsch 1944 Durch Lochstreifen
ENIAC Hirsch 1944 Ja Teilweise durch Neuverkabelung Ja
1948 Ja Durch Funktionstabellen-ROM Ja


In den 1930er und 1940er Jahren wurde eine Reihe von immer leistungsstärkeren und flexibleren Computergeräten konstruiert, die nach und nach die wichtigsten Merkmale moderner Computer hinzufügten. Der Einsatz digitaler Elektronik (weitgehend von Claude Shannon im Jahr 1937 erfunden) und eine flexiblere Programmierbarkeit waren äußerst wichtige Schritte, aber es ist schwierig, einen Punkt auf diesem Weg als „den ersten digitalen elektronischen Computer“ zu definieren. Zu den bemerkenswerten Erfolgen gehören:

  EDSAC war einer der ersten Computer, der die Architektur gespeicherter Programme (von Neumann) implementierte.   Vergrößern EDSAC war einer der ersten Computer, der die Architektur gespeicherter Programme (von Neumann) implementierte.
  • Der Atanasoff-Berry-Computer (1941), der auf Vakuumröhren basierende Berechnungen, Binärzahlen und regenerativen Kondensatorspeicher verwendete.
  • Konrad Zuses elektromechanische „Z-Maschinen“. Die Z3 (1941) war die erste funktionierende Maschine mit binärer Arithmetik und einem Maß für Programmierbarkeit.
  • Der geheime britische Colossus-Computer (1944), der eine begrenzte Programmierbarkeit hatte, aber zeigte, dass ein Gerät mit Tausenden von Röhren einigermaßen zuverlässig und elektronisch neu programmierbar sein konnte. Es wurde verwendet, um deutsche Kriegscodes zu brechen.
  • Der Harvard Mark I (1944), ein elektromechanischer Großcomputer mit begrenzter Programmierbarkeit.
  • Das Ballistics Research Laboratory ENIAC (1946) der US-Armee verwendete Dezimalarithmetik und war der erste elektronische Allzweckcomputer, obwohl er ursprünglich eine unflexible Architektur hatte, die im Wesentlichen eine Neuverkabelung erforderte, um seine Programmierung zu ändern.

Mehrere Entwickler von ENIAC, die dessen Fehler erkannten, entwickelten ein weitaus flexibleres und eleganteres Design, das als bekannt wurde gespeicherte Programmarchitektur oder von Neumann-Architektur. Dieses Design wurde erstmals formal beschrieben von John von Neumann in dem 1945 veröffentlichten Artikel „First Draft of a Report on the EDVAC“. Eine Reihe von Projekten zur Entwicklung von Computern auf der Grundlage der Architektur gespeicherter Programme begann um diese Zeit; Die erste davon wird in fertiggestellt Großbritannien . Die erste, deren Funktionsfähigkeit demonstriert wurde, war die Manchester Small-Scale Experimental Machine (SSEM) oder 'Baby'. Das EDSAC, das ein Jahr nach SSEM fertiggestellt wurde, war jedoch vielleicht die erste praktische Implementierung des Designs gespeicherter Programme. Kurz danach wurde die Maschine, die ursprünglich von von Neumanns Artikel beschrieben wurde – EDVAC – fertiggestellt, aber für weitere zwei Jahre nicht in Vollzeit eingesetzt.

Nahezu alle modernen Computer implementieren eine Form der gespeicherten Programmarchitektur, was sie zum einzigen Merkmal macht, durch das das Wort 'Computer' jetzt definiert wird. Nach diesem Standard würden viele frühere Geräte nach heutiger Definition nicht mehr Computer heißen, werden aber in ihrem historischen Kontext meist so bezeichnet. Während sich die in Computern verwendeten Technologien seit den ersten elektronischen Allzweckcomputern in den 1940er Jahren dramatisch verändert haben, verwenden die meisten immer noch die von Neumann-Architektur. Das Design machte den universellen Computer zu einer praktischen Realität.

  Mikroprozessoren sind miniaturisierte Geräte, die häufig CPUs mit gespeicherten Programmen implementieren.   Vergrößern Mikroprozessoren sind miniaturisierte Geräte, die häufig CPUs mit gespeicherten Programmen implementieren.

Röhrenbasierte Computer waren in den 1950er Jahren in Gebrauch, wurden aber in den 1960er Jahren weitgehend durch Transistor-basierte Geräte ersetzt, die kleiner, schneller, billiger, weniger Strom verbrauchten und zuverlässiger waren. Diese Faktoren ermöglichten die Herstellung von Computern in einem beispiellosen kommerziellen Maßstab. In den 1970er Jahren erfolgte die Annahme von Integrierter Schaltkreis Technologie und die anschließende Entwicklung von Mikroprozessoren wie dem Intel 4004 verursachten einen weiteren Sprung in Größe, Geschwindigkeit, Kosten und Zuverlässigkeit. In den 1980er Jahren waren Computer so klein und billig geworden, dass sie einfache mechanische Steuerungen in Haushaltsgeräten wie Waschmaschinen ersetzen konnten. Etwa zur gleichen Zeit wurden Computer in Form von Heimcomputern und dem heute allgegenwärtigen Personal Computer für den persönlichen Gebrauch durch Einzelpersonen allgemein zugänglich. In Verbindung mit dem weit verbreiteten Wachstum der Internet Seit den 1990er Jahren sind Personal Computer so weit verbreitet wie die Fernsehen und die Telefon und fast alle modernen elektronischen Geräte enthalten eine Art Computer.

Gespeicherte Programmarchitektur

Das bestimmende Merkmal moderner Computer, das sie von allen anderen Maschinen unterscheidet, ist, dass sie es sein können programmiert . Das heißt, dass dem Computer eine Liste von Anweisungen (das Programm) gegeben werden kann, die er speichert und irgendwann in der Zukunft ausführt.

In den meisten Fällen sind Computeranweisungen einfach: Addieren Sie eine Zahl zu einer anderen, verschieben Sie einige Daten von einem Ort zum anderen, senden Sie eine Nachricht an ein externes Gerät usw. Diese Anweisungen werden aus dem Speicher des Computers gelesen und im Allgemeinen ausgeführt ( ausgeführt) in der Reihenfolge, in der sie gegeben wurden. Normalerweise gibt es jedoch spezielle Anweisungen, die den Computer anweisen, an eine andere Stelle im Programm vor- oder zurückzuspringen und von dort aus weiterzuarbeiten. Diese werden 'Sprung'-Anweisungen (oder Verzweigungen) genannt. Außerdem können Sprungbefehle bedingt ausgeführt werden, so dass je nach Ergebnis einer vorherigen Berechnung oder eines externen Ereignisses unterschiedliche Befehlssequenzen verwendet werden können. Viele Computer unterstützen Subroutinen direkt, indem sie einen Sprungtyp bereitstellen, der sich an die Stelle 'erinnert', von der er gesprungen ist, und eine weitere Anweisung, zu diesem Punkt zurückzukehren.

Die Programmausführung kann mit dem Lesen eines Buches verglichen werden. Während eine Person normalerweise jedes Wort und jede Zeile der Reihe nach liest, kann sie manchmal zu einer früheren Stelle im Text zurückspringen oder Abschnitte überspringen, die nicht von Interesse sind. In ähnlicher Weise kann ein Computer manchmal zurückgehen und die Anweisungen in einem Abschnitt des Programms immer und immer wieder wiederholen, bis eine interne Bedingung erfüllt ist. Dies wird als Kontrollfluss innerhalb des Programms bezeichnet und ermöglicht es dem Computer, Aufgaben ohne menschliches Eingreifen wiederholt auszuführen.

Im Vergleich dazu kann eine Person, die einen Taschenrechner verwendet, eine grundlegende arithmetische Operation wie das Addieren von zwei Zahlen mit nur wenigen Tastendrücken ausführen. Aber um alle Zahlen von 1 bis 1.000 zusammenzuzählen, würde es Tausende von Tastendrücken und viel Zeit erfordern – mit ziemlicher Sicherheit, einen Fehler zu machen. Andererseits kann ein Computer mit nur wenigen einfachen Anweisungen dazu programmiert werden. Zum Beispiel:

        mov      #0,sum     ; set sum to 0
        mov      #1,num     ; set num to 1
loop:   add      num,sum    ; add num to sum
        add      #1,num     ; add 1 to num
        cmp      num,#1000  ; compare num to 1000
        ble      loop       ; if num <= 1000, go back to 'loop'
        halt                ; end of program. stop running

Sobald der Computer angewiesen wurde, dieses Programm auszuführen, führt er die sich wiederholende Additionsaufgabe ohne weiteres menschliches Eingreifen durch. Es wird fast nie einen Fehler machen und ein moderner PC kann die Aufgabe in etwa einer Millionstel Sekunde erledigen.

Computer können jedoch nicht in dem Sinne „selbst denken“, dass sie Probleme nur genau so lösen, wie sie programmiert sind. Ein intelligenter Mensch, der mit der obigen Additionsaufgabe konfrontiert wird, könnte schnell erkennen, dass man, anstatt alle Zahlen tatsächlich zu addieren, einfach die Gleichung verwenden kann

  1+2+3+...+n = {{n(n+1)} \über 2}

und kommen mit wenig Arbeit zur richtigen Antwort (500.500). Viele moderne Computer sind in der Lage, einige Entscheidungen zu treffen, die die Ausführung einiger Programme beschleunigen, indem sie die Ergebnisse bestimmter Sprungbefehle 'erraten' und die Reihenfolge der Befehle leicht ändern, ohne ihre Bedeutung zu ändern ( Verzweigungsvorhersage, spekulative Ausführung und out -Auftragsausführung). Computer können jedoch nicht intuitiv einen effizienteren Weg zur Ausführung der ihnen übertragenen Aufgabe bestimmen, da sie kein Gesamtverständnis davon haben, was die Aufgabe oder das 'große Ganze' ist. Mit anderen Worten, ein Computer, der so programmiert ist, dass er die Zahlen einzeln addiert, wie im obigen Beispiel, würde genau dies tun, ohne Rücksicht auf Effizienz oder alternative Lösungen.

Programme

  Eine Lochkarte aus den 1970er Jahren, die eine Zeile aus einem FORTRAN-Programm enthält. Auf der Karte steht:"Z(1) = Y + W(1)" and is labelled "PROJ039" for identification purposes.   Vergrößern Eine Lochkarte aus den 1970er Jahren, die eine Zeile aus einem FORTRAN-Programm enthält. Auf der Karte steht: „ Z(1) = Y + W(1) ' und ist beschriftet ' PROJ039 “ zu Identifikationszwecken.

In der Praxis a Computer Programm kann zwischen einem Dutzend Anweisungen und vielen Millionen Anweisungen für so etwas wie ein Textverarbeitungsprogramm oder einen Webbrowser enthalten. Ein typischer moderner Computer kann jede Sekunde Milliarden von Anweisungen ausführen und macht über Jahre hinweg fast nie einen Fehler.

Das Schreiben großer Computerprogramme kann Teams von Computerprogrammierern Jahre dauern, und die Wahrscheinlichkeit, dass das gesamte Programm vollständig in der beabsichtigten Weise geschrieben wurde, ist unwahrscheinlich. Fehler in Computerprogrammen werden als Bugs bezeichnet. Manchmal sind Fehler gutartig und beeinträchtigen die Nützlichkeit des Programms nicht, in anderen Fällen können sie dazu führen, dass das Programm vollständig fehlschlägt (Absturz), in wieder anderen Fällen können subtile Probleme auftreten. Manchmal können ansonsten gutartige Fehler für böswillige Absichten verwendet werden, wodurch ein Sicherheits-Exploit entsteht. Fehler sind normalerweise nicht die Schuld des Computers. Da Computer lediglich die ihnen gegebenen Anweisungen ausführen, sind Fehler fast immer das Ergebnis von Programmierfehlern oder einem Versehen im Programmdesign.

In den meisten Computern werden einzelne Befehle als Maschinencode gespeichert, wobei jeder Befehl eine eindeutige Nummer (seinen Operationscode oder kurz Opcode) erhält. Der Befehl zum Addieren zweier Zahlen hätte einen Opcode, der Befehl zum Multiplizieren hätte einen anderen Opcode und so weiter. Die einfachsten Computer können eine Handvoll verschiedener Befehle ausführen, die komplexeren Computer haben mehrere hundert zur Auswahl – jeder mit einem eindeutigen numerischen Code. Da der Speicher des Computers Zahlen speichern kann, kann er auch die Befehlscodes speichern. Dies führt zu der wichtigen Tatsache, dass ganze Programme (die nur Listen von Anweisungen sind) als Listen von Zahlen dargestellt werden können und selbst innerhalb des Computers so manipuliert werden können, als wären sie numerische Daten. Das grundlegende Konzept, Programme zusammen mit den Daten, mit denen sie arbeiten, im Speicher des Computers zu speichern, ist der Kern der von Neumann-Architektur oder der Architektur gespeicherter Programme. In einigen Fällen speichert ein Computer möglicherweise einige oder alle seiner Programme im Speicher, der von den Daten, mit denen er arbeitet, getrennt gehalten wird. Dies wird die Harvard-Architektur nach dem Harvard-Mark-I-Computer genannt. Moderne von Neumann-Computer weisen in ihren Entwürfen einige Merkmale der Harvard-Architektur auf, wie z CPU-Caches .

Während es möglich ist, Computerprogramme als lange Zahlenlisten (Maschinensprache) zu schreiben, und diese Technik bei vielen frühen Computern verwendet wurde, ist dies in der Praxis äußerst mühsam, insbesondere bei komplizierten Programmen. Stattdessen kann jeder grundlegenden Anweisung ein kurzer Name gegeben werden, der auf seine Funktion hinweist und leicht zu merken ist – eine mnemonische Form wie ADD, SUB, MULT oder JUMP. Diese Mnemoniken werden zusammenfassend als Assemblersprache eines Computers bezeichnet. Das Konvertieren von in Assemblersprache geschriebenen Programmen in etwas, das der Computer tatsächlich verstehen kann (Maschinensprache), wird normalerweise von einem Computerprogramm namens Assembler durchgeführt. Maschinensprachen und die Assemblersprachen, die sie repräsentieren (zusammenfassend als Low-Level-Programmiersprachen bezeichnet), sind in der Regel für einen bestimmten Computertyp einzigartig. Dies bedeutet, dass ein Computer mit ARM-Architektur (wie er in einem PDA oder einem Handheld-Videospiel zu finden ist) die Maschinensprache eines Intel Pentium- oder des AMD Athlon 64-Computers, der sich möglicherweise in einem PC befindet, nicht verstehen kann.

Obwohl wesentlich einfacher als in Maschinensprache, ist das Schreiben langer Programme in Assemblersprache oft schwierig und fehleranfällig. Daher werden die kompliziertesten Programme in abstrakteren höheren Programmiersprachen geschrieben, die in der Lage sind, die Bedürfnisse des Computerprogrammierers bequemer auszudrücken (und dadurch dazu beitragen, Programmierfehler zu reduzieren). Hochsprachen werden normalerweise unter Verwendung eines anderen Computerprogramms, das als Compiler bezeichnet wird, in Maschinensprache (oder manchmal in Assemblersprache und dann in Maschinensprache) 'kompiliert'. Da Hochsprachen abstrakter sind als Assemblersprachen, ist es möglich, verschiedene Compiler zu verwenden, um dasselbe Hochsprachenprogramm in die Maschinensprache vieler verschiedener Computertypen zu übersetzen. Dies ist Teil der Mittel, mit denen Software wie Videospiele für verschiedene Computerarchitekturen wie Personalcomputer und verschiedene Videospielkonsolen verfügbar gemacht werden können.

Beispiel

Angenommen, ein Computer wird eingesetzt, um eine Ampel zu steuern. Ein einfaches gespeichertes Programm könnte sagen:

  1. Schalten Sie alle Lichter aus
  2. Schalten Sie das rote Licht ein und warten Sie sechzig Sekunden
  3. Schalten Sie das rote Licht aus, schalten Sie das grüne Licht ein und warten Sie sechzig Sekunden
  4. Schalten Sie das grüne Licht aus, schalten Sie das gelbe Licht ein und warten Sie zwei Sekunden
  5. Schalten Sie das gelbe Licht aus
  6. Zur Anweisungsnummer springen (2)

Mit diesem Satz von Anweisungen würde der Computer das Licht kontinuierlich durch Rot, Grün, Gelb und wieder zurück zu Rot schalten, bis er aufgefordert wird, die Ausführung des Programms zu stoppen.

Angenommen, es gibt einen einfachen Ein-/Ausschalter, der an den Computer angeschlossen ist und dazu bestimmt ist, das Licht rot blinken zu lassen, während einige Wartungsarbeiten durchgeführt werden. Das Programm kann dann den Computer anweisen:

  1. Schalten Sie alle Lichter aus
  2. Schalten Sie das rote Licht ein und warten Sie sechzig Sekunden
  3. Schalten Sie das rote Licht aus, schalten Sie das grüne Licht ein und warten Sie sechzig Sekunden
  4. Schalten Sie das grüne Licht aus, schalten Sie das gelbe Licht ein und warten Sie zwei Sekunden
  5. Schalten Sie das gelbe Licht aus
  6. Wenn der Wartungsschalter NICHT eingeschaltet ist, springen Sie zu Anweisungsnummer (2)
  7. Schalten Sie das rote Licht ein, warten Sie eine Sekunde
  8. Schalten Sie das rote Licht aus, warten Sie eine Sekunde
  9. Zur Anweisungsnummer springen (6)

Auf diese Weise führt der Computer entweder die Anweisungen von Nummer (2) bis (6) immer wieder aus oder er führt die Anweisungen von (6) bis (9) immer wieder aus, je nach Position des Schalters.

Wie Computer funktionieren

Ein Allzweckcomputer hat vier Hauptabschnitte: die arithmetische und logische Einheit (ALU), die Steuereinheit, den Speicher und die Eingabe- und Ausgabegeräte (gemeinsam als E/A bezeichnet). Diese Teile sind durch Busse miteinander verbunden, die oft aus Gruppen von Drähten bestehen.

Die Steuereinheit, ALU, Register und Basis-E/A (und häufig andere eng damit verbundene Hardware) werden gemeinsam als bezeichnet Zentraleinheit (ZENTRALPROZESSOR). Frühe CPUs bestanden aus vielen separaten Komponenten, aber seit Mitte der 1970er Jahre wurden CPUs typischerweise auf einer einzigen aufgebaut Integrierter Schaltkreis genannt Mikroprozessor .

Steuergerät

Die Steuereinheit (häufig als Steuersystem oder zentrale Steuerung bezeichnet) steuert die verschiedenen Komponenten eines Computers. Es liest und interpretiert (dekodiert) Anweisungen im Programm einzeln. Das Steuersystem decodiert jede Anweisung und wandelt sie in eine Reihe von Steuersignalen um, die die anderen Teile des Computers steuern. Steuersysteme in fortschrittlichen Computern können die Reihenfolge einiger Anweisungen ändern, um die Leistung zu verbessern.

Eine Schlüsselkomponente, die allen CPUs gemeinsam ist, ist der Programmzähler, eine spezielle Speicherzelle (ein Register), die verfolgt, von welcher Stelle im Speicher die nächste Anweisung gelesen werden soll.

  Diagramm, das zeigt, wie eine bestimmte MIPS-Architekturanweisung vom Steuersystem decodiert würde.   Vergrößern Diagramm, das zeigt, wie eine bestimmte MIPS-Architekturanweisung vom Steuersystem decodiert würde.

Die Funktion des Steuerungssystems ist wie folgt – beachten Sie, dass dies eine vereinfachte Beschreibung ist und einige dieser Schritte je nach CPU-Typ gleichzeitig oder in einer anderen Reihenfolge ausgeführt werden können:

  1. Lesen Sie den Code für die nächste Anweisung aus der vom Programmzähler angezeigten Zelle.
  2. Decodieren Sie den numerischen Code für die Anweisung in einen Satz von Befehlen oder Signalen für jedes der anderen Systeme.
  3. Erhöhen Sie den Programmzähler, sodass er auf die nächste Anweisung zeigt.
  4. Lesen Sie alle Daten, die der Befehl erfordert, aus Zellen im Speicher (oder vielleicht von einem Eingabegerät). Der Ort dieser erforderlichen Daten wird typischerweise innerhalb des Befehlscodes gespeichert.
  5. Geben Sie die erforderlichen Daten an eine ALU oder ein Register.
  6. Wenn die Anweisung zur Ausführung eine ALU oder spezialisierte Hardware erfordert, weisen Sie die Hardware an, die angeforderte Operation auszuführen.
  7. Schreiben Sie das Ergebnis von der ALU zurück an einen Speicherplatz oder in ein Register oder vielleicht ein Ausgabegerät.
  8. Springe zurück zu Schritt (1).

Da der Programmzähler (konzeptionell) nur ein weiterer Satz von Speicherzellen ist, kann er durch in der ALU durchgeführte Berechnungen geändert werden. Das Addieren von 100 zum Programmzähler würde bewirken, dass die nächste Anweisung von einer Stelle 100 Stellen weiter unten im Programm gelesen wird. Anweisungen, die den Programmzähler modifizieren, werden oft als „Sprung“ bezeichnet und ermöglichen Schleifen (Anweisungen, die vom Computer wiederholt werden) und häufig eine bedingte Befehlsausführung (beides Beispiele für Kontrollfluss).

Es fällt auf, dass die Abfolge von Operationen, die die Steuereinheit durchläuft, um eine Anweisung zu verarbeiten, an sich wie ein kurzes Computerprogramm ist – und tatsächlich gibt es in einigen komplexeren CPU-Designs einen weiteren, noch kleineren Computer namens Mikrosequenzer, der einen Mikrocode ausführt Programm, das all diese Ereignisse auslöst.

Rechenwerk (ALU)

Die ALU kann zwei Klassen von Operationen ausführen: Arithmetik und Logik.

Der Satz arithmetischer Operationen, die eine bestimmte ALU unterstützt, kann auf Addieren und Subtrahieren beschränkt sein oder Multiplizieren oder Dividieren umfassen. Trigonometrie Funktionen (Sinus, Cosinus usw.) und Quadratwurzeln. Einige können nur mit ganzen Zahlen (Integers) arbeiten, während andere Fließkommazahlen verwenden, um reelle Zahlen darzustellen – wenn auch mit begrenzter Genauigkeit. Jeder Computer, der nur die einfachsten Operationen ausführen kann, kann jedoch so programmiert werden, dass er die komplexeren Operationen in einfache Schritte zerlegt, die er ausführen kann. Daher kann jeder Computer so programmiert werden, dass er jede arithmetische Operation ausführt – obwohl dies mehr Zeit in Anspruch nehmen wird, wenn seine ALU die Operation nicht direkt unterstützt. Eine ALU kann auch Zahlen vergleichen und boolesche Wahrheitswerte (wahr oder falsch) zurückgeben, je nachdem, ob einer gleich, größer oder kleiner als der andere ist ('ist 64 größer als 65?').

Logische Operationen beinhalten boolesche Logik: AND, OR, XOR und NOT. Diese können sowohl für die Erstellung komplizierter bedingter Anweisungen als auch für die Verarbeitung nützlich sein Boolesche Logik .

Superskalare Computer enthalten mehrere ALUs, sodass sie mehrere Befehle gleichzeitig verarbeiten können. Grafikprozessoren und Computer mit SIMD- und MIMD-Funktionen stellen häufig ALUs bereit, die Arithmetik mit Vektoren und durchführen können Matrizen .

Erinnerung

  Magnetkernspeicher waren in den 1960er Jahren ein beliebter Hauptspeicher für Computer, bis sie vollständig durch Halbleiterspeicher ersetzt wurden.   Vergrößern Magnetkernspeicher waren in den 1960er Jahren ein beliebter Hauptspeicher für Computer, bis sie vollständig durch Halbleiterspeicher ersetzt wurden.

Der Speicher eines Computers kann als eine Liste von Zellen angesehen werden, in die Zahlen eingegeben oder gelesen werden können. Jede Zelle hat eine nummerierte 'Adresse' und kann eine einzelne Nummer speichern. Der Computer kann angewiesen werden, 'die Nummer 123 in die Zelle mit der Nummer 1357 einzugeben' oder 'die Nummer in Zelle 1357 zu der Nummer in Zelle 2468 zu addieren und die Antwort in Zelle 1595 einzugeben'. Die im Speicher gespeicherten Informationen können praktisch alles darstellen. Buchstaben, Zahlen und sogar Computerbefehle können mit gleicher Leichtigkeit in den Speicher abgelegt werden. Da die CPU nicht zwischen verschiedenen Arten von Informationen unterscheidet, ist es Sache der Software, dem, was der Speicher als nichts anderes als eine Reihe von Zahlen sieht, Bedeutung zu verleihen.

In fast allen modernen Computern ist jede Speicherzelle so eingerichtet, dass sie Binärzahlen in Gruppen von acht Bits (als Byte bezeichnet) speichert. Jedes Byte kann 256 verschiedene Zahlen darstellen; entweder von 0 bis 255 oder -128 bis +127. Um größere Zahlen zu speichern, können mehrere aufeinanderfolgende Bytes verwendet werden (typischerweise zwei, vier oder acht). Wenn negative Zahlen erforderlich sind, werden sie normalerweise im Zweierkomplement gespeichert. Andere Anordnungen sind möglich, werden jedoch normalerweise nicht außerhalb spezialisierter Anwendungen oder historischer Kontexte gesehen. Ein Computer kann jede Art von Information im Speicher speichern, solange sie irgendwie in numerischer Form dargestellt werden kann. Moderne Computer haben Milliarden oder sogar Billionen Bytes Speicher.

Die CPU enthält einen speziellen Satz von Speicherzellen, Register genannt, die viel schneller gelesen und beschrieben werden können als der Hauptspeicherbereich. Je nach CPU-Typ gibt es typischerweise zwischen zwei und einhundert Register. Register werden für die am häufigsten benötigten Datenelemente verwendet, um zu vermeiden, dass jedes Mal auf den Hauptspeicher zugegriffen werden muss, wenn Daten benötigt werden. Da ständig an Daten gearbeitet wird, erhöht die Verringerung der Notwendigkeit, auf den Hauptspeicher zuzugreifen (der im Vergleich zu ALU und Steuereinheiten oft langsam ist), die Geschwindigkeit des Computers erheblich.

Computerhauptspeicher gibt es in zwei Hauptvarianten: Direktzugriffsspeicher oder RAM und Nur-Lese-Speicher oder ROM. RAM kann gelesen und beschrieben werden, wann immer die CPU es befiehlt, aber ROM ist mit Daten und Software vorgeladen, die sich nie ändern, sodass die CPU nur daraus lesen kann. ROM wird normalerweise verwendet, um die anfänglichen Startanweisungen des Computers zu speichern. Im Allgemeinen wird der Inhalt des RAM gelöscht, wenn die Stromversorgung des Computers abgeschaltet wird, während der ROM seine Daten auf unbestimmte Zeit behält. In einem PC enthält das ROM ein spezielles Programm namens BIOS, das das Laden des Betriebssystems des Computers von der Festplatte in den RAM orchestriert, wenn der Computer eingeschaltet oder zurückgesetzt wird. In eingebetteten Computern, die häufig keine Plattenlaufwerke haben, kann die gesamte Software, die zum Ausführen der Aufgabe erforderlich ist, im ROM gespeichert werden. Software, die im ROM gespeichert ist, wird oft als Firmware bezeichnet, da sie theoretisch eher Hardware als Software entspricht. Flash-Speicher verwischen die Unterscheidung zwischen ROM und RAM, indem sie Daten speichern, wenn sie ausgeschaltet sind, aber wie RAM wiederbeschreibbar sind. Flash-Speicher sind jedoch typischerweise viel langsamer als herkömmliche ROMs und RAMs, sodass ihre Verwendung auf Anwendungen beschränkt ist, bei denen keine hohen Geschwindigkeiten erforderlich sind.

In anspruchsvolleren Computern kann es einen oder mehrere RAM geben Cache-Erinnerungen die langsamer als Register, aber schneller als Hauptspeicher sind. Im Allgemeinen sind Computer mit dieser Art von Cache so ausgelegt, dass sie häufig benötigte Daten automatisch in den Cache verschieben, oft ohne dass der Programmierer eingreifen muss.

Eingang/Ausgang (E/A)

  Festplatten sind gängige E/A-Geräte, die mit Computern verwendet werden.   Vergrößern Festplatten sind gängige E/A-Geräte, die mit Computern verwendet werden.

I/O ist das Mittel, mit dem ein Computer Informationen von der Außenwelt empfängt und Ergebnisse zurücksendet. Geräte, die Eingaben oder Ausgaben für den Computer bereitstellen, werden als Peripheriegeräte bezeichnet. Bei einem typischen Personalcomputer umfassen Peripheriegeräte Eingaben wie Tastatur und Maus und Ausgaben wie Anzeige und Drucker. Festplatten, Disketten und optische Platten dienen sowohl als Ein- als auch als Ausgänge. Computernetzwerke sind eine andere Form von I/O.

Als E/A kann praktisch jedes Gerät verwendet werden, das für eine digitale Schnittstelle hergestellt werden kann. Der Computer im Motorsteuergerät eines modernen Automobil könnte die Position der Pedale und des Lenkrads, die Ausgabe des Sauerstoffsensors und Geräte lesen, die die Geschwindigkeit jedes Rads überwachen. Zu den Ausgabegeräten gehören die verschiedenen Lichter und Anzeigen, die der Fahrer sieht, sowie die Motorsteuerungen wie die Funkenzündkreise und Kraftstoffeinspritzsysteme. Bei einer digitalen Armbanduhr liest der Computer die Knöpfe und bewirkt, dass Zahlen und Symbole auf der Flüssigkristallanzeige angezeigt werden.

E/A-Geräte sind häufig eigenständige komplexe Computer mit eigener CPU und eigenem Speicher. Eine Grafikverarbeitungseinheit kann fünfzig oder mehr winzige Computer enthalten, die die Berechnungen durchführen, die zum Anzeigen von 3D-Grafiken erforderlich sind. Moderne Desktop-Computer enthalten viele kleinere Computer, die die Haupt-CPU bei der Ausführung von E/A unterstützen.

Multitasking

Während ein Computer so betrachtet werden kann, als würde er ein gigantisches Programm ausführen, das in seinem Hauptspeicher gespeichert ist, ist es bei manchen Systemen notwendig, den Anschein zu erwecken, als würden mehrere Programme gleichzeitig ausgeführt. Dies wird dadurch erreicht, dass der Computer schnell zwischen der Ausführung jedes Programms der Reihe nach umschaltet. Ein Mittel, mit dem dies erreicht wird, ist ein spezielles Signal namens Interrupt, das den Computer periodisch veranlassen kann, die Ausführung von Anweisungen dort zu stoppen, wo er war, und stattdessen etwas anderes zu tun. Indem sich der Computer daran erinnert, wo er vor der Unterbrechung ausgeführt wurde, kann er später zu dieser Aufgabe zurückkehren. Wenn mehrere Programme 'gleichzeitig' laufen, kann der Interrupt-Generator mehrere hundert Interrupts pro Sekunde verursachen, was jedes Mal zu einem Programmwechsel führt. Da moderne Computer Anweisungen normalerweise mehrere Größenordnungen schneller ausführen als die menschliche Wahrnehmung, scheinen viele Programme gleichzeitig zu laufen, obwohl immer nur eines zu einem bestimmten Zeitpunkt ausgeführt wird. Diese Multitasking-Methode wird manchmal als „Time-Sharing“ bezeichnet, da jedem Programm der Reihe nach ein „Slice“ an Zeit zugewiesen wird.

Vor der Ära billiger Computer bestand der Hauptzweck von Multitasking darin, vielen Menschen die gemeinsame Nutzung eines Computers zu ermöglichen.

Anscheinend würde Multitasking dazu führen, dass ein Computer, der zwischen mehreren Programmen umschaltet, langsamer läuft - in direktem Verhältnis zur Anzahl der laufenden Programme. Die meisten Programme verbringen jedoch viel Zeit damit, auf langsame Eingabe-/Ausgabegeräte zu warten, um ihre Aufgaben zu erledigen. Wenn ein Programm darauf wartet, dass der Benutzer mit der Maus klickt oder eine Taste auf der Tastatur drückt, dauert es keine 'Zeitscheibe', bis das Ereignis, auf das es wartet, eingetreten ist. Dies gibt Zeit für die Ausführung anderer Programme frei, so dass viele Programme gleichzeitig ohne unannehmbaren Geschwindigkeitsverlust ausgeführt werden können.

Multiprocessing

  Cray entwarf viele Supercomputer, die schweres Multiprocessing verwendeten.   Vergrößern Cray entwarf viele Supercomputer, die schweres Multiprocessing verwendeten.

Einige Computer können ihre Arbeit auf eine oder mehrere separate CPUs aufteilen, wodurch eine Konfiguration mit mehreren Prozessoren entsteht. Traditionell wurde diese Technik nur in großen und leistungsstarken Computern wie Supercomputern, Mainframe-Computern und Servern verwendet. Personal- und Laptop-Computer mit mehreren Prozessoren und mehreren Kernen (mehrere CPUs auf einer einzigen integrierten Schaltung) sind jedoch inzwischen weit verbreitet und werden infolgedessen zunehmend in Märkten der unteren Preisklasse verwendet.

Insbesondere Supercomputer haben oft höchst einzigartige Architekturen, die sich erheblich von der grundlegenden Architektur gespeicherter Programme und von Allzweckcomputern unterscheiden. Sie verfügen oft über Tausende von CPUs, kundenspezifische Hochgeschwindigkeitsverbindungen und spezialisierte Computerhardware. Solche Konstruktionen sind aufgrund des großen Umfangs der Programmorganisation, die erforderlich ist, um die meisten verfügbaren Ressourcen auf einmal erfolgreich zu nutzen, in der Regel nur für spezialisierte Aufgaben nützlich. Supercomputer werden normalerweise in groß angelegten Simulationen, Grafik-Rendering und verwendet Kryptographie Anwendungen, sowie mit anderen sogenannten 'peinlich parallelen' Aufgaben.

Vernetzung und Internet

  Visualisierung eines Teils der Routen im Internet.   Vergrößern Visualisierung eines Teils der Routen im Internet.

Computer werden seit den 1950er Jahren verwendet, um Informationen an mehreren Orten zu koordinieren, wobei das SAGE-System des US-Militärs das erste groß angelegte Beispiel eines solchen Systems war, das zu einer Reihe von kommerziellen Spezialsystemen wie Sabre führte.

In den 1970er Jahren begannen Computeringenieure an Forschungseinrichtungen in den USA damit, ihre Computer mithilfe von Telekommunikationstechnologie miteinander zu verbinden. Diese Bemühungen wurden von ARPA (jetzt DARPA) finanziert, und das daraus hervorgegangene Computernetzwerk wurde ARPANET genannt. Die Technologien, die das Arpanet ermöglichten, verbreiteten sich und entwickelten sich weiter. Mit der Zeit breitete sich das Netzwerk über akademische und militärische Institutionen hinaus aus und wurde als das bekannt Internet . Das Aufkommen von Netzwerken beinhaltete eine Neudefinition der Natur und der Grenzen des Computers. Um es mit den Worten von John Gage und Bill Joy (von Sun Microsystems) zu sagen: „Das Netzwerk ist der Computer“. Computerbetriebssysteme und -anwendungen wurden modifiziert, um die Fähigkeit einzuschließen, die Ressourcen anderer Computer im Netzwerk, wie etwa Peripheriegeräte, gespeicherte Informationen und dergleichen, als Erweiterungen der Ressourcen eines einzelnen Computers zu definieren und darauf zuzugreifen. Anfangs standen diese Einrichtungen hauptsächlich Menschen zur Verfügung, die in High-Tech-Umgebungen arbeiteten, aber in den 1990er Jahren verbreiteten sich Anwendungen wie E-Mail u Weltweites Netz , kombiniert mit der Entwicklung billiger, schneller Netzwerktechnologien wie Ethernet und ADSL, führte dazu, dass Computernetzwerke fast überall allgegenwärtig wurden. Tatsächlich wächst die Zahl der vernetzten Computer phänomenal. Ein sehr großer Teil der PCs verbindet sich regelmäßig mit dem Internet zu kommunizieren und Informationen zu erhalten. 'Drahtlose' Netzwerke, die häufig Mobiltelefonnetze verwenden, haben dazu geführt, dass Netzwerke selbst in mobilen Computerumgebungen zunehmend allgegenwärtig werden.

Weitere Themen

Hardware

Der Begriff Hardware- umfasst alle Teile eines Computers, die greifbare Objekte sind. Schaltungen, Displays, Netzteile, Kabel, Tastaturen, Drucker und Mäuse sind allesamt Hardware.

Erste Generation (mechanisch/elektromechanisch) Rechner Antikythera-Mechanismus, Differenzmaschine, Norden-Bombenvisier
Programmierbare Geräte Jacquard-Webstuhl, Analytical Engine, Digi-Comp I, Digi-Comp II, Geniac, Harvard Mark I
Zweite Generation (Vakuumröhren) Rechner Atanasoff-Berry-Computer
Programmierbare Geräte ENIAC, EDSAC, EDVAC, UNIVAC I
Dritte Generation (diskrete Transistoren und integrierte SSI-, MSI-, LSI-Schaltungen) Großrechner System/360, BÜNDEL
Mini-Computer PDP-8, PDP-11, System/32, System/36
Vierte Generation (integrierte VLSI-Schaltungen) Mini-Computer VAX, AS/400
4-Bit-Mikrocomputer Intel 4004, Intel 4040
8-Bit-Mikrocomputer Intel 8008, Intel 8080, Motorola 6800, 6502, Zilog Z80
16-Bit-Mikrocomputer 8088, Zilog Z8000, WDC 65816/65802
32-Bit-Mikrocomputer 80386, Pentium, 68000, ARM-Architektur
64-Bit-Mikrocomputer x86-64, PowerPC, MIPS, SPARC
Eingebetteter Computer 8048, 8051
Persönlicher Computer Desktop-Computer, Heimcomputer, Laptop-Computer, Personal Digital Assistant (PDA), tragbare Computer, Tablet-Computer, tragbare Computer
Computer der Serverklasse
Theoretisch/experimentell So viel wie ein Computer
Chemischer Computer
DNA-Berechnung
Optischer Computer
Peripheriegerät (Eingabe/Ausgabe) Eingang Maus, Tastatur, Joystick, Bildscanner
Ausgabe Monitor, Drucker
Beide Diskettenlaufwerk, Festplatte, optisches Laufwerk, Fernschreiber
Computerbusse Kurze Reichweite RS-232, SCSI, PCI, USB
Große Reichweite (Computernetzwerke) Ethernet, Geldautomat, FDDI

Software

Software bezieht sich auf Teile des Computers, die keine materielle Form haben; Programme, Daten, Protokolle usw. sind alle Software. Wenn Software in Hardware gespeichert ist, die nicht einfach geändert werden kann (wie z. B. BIOS-ROM in einem IBM-PC-kompatiblen), wird sie manchmal als Firmware bezeichnet, um anzuzeigen, dass sie in einen Bereich der Unsicherheit zwischen Hardware und Software fällt.

Betriebssystem Unix /BSD UNIX System V, AIX, HP-UX, Solaris (SunOS), FreeBSD, NetBSD, IRIX
GNU / Linux Liste der Linux-Distributionen, Vergleich der Linux-Distributionen
Microsoft Windows Windows 9x, Windows NT, Windows CE
ZWEI DOS/360, QDOS, PC-DOS, MS-DOS, FreeDOS
Mac OS Mac OS Classic, Mac OS X
Eingebettet und in Echtzeit Liste eingebetteter Betriebssysteme
Experimental Amöbe, Oberon/ Bluebottle, Plan 9 von Bell Labs
Bibliothek Multimedia DirectX, OpenGL, OpenAL
Programmierbibliothek C-Standardbibliothek
Daten Protokoll TCP/IP, Kermit, FTP, HTTP, SMTP
Datei Format HTML, XML, JPEG, MPEG, PNG
Benutzeroberfläche Grafische Benutzeroberfläche (WIMP) Microsoft Windows , Gnom , QNX Photon, CDE, GEM
Text-Benutzeroberfläche Befehlszeilenschnittstelle, Shells
Sonstiges
Anwendung Office-Suite Textverarbeitung, Desktop-Publishing, Präsentationsprogramm, Datenbankverwaltungssystem, Terminplanung und Zeitmanagement, Tabellenkalkulation, Buchhaltungssoftware
Internet Zugang Browser, E-Mail-Client, Webserver, Mail-Transfer-Agent, Instant Messaging
Design und Herstellung Computergestütztes Design, Computergestützte Fertigung, Anlagenmanagement, Roboterfertigung, Lieferkettenmanagement
Grafik Rastergrafik-Editor, Vektorgrafik-Editor, 3D-Modellierer, Animationseditor, 3D-Computergrafik, Videobearbeitung, Bildverarbeitung
Audio Digitaler Audioeditor, Audiowiedergabe, Mischen, Audiosynthese, Computermusik
Softwareentwicklung Compiler, Assembler, Interpreter, Debugger, Texteditor, integrierte Entwicklungsumgebung, Leistungsanalyse, Revisionskontrolle, Softwarekonfigurationsverwaltung
Lehrreich Edutainment, Lernspiel, Serious Game, Flugsimulator
Spiele Strategie, Arcade, Puzzle, Simulation, Ego-Shooter, Plattform, Massively Multiplayer, Interactive fiction
Sonstiges Künstliche Intelligenz, Antivirensoftware, Malware-Scanner, Installations-/Paketverwaltungssysteme, Dateimanager

Programmiersprachen

Programmiersprachen bieten verschiedene Möglichkeiten, Programme zu spezifizieren, die auf Computern ausgeführt werden sollen. Im Gegensatz zu natürlichen Sprachen sind Programmiersprachen so konzipiert, dass sie keine Mehrdeutigkeit zulassen und prägnant sind. Sie sind reine Schriftsprachen und oft schwer laut zu lesen. Sie werden im Allgemeinen entweder von einem Compiler oder einem Assembler in Maschinensprache übersetzt, bevor sie ausgeführt werden, oder direkt zur Laufzeit von einem Interpreter übersetzt. Manchmal werden Programme durch ein Hybridverfahren der beiden Techniken ausgeführt. Es gibt Tausende verschiedener Programmiersprachen – einige sind für allgemeine Zwecke gedacht, andere nur für hochspezialisierte Anwendungen.

Listen von Programmiersprachen Zeitachse der Programmiersprachen, Kategorische Liste der Programmiersprachen, Generationsliste der Programmiersprachen, Alphabetische Liste der Programmiersprachen, Liste der esoterischen Programmiersprachen, Nicht-Englisch-basierte Programmiersprachen
Häufig verwendete Assemblersprachen ARM, MIPS, x86
Häufig verwendete Hochsprachen BASIC , C, C++ , C#, COBOL, Fortran, Java, Lisp, Pascal
Häufig verwendete Skriptsprachen Javascript, Python , Rubin, PHP, Perl

Berufe und Organisationen

Da sich die Verwendung von Computern in der Gesellschaft verbreitet hat, gibt es eine zunehmende Anzahl von Berufen, die Computer beinhalten. Dem Thema Hardware, Software und Firmware folgend, werden die Gehirne von Menschen, die in der Branche arbeiten, manchmal respektlos als Wetware oder „Meatware“ bezeichnet.

Hardwarebezogen Elektrotechnik , Elektrotechnik, Technische Informatik
Softwarebezogen Mensch-Computer-Interaktion, Informationstechnologie, Softwareentwicklung, Systemanalytiker, Webdesign

Die Notwendigkeit, dass Computer gut zusammenarbeiten und Informationen austauschen können, hat den Bedarf an vielen Normungsorganisationen, Klubs und Gesellschaften sowohl formeller als auch informeller Art hervorgebracht.

Normengruppen ANSI, IEC, IEEE, IETF, ISO, W3C
Professionelle Gesellschaften ACM, SIGGRAPH, IET
Freie/Open-Source-Softwaregruppen Free Software Foundation, Mozilla Foundation, Apache Software Foundation