Transaktionalen Speicher optimieren mit STO

Größe: px
Ab Seite anzeigen:

Download "Transaktionalen Speicher optimieren mit STO"

Transkript

1 Transaktionalen Speicher optimieren mit STO Schriftliche Ausarbeitung zum Hauptseminar Martin Rabe Technische Universität Ilmenau 6. Februar 2017 Abstract Um die meiste Performance aus heutigen Multikernprozessoren heraus zu holen ist es nötig, dass die Anwendungsprogramme einen hohen Parallelisierungsgrad unterstützen. Dies stellt die Anwendungsprogrammierer vor neue Herausforderungen. Die aktuellen Mechanismen zur Synchronisation solcher Anwendungen in Betriebssystemen sind sehr komplex, fehleranfällig und ab einem gewissen Parallelisierungsgrad nicht mehr performant. Transaktionaler Speicher ist eine vielversprechende Alternative, die sich aber noch in der Entwicklungsphase befindet. Die in dieser Arbeit vorgestellte Softwareimplementierung von Transaktionalem Speicher stellt eine Möglichkeit dar die Performanceprobleme konventioneller Implementierung von Transaktionalem Speicher zu lösen. Dies geschieht indem die Semantik von Datenstrukturen ausgenutzt wird. Dadurch werden Protokollierungskosten minimiert und die False-Conflict-Vermeidung maximiert. 1 Einführung 1.1 Free Lunch is over Der Perfomancegewinn durch immer schnellere Prozessoren kann nicht weiter gesteigert werden. Seit 2004 sind die Taktraten von Prozessoren nicht mehr deutlich gewachsen. Dies begründet sich darin, dass die Technik an physikalische Grenzen gestoßen ist. Diese Grenzen sind zum Einen der Stromverbrauch der Prozessoren und zum Anderen die immer mehr werdende Wärme, die abgeleitet werden muss. Dieser fehlende Zuwachs an Taktrate stellt die Softwareentwickler vor neue Herausforderungen. Konnten sie sich bis jetzt immer darauf verlassen, dass performanzhungrige Anwendungen von der ständig steigenden Prozessorperformanz abgefangen werden, ist dies nun nicht mehr so. Allerdings wächst die Transistorzahl in den Prozessoren weiter an. Das bedeutet, die Lösung des Problems der Softwareentwickler besteht darin, dass eine Unterstützung an Parallelität aufseiten der Anwendungsprogramme vonnöten ist. Leider bringt diese parallele Abarbeitung neue Anforderungen an die Programme mit sich. So muss zum Beispiel dafür gesorgt werden, dass zwei Prozesse, die parallel auf die gleiche Datenstruktur im Speicher zugreifen, synchronisiert werden. 1

2 1.2 State of the Art In aktuellen Betriebssystemen wird das Problem der Synchronisation mehrerer Prozesse (Nebenläufigkeitsproblem) mit Hilfe von Semaphoren gelöst. Eine Semaphore ist ein abstrakter Datentyp der eine Methode zum Sperren (P-Operation) und eine Methode zum Freigeben (V-Operation) besitzt. Dabei kann immer nur ein Prozess eine Semaphore sperren, alle anderen müssen warten. Abbildung 1: Das Erzeuger-Verbraucher-Problem. Als Beispiel zeigt Abb. 1 wie zwei Prozesse synchronisiert werden können, von denen einer Daten in einen gemeinsamen Puffer schreibt und der andere Prozess aus diesem Puffer liest. Dieses Beispiel löst dabei die Probleme des wechselseitigen Ausschlusses, d.h. immer nur einer der beiden Prozesse kann auf die geteilte Ressource zugreifen, und den Schutz vor Puffer Über- und Unterlauf. Wie zu erkennen ist benötigt die Lösung dieses einfachen Problems bereits drei Semaphoren. Des Weiteren ist der erzeugende Prozess davon abhängig, dass der verbrauchende Prozess die Semaphore zum Schutz vor Über- und Unterlauf korrekt freigibt und auch umgekehrt. Das bedeutet, dass die Benutzung von Semaphoren ein großes Fehlerpotenzial bietet, falls bei der Implementierung von Anwendungen auch nur eine V-Operation oder eine P-Operation vergessen wird. Im ersten Fall könnte es passieren, dass zwei Prozesse gleichzeitig auf eine gemeinsame Datenstruktur zugreifen. Im zweiten Fall wird eine Semaphore nicht wieder freigegeben und somit können andere Prozesse die diese Semaphore benutzen wollen nicht weiter arbeiten. Des Weiteren bedeutet jede Sperrung einer Semaphore, dass alle anderen Prozessorkerne angehalten werden müssen um ein gleichzeitiges Sperren von Semaphoren zu verhindern, was zu einer starken Einschränkung der parallelen Abarbeitung von Prozessen führt. 1.3 Transaktionale Systeme Um eine bessere Lösung des Nebenläufigkeitsproblems als durch Semaphoren zu erhalten, kann eine Technik aus den Datenbanksystemen übernommen werden. Datenbanksysteme benutzen Transaktionen um parallele Zugriffe auf Tabellen zu ermöglichen. Eine Transaktion besteht aus einer Arbeitsphase (AP) und einer Commit-Phase (CP). In der AP wird auf einer lokalen Kopie der Daten gearbeitet und in der CP wird mittels Versionsnummern 2

3 überprüft ob in der AP Konflikte mit anderen Transaktionen entstanden sind. Falls Konflikte entstanden sind wird die Transaktion abgebrochen, falls nicht werden die lokalen Änderungen global sichtbar gemacht. In Abb. 2 sieht man den Aufbau eines Transaktionalen Systems, welches den korrekten parallelen Zugriff auf Tabellen gewährleistet. Bei diesem Aufbau setzt der Transaktions-Manager (TM) die Eigenschaften um, die eine gleichzeitige Nutzung der Objekte ermöglichen. Der TM weiß wann eine Transaktion beginnt bzw. aufhört und welche Objekte von ihr benutzt wurden. Somit kann er die Eigenschaften Atomarität, Konsistenz, Isolation und Dauerhaftigkeit umsetzten. Diese Eigenschaften gewährleisten, dass parallele Zugriffe auf die Tabellen über den TM fehlerfrei erfolgen. Abbildung 2: Aufbau eines Transaktionalen Systems. Somit ist ein Transaktionales System für Softwareentwickler einfacher zu benutzen als Semaphoren, da nur noch festgelegt werden muss, wann eine Transaktion beginnt und aufhört. Um den Rest kümmert sich das Transaktionale System. 1.4 Transaktionaler Speicher Für die Benutzung von Transaktionalen Systemen für Speicherzugriffe haben sich zwei Implementierungsansätze herausgebildet. Zum einen wird Transaktionaler Speicher in Hardware umgesetzt und zum anderen in Software. Hardware Transaktionaler Speicher (HTS) ist performanter als Software Transaktionaler Speicher (STS). Aber STS lässt sich vor allem in dem jetzigen Entwicklungsstadium, in dem neue Konzepte ausprobiert werden, vor allem für die Wissenschaft leichter nutzen, da er einfacher anzupassen ist als HTS. Die im Folgenden vorgestellte Umsetzung von Transaktionalem Speicher basiert auf Software und versucht die Performanzprobleme konventioneller STS-Implementierungen zu lösen. Diese Probleme sind vor allem, dass gängige Implementierungen von STS auf Speicherwort-Granularität arbeiten (ein Vertreter dieser Art ist TL2) und somit sehr hohe Protokollierungskosten haben. Ein weiterer Ansatz um die Performanz zu steigern ist die Vermeidung von False-Conflicts. Als Beispiel eines False-Conflicts wird folgende Datenstruktur betrachtet: struct { string name; int age; } 3

4 Wenn diese Datenstruktur mit nur einer Versionsnummer versehen ist, würden zwei parallele Transaktionen, bei der die eine die Variable name und die andere die Variable age verändert, in Konflikt stehen. Somit müsste eine von beiden abbrechen, was verschwendete Arbeit bedeutet, da kein wirklicher Konflikt vorlag. Die im Folgenden vorgestellte STS-Implementierung STO versucht die Performanzprobleme konventioneller STS zu beseitigen. Das Paper ist im Weiteren wie folgt gegliedert. In Kapitel 2 werden die grundlegenden Konzepte, auf denen STO basiert, erklärt. Danach wird in Kapitel 3 die Implementierung beschrieben. Dann wird in Kapitel 4 erläutert wie STO von Anwendungsentwicklern in Programmen genutzt werden kann. In Kapitel 5 wird die Implementierung von STO evaluiert und in Kapitel 6 wird eine Zusammenfassung gegeben. 2 Konzepte In diesem Kapitel werden die Konzepte von STO erläutert. STO steht für Software Transaktionale Objekte. Es ist schneller als konventionelle Implementierungen von STS, da es auf abstrakten Datentypen arbeitet und nicht auf Speicherwort-Granularität. Es senkt durch die Nutzung dieser Datentypen den Protokollierungsaufwand und steigert gleichzeitig durch Ausnutzung der Semantik von Datentypen die False-Conflict-Vermeidung. Das Commit-Protokoll arbeitet mit abstrakten Lese-, Schreiboperationen und Prädikaten auf Datentypen, anstatt konkreten Speicherzugriffen. Die Prädikate sind eine von den Verfassern neu entwickelte Methodik für die False-Conflict-Vermeidung. Sie beschreiben eine Bedingung unter der ein erfolgreicher Commit stattfinden darf (eine genauere Beschreibung findet in Kapitel 3.4 statt). Die Prädikate stellen somit eine Alternative zu den Versionsnummervergleichen dar. Die Datenstrukturen unterstützen das Commit-Protokoll und setzen die konkreten Sperren, Versionsverifikation und Datenstrukturveränderungen durch. Wegen dieser Ausnutzung von Datenstrukturen und ihrer Semantik gibt es viel weniger Objekte zu protokollieren als zum Beispiel bei dem bereits erwähntem STS TL2. 3 Implementierung In diesem Kapitel wird die Implementierung von STO erläutert. 3.1 Aufbau Abb. 3 zeigt den Aufbau von STO. Dabei können die für die Umsetzung eines Transaktionalen Systems wichtigen Komponenten in zwei Bestandteile unterteilt werden. Zum einen ist das der STO- Kern und zum anderen ist das eine Bibliothek mit transaktionalen Datentypen. Der Kern implementiert das Commit-Protokoll. Zu diesem Zweck enthält er ein je Thread ein Tracking-Set, welches die von diesem Thread ausgeführten Operationen auf den Datentypen protokolliert. Damit wird also eine Transaktion repräsentiert. Dieses Tracking-Set ist ein Array von transaktionalen Items. Diese enthalten jeweils die Lese-Version, den geschriebenen Wert oder ein Prädikat. Die Bibliothek enthält die transaktionalen Datentypen, welche so implementiert sein müssen, dass sie einen nebenläufigen Zugriff von unterschiedlichen Threads unterstützen und ihre Operationen transaktionssicher sind, d.h. ACI-Eigenschaften erfüllen. Dies erzwingt drei Voraussetzungen: 4

5 Abbildung 3: Aufbau von STO. Versionsnummern Die Versionsnummern werden benötigt um Aktualisierungen zu verfolgen. Tracking-Set-Integration Um das Tracking-Set zu integrieren müssen folgende drei Dinge beachtet werden: Bei jedem Lesezugriff muss die gelesene Versionsnummer vermerkt werden. Jedes mal wenn logisch der Objektzustand verändert wird müssen Informationen über die Modifikation in das Tracking-Set gespeichert werden. Wenn eine Transaktion einen Zustand liest, den sie bereits selbst verändert, hat muss das Tracking-Set nach ausstehenden Veränderungen durchsucht werden und diese müssen genutzt werden. Des Weiteren müssen alle Commit- und Abort-Aktionen im Tracking-Set vermerkt werden (z.b. Validation, Installation, Rollback). Commit-Unterstützung Die Commit-Unterstützung der Datentypen ermöglicht es Datentypenwicklern große Flexibilität (z.b. können Sperren pessimistisch gesetzt werden). In der von den Autoren zur Verfügung gestellten Bibliothek gibt es bereits vorimplementierte Datentypen von Vektoren und Bäumen bis hin zu Hash-Tabellen. Zusätzlich existiert auch einen Datentyp TGeneral, der als Schnittstelle zur Speicherwort-Granularität genutzt werden kann. Die Bibliothek kann aber auch nach Bedarf beliebig erweitert werden. 3.2 Beispieldatentyp Im Folgenden wird die Implementierung eines transaktionalen Datentyps am Beispiel erklärt. Dies wird anhand des Datentyps TBox<T> durchgeführt. Dieser Datentyp ist ein Wrapper für einen Datentyp wie z.b. int. Ein transaktionales Lesen wird dabei wie folgt implementiert: operator T() const { auto item = Sto::item(this, 0); if (item.has_write()) return item.write_value<t>(); else return item.read(value_, vers_); } 5

6 Dabei setzt diese Operation die im letzten Kapitel aufgezeigten Eigenschaften durch. So wird, wenn die Transaktion schon auf dieses Objekt geschrieben hat, der Wert aus dem Tracking-Set und nicht vom globalen Zustand gelesen. Als nächstes wird ein Beispiel der Integration des Commit-Protokolls in den Datentypen betrachtet. Dieses Beispiel implementiert die Übertragung der lokalen Änderungen auf den globalen Zustands: // commit callbacks: void install(titem item) { value_.store(item.write_value<t>()); vers_.set_version(sto::commit_id()); } Dabei ist zu erkennen, dass die neue Version immer gleich der Commit-ID gesetzt wird. Als letztes noch ein Beispiel der von diesem Datentyp zur Verfügung gestellten Nutzdaten: private: TWrapped<T> value_; 3.3 Commit-Protokoll In Abb. 4 ist der Ablauf des Commit-Protokolls dargestellt. Es basiert auf dem 2-Phasen-Multiserver- Commit-Protokoll, dessen beide Phasen jeweils nochmal in zwei Unterphasen geteilt wurden. Es läuft somit in vier Phasen ab: Phase 1 In Phase 1 wird zunächst versucht alle modifizierten Datentypen zu sperren. Falls dies nicht möglich ist, da zum Beispiel gerade eine andere Transaktion diesen Datentyp gesperrt hat, kommt es zum Abbruch der Transaktion und es geht mit der Phase Cleanup weiter. Falls alle Datentypen korrekt gesperrt werden konnten geht es mit der Phase 2 weiter. Phase 2 In Phase 2 werden alle im Tracking-Set gespeicherten Leseversionsnummern mit den aktuell im globalen Zustand vorhandenen verglichen. Falls eine Versionsnummer des Tracking-Sets nicht mit der Versionsnummer des globalen Zustandes übereinstimmt kam es in der Zwischenzeit zu einer Veränderung des gelesenen Wertes und somit zu einem Konflikt. Somit muss die Transaktion abbrechen, d.h. es geht mit Phase Cleanup weiter. Falls alle Versionsnummern übereinstimmen geht es mit Phase 3 weiter. Phase 3 An dieser Stelle sind alle Konfliktprüfungen erfolgreich abgeschlossen und es kommt zum Commit. Dazu werden in Phase 3 alle lokalen Änderungen global sichtbar gemacht und die zugehörigen Versionsnummern werden aktualisiert. Danach geht es weiter mit der Phase Cleanup. Phase Cleanup Die Cleanup Phase wird immer ausgeführt, auch bei einem Abbruch der Transaktion. In dieser werden eventuelle Sperren wieder freigegeben und Aufräumarbeiten auf den Datenstrukturen durchgeführt. 3.4 Beispiel: False-Conflict-Vermeidung und Prädikate Im Folgenden wird die Möglichkeit der False-Conflict-Vermeidung unter Ausnutzung der Semantik von Datentypen näher erklärt. Des Weiteren wird die von den Autoren neu entwickelte Methodik 6

7 Abbildung 4: Das Commit-Protokoll von STO. der Prädikate vorgestellt. Dies wird anhand des Beispieldatentyps eines Zählers erläutert. Der Zähler hat drei Operationen increment, decrement und test, wobei increment und decrement +1 bzw. -1 rechnen und nichts zurückgeben. Die Operation test gibt true zurück falls der Zähler größer als 0 ist, sonst false. Bei einer naiven Implementierung lesen und schreiben sowohl increment also auch decrement. Somit stehen beide in Konflikt. test liest nur und steht dadurch mit anderen Ausführungen von test nicht in Konflikt, aber mit parallelen increment und decrement. Eine Implementierung sollte aber solche Konfliktabhängigkeiten nach Möglichkeit vermeiden. In diesem Beispiel ist das möglich, da increment und decrement den aktuellen Wert des Zählers nicht nach außen sichtbar machen. Somit reicht es ein akkumuliertes Delta im Tracking-Set zu vermerken und zur Commit-Zeit anzuwenden. Bei der Operation test funktioniert das nicht, da bei ihr der momentane Zustand nach außen sichtbar wird. Hier kommt die Methodik der Prädikate zum Einsatz. Diese ermöglicht, es anstatt den genauen Wert zu lesen und dessen Versionsnummer in das Tracking-Set zu speichern, ein Prädikat, welches die momentane Eigenschaft des Wertes beschreibt, in das Tracking-Set zu speichern. In diesem Beispiel würde das bedeuten: [1, ], falls test true [, 0], falls test false Diese Prädikate sind datentypspezifisch und werden anstelle von den Leseversionsnummern im Tracking-Set gespeichert. Im Commit-Protokoll werden sie ausgewertet und in Leseversionsnummern umgewandelt. Dies geschieht in Phase 1, somit kann das Commit-Protokoll sonst unverändert umgesetzt werden. Die Benutzung von Prädikaten verursacht allerdings einen Overhead, welcher sich nur unter bestimmten Einsatzzwecken lohnt. Eine genaue Betrachtung dieses Phänomens findet in der Evaluation statt. 4 Integration In diesem Kapitel wird gezeigt wie STO von Anwendungsentwickler genutzt werden kann. Neben dem Einbinden der Bibliothek ist während der Programmierung nur ein Markieren der kritischen 7

8 Abschnitte, welche durch das Transaktionale System geschützt werden sollen, vonnöten. Dies geschieht durch das Umschließen des Abschnittes durch TRANSACTION und RETRY. Bei RETRY kann zusätzlich noch eine Bedingung angegeben werden, unter der bei Abbruch der Transaktion eine erneute Ausführung statt finden soll. Des Weiteren müssen alle Objekte, welche von mehreren Prozessen benutzt werden, durch transaktionale Datentypen repräsentiert werden. Objekte, welche nur lokal genutzt werden, können ganz normal verwendet werden. Im Folgenden ein Beispiel einer Funktion die eine Banküberweisung durchführt: bool transfer(tbox<int>& bal1, TBox<int>&bal2, int amt) { TRANSACTION { if (amt < 0 bal1 < amt) return false; bal1 = bal1 - amt; bal2 = bal2 + amt; } RETRY(true); return true; } 5 Evaluation 5.1 Grundlagen In diesem Kapitel werden die Grundlagen der Evaluation erläutert. Die Hypothese, welche mit der Evaluation überprüft werden soll, ist: STO könnte performanter als konventionelle Implementierungen für STS sein, da es nicht auf Speicherwort-Granularität sondern auf Datentypen basiert und zusätzlich noch deren Semantik ausnutzt. Die in der Evaluation genutzte Umgebung ist STAMP [MCKO08]. STAMP ist eine etablierte Testumgebung mit der schon viele HTS- und STS-Implementierungen getestet wurden. Es ist mit dem bereits in der Einleitung erwähnten TL2 implementiert. Es benutzt viele Datentypen wie Listen, Warteschlangen und Zuweisungen, aber auch einige Zugriffe auf Speicherwort-Granularität, wofür der STO Datentyp TGeneral benutzt wird. 5.2 Szenarien Die in der Evaluation untersuchten Szenarien setzen sich aus einer großen Breite an Einsatzgebieten zusammen. Im Detail sind das: Intruder Intruder ist ein Szenario aus der Netzwerksicherheit. Bei diesem Test wird ein Network Intrusion Test durchgeführt. Genome Genome kommt aus der Bioinformatk und führt eine DNA-Sequenzierung durch. 8

9 Kmeans Kmeans kommt aus dem Bereich des Data-Mining und implementiert eine K-means Clustanalyse. Labyrinth Labyrinth kommt aus dem Ingenieurwesen und führt eine Routenplanung in einem Labyrinth durch. Vacation Vacation kommt aus der Online-Transaktionsverarbeitung und repräsentiert ein Reisebuchungssystem. 5.3 Ergebnisse In Abb. 5 sind die Ergebnisse der Evaluation bei den verschiedenen Szenarien dargestellt. Die Tests wurden sowohl mit 4 als auch mit 16 Kernen durchgeführt. Die Balken geben die Beschleunigung gegenüber der sequenziellen Ausführung des selben Test an. In dieser vielfältigen Reihe von Szenarien ist STO immer besser als TL2. Der größte Zuwachs ist bei dem Intruder-Szenario zu bemerken. Das liegt daran, dass Intruder viele Listen benutzt, welche bei dem auf Speicherwort basierten TL2 zu großen Tracking-Sets führt. So hat das größte Tracking-Set von TL2 40x mehr Items als das größte Tracking-Set von STO zu protokollieren. Abbildung 5: Ergebnisse der Evaluation bei 4 und 16 Kernen. Eine andere interessante Entwicklung zeigt sich bei dem Vacation-Szenario. Dieser Test wurde in zwei verschiedenen Versionen durchgeführt. Einmal mit gleich verteilten Zugriffen auf alle vorhandenen Datentypen und einmal mit beschränkten Zugriffen auf nur 1% der vorhandenen Daten, wodurch sich ein sehr große Wahrscheinlichkeit für Konflikte ergibt. Bei diesem Szenario lässt sich besonders gut erkennen, welchen Einfluss die Prädikate auf die False-Conflict-Vermeidung haben. Ohne Prädikate stellt die parallele Reservierung von einem Gut einen Konflikt dar, auch wenn sie eigentlich nicht in Konflikt stehen, wenn genügend Güter zur Verfügung stehen. Prädikate können genutzt werden um die Existenz von mehr als den zu buchenden Gütern zu prüfen und nicht den genauen Wert. Dadurch zeigen die Prädikate bei beschränktem Zugriff auf die Datentypen großes 9

10 Potenzial in der Vermeidung von False-Conflicts. Transaktionen von STO mit Prädikaten haben eine relativ geringe Abbruchrate. Bei 16 Kernen ist die Beschleunigung 4.3x größer als bei STO ohne Prädikaten, welches im diesem Szenario sogar langsamer ist als die sequenzielle Ausführung. Bei normal verteilten Zugriffen auf alle Datentypen stellt allerdings die Benutzung von Prädikaten einen so großen Overhead da, dass hier die Beschleunigung kleiner ist als bei STO ohne Prädikaten. Um zu zeigen, dass der Zuwachs auch an der Datenstrukturnutzung liegt wurde STAMP auch mit STO unter ausschließlicher Benutzung des Datentyps TGeneral getestet. Also auf Speicherwort- Granularität ohne Ausnutzung der Semantik der Datenstrukturen. Die Resultate dieses Tests waren vergleichbar mit denen von TL2. Somit liegt es wirklich an der Datenstrukturnutzung und nicht an eventuellen andere performanteren Herangehensweisen von STO. 6 Zusammenfassung Um die Effizienzprobleme konventioneller Software Transaktionaler Speicher Implementierungen zu lösen wurde der Ansatz von Software Transaktionalen Objekten erklärt. Dieser Ansatz verringert die Protokollierungskosten von Implementierungen auf Basis von Speicherwort-Granularität durch Ausnutzung von Datenstruktur-Granularität. Zusätzlich wird durch die Beachtung der Semantik dieser Datenstrukturen die False-Conflict-Vermeidung erhöht. Die vorgestellte Methodik der Prädikate erhöht die False-Conflict-Vermeidung in sehr Konflikt starken Anwendungen. Diese Methodik ist aber mit hohem Overhead verbunden und führt bei konfliktarmen Anwendungen zu einer Verschlechterung der Performance. In der Evaluation wurde anhand verschiedener Anwendungsszenarien gezeigt, dass dieser Ansatz konventionellen Software Transaktionalen Speicher Implementierungen auf Basis von Speicherwort- Granularität überlegen ist. Des Weiteren bietet STO die Möglichkeit durch die Entwicklung eigener transaktionaler Datentypen eine Optimierung für spezielle Anwendungsprogramme an. Literatur [HIH + 16] [Kü] Nathaniel Herman, Jeevana Priya Inala, Yihe Huang, Lillian Tsai, Eddie Kohler, Barbara Liskov, and Liuba Shrira. Type-aware transactions for faster concurrent code. In Proceedings of the Eleventh European Conference on Computer Systems, EuroSys 16, pages 31:1 31:16, New York, NY, USA, ACM. Winfried E. Kühnhauser. Betriebssysteme. media/vsbs/ws_2016/betriebssysteme/kap2.pdf. [Online; Zugriff ]. [MCKO08] Chi Cao Minh, JaeWoong Chung, Christos Kozyrakis, and Kunle Olukotun. Stamp: Stanford transactional applications for multi-processing. In Proc. IEEE Int l Symp. on Workload Characterization (IISWC 08), page 35 46, [Sut05] Herb Sutter. The Free Lunch Is Over. concurrency-ddj.htm, [Online; Zugriff ]. 10

Anwendung (2. Versuch:-) Entkopplung der Locks

Anwendung (2. Versuch:-) Entkopplung der Locks Gut gemeint aber leider fehlerhaft... Jeder Producer benötigt zwei Locks gleichzeitig, um zu produzieren: 1. dasjenige für den Puffer; 2. dasjenige für einen Semaphor. Musser fürden Semaphor einwait()

Mehr

Memory Models Frederik Zipp

Memory Models Frederik Zipp Memory Models Frederik Zipp Seminar: Programmiersprachen für Parallele Programmierung (SS 2010) Fakultät für Informatik - IPD SNELTING LEHRSTUHL PROGRAMMIERPARADIGMEN 1

Mehr

Objektorientierung. Marc Satkowski 20. November C# Kurs

Objektorientierung. Marc Satkowski 20. November C# Kurs Objektorientierung Marc Satkowski 20. November 2016 C# Kurs Gliederung 1. Weiterführende Verzweigungen Tertiäre-Verzweigung switch case 2. Schleifen Zählschleife (for) break & continue 3. Objektorientierung

Mehr

9. Transaktionsverwaltung 9.3. Fehlerbehandlung Seite 1

9. Transaktionsverwaltung 9.3. Fehlerbehandlung Seite 1 9. Transaktionsverwaltung 9.3. Fehlerbehandlung Seite 1 9.3 Fehlerbehandlung Im realen Betrieb eines Datenbanksystems muss mit Fehlersituationen gerechnet werden. Transaktionsfehler: Hierunter verstehen

Mehr

3.5 Synchronisation ohne Sperren

3.5 Synchronisation ohne Sperren Überblick Nachteil von Sperren: Einschränkung der Parallelität Deadlocks 1. Lösungsversuch: Weiterhin pessimistisches Verfahren, aber statt Sperren, Zeitstempel (nicht zur Verklemmungsvermeidung sondern

Mehr

6.3 Verteilte Transaktionen

6.3 Verteilte Transaktionen 6.3 Verteilte Transaktionen Situation: Fragmentierung: Ein Datenbestand ist über mehrere Stationen verteilt (z.b. verteilte Datenbank, verteiltes Dateisystem,...) d.h. in Fragmente aufgeteilt, für die

Mehr

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches

Mehr

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Aufgaben zur Klausur C und Objektorientierte Programmierung im WS 2003/04 (WI h103, II h105, MI h353) Zeit: 150 Minuten erlaubte Hilfsmittel:

Mehr

Inhaltsverzeichnis. Inhaltsverzeichnis

Inhaltsverzeichnis. Inhaltsverzeichnis Inhaltsverzeichnis Das Script für die Lehrveranstaltung Datenmanagement wurde im Wintersemester 2007/2008 komplett überarbeitet und neu strukturiert. Wir bitten darum, eventuelle Fehler im Script an Milan

Mehr

Betriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion

Betriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion Betriebssysteme Vorlesung im Herbstsemester 2010 Universität Mannheim Kapitel 6: Speicherbasierte Prozessinteraktion Felix C. Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung

Mehr

Betriebssysteme. G: Parallele Prozesse. (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen)

Betriebssysteme. G: Parallele Prozesse. (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen) Betriebssysteme G: Parallele Prozesse (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen) 1 Allgemeine Synchronisationsprobleme Wir verstehen ein BS als eine Menge von parallel

Mehr

Transactional Memory. Robert Brunel Technische Universität München

Transactional Memory. Robert Brunel Technische Universität München Transactional Memory Robert Brunel Technische Universität München 25.09.2009 Transactional Memory: Grundbegriffe Memory-Transaction: Eine Folge von Zugriffen auf den Arbeitsspeicher, die atomar und isoliert

Mehr

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Organisatorisches Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Nächste Woche VO und UE am Dienstag, den 30.10.! UE im CR IL/IT Wissensüberprüfung am Zettel 25.10.2018 IT I - VO 3 1 Organisatorisches

Mehr

Nicht-blockierende Synchronisation für Echtzeitsysteme

Nicht-blockierende Synchronisation für Echtzeitsysteme Nicht-blockierende Synchronisation für Echtzeitsysteme Seminar Mobile Systeme Florian Schricker 15. März 2005 Seminarleiter: Prof. Dr. Dieter Zöbel 1 INHALTSVERZEICHNIS INHALTSVERZEICHNIS Inhaltsverzeichnis

Mehr

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester Seminar: Multicore Programmierung Sommersemester 2009 16.07.2009 Inhaltsverzeichnis 1 Speichermodell 2 3 Implementierungsvielfalt Prioritätsinversion 4 Threads Speichermodell Was sind Threads innerhalb

Mehr

Info B VL 16: Monitore und Semaphoren

Info B VL 16: Monitore und Semaphoren Info B VL 16: Monitore und Semaphoren Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 16: Monitore und

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Überblick Grundlagen Definitionen Eigene Entwicklungen Datenstrukturen Elementare Datentypen Abstrakte Datentypen Elementare

Mehr

Prioritäten/Zeitstempel-Verfahren

Prioritäten/Zeitstempel-Verfahren Prioritäten/Zeitstempel-Verfahren Grundlegende Idee: Falls einer Transaktion T k eine Sperre nicht gewährt wird, weil eine andere Transaktion T i sie hält, besteht Deadlockgefahr. Also bekommt jede Transaktion

Mehr

Prioritäten/Zeitstempel-Verfahren. WAIT-DIE und WOUND-WAIT-Strategien

Prioritäten/Zeitstempel-Verfahren. WAIT-DIE und WOUND-WAIT-Strategien Prioritäten/Zeitstempel-Verfahren Grundlegende Idee: Falls einer Transaktion T k eine Sperre nicht gewährt wird, weil eine andere Transaktion T i sie hält, besteht Deadlockgefahr. Also bekommt jede Transaktion

Mehr

Datenbanksysteme 2009

Datenbanksysteme 2009 Datenbanksysteme 2009 Vorlesung vom 30.06.09 Kapitel 14: Mehrbenutzersynchronisation Oliver Vornberger Institut für Informatik Universität Osnabrück Multiprogramming Zeitachse Einbenutzer betrieb T1 T2

Mehr

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1 Kapitel 13 Definition von Klassen OOP Thomas Klinker 1 OOP Thomas Klinker 2 Datenabstraktion Der Mensch abstrahiert, um komplexe Sachverhalte darzustellen. Dinge und Vorgänge werden auf das wesentliche

Mehr

Eigenschaften von TAs: ACID-Prinzip

Eigenschaften von TAs: ACID-Prinzip Transaktionsparadigma Definition: Transaktion ununterbrechbare Folge von DML-/DDL-Befehlen begin transaction --- end transaction begin: meist implizit mit ersten Datenbankzugriff end: commit (work) oder

Mehr

In diesem Abschnitt stehen Transaktionen im Mittelpunkt. Hierbei geht es darum, wie bei Mehrbenutzerbetrieb die Integrität von Datenbanken

In diesem Abschnitt stehen Transaktionen im Mittelpunkt. Hierbei geht es darum, wie bei Mehrbenutzerbetrieb die Integrität von Datenbanken In diesem Abschnitt stehen Transaktionen im Mittelpunkt. Hierbei geht es darum, wie bei Mehrbenutzerbetrieb die Integrität von Datenbanken gewährleistet wird. 1 Im einzelnen geht es in diesem Abschnitt

Mehr

Geheimnisprinzip: (information hiding principle, Parnas 1972)

Geheimnisprinzip: (information hiding principle, Parnas 1972) 2. Abstrakte Datentypen 2.0 Begriffe Geheimnisprinzip: (information hiding principle, Parnas 1972) Zugriffe auf Teile einer Programmeinheit, die für die reguläre Benutzung nicht erforderlich sind, sollten

Mehr

Threads Einführung. Zustände von Threads

Threads Einführung. Zustände von Threads Threads Einführung Parallelität : Zerlegung von Problemstellungen in Teilaufgaben, die parallelel ausgeführt werden können (einfachere Strukturen, eventuell schneller, Voraussetzung für Mehrprozessorarchitekturen)

Mehr

Vorlesung "Systemsoftware II" Wintersemester 2002/03

Vorlesung Systemsoftware II Wintersemester 2002/03 (c) Peter Sturm, Universität Trier 1 Verteilte Systeme 16. Transaktionen Motivation Sicherung konsistenter Systemzustände Beispiele Amnesieproblematik bei zustandsbehafteten Servern Sicherung des Primaries

Mehr

Tag 8 Repetitorium Informatik (Java)

Tag 8 Repetitorium Informatik (Java) Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium

Mehr

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Software Transactional Memory in Haskell

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Software Transactional Memory in Haskell Stand der Folien: 24. Januar 2012 Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (2) 1 Software Transactional

Mehr

Vorlesung "Verteilte Systeme" Wintersemester 2000/2001. Verteilte Systeme. 14. Transaktionen

Vorlesung Verteilte Systeme Wintersemester 2000/2001. Verteilte Systeme. 14. Transaktionen Verteilte Systeme 14. Transaktionen Motivation Sicherung konsistenter Systemzustände Beispiele Amnesieproblematik bei zustandsbehafteten Servern Sicherung des Primaries (Primary-Backup- Approach) Aktive

Mehr

Grundlagen der Informatik 12. Strukturen

Grundlagen der Informatik 12. Strukturen 12. Strukturen Strukturen und deren Komponenten Strukturen im Projekt Dynamisch erstellte Strukturen Strukturen und Operatoren Strukturen und Funktionen Einfach verkettete Liste Grundlagen der Informatik

Mehr

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Design

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Nebenläufige Programmierung in Haskell (2) Design Übersicht Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Nebenläufige Programmierung in Haskell (2) PD Dr. David Sabel 1 Software Transactional Memory Übersicht

Mehr

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy PROCESSING EINE ZUSAMMENFASSUNG Created by Michael Kirsch & Beat Rossmy INHALT 1. Typen und Operatoren 1. Datentypen 3. Klassen und Objekte 1. Klassen und Objekte 2. Operatoren 2. Konstruktor 3. Typkonversion

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der

Mehr

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Physikalisch Technische Lehranstalt Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt Aufgaben zur Klausur Objektorientierte Programmierung im WS 2003/04 (IA 252) Zeit: 90 Minuten erlaubte Hilfsmittel: keine

Mehr

Software Transactional Memory

Software Transactional Memory Software-Architektur Software Transactional Memory Fakultät für Informatik und Mathematik Hochschule München Letzte Änderung: 11.07.2017 15:12 Inhaltsverzeichnis Transaktionaler Speicher..............................

Mehr

Pessimistische Sperrverfahren für Transaktionen. Pessimistische Sperrverfahren für Transaktionen - Implementierung - von Oliver Lemm

Pessimistische Sperrverfahren für Transaktionen. Pessimistische Sperrverfahren für Transaktionen - Implementierung - von Oliver Lemm Pessimistische Sperrverfahren für Transaktionen - Implementierung - von Oliver Lemm Oliver Lemm Seite 1/24 I. Übersicht der Theorie I. Zusammenfassung der Theorie 2 Phasen Sperre in der Theorie & Deadlocks

Mehr

9.2.4 Phantomproblem. Mächtigkeit von 2PL. Lösung des Phantomproblems. bisherige implizite Annahme

9.2.4 Phantomproblem. Mächtigkeit von 2PL. Lösung des Phantomproblems. bisherige implizite Annahme Rückblick Rückblick Geben Sie einen Schedule S an, der konfliktserialisierbar, jedoch nicht bei Anwendung von 2PL entstehbar ist. Schedule mit Phantom Sei eine Transaktion T 1 eine Ausführung eines Programmes

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Objektorientierte Programmierung Ausnahmebehandlung und Nebenläufigkeit 9. Vorlesung am 15. Dezember 2010 Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A

Mehr

Mächtigkeit von 2PL. Geben Sie einen Schedule S an, der. konfliktserialisierbar, jedoch nicht bei Anwendung von 2PL entstehbar. ist.

Mächtigkeit von 2PL. Geben Sie einen Schedule S an, der. konfliktserialisierbar, jedoch nicht bei Anwendung von 2PL entstehbar. ist. 9. Transaktionsverwaltung 9.2. Mehrbenutzerkontrolle Rückblick Rückblick Geben Sie einen Schedule S an, der ist. konfliktserialisierbar, jedoch nicht bei Anwendung von 2PL entstehbar Mächtigkeit von 2PL

Mehr

Testen nebenläufiger Objekte

Testen nebenläufiger Objekte Testen nebenläufiger Objekte Threads in Java Julian Lambertz Seminar Tests in Informatik und Statistik im SS 2004 Universität Ulm J.L., Juni 2004 1 Themenüberblick Einleitung Begriff der Nebenläufigkeit

Mehr

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen Kapitel 9 Programmierkurs Birgit Engels Anna Schulze Zentrum für Angewandte Informatik Köln Objektorientierte Programmierung Attribute von Klassen, Methoden und Variablen Interfaces WS 07/08 1/ 18 2/ 18

Mehr

B2.1 Abstrakte Datentypen

B2.1 Abstrakte Datentypen Algorithmen und Datenstrukturen 21. März 2018 B2. Abstrakte Datentypen Algorithmen und Datenstrukturen B2. Abstrakte Datentypen B2.1 Abstrakte Datentypen Marcel Lüthi and Gabriele Röger B2.2 Multimengen,

Mehr

Verteilte Systeme. Replikation & Konsistenz I. Prof. Dr. Oliver Haase

Verteilte Systeme. Replikation & Konsistenz I. Prof. Dr. Oliver Haase Verteilte Systeme Replikation & Konsistenz I Prof. Dr. Oliver Haase 1 Überblick Replikation & Konsistenz I Ziele von Replikation Replikationsmodelle datenzentriert Client-zentriert Replikation & Konsistenz

Mehr

Prinzipien der objektorientierten Programmierung (OOP)

Prinzipien der objektorientierten Programmierung (OOP) Die Ziele der OOP sind: - bessere Warbarkeit - Wiederverwendbarkeit 1.) Datenkapselung Prinzipien der objektorientierten Programmierung (OOP) Komplexe Datenstrukturen (wie zb ein Stack) werden vom Anwendungsprogramm

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer

Mehr

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue

C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen Leibniz Universität IT Services Anja Aue Zeiger (Pointer) Verweis auf eine Speicherstelle. Speicherung einer Speicheradresse.

Mehr

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache:

Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache: Kapitel 8 Operatoren Was Mathematiker schon vor Jahrhunderten erfunden haben, gibt es jetzt endlich in ihrer Programmiersprache: Operatoren definieren Es ist in C++ möglich, Operatoren wie +, oder für

Mehr

Lock-freies nebenläufiges Programmieren durch Software Transactional Memory

Lock-freies nebenläufiges Programmieren durch Software Transactional Memory Lock-freies nebenläufiges Programmieren durch Software Transactional Memory David Sabel Goethe-Universität, Frankfurt am Main 10. Juni 2013 Stand der Folien: Motivation Parallele, nebenläufige und verteilte

Mehr

Laborskript Verteilte Systeme

Laborskript Verteilte Systeme Laborskript Verteilte Systeme Nebenläufigkeit in Java Prof. Dr. Oliver Haase 1 Threads Java bietet zwei verschiedene Arten an, Threads zu erzeugen und zu starten: Entweder durch Erweitern der Klasse Thread,

Mehr

Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);

Stack stack = new Stack(); stack.push (Würstchen); string s = (string) stack.pop(); Console.WriteLine (s); D3kjd3Di38lk323nnm Der Typ object object (System.Object) ist die Ausgangsbasisklasse für alle Typen. Jeder Typ kann per Upcast in ein object umgewandelt werden. Um zu zeigen, wie das nützlich sein kann,

Mehr

Prozesszustände (1a)

Prozesszustände (1a) Prozesszustände (1a) NOT EXISTING DELETED CREATED Meta-Zustand (Theoretische Bedeutung) Prozesszustände Multiuser Umfeld (1c) Hintergrund-Prozess - der Prozess startet im Hintergrund - my-commandbin &

Mehr

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf Übersicht Komplexitätsresultate Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Synchronisation (4) Drei Komplexitätsresultate Eine genaue Schranke für den Platzbedarf

Mehr

Imperative Programmierung in Java: Kontrollfluß II

Imperative Programmierung in Java: Kontrollfluß II 2 Imperative Programmierung in va: Kontrollfluß II Martin Wirsing Ziele Lernen imperative Programme in va mit Zuweisung, Block, Fallunterscheidung, Iteration zu schreiben Lernen Kontrollflußdiagramme zur

Mehr

Konfliktgraph. Satz und Definition

Konfliktgraph. Satz und Definition 9. Transaktionsverwaltung 9.2. Mehrbenutzerkontrolle Seite 1 Konfliktgraph Der Konfliktgraph von S ist ein gerichteter Graph KG(S) = (V, E), wobei V die Menge aller Transaktionen in S und E die Menge der

Mehr

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell

Mehr

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3 Programmieren mit Java Modul 5 Objekte Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Klassen und Objekte 3 2.1 Klassen.................................... 4 2.2 Objektvariablen und Methoden.......................

Mehr

Seminar: Multi-Core Architectures and Programming

Seminar: Multi-Core Architectures and Programming Seminar: Multi-Core Architectures and Programming Parallelisierung des Viola-Jones Algorithmus auf Tilera Hardware-Software-Co-Design Universität Erlangen-Nürnberg 1 Übersicht Einleitung Erste Versuche

Mehr

Programmiersprachen Einführung in C

Programmiersprachen Einführung in C Programmiersprachen Einführung in C Teil 2: Prof. Dr. Unser erstes C-Programm int main (int argc, char *argv[]) int i; int sum = 0; for (i = 0; i

Mehr

Intensivübung zu Algorithmen und Datenstrukturen

Intensivübung zu Algorithmen und Datenstrukturen Intensivübung zu Algorithmen und Datenstrukturen Silvia Schreier Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen Übersicht Programmierung Fallunterscheidung Flussdiagramm Bedingungen Boolesche

Mehr

13 Abstrakte Datentypen

13 Abstrakte Datentypen 13 Abstrakte Datentypen Bisher: Konkrete Datentypen Menge von Elementen Operationen auf den Elementen (Konstruktoren, Selektoren, Typprädikate) Eigenschaften abgeleitet Jetzt: Abstrakte Datentypen (ADT)

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher

Mehr

Praktikum Funktionale Programmierung Organisation und Überblick

Praktikum Funktionale Programmierung Organisation und Überblick Praktikum Funktionale Programmierung Organisation und Überblick Dr. David Sabel Sommersemester 2013 Stand der Folien: SoSe 2013 Adressen Organisatorisches Software Projekt Adressen, Termine Studienleistung

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

Übung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012

Übung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012 Übung zu Grundlagen der Betriebssysteme 10. Übung 18.12.2012 Aufgabe 1 a) Was versteht man unter einem kritischen Abschnitt oder kritischen Gebiet (critical area)? b) Welche Aufgabe hat ein Semaphor? c)

Mehr

Übung zu Betriebssysteme

Übung zu Betriebssysteme Übung zu Betriebssysteme Interruptsynchronisation 22. & 24. November 2017 Andreas Ziegler Bernhard Heinloth Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte

Mehr

Einführung in die Programmierung II. 5. Zeiger

Einführung in die Programmierung II. 5. Zeiger Einführung in die Programmierung II 5. Zeiger Thomas Huckle, Stefan Zimmer 16. 5. 2007-1- Bezüge als Objekte Bisher kennen wir als Bezüge (Lvalues) nur Variablennamen Jetzt kommt eine neue Sorte dazu,

Mehr

Objektorientierte Datenbanken

Objektorientierte Datenbanken Objektorientierte Datenbanken Ralf Möller, FH-Wedel z Beim vorigen Mal: y Java Data Objects Teil 2, Queries z Heute: y Java Data Objects Teil 3, Objektidentität z Lernziele: y Grundlagen der Programmierung

Mehr

Prüfung Softwareentwicklung II (IB)

Prüfung Softwareentwicklung II (IB) Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IB 2 B, IB 2 C Sommersemester 2013 Prüfung Softwareentwicklung II (IB) Datum : 11.07.2013, 08:30 Uhr

Mehr

Probeklausur: Programmierung WS04/05

Probeklausur: Programmierung WS04/05 Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,

Mehr

7. Transaktionsverwaltung

7. Transaktionsverwaltung 7. Transaktionsverwaltung Motivation Transaktionen erlauben Bündelung von Operationen und gelten als wichtigster Beitrag des Bereichs Datenbanken zur Informatik; sie werden heute auch außerhalb von Datenbanksystemen

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

Mehr

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen

Heap vs. Stack vs. statisch. 6 Speicherorganisation. Beispiel Statische Variablen. Statische Variablen Heap vs. vs. statisch Der Speicher des Programms ist in verschiedene Speicherbereiche untergliedert Speicherbereiche, die den eigentlichen Programmcode und den Code der Laufzeitbibliothek enthalten; einen

Mehr

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen 5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden

Mehr

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard Systeme I: Betriebssysteme Kapitel 4 Prozesse Wolfram Burgard Version 18.11.2015 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung, unterschiedliche Arten von Betriebssystemen

Mehr

Ausnahmebehandlung in Java

Ausnahmebehandlung in Java Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception

Mehr

Implementieren von Klassen

Implementieren von Klassen Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und

Mehr

ÜBUNGS-BLOCK 7 LÖSUNGEN

ÜBUNGS-BLOCK 7 LÖSUNGEN ÜBUNGS-BLOCK 7 LÖSUNGEN Aufgabe 1: Gegeben ist folgender Code: Auto[] array = new Auto[3]; // Alle Autos im Array tunen: for (int i = 1; i

Mehr

Algorithmen und Datenstrukturen SS Übungsblatt 1: Grundlagen

Algorithmen und Datenstrukturen SS Übungsblatt 1: Grundlagen Ludwig-Maximilians-Universität München München, 16.04.2018 Institut für Informatik Prof. Dr. Thomas Seidl Anna Beer, Florian Richter Algorithmen und Datenstrukturen SS 2018 Übungsblatt 1: Grundlagen Tutorien:

Mehr

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener

Mehr

Die Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit ausgeführt werden.

Die Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit ausgeführt werden. 7 Parallelität und Nebenläufigkeit Mehrere Prozessen oder Threads Parallelität Die Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit

Mehr

Kapitel 5 Mehrversionen-CC. MVCC: Annahmen & Eigenschaften

Kapitel 5 Mehrversionen-CC. MVCC: Annahmen & Eigenschaften Kapitel 5 Mehrversionen-CC Bisher sind wir immer von der Grundannahme ausgegangen, dass jedes Datenobjekt x nur in einer Version vorliegt. Die Konsequenz daraus war, dass durch jedes Schreiben der Wert

Mehr

12 Abstrakte Klassen, finale Klassen und Interfaces

12 Abstrakte Klassen, finale Klassen und Interfaces 12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Das Java-Speichermodell Prof. Dr. Walter F. Tichy Dr. Victor Pankratius Ali Jannesari Geschichte des Speichermodells Kapitel 17 der Java-Sprachdefinition

Mehr

11.3 Transaktionen und LUWs in SAP R/3

11.3 Transaktionen und LUWs in SAP R/3 11.3 Transaktionen und LUWs in SAP R/3 G Transaktionen heissen in SAP/R3 Logical Unit of Work (LUW). Eine LUW besteht in der Regel aus zwei Teilen: SAP-Transaktion: Folge von vorbereiteten Dialogschritten

Mehr

Klausur Grundlagen der Programmierung

Klausur Grundlagen der Programmierung Klausur Grundlagen der Programmierung Aufgabenstellung: Martin Schultheiß Erreichte Punktzahl: von 60 Note: Allgemeine Hinweise: Schreiben Sie bitte Ihren Namen auf jedes der Blätter Zugelassene Hilfsmittel

Mehr

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3 Programmieren mit Java Modul 3 Arrays Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Eindimensionale Arrays 3 2.1 Arrays deklarieren.............................. 3 2.2 Arrays erzeugen................................

Mehr

Parallele und funktionale Programmierung Wintersemester 2013/ Übung Abgabe bis , 16:00 Uhr

Parallele und funktionale Programmierung Wintersemester 2013/ Übung Abgabe bis , 16:00 Uhr . Übung Abgabe bis 08.11.013, 16:00 Uhr Aufgabe.1: Erreichbarkeitsgraph Gegeben sei folgendes paralleles Petri-Netz für eine einfache Fußgängerampelschaltung: a) Zeichnen Sie den vollständigen Erreichbarkeitsgraphen

Mehr

Verteilte Systeme. Nebenläufigkeit. Prof. Dr. Oliver Haase

Verteilte Systeme. Nebenläufigkeit. Prof. Dr. Oliver Haase Verteilte Systeme Nebenläufigkeit Prof. Dr. Oliver Haase 1 Arten der Nebenläufigkeit 1-Prozessor(kern)-System quasiparallele Ausführung erhöht Interaktivität durch Umschalten zwischen Threads kann Parallelitätsgrad

Mehr

Query Result Caching. Optimierung des Datenbankzugriffs

Query Result Caching. Optimierung des Datenbankzugriffs Query Result Caching Optimierung des Datenbankzugriffs Andreas Hubmer 19.11.2012 Inhalt Problemstellung Tabellen-Cache DBProxy Objekt-Cache 1 st -/2 nd -Level Cache Query Cache 2 Problemstellung Application-

Mehr

11.3 Transaktionen und LUWs in SAP R/3

11.3 Transaktionen und LUWs in SAP R/3 11.3 Transaktionen und LUWs in SAP R/3 G Transaktionen heissen in SAP/R3 Logical Unit of Work (LUW). Eine LUW besteht in der Regel aus zwei Teilen: SAP-Transaktion: Folge von vorbereiteten Dialogschritten

Mehr

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein

Objektorientierung. Klassen und Objekte. Dr. Beatrice Amrhein Objektorientierung Klassen und Objekte Dr. Beatrice Amrhein Überblick Konzepte der Objektorientierten Programmierung Klassen und Objekte o Implementierung von Klassen o Verwendung von Objekten 2 Konzepte

Mehr

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen Sebastian Küpper Unzulänglichkeit von Feldern Wenn ein Unternehmen alle Rechnungen eines Jahres verwalten möchte,

Mehr

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17 C++ Teil 9 Sven Groß 17. Juni 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 9 17. Juni 2016 1 / 17 Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente Methoden / Elementfunktionen

Mehr