Ein Computer ist eine Rechenmaschine. Sie dient zur elektronischen Datenverarbeitung. Elektronische Datenverarbeitung ist die Verarbeitung von Daten durch Elektronik. 

**Daten** sind Informationen jeglicher Art welche zum Zweck der Verarbeitung abgelegt werden. Zum Beispiel Informationen über eine Person, Gegebenheiten oder ähnliches. Traditionell hat man diese Informationen zu Papier gebracht. Dies hat jedoch einen gewaltigen Nachteil: Die Informationen können nur von einem Menschen unter großem zeitlichen Aufwand verarbeitet werden. Außerdem ist dies sehr fehleranfällig.

Die Datenverarbeitung hat im Laufe der Geschichte viele Neuerungen erfahren. Von der manuellen (=händischen) Verarbeitung von Informationen über die rein mechanische, elektrische und schlussendlich elektronische Verarbeitung von Informationen.

Elektronische Verarbeitung von Daten bedeutet Informationen mit Hilfe von Elektronik zu manipulieren. (also sortieren, verarbeiten, berechnen, etc.)

Heutige Computer haben die Aufgabe, für uns die Verarbeitung von Daten durchzuführen. Darin sind sie besonders schnell und zuverlässig.

Ein Computer führt Aufgaben als Algorithmen durch. Algorithmen beschreiben einen Vorgang (entweder mathematisch oder als Programm)

```python
def rechnung(x):
     zahl=3*x+2
     return zahl*2
```

Ein Computer führt einen Algorithmus in Form eines Programms schrittweise aus.
## Aufbau eines Computers

Computer (eigentlich heutzutage nur ein kleiner Teil der CPU, früher aber ganze Räume) halten sich grob an die Von-Neumann-Architektur.
![[Pasted image 20251020103354.png]]
Die Von-Neumann-Architektur besteht aus ....
Die Aufgaben der verschiedenen Einheiten sind:
- Ein- und Ausgabewerk:
- Rechenwerk:
- Steuerwerk: 
- Speicherwerk:

Die ALU eines Computers ist die Arithmetisch Logische Einheit (Arithmetic Logical Unit). Sie führt Berechnungen und Logikoperationen aus.

Arithmetik bedeutet die Ausführung von Grundrechnungsarten wie Addition, Multiplikation, etc.
Logik bedeutet ...

Ergebnisse und Zahlen die für die Rechnung benötigt werden, werden in Speicherzellen die man Register nennt abgelegt. Diese enthalten genau 1 Wert. (Wertespeicher)

Bei 64 Bit CPUs kann der Computer 64 Bit in einen Register legen und verarbeiten.

Das Speicherwerk des Computers (innerhalb der CPU) ist der Cache. Cache ist ...
## Programme

Programme sind ...

Wenn wir programmieren, dann schreiben wir Quellcode, welcher vom Compiler (z.B. bei C) oder Interpreter (z.B. bei Python) zu für die CPU verarbeitbare Befehle umgewandelt wird. 

Die CPU führt Programme von Oben nach Unten (Vom Anfang zum Ende) aus.

Befehle für die CPU sehen etwa so aus: 

```
0000000000001139 <main>:
    1139:	55                   	push   %rbp
    113a:	48 89 e5             	mov    %rsp,%rbp
    113d:	48 8d 05 c0 0e 00 00 	lea    0xec0(%rip),%rax
    1144:	48 89 c7             	mov    %rax,%rdi
    1147:	e8 e4 fe ff ff       	call   1030 <puts@plt>
    114c:	b8 00 00 00 00       	mov    $0x0,%eax
    1151:	5d                   	pop    %rbp
    1152:	c3                   	ret
```
Erste Spalte: Position im Programm, Zweite Spalte: Eigentlicher Bytecode, Dritte Spalte: Assemblerbefehle

Bytecode ist der von der CPU dekodierbare Befehl welcher vom Steuerwerk interpretiert und in Steuersignale umgesetzt wird.

Assembler ist eine für Menschen lesbare Repräsentation des Bytecodes.

## Speicherhierarchie
- Was ist die Speicherhierarchie?
- Was bedeutet die Speicherhierarchie für den Computer?