Übungen zu Systemprogrammierung 1

Ähnliche Dokumente
Dynamischer Speicher

Übungen zu Systemprogrammierung 1 (SP1)

Grundlagen der Programmentwicklung

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

Advanced Programming in C

2Binden 3. und Bibliotheken

Teil IV Die Programmiersprache C++

Übungen zu Systemprogrammierung 1 (SP1)

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

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

1. Übung zu "Numerik partieller Differentialgleichungen"

Einführung in die C-Programmierung

Dynamische Speicherverwaltung

Dr. Monika Meiler. Inhalt

Die Programmiersprache C Eine Einführung

Tutorium Rechnerorganisation

Programmierung mit C Zeiger

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Deklarationen in C. Prof. Dr. Margarita Esponda

Repetitorium Informatik (Java)

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Praktikum im Bereich Praktische Informatik Echtzeitgraphik in C++ und DirectX10. computer graphics & visualization

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

Programm in Source-Files aufteilen Erhöht Lesbarkeit Aufteilung orientier t sich an logischer Struktur des Programms Getrenntes Übersetzen möglich:

Vorlesung Informatik I

C programmieren. Jürgen Wolf

Übung 1 - Betriebssysteme I

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Übung zu Grundlagen der Betriebssysteme. Einführungsveranstaltung

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

4. Objektorientierte Programmierung mit C++

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

AuD-Tafelübung T-B5b

2. Prozesssynchronisation

Einführung in die Programmiersprache C

C allgemein. C wurde unter und für Unix entwickelt. Vorläufer sind BCPL und B.

Einführung zum MS Visual Studio

Für die Erstellung von Javaprogrammen sind eventuell zwei Komponenten nötig. 1. Das Java-Develepment-Kit (JDK) und die 2. Java Runtime Engine (JRE)

Kompaktkurs C-Programmierung

Grundlagen. Kapitel 1

Übersicht. Einführung in die Programmierung. main. main. main. main. Speicherverwaltung. Definition nach ANSI C:

DLLs (dynamic loaded libraries) mit MingW erstellen

Hello world. Sebastian Dyroff. 21. September 2009

4D Server v12 64-bit Version BETA VERSION

GI Vektoren

Zählen von Objekten einer bestimmten Klasse

Praxisorientierte Einführung in C++ Lektion: "Die Compiler-Chain (Vom Quellcode zum ausführbaren Programm)"

Algorithmen und Datenstrukturen

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 4

Praktikum Ingenieurinformatik. Termin 1. Textdateien (ASCII, Unicode) Mein erstes C-Programm

Praktikum Betriebssysteme 1. Aufgabe (1)

Assembler - Einleitung

1.4. Funktionen. Objektorientierte Programmierung mit C++

Einführung in die Programmierung 1

Vorlesung C-Kurs 9:15-10:45 Mathe 11:15-12:45 1. Woche Hörsaal 1 2. Woche Hörsaal 7

Compilieren und Linken von C- und C++-Dateien

Die Programmiersprache C

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

Übungspaket 23 Mehrdimensionale Arrays

Ziele. C und C++ Was ist C? Übersicht. Überblick. C und C++ im Vergleich zu anderen Programmiersprachen einordnen können

Programmieren was ist das genau?

1Schnelleinstieg 14. 2Wie aus einer einfachen Textdatei. 3 Wie man eigene Programme erstellt 30. Inhaltsverzeichnis. ein Programm wird 20

Objektbasierte Entwicklung

8a. Exkurs.NET. 8a.1.NET Architektur

Übung zu Grundlagen der Betriebssysteme. 3. Übung

Aufbau von Klassen. class punkt {...

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Praktikum Ingenieurinformatik. Termin 2. Mein erstes C-Programm

Wie man eigene Programme erstellt

Einführung zu den Übungen aus Softwareentwicklung 1

Übung zur Vorlesung Strukturiertes Programmieren WS 2014/15. Übungsblatt 1: JAVA - Erste Schritte Abgabe: Besprechung:

Pass by Value Pass by Reference Defaults, Overloading, variable Parameteranzahl

Programmieren für Ingenieure Sommer Ein Rechner. Rechner sind überall. Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet.

Die Programmiersprache C99: Zusammenfassung

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Propädeutikum. Dipl.-Inf. Frank Güttler

Betriebssysteme Übung 2. Tutorium System Calls & Multiprogramming

Technische Informatik 1 - Übung 3 3. & 4. November Philipp Miedl

Übung zur Vorlesung Programmieren in C

Programmieren in C. Die C-Standardbibliothek. Prof. Dr. Nikolaus Wulff

Klausur C-Programmierung / / Klingebiel / 60 Minuten / 60 Punkte

Kapitel 1. Grundlagen

Embedded Software. Der C Präprozessor. Sichere objektbasierte Entwicklung dank C Präprozessor. Prof. Dr. Nikolaus Wulff

Begleitendes Praktikum zur Vorlesung Künstliche Intelligenz

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

C für Java-Programmierer

Transkript:

Übungen zu Systemprogrammierung 1 Ü1-2 Speicherverwaltung Sommersemester 2018 Christian Eichler, Jürgen Kleinöder Lehrstuhl für Informatik 4 Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte Systeme und Betriebssysteme

Agenda 1.1 Übersetzen von Programmen 1.2 Portable Programme 1.3 Anforderungen an Abgaben 1.4 Verkettete Listen 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden

Agenda 1.1 Übersetzen von Programmen 1.2 Portable Programme 1.3 Anforderungen an Abgaben 1.4 Verkettete Listen 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden

Compiler und Optionen Übersetzen einer Quelldatei mit gcc: user@host:~$ 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 1 2

Gängige Compiler-Warnungen chris@legio:~$ gcc -o test test.c test.c: In function main : test.c:3:2: warning: implicit declaration of function printf Bibliotheksfunktion: Entsprechendes #include fehlt. Manual-Page gibt Auskunft über den Namen der nötigen Headerdateien: $ man 3 printf SYNOPSIS #include <stdio.h> int printf(const char *format,...); eigene Funktion: Forward-Deklaration fehlt test.c: In function foo : test.c:3:1: warning: control reaches end of non-void function in der Funktion, die einen Wert zurückliefern soll, fehlt an einem Austrittspfad eine passende return-anweisung 1 3

Agenda 1.1 Übersetzen von Programmen 1.2 Portable Programme 1.3 Anforderungen an Abgaben 1.4 Verkettete Listen 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden

Portable Programme Entwicklung portabler Programme durch Verwendung definierter Schnittstellen ANSI C11 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) 1 5

... und was ist mit Windows? ANSI C11 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. 1 6

Agenda 1.1 Übersetzen von Programmen 1.2 Portable Programme 1.3 Anforderungen an Abgaben 1.4 Verkettete Listen 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden

Anforderungen an abgegeben Lösungen C-Sprachumfang konform zu ANSI C11 Betriebssystemschnittstelle konform zu SUSv4 warnungs- und fehlerfrei im CIP-Pool mit folgenden gcc-optionen übersetzen: -std=c11 -pedantic -D_XOPEN_SOURCE=700 -Wall -Werror -std=c11 -pedantic erlauben nur ANSI-C11-konformen C-Quellcode -D_XOPEN_SOURCE=700 erlaubt nur SUSv4-konforme Betriebssystemaufrufe 1 8

Agenda 1.1 Übersetzen von Programmen 1.2 Portable Programme 1.3 Anforderungen an Abgaben 1.4 Verkettete Listen 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden

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 1 10

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 1 11

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 1 12

Agenda 1.1 Übersetzen von Programmen 1.2 Portable Programme 1.3 Anforderungen an Abgaben 1.4 Verkettete Listen 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden

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 1 14

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. 1 15

Agenda 1.1 Übersetzen von Programmen 1.2 Portable Programme 1.3 Anforderungen an Abgaben 1.4 Verkettete Listen 1.5 Aufgabe 1: lilo 1.6 Gelerntes anwenden

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 1 17