Technische Informatik 2:Folienwissen: Unterschied zwischen den Versionen
Pegro (Diskussion | Beiträge) |
Pegro (Diskussion | Beiträge) |
||
Zeile 83: | Zeile 83: | ||
Beim synchronen Lesen vom Speicher sind Prozessor und Speicher zeitlich aufeinander abgestimmt - daher "synchron". | Beim synchronen Lesen vom Speicher sind Prozessor und Speicher zeitlich aufeinander abgestimmt - daher "synchron". | ||
− | Wenn der Prozessor Daten aus dem Speicher benötigt, dann schickt er die Adresse (in OA) der Speicherzelle über den Adressbus zum Speicher und setzt MRD ''(Memory Read Data)'' auf "1" um ein "Speicher lesen" zu signalisieren. Dann wartet der Prozessor solange, wie ein Speicher normalerweise zum Daten intern auslesen und auf den Datenbus schreiben braucht, plus eine gewisse Toleranzzeit (falls der Speicher mal länger braucht | + | Wenn der Prozessor Daten aus dem Speicher benötigt, dann schickt er die Adresse (in OA) der Speicherzelle über den Adressbus zum Speicher und setzt MRD ''(Memory Read Data)'' auf "1" um ein "Speicher lesen" zu signalisieren. Dann wartet der Prozessor solange, wie ein Speicher normalerweise zum Daten intern auslesen und auf den Datenbus schreiben braucht, plus eine gewisse Toleranzzeit ''(falls der Speicher mal länger braucht ([http://www.snickers.com "Wenns mal länger dauert"])''. 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 (ORi). Anschließend schaltet er das MRD-Steuersignal wieder auf "0", damit der Speicher wieder inaktiv werden und somit auf einen neuen Speicherbefehl warten kann. | Sobald die Wartezeit des Prozessors verstrichen ist, liest dieser die Daten vom Datenbus ein und schreibt sie in ein Register seiner Wahl (ORi). Anschließend schaltet er das MRD-Steuersignal wieder auf "0", damit der Speicher wieder inaktiv werden und somit auf einen neuen Speicherbefehl warten kann. | ||
Nun kann der Prozessor mit der internen Abarbeitung seiner Befehle fortfahren. | Nun kann der Prozessor mit der internen Abarbeitung seiner Befehle fortfahren. |
Version vom 22. Juli 2005, 17:11 Uhr
Ü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 Petri-Netzen (2_040)
[...]
Schaltregeln (2_050)
- Transitionen schalten nur, wenn sowohl alle Vor- als auch Nachbedingungen erfüllt sind
- Vorbedingungen sind erfüllt, wenn: z.B. eine Marke im jeweiligen Platz liegt
- Nachbedingungen sind erfüllt, wenn noch genug Platz ist die Marken im jeweiligen Platz abzulegen
Konflikte
Definition (2_090)
Konflikte treten nur dann auf, wenn mehrere Transitionen (zum selben Zeitpunkt) schaltfähig sind (Vor- und Nachbedingungen müssen erfüllt sein), aber das gleichzeitige Schalten aller Transitionen auf Grund gegenseitiger Beeinflussung der Schaltfähigkeit der Transitionen nicht möglich ist.
Arten (2_090)
- Vorkonflikt: Die Markenanzahl im "Vor"-Platz würde beim gleichzeitigen Schalten negativ werden.
- Nachkonflikt: Die Markenanzahl im "Nach"-Platz würde die Kapazität überschreiten.
Lösungsmöglichkeiten (2_100)
- zusätzliche Vor- oder Nachkanten
- zusätzliche Sonderkanten
- wx Belegungen (Bewertungsfunktionen s. 2_120)
- Konfliktwahrscheinlichkeiten
- Prioritäten
Interpretierte Petri-Netze (2_120)
- Bewertungsausdrücke an den Transitionen; sie sind schaltfähig, wenn der Wert des Ausdrucks "1" annimmt (x1^x2)
- Ausgabefunktionen an den Plätzen; sie sind "1", wenn mindestens eine Marke vorhanden ist
- Zeitbewertungsfuktion 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
- Physikalische Trennung von Daten-, Befehls- und E/A-Bussen
- demzufolge strikte Trennung der jeweiligen Einheiten
- Vorteil: schneller, da gleichzeitiges Zugreifen auf Daten und Befehle möglich ist
- Harvard-Architektur
Princeton (von Neumann) - Architektur
- CPU kommuniziert mit allen peripheren Bauteilen über einen gemeinsamen Systembus
- Befehls- und Datenspeicher können ein gemeinsamer physikalischer und/oder logischer Speicher sein
- Vorteil: einfacher und modularer im Aufbau
- 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 Kästchen auf dem Bild haben verschiedene Aufgaben:
- ALE (Arithmetische Logik Einheit) bzw. ALU (Arithmetical Logical Unit): Sie ist das Herzstück der CPU, denn sie ist für die Berechnung von Werten zuständig. Dabei brechnet sie aus bis zu 2 Eingangsoperanden zu einem Ausgangsoperanden mit Hilfe von arithmetischen (ADD, SUB, MULT...) oder logischen (OR, XOR, ...) Operationen zu verknüpfen, bzw. Sprünge, Vergleiche, Stackbefehle oder Bitbefehle durchführt. Einige Befehle geben einen Ergebnisstatus in Form von Flags (siehe PSR) zurück.
- OR (Operandenregister) = Speicher für die zu verarbeitenden Operanden (Ergebnis typischerweise nach OR1). Je nach CPU-Typ gibt es mehrere davon, daher ORi.
- OA (Operandenadressregister): hier liegt die Adresse des nächsten Operanden drin, wenn er ausm Speicher geholt werden muss.
- PSR (Prozessorstatusregister) = Speicher für die Flags (Carry, Overflow, Frau-am-Rechner, etc pp)
- BR (Befehlsregister): enthält den aktuellen Befehl in Maschinencode. Damit die ALU diesen Maschinencode auch versteht braucht man den BD.
- BD (Befehlsdekoder): dekodiert die eingehenden Befehle, dass die ALU sie verarbeiten kann.
- BA (Befehlsadressregister): zeigt auf die Adresse des folgenden Befehls. Die Befehlsadresse wird meist durch einfaches Inkrementieren geändert. Es besteht jedoch die Möglichkeit, sie auch mit Hilfe des DBIs 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, dass während der Befehlsabarbeitung alles einer bestimmten Vorgabe folgt. Daher ist sie mit allen übrigen Prozessorbaugruppen verbunden. (siehe Prinzipieller Ablauf)
- Busse: öffentliche Datennahverkehrsmittel. Getrennte Busse für Daten (DB), Adressen (AB) und Steuersignale (SB). Bedingt durch ihren Aufbau brauchen sie 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 einer Hochsprache eine Funktion aufruft. Dabei springt man aus dem aktuellen Befehlsablauf heraus in ein Unterprogramm und an dessen Ende (RET) wieder zurück an die Stelle unter den Aufruf (CALL). Vor dem Sprung wird die Adresse des Befehls nach dem CALL sowie der Inhalt des PSR in den Stack kopiert, damit man nach dem RET wieder an die Aufrufstelle zurückfindet und den Ausgangszustand wieder herstellen kann. Danach wird dann der BA mit dem Sprungziel gesetzt und das Unterprogramm abgearbeitet.
Buszyklus, synchron, lesen (3_180)
Beim synchronen Lesen vom Speicher sind Prozessor und Speicher zeitlich aufeinander abgestimmt - daher "synchron".
Wenn der Prozessor Daten aus dem Speicher benötigt, dann schickt er die Adresse (in OA) der Speicherzelle über den Adressbus zum Speicher und setzt MRD (Memory Read Data) auf "1" um ein "Speicher lesen" zu signalisieren. Dann wartet der Prozessor solange, wie ein Speicher normalerweise zum Daten intern auslesen und auf den Datenbus schreiben braucht, plus eine gewisse Toleranzzeit (falls der Speicher mal länger braucht ("Wenns mal länger dauert"). 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 (ORi). Anschließend schaltet er das MRD-Steuersignal wieder auf "0", damit der Speicher wieder inaktiv werden und somit auf einen neuen Speicherbefehl 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 (Input Output Read).
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.
Auch hier gilt mal wieder, dass man Speicher einfach wieder durch I/O erstzen kann.
Buszyklus: synchron vs. asynchron
Nachteil des asynchronen Speicherzugriffs ist ein gegenüber dem synchronen Zugriff verkomplizierter Aufbau. Außerdem dauert der asynchrone Zugriff länger als der synchrone, da der Prozessor erst auf die Bestätigung warten muss. [Beim synchronen Zugriff muss die CPU zwar noch die gewisse Sicherheitswartezeit idlen aber der Zugriff is trotzdem schneller.]
Vorteil von asynchron ist, das man unterschiedlich schnelle Speicher verwenden kann. Bei synchron klappt das logischerweise nicht.
Im PC verwendet man Synchronen Zugriff (SDRAM ist die Abkürzung für „Synchronous Dynamic Random Access Memory"), daher richtet sich der PC beim Einsetzen von mehreren Speichermodulen immer nach dem langsamsten, also nach dem schwächsten Glied der Kette.
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 Ahigh- (die höherwertigen Bits) und Alow-Teil (die niederwertigen Bits) zerlegt (nachdem sie vom Treiber verstärkt wurde).
- Der Decoder dekodiert Ahigh und steuert je ein Speicher an (über CE0 bis CEn).
Mit n Ahigh Bits lassen sich maximal 2n CE-Leitungen schalten.
- Der Speicher enthält mehrere Bytes von denen eins über Alow ausgewählt wird.
- Somit ist in Ahigh die Nummer des Speichers und in Alow die Nummer des jeweiligen Bytes codiert auf dessen Wert im zwiedimensionalen Speicher zuzugriffen 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.
Das kann man sich wie einen zusätzliche Speicherbaugruppe vorstellen, die aber an der gleichen Speicheradresse den zwieten Teil des Wortest enhält. Zur vereinfachung sind aber beide an den gleichen Decoder geschlossen.
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 Ausgabe.
- 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 Ausgang, 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 gehen sie 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 erweitert. Wozu ist das gut? Naja, nehmen 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 nicht 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 kann 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)
Diese Geschichte wird etwas komplizierter. Serieller Datenaustausch heißt: Es gibt nur eine Leitung, also is etwas Organisation nötig, um das reibungslos zu managen.
Sender:
Genauer gesagt kommt die serielle E/A nicht ohne die parallele E/A aus. Wir machens wieder so wie oben: Der PC will Daten an den Drucker geben. Also schickt der die Daten auf einen Datenbus und die werden jetzt auf ein Parallel-Aus gegeben. Dort warten sie erstmal. Das Ziel ist, die Daten in ein Schiebergister zu schreiben. Das geht nur, wenn das Schiebergister Platz hat. Dazu wird ans Schiebergister (SR) ein Takt angelegt (später dazu mehr). Mit diesem kann nun ein RDY an das parellele Aus gesendet werden, welches nun, da unsere daten da ja noch drin liegen, ein DAV zurückgibt. Das heißt, das SR kann Daten aufehmen und diese Daten sind auch da. Also passierts, die Daten kommen in Schiebergister. DAV und RDY werden wieder auf 0 gesetzt.
Übertragung:
Hier beginnt die eigentliche serielle Übetragung: Die Daten im Schiebergister des Senders werden mit einem Start- und Stoppbit versehen und - wusch - zum Schiebregister des Empfängers gesendet. [Deshalb staht da auch "n+2" beim Takt - n Datenbits plus 1 Start- und 1 Stoppbit, wenn die durch sind, gibts ein neues RDY].
Empfänger
Naja und der Empfang der Daten auf der Empfängerseite funzt genauso, nur andersrum: Die Daten aus dem SR kommen wieder in eine parallele Eingabe-Einheit, vorher werden sie noch durch eine Start-Stopp-Erkennung gejagt. Naja und zu guter Letzt werden sie auf den DB des Empfängergeräts geschrieben, fertig.
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 Stoppbit (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)