Technische Informatik 2:Folienwissen
Übersicht der Folien
2: 040, 050, 090, 120
3: 010, 020, 090, 120, 180, 190, 200
4: 010
5: 010, 040, 050, 080, 090
7: Allgmeine Begriffe
Bitte nur einzelne Absätze bearbeiten. Wenn jemand Strukturverbesserungen hat, kann er ja 'ne Diskussion auf machen
--Omega_Maisfeld 13. Jul 2005 13:37 (CEST)
Architekturmodellierung mit Petri-Netzen
Formale Definition von Pertinetzen (2_040)
Dis is nun echt fürn Arsch
Schaltregeln (2_050)
- Transitionen schalten nur wenn sowol alle Vor- als auch Nachbedingungen erfüllt sind
- Vorbedingungen sind erfüllt wenn: z.B. eine Marke im jeweiligen Platz liegt
- Nachbedingung sind erfüllt wenn noch genug Paltz ist die Marken im jeweiligen Platz abzulegen
Konflikte (2_090)
Konflikte treten nur dann auf wenn mehrere Transitionen gleichzeitig schaltfähig sind (Vor- und Nachbedingungen müssen erfüllt sein), aber das Schalten einer Vor- oder Nachbedingungen, eine anderen Transition so ändert, dass diese nicht mehr schalten kann.
- Vorkonflikt: Die Markenanzahl im "Vor"-Platz würde beim gleichzeitigen Schallten negativ werden.
- Nachkonflikt: Die Markenanzahl im "Nach"-Platz würde die Kapazität überschreiten.
P.S.: JayKay hat es immer noch nicht gerafft.
Interpretierte Petri-Netze (2_120)
- Bewertungsfunktion an den Transitionen; sie sind schaltfäig wenn der Wert "1" ist (x_1^x_2)
- Ausgabefunktionen an den Plätzen; sie sind 1 wenn min eine Marke drin ist
- Zeitbewertungsfuktionen an den Transitionen; Die Transitionen schalten erst wenn sie für z.B. t>5s schaltfähig waren
Prozessor-Baugruppen und Prozessorzugeordnete Baugruppen
Grundarchitekturen (3_010)
- Harvard - Archiktektur
- Princeton (von Neumann) - Architektur
Prozessor Grundstruktur (3_020)
Die in 3_20 abgebildete Struktur ist die Grundstruktur, nach der jede CPU arbeitet, sei es die im Taschenrechner oder die von IBM's Cell (nur der Pentium 4 arbeitet noch mit Holzkohle).
Die komischen Kästchen auf dem Bild haben verschiedene Aufgaben:
- ALE bzw. ALU, Arithmetical Logical Unit: Dieses Teil ist quasi das Herzstück der CPU, denn sie ist für die Berechnung von Werten zuständig. Genauer gesagt ist sie in der Lage, 2 Eingangsoperanden zu einem Ausgangsoperanden mit Hilfe von arithmetischen (ADD, SUB, MULT...) oder logischen (OR, XOR, ...) Operationen zu verknüpfen. Die ALU ist eine kombinatorische Schaltung, daher benötigt sie viel "Unterstützung", um funkionieren zu können, dazu sind die ganzen Kästchen drumrum da.
- OR: Operandenregister = Speicher für die zu verarbeitenden Operanden (Ergebnis typischerweise nach OR1). 'S gibt davon mehrere, also ORi.
- OA: Operandenadressregister, hier liegt die Adresse des zu holenden Operanden drin, wenn er ausm Speicher geholt werden muss.
- PSR: Prozessorstatusregister = Speicher für die Flags (Carry, Overflow, Frau-am-Rechner, etc etc)
- BR: Befehlsregister, enthält aktuellen Befehl in Maschinencode. Damit die ALU diesen Maschinencode auch versteht braucht man den...
- BD: Befehlsdekoder, wandelt die eingehenden Befehle so um, das die ALU sie verarbeiten kann.
- BA: Befehlsadressregister (auch PC - Program Counter) - Zeigt auf die Adresse des folgenden Befehls - das ist quasi der Leitfaden durch den Befehlsdschungel. Die Befehlsadresse wird meist durch einfaches Inkrementieren geändert, es besteht jedoch die Möglichkeit, sie auch mit Hilfe des DBI's zu verändern.
Wer sich noch an TI1 bzw. AlPro erinnern kann: BA und BR zusammen machen in etwa das, was der Befehlszähler der Registermaschine macht.
- AST: Ablaufsteuerung = sequentielle Schaltung, die das logisch-zeitliche Verhalten der Befehle steuert - sie sorgt dafür, das während der Befehlsabarbeitung nichts ausm Ruder läuft und alles einer bestimmten Vorgabe folgt.
- Busse: öffentliche Datennahverkehrsmittel. Getrennte Busse für Daten (DB), Adressen (AB) und zum Steuern (SB). Bedingt durch ihren Aufbau brauchen die Dinger eine elektronische Verstärkung, die Treiber (DT, AT, ST). Vor der Signalverstärkung werden die jeweiligen Busse als intern gekennzeichnet (DBI, ABI, SBI). Die Treiber sind also das Tor zur "Welt außerhalb der CPU".
Verallgemeinerter Befehlsablauf im Prozessor (3_090)
Programmablauf (3_120)
- Verzweigung (JMP): Nach diesem Befehl zeigt das BA auf den neuen Befehl auf den gerspungen wird.
- Unterprogammaufruf (CALL mit RET (Rückkehr)): Mit CALL kann man ein Unterprogramm aufrufen, etwa so, wie wenn man in Java eine Funktion aufruft. Dazu muss man diesen Wunsch aber dem BA mitteilen. Also wird, mittels DBI, die ürsprüngliche Befehlsadresse im BA auf eine neue geändert. Problem: Was macht man mit der Adresse, die vorher im BA stand? Die braucht man später, damit man vom Unterprogramm wieder ins "Hauptprogramm" zurückspringen kann. Also wird die ursprüngliche Adresse im Stack gespeichert. Problem gelöst? Nicht ganz. Denn beim Zurückspringen braucht man auch die urpsrünglichen Flags aus dem PSR wieder, also müssen diese beim CALL auch noch in den Stack geschrieben werden.
So. Nehmen wir an, CALL hat funkioniert und das Unterprogramm ist abgearbeitet. Jetzt will man zurückspringen, das macht der RET-Befehl. Der muss wissen, wohin er springen soll, also holt er sich die ursprüngliche Adresse ausm Stack. Wenn er einmal im Keller ist, bringt er auch gleich die ursprünglichen Flags mit. Nuja und mit diesen Informationen wird an die Stelle im Hauptprogramm gesprungen, die direkt nach dem CALL-Befehl kommt.
Buszyklus, synchron, lesen (3_180)
Beim synchronen Lesen vom Speicher sind Prozessor und Speicher zeitlich aufeinander abgestimmt - daher "synchron".
Wenn der Prozessor was vom Speicher will dann schickt er die Adresse der Speicherzelle auf den Adressbus und teilt dem Speicher per MRD (Memory read (request)) mit, dass er aktiv werden soll. Dann wartet der Prozessor solange, wie ein Speicher normalerweise dafür braucht um Daten intern auszulesen und auf den Datenbus zu schubsen, plus eine gewisse Toleranzzeit (falls der Speicher mal länger braucht). Das sind normalerweise einige Nanosekunden. In der Zeit liest der Speicher die Daten von der Adresse, die auf dem Adressbus liegt und gibt das Ergebnis auf den Datenbus aus. Sobald die Wartezeit des Prozessors verstrichen ist liest dieser die Daten vom Datenbus ein und schreibt sie in ein Register seiner Wahl. Anschließend schaltet er das MRD-Steuersignal wieder auf Null, damit der Speicher wieder inaktiv werden, und somit auf eine neue Speicheranforderung warten, kann. Nun kann der Prozessor mit der internen Abarbeitung seiner Befehle fortfahren.
Für die Freaks (ignore for TI2-Klausur): Der gemeine PC-Hardware-Tuner weiß ja was mit dem Begriff Speicherlatenzen anzufangen. DRAM Command Time beschreibt dabei die Zeit bis zum Aufruf der MRD (meist 1 Takt), RAS und CAS die Zeit, die der MRD braucht, um Daten aus dem Speicher zu holen (RAS ist die Row-Zeit und CAS halt die Cols-Zeit). Aus RAS und CAS bestimmt sich der CL-Wert des Speichers (meist CL2 bis CL3).
Das synchrone Lesen von der Eingabe funktioniert analog, nur das überall "Speicher" durch "Eingabe" bzw. "Input" ersetzt wird und der MRD heißt dann IOR.
Buszyklus, synchron, schreiben (3_190)
Das ganze funktioniert im Endeffekt genauso, wie vom Speicher zu Lesen. Die einzigen Unterschiede sind, dass der Prozessor außer der Adresse auf den Adressbus auch die zu schreibenden Daten auf den Datenbus packt bevor er dem Speicher das Signal gibt aktiv zu werden. Dies geschieht hier anstelle des "MRD" durch das "MWT" (memory write).
- Danach wird wieder gewartet bis der Speicher mit Sicherheit fertig wäre
- das MWT auf 0 gesetzt, damit der Speicher auf neue Anfragen reagieren kann
- und mit der "normalen" Arbeit fortgefahren
Bei der Ausgabe von Daten (auf andere Hardware als dem Speicher) wieder "Speicher" durch "Ausgabe" ersetzen und MWT durch IOW (input/output write)
Buszyklus, asynchron, lesen (3_200)
Beim asynchronen auslesen von Speicheradressen wartet der Prozessor genau so lange bis der Speicher fertig ist die Daten zu liefern. Speicher und Prozessor laufen also asynchron
Der Anfang des Lesens entspricht dem des "synchronen Speicherlesens"
"Will" der Prozessor Daten aus dem Speicher lesen so legt er an den Adressbus die Adresse an, die er auszulesen hat. Anschließend setzt er das Steuersignal MRD auf eins um dem Speicher zu Signalisieren, dass er Arbeit zu verrichten hat. Der Prozessor wartet nun solange, bis er vom Speicher eine Bestätigung erhält, dass die Speicherzelle erfolgreich ausgelesen wurde und sich die angeforderten Daten auf dem Datenbus befinden. Dieses "OK" erfolgt durch setzen des XACK (execution acknowledge) durch den Speicher. In der Zeit macht natürlich der Speicher das grade beschriebene und setzt sobald er fertig ist das XACK auf eins. Sobald der Prozessor sein Ok erhalten hat schreibt er den Wert, der vom Speicher auf den Datenbus gelegt wird in ein Register. Anschließend setzt er das MRD wieder auf null, damit der Speicher passiv werden kann. Dabei schaltet der Speicher das XACK wieder aus. Der Prozessor kann nun weiterarbeiten.
Der Hauptvorteil, der asynchronen gegenüber der synchronen Speicherzugriffe ist, dass der Prozessor nur genau so lange auf den Speicher wartet, bis dieser wirklich fertig ist und nicht eine Durchschnittliche-Speicherzugriff-plus-Reserve-Zeit Dies kann den Speicherzugriff beschleunigen.
Nachteil ist, dass ich für das XACK zusätzliche Logiken benötige, die den Aufbau verkomplizieren
Auch hier gilt mal wieder, dass man Speicher einfach wieder durch I/O erstzen kann
Speicherbaugruppen
Grundelemente der Speichertechnik (4_S010)
sRAM
- Aufbau:
- besteht auf einer bistabilen Kippstufe (Flip-Flop)
- Eigenschaften:
- hält seine Daten solange die Spannung nicht zusammenbricht
dRAM
- Aufbau:
- besteht aus einem Kondensator
- Eigenschaften:
- hält seine Daten solange der Kondensator eine Spannung über einer bestimmten Spannung hält
- muss regelmäßig "refresht" werden
Speicherbaugruppe mit ROM oder sRAM (4_010)
- Die binäre Speicheradresse aus (AB) wird in einen binären A(high)- und A(low)-Teil zerlegt (nachdem sie vom Treiber verstärkt wurde).
- Der Decoder dekodiert A(high) und steuert je ein Speicher an (über CE0 bis CEn). Mit n A(high) Bits lassen sich maximal 2n CE-Leitungen schalten.
- Der Speicher enthält mehrere Bytes von denen eins über A(low) ausgewählt wird.
- Wenn die Daten aus z.B. Wörtern bestehen werden über (CE) immer paarweise zwei Speicher ausgewählt. Deren beide Bytes dann ein Datenwort ergeben.
Funktionseinheiten für Ein- und Ausgabe
Grundelemente der parallelen dig. E/A (5_010)
Ausgabe
Falls der Prozessor Daten ausgeben will legt er auf den Datenbus die Daten, die er in die Umwelt schreiben will und auf den Adressbus die Adresse des Ausgangs. Um zu signalisieren, dass er jetzt eine Ausgabe vornehmen will setzt er das IOW (input/output write) auf eins. Adressbus und IOW werden von einem Decoder ausgewertet und genau der Ausgang angesprochen, über den die Daten ausgegeben werden sollen. Der Decoder ist also nichts anderes, als ein Demultiplexer mit zusätzlichen Eingängen, die festlegen ob jetzt geschrieben oder gelesen werden soll. Dieses Ansprechen der Ausgänge erfolgt mittels des Strobe (STB) signals. Sobald ein Ausgangsregister ein Strobesignal erhält übernimmt es die Daten aus dem Datenbus und stellt sie über den exterternen Datenbus der Peripherie zur verfügung. Dabei arbeitet das Register wie ein FlipFlop und hält die Daten solange, bis ein neues Übernahmesignal (Strobe) vom Decoder kommt.
Eingabe
Funktioniert prinzipiell genauso wie die Eingabe.
- Prozessor legt auf den Adressbus die Adresse, von der er lesen will
- IOR (Input/Output Read) wird auf eins gesetzt.
- Decoder wertet Adresse und IOR aus und erzeugt Outenable (OE) signal an dem Augang, von dem gelesen werden soll (welcher im Adressbus stand)
- Tristatetreiber reicht Signal vom äußeren Datenbus Din auf den internen Dout weiter (warum das nu sorum benannt ist ist mir unklar) - (AdZ:) Weil von der E/A-Einheit aus geschaut wird - Über Din kommen die Daten in die E/A-Einheit rein und über den Dout gehnse halt wieder raus, an den Prozessor.
Der Tristatetreiber ist dafür da, damit Prozessorinterne Komponenten nicht zerstört werden, sobald an den äußeren Datenbus eine Eins angelegt wird. Denn der Treiber ist solange Hochohmig , solange kein OE anliegt und somit werden in dieser Zeit auch keine Daten von außen nach innen durchgereicht. Zur Erinnerung TI1: Man darf keine zwei Ausgänge miteinander verbinden sonst "wird die Schaltung zu einem schlechten Widerstand".
Gundstruktur bzw. Ablauf zur synchr. Parall-E/A (5_040 und 5_050)
Die parallele digitale E/A wird nun um eine Synchronisation ereitert. Wozu ist das gut? Naja, nehemn wir mal an, diese E/A vermittelt zwischen PC und Drucker. Will man jetzt "Hello" drucken, dann kann der Drucker zwar das H und das e drucken, er kann ohne Synchro aber nich unterscheiden, wann das erste l aufhört und das zweite l anfängt, weil die l's die selbe Adresse haben.
Damit man dieses Problem löst, muss man die beiden zu verbindenen Geräte mittels der E/A synchronisieren. Bus1 ist z.B. der PC (Sender), Bus2 ist der Drucker (Empfänger). Die beiden Synchronisierungslogiken steuern nun den Ablauf des Sendens und Empfangens.
Wenn die Empfängerlogik der Meinung ist, der empfangende Bus wäre bereit Daten aufzunehmen so signalisiert sie das mit einem Ready (RDY). ["Juhuuu, hier, ich bin frei, ich kann daten aufnehmen"]
Sind Daten beim Sender Verfügbar (und RDY ist auf eins) wird von der Sende-Synchrologik die DAV-Leitung (Data available - Daten verfügbar) auf eins gesetzt. ["Jooo, und ich aknn dir Daten geben"]
Nun werden die Daten vom Empfänger mittels paralleler Digitaler Eingabe entgegengenommen und anschließend das RDY ausgeschalten. Dadurch weiß der Sender, dass der Empfänger die Daten gelesen hat und nun erstmal keine Daten mehr entgegenehmen kann. Der Sender wird wieder passiv (DAV=0) und der Empfänger verarbeitet die gelesenen Daten. Nach der Verarbeitung geht der ganze Rassel wieder von vorn los.
Grundstruktur der asynchronen seriellen E/A(5_080)
Datenfromate bei der asynchonen seriellen Übertragung (5_090)
- Bei serieller asynchroner Übertragung kann man nur kurze Datenblöcke übertragen, im Beispiel hier sind es lediglich 8 Datenbits (D0 bis D7)
- Man benötigt ein Start- und ein Stopbit (damit die Schaltung weiß, wo der Block aufhört bzw wieder endet)
- optional kann man ein Parity-Bit (Prüfbit) einbauen, so das der Block auf Übertragungsfehler überprüft werden kann.
Parallel vs. Seriell
Parallel:
- n Leitungen > höherer Verbindungswaufwand
- 1 Zeitfenster, n Signale
- schneller über die Zeit
- Rechnerintern
- Beispiele: PC <-> Drucker (Parallel Port)
Seriell
- nur eine Leitung > geringerer Aufwand
- n Zeitfenster, je ein Signal
- langsamer
- Rechnerextern
- Beispiele: USB, COM (Modem, serielle Mäuse), Ethernet, S/PDIF
Synchron vs. Asynchron
Synchron:
- Vorteile: Mehrteilnehmerbetrieb, längere Datenblöcke, CRC als Sicherungsverfahren
- Nachteile: komplizierte Realisierung
Asynchron
- Vorteile: Keine Taktübertragung nötig, einfach zu realisieren
- Nachteile: Nur kurze Datenblöcke, lediglich Parität als Sicherung (damit nur Fehler von maximal 1 Bit erkennbar)