6336
Kommentar:
|
6346
|
Gelöschter Text ist auf diese Art markiert. | Hinzugefügter Text ist auf diese Art markiert. |
Zeile 166: | Zeile 166: |
.. Wichtig:: | .. Important:: Wichtig |
Übungen im Fach Systemnahe Programmierung
Die Übungen werden in Gruppen durchgeführt. Die Gruppeneinteilung machen wir mit Moodle. Es wird insgesamt 10 Übungsblätter geben, die Sie schriftlich bearbeiten und in Gitlab abgeben. Jede Gruppe bekommt dazu auf Gitlab ein "Repository" zugeteilt.
Bei der schriftlichen Abgabe habe ich folgende Randbedingungen. Sie schreiben den Text in einer Markup-Sprache wie Restructured Text (ReST) oder Markdown. Es gibt dazu Werkzeuge wie Sphinx, MkDocs, Pandoc oder die Python docutils. Welches Sie verwenden, ist Ihre Sache. Es muss in Ihrem Repository des Berichtes ein Makefile geben, das die Markup-Dateien durch den Aufruf von make html nach HTML umwandelt. Der HTML-Output muss nicht im Repository verwaltet werden, sondern nur die Quelldateien.
- Moodle-Kurs https://moodle.hs-augsburg.de/course/view.php?id=2806
- Gitlab Repositories der Gruppen: https://r-n-d.informatik.hs-augsburg.de:8080/snp
- Beispielcode aus PGU-Book und anderes: https://r-n-d.informatik.hs-augsburg.de:8080/hubert.hoegl/sysprog
Übung 1
1. Aufgabe
(a) Machen Sie sich mit der Linux Arbeitsumgebung vertraut, so dass Sie
- ein Terminalfenster öffnen können. Das nennt man auch "Konsole". Im Terminalfenster wartet eine Kommandointerpreter - die "Shell" - auf Eingaben. Die Shell ist fast immer die "bash", das ist eine moderne Variante der alten "sh".
- im Terminalfenster eine handvoll ganz elementare Kommandos zur Arbeit mit dem Dateisystem anwenden können: cd, ls, mkdir, rmdir, mv, cp, rm.
- einen Editor bedienen können. Es gibt Vi, Vim, Emacs, Gedit und viele andere.
- ein Makefile verstehen.
- die "man" Seiten aufrufen können. Das ist das Hilfesystem, das es auf jedem Unix gibt.
Schreiben Sie in Ihre Ausarbeitung, wie Sie mit Linux arbeiten. Sollten die Gruppenmitglieder unterschiedlich arbeiten, dann sollten alle Ihre individuelle Arbeitsweise schildern.
- Welche Linux Distribution verwenden Sie?
- Ist diese real oder virtuell installiert? Falls virtuell, welches Host-Betriebssystem verwenden Sie?
- Können Sie die typischen Datei- und Verzeichnisoperationen wie anlegen, kopieren, löschen, umbenennen, bewegen auf der Kommandozeile erledigen oder brauchen Sie dazu einen grafischen Datei-Manager?
- Welche Kommandos benutzen Sie auf der Kommandozeile?
- Welche Shell verwenden Sie?
- Welchen Editor verwenden Sie?
- Kennen Sie den LPIC Kurs? Haben Sie ihn schon besucht?
(b) Finden Sie heraus, welche genaue Bezeichnung die CPU in Ihrem Rechner (bzw. in der Virtuellen Maschine) hat. Arbeitet Ihr Rechner im 32- oder im 64-Bit Modus?
2. Aufgabe
(a) Welche Anwendungsbereiche für systemnahe Programmierung kennen Sie?
(b) Worin unterscheiden sich Programmiersprachen die sich zur maschinennahen (= systemnahen) Programmierung eignen von Sprachen, die man "high-level" Sprachen nennt?
(c) Nennen Sie zwei high-level Sprachen und zwei maschinennahe Sprachen.
3. Aufgabe
Lesen Sie die Kapitel 1 und 2 im Buch von Bartlett. Beantworten Sie die Fragen am Ende des zweiten Kapitels.
Übung 2
Bitte machen Sie einen Update des "sysprog" Repositories! Geben Sie dazu in Ihrer Arbeitskopie das Kommando "git pull" ein.
1. Aufgabe
Holen Sie sich das erste im Buch von Bartlett erwähnte Programm:
pgu/prog-3-1/
Wechseln Sie in diesen Ordner und "spielen" Sie mit dem Programm. Das Programm wird im Bartlett in Kapitel 3 erläutert.
- Kompilieren und starten Sie das Programm.
- Sehen Sie sich den Rückgabewert an. Das Shell-Kommando lautet echo $?.
- Verändern Sie den Rückgabewert im Programm, kompilieren es mit make und starten es erneut. Ist der Rückgabewert nun anders?
- Sie finden dort auch eine Implementierung in C (main.c) und eine in Python (main.py). Sehen Sie sich die Quelltexte an und versuchen Sie die Programme auszuführen.
2. Aufgabe
Untersuchen Sie die in PGU Kapitel 3 beschriebene Maximum-Suche Zeile für Zeile, so wie im Buch beschrieben. Sie finden das Programm im Repository unter
pgu/prog-3-2
Verwenden Sie den GNU Debugger gdb zum Erforschen des Programmablaufs. Hier ist eine Anleitung:
Erster Kontakt mit GDB (am Beispiel "maximum") http://hhoegl.informatik.hs-augsburg.de/sysprog/gdb/gdb.html
Noch ein Versuch für eine GDB Anleitung, verwendet ein eigenes Beispiel:
http://hhoegl.informatik.hs-augsburg.de/sysprog/gdb_anleitung/gdb_anleitung.html
Alle Dateien zu diesem Beispiel finden Sie auch im Git Repository unter gdb_anleitung/. Siehe dort auch die GDB Schnellreferenz quickref.txt sowie quickref.ps.
Es gibt auch ein Buch zum Thema Debuggen mit GDB:
Norman Matloff, Peter Jay Salzman, The Art of Debugging with GDB and DDD
https://proquest.safaribooksonline.com/book/software-engineering-and-development/ide/9781593271749
Es gibt in dem Verzeichnis nun auch zwei verschiedenen Python Implementierungen, maximum1.py und maximum2.py. Sie sollten sich den Quelltext ansehen und die Programme laufen lassen.
Wichtig
Wichtig
Beantworten Sie die Fragen am Ende von Kapitel 3 im Buch ("Know the Concents", "Use the Concepts", "Going Further").
3. Aufgabe
Zum Experimentieren mit den Adressierungsarten finden sie im Kurs-Repository den Ordner asm/01-addr/. Finden Sie heraus, welchen Pfad die Programmausführung nimmt und notieren Sie das auch in Ihrer Abgabe. Sie finden im Ordner auch einen mit "Asciinema" (http://asciinema.org) gemachten Terminal-Cast, der eine Terminal-Sitzung mit dem GDB zeigt.
4. Aufgabe
XXX asm/branches/