Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 9. April 2008

Ähnliche Dokumente
Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 25. Juli 2008

Friedrich-Alexander-Universität Erlangen-Nürnberg

Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl für Verteilte Systeme und Betriebssysteme. Schriftliche Diplomvorprüfung

d) Was passiert, wenn das folgende Programmstück übersetzt und ausgeführt

Zeiger vom Typ void* benötigen weniger Speicher als andere Zeiger, da bei anderen Zeigertypen zusätzlich die Größe gespeichert werden muss.

a) Welche Aussage zu Zeigern ist richtig? Die Übergabesemantik für Zeiger als Funktionsparameter ist callby-value.

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Informatik für Ingenieure (InfIng)

d) Welche Aussage zu Zeigern ist richtig? Beim Rechnen mit Zeigern wird immer der Typ des Zeigers beachtet.

F Zeiger, Felder und Strukturen in C

Klausur Kompaktkurs Einführung in die Programmierung Dr. T. Weinzierl & M. Sedlacek 25. März 2011

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

f) Was versteht man beim Zugriff auf I/O-Register unter dem Begriff "Memory-mapped"?

b) Was bewirken folgende Programmanweisungen? uint8_t x = 42; x ^= x;

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Abschlussklausur. Betriebssysteme. 30. Januar Legen Sie bitte Ihren Lichtbildausweis und Ihren Studentenausweis bereit.

Teilprüfung Software- und Internettechnologie Programmierkurs 2 Wintersemester 2004/2005

Systemnahe Programmierung in C (SPiC)

Hauptklausur zur Vorlesung Bildverarbeitung WS 2002/2003

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Einführung in die Programmiersprache C

"Organisation und Technologie von Rechensystemen 4"

Zeiger in C und C++ Zeiger in Java und C/C++

Nachname Vorname Matrikelnummer Klausurzulassung WS / SS Dozent. Aufgabe 1 14 Aufgabe 2 12 Aufgabe 3 10 Aufgabe 4 6 Aufgabe 5 10 Gesamt 52

Einführung in die Programmiersprache C

Felder fester Länge (1)

K Ergänzungen zur Einführung in C

Übungen zu Grundlagen der systemnahen Programmierung in C (GSPiC) im Sommersemester 2018

Dynamischer Speicher

Vorlesung Programmieren

Nachholklausur zur Vorlesung: Einführung in die objektorientierte Programmierung mit Java WS1415

Programmieren in C. Speicher anfordern, Unions und Bitfelder. Prof. Dr. Nikolaus Wulff

Zeiger vom Typ (void *) sind am besten für Zeigerarithmetik geeignet, da sie kompatibel zu jedem Zeigertyp sind.

Programmierung und Angewandte Mathematik

Computational Engineering I

1 pulsierender Speicher

Klausur: Ökonomische Theorie der Politik Termin: Prüfer: Univ.-Prof. Dr. J. Grosser. Maximale Punktzahl. Summe 100.

Viel Erfolg bei der Bearbeitung der Aufgaben!

Dynamischer Speicher

Matrikelnummer: 1 Aufgabe 1: Quickies (30 Punkte) a) Wird das folgende Programm von einem Java-Übersetzer ohne Beanstandungen übersetzt? Falls nicht,

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Universität zu Lübeck Institut für Telematik. Prof. Dr. Stefan Fischer

Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C

Klausur Betriebssysteme

Beispielklausur Parallele und Funktionale Programmierung XXX 200X

Programmierung mit C Zeiger

Teil II. Literatur zur C-Programmierung:

Dynamische Speicherverwaltung

Klausur Betriebssysteme I

Praxis der Programmierung

Klausur. Betriebssysteme SS 2007

U8 7. Übung U8 7. Übung

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Betriebssysteme Teil 3: Laufzeitsystem für Programme

d) Welche Aussage zum Thema virtueller Adressraum ist richtig?

Klausur. Softwareentwurf. 04. Februar 2013 Bearbeitungszeit: 120 Minuten

Vertraulich. Nachname: Vorname: Matrikel-Nummer: Studiengang: WIN TI Datum: Maximale Punktzahl: 58 Erreichte Punktzahl: Note: Datum: Unterschrift:

Allgemeine Hinweise:

Klausur Grundlagen der Programmierung

2Binden 3. und Bibliotheken

Übungen zu Systemprogrammierung 1

Klausur zu Grundlagen der Programmierung in C

Übungen zu Systemprogrammierung 1 (SP1)

Globale Variablen Diverses. Globale Variablen. Globale Variablen

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

Klausur. Softwareentwurf. 22. März 2011 Bearbeitungszeit: 120 Minuten

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

U3 3. Übung U3 3. Übung. Systemnahe Programmierung in C Übungen Moritz Strübe Universität Erlangen-Nürnberg Informatik 4, 2009 U3.fm

Besprechung Aufgabe 1. Pointer. Register und Ports. SPiC - Ü U3.1

UNIVERSITÄT DUISBURG-ESSEN

Systemprogrammierung

Abschlussklausur. Betriebssysteme und Rechnernetze. 12. Juli Legen Sie bitte Ihren Lichtbildausweis und Ihren Studentenausweis bereit.

10 Die Programmiersprache C99: Zusammenfassung

Einführung in die Programmierung. (K-)II/Wb17

d) Welche Aussage zu volatile ist richtig?

Klausur Programmiersprachen SS 2005

Einführung in die Programmierung

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

Klausur zu Grundlagen der Programmierung in C

Inhalte. Einführung. Algorithmus, Programmiersprache, Compiler und Linker. Kontrollstrukturen. Präprozessoranweisungen. Libraries

Name:... Matr.-Nr... Bearbeitungszeit: 120 Minuten. Lesen Sie die Aufgaben jeweils bis zum Ende durch; oft gibt es hilfreiche Hinweise!

Vertraulich. Nachname: Vorname: Matrikel-Nummer: Studiengang: Datum: 30. Januar 2015

GI Vektoren

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

Probeklausur: Programmieren I

Klausur zur Vorlesung Höhere Mathematik I

Klausur. Softwareentwurf. 14. Februar 2011 Bearbeitungszeit: 120 Minuten

System-Makro in time.h : #define CLOCKS_PER_SEC 1000 Frühere Makro-Bezeichnung (z.t. noch gebräuchlich): #define CLK_TCK CLOCKS_PER_SEC//aus:time.

Allgemeine Hinweise: TECHNISCHE UNIVERSITÄT MÜNCHEN. Name Vorname Studiengang Matrikelnummer. Hörsaal Reihe Sitzplatz Unterschrift

E Mikrocontroller-Programmierung

Klausur Informatik WS 2012/13

Speicherklassen (1) Lokale Variablen

Klausur Betriebssysteme I

6. Zeiger Allgemeines Definition eines Zeigers

Teil 6: Strukturen und Unionen Gliederung

Vorlesung Objektorientierte Programmierung Klausur

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Just-In-Time-Compiler (2)

Transkript:

Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) WS 2007/2008 Dr.-Ing. Jürgen Kleinöder Friedrich-Alexander-Universität Erlangen-Nürnberg Informatik 4 (Verteilte Systeme und Betriebssysteme) Martensstr. 1, 91058 Erlangen Klausur am 9. April 2008 Angaben zur Person: Nachname Vorname Matrikelnummer Studiengang Fachsemester (X) (X) (X) Ich fühle mich gesund und bin in der Lage die Klausur zu schreiben Die wichtigen Hinweise auf der nächsten Seite habe ich zur Kenntnis genommen Ich habe die Klausur alleine und ohne fremde Hilfe bearbeitet Unterschrift Aufgabe 1 Aufgabe 2 Aufgabe 3 Summe a: b: a: b: c: - 1 von 8 -

Wichtige Hinweise Die folgenden Informationen bitte aufmerksam lesen und die Erklärung auf Seite 1 unterschreiben. Es sind keine eigenen Hilfsmittel zugelassen. Die Heftung der Klausur darf nicht aufgelöst werden. Die Bearbeitungszeit für diesen Teil der Klausur beträgt 45 Minuten. Prüfen Sie Ihr Exemplar der Klausur auf Vollständigkeit! Dieser Teil der Klausur hat insgesamt 8 Seiten (inkl. Deckblatt). Die Lösung einer Aufgabe muss auf das Aufgabenblatt in den dafür vorgesehenen Raum geschrieben werden. Sollte der Platz nicht ausreichen, können Sie die Rückseiten der Aufgabenblätter mitverwenden. Kennzeichnen Sie dabei die Zugehörigkeit Ihrer Lösung zu einer Aufgabe deutlich. Zusätzliche Blätter gehen nicht in die Bewertung ein! Die Lösungen müssen dokumentenecht in blau oder schwarz geschrieben werden. Als falsch Erkanntes muss deutlich durchgestrichen werden. Tintenkiller darf nicht verwendet werden. Keinen Bleistift verwenden! Fragen zu den Prüfungsaufgaben können grundsätzlich nicht beantwortet werden. Tragen Sie Ihren Namen und Vornamen, Ihre Matrikelnummer, Studiengang und Fachsemesterzahl auf dem Deckblatt der Klausur ein. Bitte legen Sie Ihren Studenten- und einen Lichtbildausweis zur Kontrolle bereit. Sie dürfen den Raum nicht verlassen bevor Ihre Personalien überprüft wurden und Sie die Klausurunterlagen der Aufsicht zurückgegeben haben. In den letzten 15 Minuten der Bearbeitungszeit können Sie den Raum nicht mehr verlassen. Bleiben Sie an Ihrem Platz sitzen, bis am Ende alle Klausurunterlagen eingesammelt und nachgezählt sind und die Aufsicht das Zeichen zum Gehen gibt. Die Klausurergebnisse werden in ca. zwei Wochen im WWW unter der Seite der Vorlesung im SS 2007, Unterpunkt "Ergebnisse" veröffentlicht. - 2 von 8 -

Aufgabe 1: (10 Punkte) Bei den Multiple-Choice-Fragen ist jeweils nur eine richtige Antwort eindeutig anzukreuzen. Auf die richtige Antwort gibt es die angegebene Punktzahl. Wollen Sie eine Multiple-Choice-Antwort korrigieren, kreisen Sie bitte die falsche Antwort ein und kreuzen die richtige an. Lesen Sie die Frage genau, bevor Sie antworten. a) Der Speicher eines Prozesses ist grob in die Bereiche Code, Daten und Stack aufgeteilt. Wozu dient die Unterscheidung von Daten-Bereich und Stack-Bereich? Variablen, deren Speicher für die gesamte Programmlaufzeit verfügbar sein muss, liegen im Daten-Bereich. Lokale Variablen, deren Speicher nur während der Ausführung einer Funktion bereit steht, liegen im Stack. Alle Variablen des Programms werden im Datenbereich angelegt. Sollte dieser nicht ausreichen, wird zusätzlich der Stack hergenommen. Die Variablen des Programms liegen im Stack, Felder liegen im Daten-Bereich. Daten- und Stack-Bereich sind eigentlich das Gleiche, die unterschiedlichen Namen stammen aus der Linux- bzw. Windows-Welt. b) Welche der folgenden Aussagen über den C-Präprozessor ist richtig? Der Präprozessor ist eine Hardwarekomponente, die den Hauptprozessor beim Übersetzen von C-Code unterstützt. Der Präprozessor expandiert Makros durch textuelle Ersetzung. Nach dem Übersetzen und dem Binden müssen C-Programme durch den Präprozessor nachbearbeitet werden, um Makros aufzulösen. Der Präprozessor ist Teil des Betriebssystemkerns. c) Welcher der folgenden Mechanismen gehört nicht zu den Funktionen eines Betriebssystemkerns wie z. B. UNIX oder Windows? Verwaltung des Hauptspeichers Dateisystem Interrupt-Behandlung Compiler - 3 von 8 -

d) Was ist der Unterschied zwischen den wie folgt in der Datei prog.c lokal definierten Variablen? int a = 2; static int b = 3; Die Variable a ist nur für Funktionen in der Datei prog.c zugreifbar während auf b auch von anderen Modulen des Programms erreichbar ist, wenn es dort als extern deklariert wird. Der Speicherplatz der Variablen a wird jeweils beim Aufruf einer Funktion angelegt und beim Verlassen wieder freigegeben während der Speicherplatz der Variablen b von Programmstart bis -ende verfügbar ist. Die Variable b ist nur für Funktionen in der Datei prog.c zugreifbar. Funktionen in anderen Modulen des Programms können auf a zugreifen wenn in dem entsprechenden Modul a mit einer extern-deklaration bekannt gemacht wurde. Der Wert der Variablen b ist konstant und kann sich während der Ausführung des Programms nicht ändern. a kann dagegen beliebig verändert werden. e) Was bewirkt folgende Funktion? void func(int a, int b) { int c = a; a = b; b = c; } Bei einem Aufruf vertauscht die Funktion die Inhalte der von a und b adressierten Speicherzellen. Da in C Funktionen mit "call by value" aufgerufen werden, erhält die Funktion Kopien der Aufrufparameter, die sie vertauscht. Beim Aufrufer hat dies allerdings keine Auswirkungen. Der Compiler meldet bei der Übersetzung einen Fehler, weil die Funktionsparameter nicht verändert werden dürfen. Die von b adressierte Speicherzelle enthält nach dem Aufruf die in der Variablen a abgelegte Speicheradresse. - 4 von 8 -

Aufgabe 2a: (8 Punkte) Ein Mikrocontroller steuert über ein an Adresse 0x3B in den Speicher eingeblendetes 8-Bit Steuerregister eine Klingel, die per Tastendruck aktiviert werden kann. Der Zustand des Tasters kann über Pin 0 dieses Registers abgefragt werden (0=nicht gedrückt, 1=gedrückt), die Klingel wird über Pin 1 gesteuert (0=ausgeschaltet, 1=eingeschaltet). Schreiben Sie ein Steuerprogramm, welches durch Polling den Zustand des Tasters fortlaufend abfragt. Ist der Taster gedrückt, soll die Klingel läuten, wird er losgelassen, soll sie nicht mehr läuten. /* Makro fuer Zugriff auf das Register */ /* Funktion main */ C: - 5 von 8 -

Aufgabe 2b: (17 Punkte) Schreiben Sie eine Kontrollfunktion int kontrolle(int werte[], unsigned int anzahl, int grenzwert); welche in einem Feld werte von anzahl Messwerten nach Unterschreitungen des Grenzwertes grenzwert sucht. Übersteigt die Zahl der Grenzwertunterschreitungen in einem Aufruf die Schwelle 3, so soll die Funktion void alarm(int alarmwerte[], unsigned int anzahl, int grenzwert); aufgerufen werden. Dieser soll ein Feld alarmwerte mit allen Werten, welche den Grenzwert unterschreiten, übergeben werden, zusammen mit der Anzahl anzahl dieser Werte und dem Grenzwert grenzwert selbst. Das Feld mit den Alarmwerten muss von ihrer Kontrollfunktion dynamisch allokiert werden. Hierzu steht Ihnen die Funktion malloc zur Verfügung. Schnittstelle: void *malloc(size_t size); Vor dem Rücksprung muss Ihre Kontrollfunktion das allokierte Feld wieder freigeben. Funktion free, Schnittstelle: void free(void *ptr); Die Funktion soll die Zahl der gefundenen Grenzwertüberschreitungen zurückliefern, oder -1, falls bei der Bearbeitung ein Fehler auftritt. Sie können davon ausgehen, dass die Kontrollfunktion nur mit sinnvollen Parametern aufgerufen wird. - 6 von 8 -

Ergänzen Sie das folgende Codegerüst so, dass ein vollständig übersetzbares Programm entsteht. #include <stdio.h> #include <stdlib.h> void alarm(int alarmwerte[], unsigned int anzahl, int grenzwert); /* Funktion kontrolle */ /* Alarmwerte Feld allokieren */ /* Messwerte untersuchen */ /* Alarmfunktion aufrufen, falls notwendig */ /* Alarmwerte-Feld freigeben */ K: - 7 von 8 -

Aufgabe 3: (10 Punkte) Die folgenden Beschreibungen sollen kurz und prägnant erfolgen (Stichworte, kurze Sätze) Es gibt zwei verschiedene Möglichkeiten, wie ein Programm mit Ereignissen an Peripherie-Schnittstellen umgehen kann: Polling und Interrupt-Verarbeitung. a) Warum könnte ein externes Gerät die "Aufmerksamkeit" der CPU / des Programmes wünschen? Nennen Sie 3 Beispiele. b) Was versteht man unter Nebenläufigkeit? c) Welches grundsätzliche Problem entsteht durch Nebenläufigkeit? Beschreiben Sie das Problem ausserdem anhand eines konkreten Beispiels. - 8 von 8 -