Übungen zu Systemprogrammierung 1 (SP1)

Ähnliche Dokumente
Übungen zu Systemprogrammierung 1

U1 1. Übung U1 1. Übung. Versionsverwaltung mit Subversion / SP-Abgabesystem

U1-1 Allgemeines zum Übungsbetrieb. U1-2 Nachtrag zur Benutzerumgebung. 1 Anlaufstellen. 2 Bearbeitung und Abgabe der Aufgaben

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C

C/C++-Programmierung

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Übungspaket 32 Einfach verkettete, sortierte Liste

Dynamische Speicherverwaltung

U4-1 Aufgabe 3: einfache malloc-implementierung

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

Dynamischer Speicher

Vorlesung Programmieren

Advanced Programming in C

Übungen zu Systemprogrammierung 1 (SP1)

Grundlagen der Programmentwicklung

Zeiger und dynamischer Speicher

Algorithmen und Datenstrukturen

Teil IV Die Programmiersprache C++

Nachname:... Vorname:... MatrNr.:... Klausur PR2. int main() { char Text[] = "Sehr geehrte Damen und Herren!"; char *tmp=text;

Praxis der Programmierung

Einstieg in die Informatik mit Java

Übungen zu Systemprogrammierung 1 (SP1)

Probeklausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 12. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Kurzeinführung in C/C++ Informationsquellen: - Webseite zur Vorlesung, Abschnitt Informationen zu C und C++ Einleitung

2Binden 3. und Bibliotheken

Systemprogrammierung

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

2. Programmierung in C

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

F Zeiger, Felder und Strukturen in C

1. Übung zu "Numerik partieller Differentialgleichungen"

Tag 8 Repetitorium Informatik (Java)

Programmierkurs C/C++

Algorithmen und Datenstrukturen (für ET/IT)

Dynamische Speicherverwaltung

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

einlesen n > 0? Ausgabe Negative Zahl

Crashkurs: Von Java nach C

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

Grundlagen der Informatik. Mathias Buhr

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Einleitung Entwicklung in C Hello-World! Konstrukte in C Zusammenfassung Literatur. Grundlagen von C. Jonas Gresens

Installationsanleitung

Crashkurs C++ - Teil 1

Betriebssysteme. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.

Dr. Monika Meiler. Inhalt

Betriebssysteme. Agenda. Tafelübung 4. Speicherverwaltung. Olaf Spinczyk.

Objektorientierte Programmierung und Klassen

RO-Tutorien 15 und 16

Programmierung mit C Zeiger

PROGRAMMIEREN MIT C. }, wird kompiliert mit dem Befehl. (-o steht für output) und ausgeführt mit dem Befehl

Einführung in die C-Programmierung

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Einstieg in die Informatik mit Java

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Dynamische Speicherverwaltung

Nachname:... Vorname:... MatrNr.:... Klausur PR2. Erstellen Sie eine Struktur für eine Komplexe Zahl mit den Elementen real und imag vom Typ double.

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

[Strukturen] Vereinbarung Verwendung Operationen mit struct Zeiger auf struct Strukturen auf dem Heap Datenstrukturen gebildet mit struct union

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

Tutorium Rechnerorganisation

Lösungshinweise/-vorschläge zum Übungsblatt 13: Software-Entwicklung 1 (WS 2017/18)

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Vorlesung Informatik I

3D Programmierpraktikum: Einführung in C++ - Teil 1

Vorlesung Informatik I

C programmieren. Jürgen Wolf

Einführung in die Programmierung für Physiker. Die Programmiersprache C Strukturen ("struct...")

Klassen als Datenstrukturen

Einführung in die Programmiersprache C

Übung 1 - Betriebssysteme I

7. Übung Informatik II - Objektorientierte Programmierung

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Transkript:

Übungen zu Systemprogrammierung 1 (SP1) Ü1-2 Speicherverwaltung Andreas Ziegler, Stefan Reif, Jürgen Kleinöder Lehrstuhl für Informatik 4 Verteilte Systeme und Betriebssysteme Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2016 18. bis 22. April 2016 http://www4.cs.fau.de/lehre/ss16/v_sp1

Agenda 1.1 Verkettete Listen 1.2 Übersetzen von Programmen 1.3 Portable Programme 1.4 Anforderungen an Abgaben 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1 2

Agenda 1.1 Verkettete Listen 1.2 Übersetzen von Programmen 1.3 Portable Programme 1.4 Anforderungen an Abgaben 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.1 Verkettete Listen 1 3

Verkettete Liste Wann setzt man eine verkettete Liste ein? Anforderungsanalyse für verkettete Liste Wieviele Listenelemente gibt es maximal? Welche Lebensdauer muss ein Listenelement besitzen? In welchem Kontext muss ein Listenelement sichtbar sein? Wir brauchen einen Mechanismus, mit dem Listenelemente in a-priori nicht bekannter Anzahl zur Laufzeit des Programmes erzeugt und zerstört werden können c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.1 Verkettete Listen 1 4

Dynamische Speicherverwaltung Beispiel in Java: Aufgabe 10.1 (Menschenkette) in AuD SS 2011 WaitingHuman somebody = new WaitingHuman("Mrs. Somebody"); WaitingHuman nobody = new WaitingHuman("Mr. Nobody"); somebody.add(nobody); In Java: Neues Listenelement wird mit Hilfe von new instanziiert Reservieren eines Speicherbereiches für das Objekt Initialisieren des Objektes durch Ausführen des Konstruktors In C: Anlegen eines Listenelementes mittels malloc(3) struct listelement *newelement; newelement = malloc( sizeof(struct listelement) ); if( newelement == NULL ) { // Fehlerbehandlung } Zurückgegebener Speicher hat undefinierten/zufälligen Wert Inititialisierung muss per Hand erfolgen c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.1 Verkettete Listen 1 5

Dynamische Speicherverwaltung Explizite Initialisierung mit definiertem Wert: memset(3) memset(newelement, 0, sizeof(struct listelement)); Mit 0 vorinitialisierter Speicher kann mit calloc(3) angefordert werden struct listelement *newelement; newelement = calloc( 1, sizeof(struct listelement) ); if ( newelement == NULL ) { /* Fehler */ } Im Gegensatz zu Java gibt es in C keinen Garbage-Collection-Mechanismus Speicherbereich muss von Hand mittels free(3) freigegeben werden Nur Speicher, der mit einer der Funktionen malloc(3), calloc(3) oder realloc(3) angefordert wurde, darf mit free(3) freigegeben werden! Zugriff auf freigegebenen Speicherbereich ist undefiniert c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.1 Verkettete Listen 1 6

Agenda 1.1 Verkettete Listen 1.2 Übersetzen von Programmen 1.3 Portable Programme 1.4 Anforderungen an Abgaben 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.2 Übersetzen von Programmen 1 7

Compiler und Optionen Übersetzen einer Quelldatei mit gcc > gcc -o test test.c Zur Erinnerung: Starten der ausführbaren Datei test mit./test Verhalten des gcc kann durch Optionen beeinflusst werden -g: Erzeugt Debug-Symbole in der ausführbaren Datei -c: Übersetzt Quellcode in Maschinencode, erzeugt aber kein ausführbares Programm -Wall: aktiviert weitere Warnungen, die auf mögliche Programmierfehler hinweisen -Werror: gcc behandelt Warnungen wie Fehler c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.2 Übersetzen von Programmen 1 8

Gängige Compiler-Warnungen implicit declaration of function printf bei Bibliotheksfunktionen fehlt entsprechendes #include entsprechende Manual-Page gibt Auskunft über den Namen der nötigen Headerdateien > man 3 printf SYNOPSIS #include <stdio.h> int printf(const char *format,...); bei einer eigenen Funktionen fehlt die Forward-Deklaration control reaches end of non-void function in der Funktion, die einen Wert zurückliefern soll, fehlt an einem Austrittspfad eine passende return-anweisung c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.2 Übersetzen von Programmen 1 9

Agenda 1.1 Verkettete Listen 1.2 Übersetzen von Programmen 1.3 Portable Programme 1.4 Anforderungen an Abgaben 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.3 Portable Programme 1 10

Portable Programme Entwicklung portabler Programme durch Verwendung definierter Schnittstellen ANSI C99 Normierung des Sprachumfangs der Programmiersprache C Standard-Bibliotheksfunktionen, z. B. printf, malloc Single UNIX Specification, Version 4 (SUSv4) Standardisierung der Betriebssystemschnittstelle Wird von verschiedenen Betriebssystemen implementiert: Solaris, HP/UX, AIX (SUSv3) Mac OS X (SUSv3)... und natürlich Linux (SUSv4, aber nicht offiziell zertifiziert) c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.3 Portable Programme 1 11

... und was ist mit Windows? ANSI C99 Von Microsoft Visual C/C++ nicht unterstützt :-( GCC läuft auch unter Windows :-) Single UNIX Specification, Version 4 (SUSv4) Von Microsoft Windows nicht unterstützt :-( UNIX-Kompatibilitätsschicht für Windows: Cygwin (http://cygwin.com/)... ist aber eher frickelig :- Neu in Windows 10 als Beta: unfertiges Ubuntu-Subsystem Ihr wollt eure SP-Programme unter Linux entwickeln. Wirklich. c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.3 Portable Programme 1 12

Agenda 1.1 Verkettete Listen 1.2 Übersetzen von Programmen 1.3 Portable Programme 1.4 Anforderungen an Abgaben 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.4 Anforderungen an Abgaben 1 13

Anforderungen an abgegeben Lösungen C-Sprachumfang konform zu ANSI C99 Betriebssystemschnittstelle konform zu SUSv4 warnungs- und fehlerfrei im CIP-Pool mit folgenden gcc-optionen übersetzen -std=c99 -pedantic -D_XOPEN_SOURCE=700 -Wall -Werror -std=c99 -pedantic erlauben nur ANSI-C99-konformen C-Quellcode -D_XOPEN_SOURCE=700 erlaubt nur SUSv4-konforme Betriebssystemaufrufe einzelne Aufgaben können hiervon abweichen, dies wird in der Aufgabenstellung entsprechend vermerkt c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.4 Anforderungen an Abgaben 1 14

Agenda 1.1 Verkettete Listen 1.2 Übersetzen von Programmen 1.3 Portable Programme 1.4 Anforderungen an Abgaben 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.5 Aufgabe 1: lilo 1 15

Einfach verkettete FIFO-Liste Zielsetzungen Kennenlernen der Umgebung und Entwicklungswerkzeuge Dynamische Speicherverwaltung und Umgang mit Zeigern Verwendung des Abgabesystems Strukturdefinition struct listelement { int value; struct listelement *next; }; typedef struct listelement listelement; // optional c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.5 Aufgabe 1: lilo 1 16

Schnittstelle Nur folgende Funktionen zu implementieren insertelement: Fügt einen neuen, nicht-negativen Wert in die Liste ein, wenn dieser noch nicht vorhanden ist. Tritt ein Fehler auf, wird -1 zurückgegeben. Ansonsten wird der eingefügte Wert zurückgegeben. removeelement: Entfernt den ältesten Wert in der Liste und gibt diesen zurück. Ist die Liste leer, wird -1 zurückgeliefert. Keine Listen-Funktionalität in der main()-funktion Allerdings: Erweitern der main() zum Testen erlaubt und erwünscht Sollte bei der Ausführung einer verwendeten Funktion (z. B. malloc(3)) ein Fehler auftreten, sind keine Fehlermeldungen auszugeben. c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.5 Aufgabe 1: lilo 1 17

Agenda 1.1 Verkettete Listen 1.2 Übersetzen von Programmen 1.3 Portable Programme 1.4 Anforderungen an Abgaben 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.6 Gelerntes anwenden 1 18

Aktive Mitarbeit erforderlich! Aufgabenstellung Optional: Programm schreiben, welches Hallo Welt! ausgibt Sieb des Eratosthenes implementieren Erstes Argument gibt an, bis zu welcher Zahl geprüft werden soll Programme übersetzen c az, sr, jk SP1 (Ü1-2 SS 2016) 1 Speicherverwaltung 1.6 Gelerntes anwenden 1 19