Programmiersprachen: Editor: dient zur Eingabe des Programmcodes !! Compiler: übersetzt Programmiersprache in Assembler-Code !! Assembler: übersetzt Assembler-Sprache in Maschinencode, erzeugt Objektdatei !! Linker: verknüpft Objektdatei, verwendet Funktionen aus Bibliotheken, erzeugt ausführbare Datei !! Bibliothek: Sammlung von fertigen Funktionen !! Debugger: Unterstützt den Entwickler bei der Fehlersuche, in dem er Einblick in den Programmzustand zur Laufzeit gewährt !! Abstraktionsebenen: 1.Hochsprache(Hardware unabhängig, menschenlesbar), 2. Assembler(Menschenlesbare Repräsentation der Sprache des Rechners(Maschinenbefehle)), 3.Maschinencode(Folge aus 0en und 1en) !! Globale Variablen: V: kann überall in Quelldatei genutzt werden, N: belegt ständig Speicherplatz, Verlust der Übersicht bei größeren Programmen !! Lokale Variablen: V: Speicherplatz nur dann verbraucht, wenn es benötigt wird, Zugriffskontrolle, N: Variablen/Werte müssen übergeben werden, wenn sie in anderen Funktionen verwendet werden !! Pointer: wichtig für Hardware Zugriff, da mit Adressen von Registern gearbeitet werden kann, können Null sein !! Referenzen: verweisen auf dieselbe Variable, können nicht Null sein !! Call by value: N: Variable muss in eine neue kopiert werden, Kostet Speicher und Rechenzeit, Funktion kann die übergebenen Variablen nicht verändern, weil sie Kopien enthält, V: komplette Trennung der Variablen beim Funktionsaufruf !! Call by Reference: N:Evtl unbabsichtigte Veränderung von Variablen, Bei einer Veränderung ist der ursprüngliche Wert überschrieben, V: Kostet keinen Speicher und keine Rechenzeit für Kopie, Funktion kann die übergebenen Variablen verändern, Übergabe komplexer Strukturen !! Call by pointer: N: Umständlicher Zugriff über Zeiger, V: Kostet keinen Speicher und keine Rechenzeit, Funktion kann die übergebenen Variablen verändern, Zeiger kann verändert werden, Übergabe komplexer Strukturen !! Vergleich: Call by Reference und Pointer sind effizient, wenn Parameter keine primitiven Datentypen sind !! Datentypen: short->-32768 bis 32767, char->128 bis 127, float hat 6 Nachkommastellen, double 15 !! Bitweise Und(&): beide Operanden haben eine 1 an der Position =>1, Bitweise Oder: zwei bits 0=>0 !! Programmierparadigmen: Imperativ(Assembler), Prozedural(Prozeduren berechnen Werte nach einem Algorithmus und geben diese zurück, C), Funktional(Funktionen, die einem Vektor von Parametern einen Wert zuordenen, LISP), Logikbasiert(Logische Aussagen, PROLOG), Objektorientiert(C++) Objektorientierung: Objekt=Exemplar eines bestimmten Datentyps oder einer bestimmten Klasse(selbstdefinierter Datentyp erzeugt durch Zusammensetzen von elementaren Datentypen)=hat Attribute und Methoden(spezielle Funktionen, deren Aufruf stets unter Angabe eines Objekts der Klasse erfolgen muss) !! Prinzipien Objektorientierung: 1.Kapselung: Es wird bei der Definition einer Klasse festgelegt, welche Elemente vor einem Zugriff von außen geschützt werden(private) und welche Elemente öffentlich verfügbar sind(public), 2.Wiederverwendbarkeit: Einmalige Definition wie die Klasse funktioniert und das immer wieder, auch für neue Typen von Objekten verwenden, 3.Datenabstraktion: Dinge und Vorgänge werden auf das Wesentliche reduziert !! Sichtbarkeit: 1.Private(-): nur in der aktuellen Klasse sichtbar, für Aufrufer von Objekten der Klasse als auch für abgeleitete Klassen unsichtbar(nur innerhalb der Klasse zugreifbar), 2.Protected(#): in der aktuellen Klasse und in abgeleiteten Klassen sichtbar, Methoden von abgeleiteten Klassen können auf sie zugreifen, aber von außerhalb der Klasse nicht zugreifbar, 3.Public(+): überall sichtbar, können in der eigenen Klasse und von Methoden anderer Klassen verwendet werden !! Vererbung=Superklassen vererben Eigenschaften an ihre Kindklassen, die Subklassen heißen(V: reduzierter Programmieraufwand, verständlicher Quellcode, Effizienz, Performanzmaximierung) ! Public Vererbung: public Elemente der Basisklasse auch in der Kindklasse öffentlich ! Protected Vererbung: Basisklasse public Elemente als auch protected vererbt ! Private Vererbung: public und protected Elemente als private vererbt !! Header-Datei: Deklaration von Klasssen, Definition von Methoden !! Quelldatei: Implementierung der Funktionalität !! Jede Klasse hat 3 Standardmethoden: Default-Konstruktor, Destruktor(Speicher/Ressourcen freigegeben, der zuvor von dem zugehörigen Objekt alloziert wurde), Kopier-Konstruktor !! Polymorphie: Ein Pointer vom Typ einer Basisklasse mit einer definierten Schnittstelle kann auf Objekte beliebiger abgeleiteter Klasse mit kompatiblem Interface verweisen, ohne dass die abgeleitete Klasse vorher bekannt sein muss=> wir überschreiben oder überladen die Methode in der Subklasse ! 1.Earlybinding(Compile-Zeit Polymorphismus): Zum Zeitpunkt der Kompilierung ist klar, welche Methode aufgerufen wird und die Fuktion wird also überladen ! 2.Late-binding(Runtime Polymorphismus): Erst zur Laufzeit wird bestimmt, welche Methode aufgerufen wird und die Funktion wird überschrieben(virtual vor Methode schreiben und Objekt als Pointer) !! Probleme beim Casting: Dezimal- zu Ganzzahl->Verlust von Nachkomastellen, Von großen in kleinere Datentypen-> Programmfehler !! Klassenbeziehungen: !Assoziation(vollausgemalener Pfeil): Objekte kommunizieren (un)gerichtet !Aggregation(leere Raute, ausgemalener Pfeil):spezielle Assoziation, Überordnung und Einbeziehung der Klassen untereinander, drückt TeilGanzes-Beziehung aus !Komposition(volle Raute, ausgmalener Pfeil):wie Aggregation, Existenz ohne Wechselwirkung unmöglich !Generalisierung bzw. Spezialisierung: leere Pfeile, verdeutlichen Eltern-Kind-Beziehung Rechnerarchitektur: John von Neumann: !CPU(Steuerwerk: Befehlsdekodierung, -adressierung und Ansteuerung der anderen Komponenten, Rechenwerk: Führt arithmetisch-logische Operationen, die in Maschinenbefehlen enthalten sind, aus) !Speicher=speichert Maschinenbefehle und zugehörige Daten, !Systembus=verbindet Komponenten, überträgt Daten, Befehle, Steuersignale, ! Ein-/Ausgabewerk: Schnittstelle zur Ansteuerung von Peripherie !! Arbeitsweise von Neumann: 1.FETCH(Befehl aus dem Speicher in den Prozessor holen), 2.DECODE(Befehl im Steuerwerk dekodieren), 3.FETCH OPERANDS(Operanden aus dem Speicher oder der Peripherie in den Prozessor holen), 4.Execute(Befehl im Rechenwerk ausführen), 5.WRITE BACK(Ergebnis in den Speicher oder die Peripherie schreiben) !! Befehlstypen: Transportbefehl, Verarbeitungsbefehle(in der ALU), Steuerbefehle !! Prozessorarten:1.General-Purpose Processors(CISC,RISC), 2.Special-Purpose Processors(µC,DSP,ASIP,GPU), 3.Programmable Hardware(FPGA), 4.Application Specific Integrated Circuit(ASIC) !! CISC(Complex instruction set computer): !Schwerpunkt auf Hardware, !Benötigt mehr Transistoren zum Speichern komplexer Instruktionen, !Mehrere Taktzyklen pro Instruktion, !Memory-to-Memory-Architektur(Load/Store eingebaut)->viele MOVE !! RISC(Reduced…): !Schwerpunkt auf Software, !Mehr Transistoren für Speicherregister, !Nur ein Taktzyklus pro Instruktion, !Load-StoreArchitektur(Load/Store unabhängig)->viele LOAD/STORE !! Vergleich: CISC-viele komplexe Befehle, also kleinere Programme, aber Befehlskodierung aufwändig, RISC-viele einface Befehle, Befehlskodierung einfach !! Interne Architektur des Prozessors: Definiert die interne Hardware-Architektur des Rechners !! Externe Archiktektur: Maschinenbefehlssatz bzw. Instruction Set Architecture (ISA) !! Register: schnellste Speichermöglichkeit, wird mit FlipFlops realisiert !! Hauptspeicher: (Unten-Oben) 6.Text(Instruktionen, Konstanten), 5.Data(Initialisierte Daten), 4.BSS(Keine explizite Initialisierung im Code), 3.Heap(zur Laufzeit allokierter Speicher-new Befehl), 2.Frei(vefügbarer nicht allokierter Speicher), 1.Stack(Unterprogrammen,Funktionen) !! Hierarchie Speicher: Platten-Speicher (extern), Hauptspeicher, Cache (LN-L1), Register des Prozessors Lokälität bei Speicherhierarchie: Zeitlich(benutzte Daten/Befehle werden bald wieder benutzt), Räumlich(Auf Daten/Befehle, die im Adressraum nahe zu gerade benutzten liegen, wird wahrscheinlicher verwiesen) !! HarvardArchitektur: !Problem: Ein Speicher sowohl für Programm-Daten als auch Daten-Daten führt zu einem PerformanceFlaschenhals, da Befehlsausführung um ein Vielfaches schneller als Speicherzugriff., !Lösung 1: Parallelisierung des Zugriffs durch Aufteilung in Daten- und Befehlsspeicher, !Lösung 2: Cache alls schneller Puffer in den Prozessor einbauen !! Cacheorganisation: 1.Direct Mapped(Ein Block kann nur an einer Adresse mod m geschpeichert werden, wobei m die Cache-Größe ist) m=S*N, S=m, N=1, 2.N-Wege Assoziativ(Ein Block kann in einem von N Cache-Blöcken geschpeichert werden, bei denen die Hauptspeicheradresse mod S gleich der Cache-Adresse mod S ist), 3.Voll-Assoziativ(Jeder Block kann an allen Adressen geschpeichert werden)!! Vor- und Nachteile: 1.Direct Mapped: V:Finden des Eintrags(Hit/Miss) sehr schnell, N:Verdrängung auch bei quasi leerem Cache möglich, 2.N-Wege Assoziativ: V:Flexibler als direkt-abbildend und somit weniger Verdrängungen, N:Höherer Hardwareaufwand und größere Chipflache, 3.Voll-Assoziativ: V:Genauso wie bei 2., N: m − 1 mehr Komparatoren als bei direkt-abbildenden Caches benötigt werden und damit mehr Fläche verbraucht !! Verdrängungsstrategien(eine Methode, die entscheidet, welcher Block im Cache ersetzt wird, falls ein neuer Block für neue Daten gebraucht wird): LRU(least recently used): Die Daten, die am längsten aus den Cache von der CPU nicht benutzt wurden, werden verdrängt, LFU (last freqently used): Die Daten, die am seltensten aus den Cache von der CPU benutzt wurden, werden verdrängt, FIFO (first in first out): Die Daten die sich schon am längsten im Cache befinden werden verdrängt, Random: Zufällig ausgewählter Block wird verdrängt !! Cache Hit: Benötigtes Datenwort ist im Cache und kann direkt von dort geholt werden !! Cache Miss: Benötigtes Datenwort ist nicht im Cache und muss aus dem Speicher geholt werden !! Offset=adressiert ein Datenwort !! Index=adressiert ein Set !! Tag=Hit feststellen !! Valid-Bit=Gibt an ob der Block in Benutzung ist, oder ob der Block frei ist !! Dirty-Bit=Inkonsistenz markieren(Daten im Cache neuer als im Hauptspeicher) !! Cacheaddressenrechnung: !Offset=ld(Blockgröße) !Index=ld(Cachegröße/(Blockgröße*N)) !Tag=Addressbreite-Index-Offset !! Pipelining(Zeitliche Überlappung der Befehlsausführungsphasen resultiert in einer höheren Taktrate und einem höheren Durchsatz) Phasen: IF(Instruction Fetch), ID(Instruction Decode), EX(Execute), ME(Memory Access), WB(Write Back) !! Ausführungszeit einzelne Instruktion: Einzeltakt>Pipelining, InstruktionsDurchsatz:Pipelining>Einzeltakt !! Superpipelining=Pipeline in noch merh Stufen zerlegen !! Superskalarität= Einsatz von mehreren Ausführungseinheiten und deren dynamische Befehlszuweisung zur parallelen Ausführung mehrerer Befehle, was im Idealfall zur Vervielfachung der Leistung führt (mehr ALUS) !! VLIW=Parallelisierung durch Compiler !! Zeitliche Parallelität: Abarbeitung einer Instruktion wird in einzelne Phasen aufgeteilt. Mehrere Befehle werden bzgl. der Phasen überlappend abgearbeitet(Pipelining) !! Räumliche Parallelität: Es existieren mehrere Funktionseinheiten, die voneinander unabhängige Befehle parallel bearbeiten können(Supersklarität) !! Polling(das Programm prüft zyklisch, ob es Veränderungen in der Hardware/Peripherie gab und reagiert dementsprechend):einfach, keine zusätliche Hardware nötig, beleht ständig CPU-Leistung, !! Interrupt(stellt eine Unterbrechung des normalen Programmablaufs dar und wird durch ein Hardware-Event ausgelöst. In der Interrupt-Service-Routine (ISR) kann auf Veränderungen in der Hardware zeitnah reagiert werden): Laufzeiteffizient, zusätliche Hardware notwendig ! Schritte: Prozessor wird unterbrochen—Prozessor hält den laufenden Thread an—Prozessor speichert Thread-Status—Prozessor führt ISR aus—Prozessor führt den vorher unterbrochenen Thread aus ! ISR=Programmstück, das vom CPU ausgeführt wird, wenn es durch eine Unterbrechungsanforderung(IRQ) gezweungen wird, den Interrupt auszuführen !! Write through=Änderungen werden in den Cache geschrieben und im selben Schreibvorgang auchin den Hauptspeicher übertragen(V: Daten im Cache und im Hauptspeicher sind immer konsistent, N: höhere Belastung des Systembuses) !! Volatile: Wenn externe Hardware den Wert in einem Register ändern kann, dann schreiben wir volatile vor der Variable und diese wird aus Hardware-Register geladen, nicht aus Cache oder Hauptspeicher(Ohne volatile könnte es passieren, dass ein gelesener oder geschriebener Variablenwert nicht dem Wert des Peripherieregisters, das von der Hardware asynchron aktualisiert wird, entspricht) !! Big/Little Endian: niederwertigste Byte an höchsten/kleinsten Adresse speichern Betriebssysteme: Betriebssystem Hauptaufgaben: 1.Abstraktion: !Schnitstelle für Zugriff auf Hardware des Rechners, !HW-unabhängiges Anwendungsprogramm, kein Assembler-Code nötig, 2.Virtualisierung: Mehrere Anwendungsprogramme können eine Ressource gemeinem nutzen, als ob jede Anwendung die Ressource alleine besitzen würde, 3.Trennung der Anwendungsprogramme voneinander: !Daten separiert(Anwendung kann die Daten einer anderen nicht schreiben/lesen), !Eine Anwendung darf einer anderen Anwendung die Ressourcen nicht entziehen) !! Echtzeitsysteme: 1.Hard-Real-Time: Wenn eine Aufgabe nicht innerhalb der Deadline abgeschlossen wird, kann es zu katastrophalen Ergebnissen kommen(Temperaturmessung im Kernkraftwerk), 2.Soft-Real-Time: Wird eine Aufgabe nicht innerhalb der Deadline erledigt, reduziert sich die Nutzbarkeit(Messungen im Wetterstation) !! Prozesse(Programm, das gerade in einem Rechner ausgeführt wird(Instanz eines Programms)), !! MultiTasking=Prozessse in rascher Folge abwechseln, um so die Illusion paralleler Ausführung zu erwecken ! Dem Kontext(Zustand des Prozesses) wird vom OS ein Prozess-ID zugewiesen(enthält Speicher-zugewiesene Bereich des Speichers, E/A-zum Prozess zugeordnete Geräte, Prozessor-Register-Notwendig um Prozess nach Wechsel wiederherstellen zu können, Status-Prozesszustand) !! Prozesszustand: 1.Bereit(Alle Voraussetzungen für Ausführung erfühllt, wartet auf Zuteilung des Prozessors), 2.Aktiv(Programmbefehle des Prozesses werden aktuell ausgeführt), 3.Blockiert(Prozess wartet auf das Freiwerden eines Betriebsmittels) !! Threads: !Multithreading=Multitasking innerhalb eines Prozesses, !Thread gehört zu einem Prozess und wird im Kontext des Prozesses ausgeführt, !Kein Scheduling(Aufteilung&Zuweisung der verfügbaren Zeit der Betriebsmittel) durch Betriebssystem, sondern durch Nutzer(aufwändiger, fehleranfälliger), !Vorteil:Bei einzelnen blockierten Threads ist noch nicht der gesamt Prozess blockiert=>Reduktion von Kontext-Wechseln Datenstrukturen: Liste: 1.Einfach verkettet(Jedes Element hat einen Zeiger auf Nachfolger, Start- und Ende-Zeiger), 2.Doppelt verkettet (Jedes Element hat einen Zeiger auf das nachfolgende und vorherige Element) !! Stack(LIFO-Prinzip, Operationen: Einfügen am Ende, Entfernen und Rückgabe am Ende, Endelement lesen ohne zu entfernen) !! Queue(FIFOPrinzip, Operationen: Einfügen am Anfang, Entfernen am Ende, Anfangselement lesen ohne zu entfernen !! Hash-Tabelle: !Hash-Funktion h(k) liefert Hashwert zu jedem Schlüssel, !Einsatz, wenn Anzahl der tatsächlich auftretenden Schlüssel klein ist im Vergleich zur Anzahl möglicher Schlüssel, !Kollisionsauflösung durch doppeltes Hashing oder verkettete Liste !Gute Hash-Funktion: geringe Kolissionswahrscheinlichkeit, schnell berechenbar, Jeder Ergebniswert möglich(Surjektivität), Hashwert viel keliner als Eingabedaten(Kompression) !! Baum(zusammenhängender, zyklenfreier Graph): !Wurzel(Knoten, das keine Vorgänger hat), !Blatt(Knoten ohne Nachfolger), !Tiefe(Abstand von der Wurzel zu den Blättern) !Binärbaum=Jeder Knoten außer den Blättern hat genau 2 Nachfolger !! Datenbanken: 1.OODBMS: !Daten werden als Obkelte geschpeichert und sind über ihr Object ID eindeutig identifizierbar, ! verarbeitet große und komplexe Daten, !Eine Klasse bezieht sich auf eine Gruppe von Objekten mit gemeinsamen Beziehungen und Eigenschaften !Ziel ist das Zusammenfassen von Objekten mit gleichem Aufbau und Verhalten(Einsatz von Vererbung) 2.RDBMS: !Daten werden als Entitäten geschpeichert.Ein Primärschlüssel identifiziert ein Objekt in einer Tabelle eindeutig, !verarbeitet einfache Daten, !Eine Entität bezieht sich auf eine Sammlung ähnlicher Elemente mit derselben Definition, !Ziel ist die Unabhängigkeit von Anwendungen !! Dynamische Speicherverwaltung: Spicherbereich für lokale Variablen ist der Stack(V:Variablen werden automatisch verwaltet, N: Platz auf dem Stack für große Datenmengen nicht ausreichend), Speicher für Variablen kann dynamisch auf den Heap reserviert und wieder freigegeben werden(V: Heap bietet mehr Speicherplatz als Stack, N:Entwickler muss Speicherplatz Anlegen/Löschen) !! Unterschiede Datenstrukturen: Liste: Suche ist aufwändig, aber Elemente können effizient gelöschtt oder eingefügt werden, Array: Suche schnell über Index, aber dynamisches Wachstum teuer, viel Speicher notwendig bei dünn besetzten Arrays, Hash: mittlere Zeit zum Auffinden eines Elements in einer HashTabelle ist unter realistischen Annahmen konstant (bei Array oder Liste linear abhängig von Anzahl der Elemente) !! Operationen Datenstrukturen: Search(S,k), Insert(S,x), Delete(S,x), Minimum(S) !! Operationen STL: push, pop, assign, insert, swap !! Sequenzielle Container: Array, Deque, List(doppelt verkettet), Vector, Forward_List(einfach verkettet) !! Assoziative Container: Set, Bitset, Multiset, Map, Multimap !! Container Adapter: Stack, Queue, Priority_queue !! Ungeordnete Assoziative Container: Unordered Map, Unordered Multimap, Unordered Set, Unordered Multiset !! Iterator=Objekt, welches zum Zugriff auf ein Elememt innerhalb einer Datenstruktur dient(V: Die Zugriffe können dabei ohne Kenntnis der Datenstruktur erfolgen) Softwareentwicklung: Merkmale guter Software: 1.Zuverlässigkeit(Betriebssicher, Zugriffsschutz), 2.Wartungsfreundlichkeit(Softwareveränderung, Weiterentwicklung), 3.Effizienz(Kosteneffizienz, keine Ressourcenverschwendung), 4.Benutzerfreundlichkeit(Nutzbar ohne Anstrengung), 5.Nützlichkeit(Erfüllung Benutzeranforderungen) !! Phasenmodelle: PI: 1.Creativity(Kundengeschpräche, Marktanalysen)-Es werden Kreativitätstechniken verwendet, 2.Requirments(Lastenheft-Wird vom Auftraggeber erstellt. Enthält die Anforderungen aus Sicht des Auftraggebers, Pflichtenheft-Wird vom Auftragnehmer auf Basis des Lastenhefts erstellt. Darin enthalten ist eine Detaillierung der Kundenanforderungen aus Sicht des Auftragnehmers)-Warum braucht der Kunde diese Lösung, Wo liegen die Herausforderungen bei der Umsetzung, 3.Design(System/SW-Architektur, Schnittstellen-Definitionen)-Wie lässt sich das Problem gliedern, Passt das Design zum Problem, 4.Implementation(Code) 5.Test(Erfüllungsgrad der Anforderungen, funktionsfähiges Produkt)—PII(V):(Analysis anfängt)System Requirments Analysis(Akzeptanztest-Das finale Prdukt gegen die initialen Anforderungen validieren), System Design(Validierung-Richtiges Produkt wird gebaut), SW/HW Req Ana, (Design anfängt), Preliminary Software Design(Verifikation-Produkt wird richtig gebaut), Detailed Software Design, (Unten)(Design endet und Implementation startet) Software Implementation, Software Integration(VE), (Test startet)System Integration(VA), Transition to Utilization(AT) !! Teste: 1.Unit-Test(Einzelne isolierte Komponente z.B. Methode), 2.Module-Test(Mehrere Komponenten z.B. Klasse), 3.Subsystem(Interoperabilität zwischen verknüpften Modulen), 4.Funktionstest(Korrektes Verhalten der Funktion), 5.Systemtest(Gesamtsystem), 6.Akzeptanztest(Initiale Anforderungen) !! Testautomatisierung: Simuliertes Syst-Sim Umgebung(Software in the Loop)-Reale Umg(Rapid Prototyping=Einsatz von prototypischen Softwarekomponenten mit dem Ziel "schnelles Testen"), Reales Syst- Sim Umgebung(Hardware in the Loop), Reale Umg(On Board Test) !! Statischer Test=Software-Testverfahren bei dem die Software nicht ausgeführt wird !! Dynamischer Test=Software-Testverfahren bei dem die Software ausgeführt wird !! Black-Box-Tests: Test von Modulen ohne Wissen über die innere Struktur !! White-Box-Tests: Test mit Wissen über die innere Struktur des Moduls Projektmanagement: Dokumente: 1.Zusammenfassen der Ideen und Konzepte->Rahmenheft, Anforderungsdokument, 2.Aktivitäten des Projekts und Zusammenfassung zu Arbeitspaketen->Projektstrukturplan, 3.Logische Abhängigkeiten zwischen den einzelnen Arbeitspaketen->Projektablaufplan, 4.Festlegung von Terminen->Gantt-Chart/Meilensteinplan, 5.Genaue Terminplanung und Bestimmen des kritischen Pfades->Kritische Pfadanalyse/CPM !! Projektstrukturplan(gliedert das Projekt in plan- und kontrollierbare Elemente. Im Rahmen dessen, wird das Projekt in Teilaufgaben und Arbeitspakete unterteilt): (Oben-Unten) Projekt, Teilprojekt(zur groben Strukturierung), Teilaufgabe(zur Untergliederung), Arbeitspaket(Abgegrenzte Teilaufgabe mit eindeutiger Bezeichnung, Terminierung, Budget und Verantwortlichkeit, kleinste Einheit des PSP) !! Ebenen des PSP: (Oben-Unten) Gesamtprojektebene, Teilprojekt /Teilaufgabenebene, Arbeitspakete/Arbeitspaketebene !! Gantt-Chart=Diagramm, mit dem ein PAP dargestellt werden kann, V:Einfache Darstellung des ganzen Projektablaufes, Schnelle Übersicht über Projektfortschritt, Kosten und Termine bleiben übersichtlich und können eingehalten werden, N: Reaktion auf Veränderungen schwierig, Zeitenschätzung subjektiv, Überscätzung des Kritischen Pfades !! PAP: definiert hauptsächlich den zeitlichen Ablauf eines Projekts - auf Basis der im PSP definierten Arbeitspakete !! Vergleich PAP vs PSP: Im PAP wird den zeitlichen Ablauf enthalten und im PSP nicht !! Implementierung und danach Unit-Test !! Kritischer Pfad=bezeichnet die Folge von Arbeitspaketen, welche die Gesamtdauer des Projekts bestimmt. Die Verzögerung eines Arbeitspakets, das auf dem kritischen Pfad liegt, führt sofort zu einer Verzögerung des Gesamtprojekts !! V-Diagram: 1.linker Analysis-Block: System Requirements Analysis, System Design, SW/HW Requirement Analysis 2.linker Design-Block: Preliminary SW Design, Detailed SW Design, SW Implementation 3.rechter Implementation-Block: SW Implementation, SW Integration 4.rechter Test-Block: System Integration, Transition to Utilization!! Tests beim V-Diagram:Verifikation zwischen Preliminary SW Design und SW Integration, Validierung zwischen System Design und System Integration, Acceptance Test zwischen System Requirement Analysis und Transition to Utilization, Modultest im Bereich 3 und Systemtest im Bereich 4 Eingebettete Systeme: Bestandteile: Sensoren, Aktoren, Leistungselektronik, Komm mit anderen Systemen(?System Control, Power Electronics, Data Processing, Special Interfaces, Power Supply?) !Meist µC oder DSP eingesetzt !! Watchdog: Komponente, die in regelmäßigen Abständen überprüft, ob die wichtigsten Programmmodule in einem vorgegebenen Zeitrahmen korrektausgeführt werden. Falls nicht, führt der Watchdog einen Reset aus !! ADC: Wandelt Analogsignale zu Digitalsignalen, da Prozessor nur Digital rechnen kann. Zeit und Wertdiskret !! Besonderheiten DSP: Hardware Architektur, Zero Overhead Schleife, Multiply Accumulate(MAC) Befehl->in einem Taktschritt ausgeführt !! Eng mit ihrer Umgebung gekoppelt=>Echtzeit-Anforderungen: notwendige maximale Latenz, notwendige Präzision einer Berechnung, notwendige Verarbeitungszeit(werden durch den Einsatz eines Betreibssystems erfüllt), !Mehrere Anwendungsprogramme gleichzeitig=>Ressourcen-Zuweisung muss priotisiert werden