Betriebssysteme - Werkzeuge und UNIX-Schnittstelle

Praktikum

Aufgabenkomplex 3: 8 Punkte


Aufgabe 1
=========
(Idee der Aufgabe: Dr. Wolf Mueller)

Aufgabe (verbose)
-----------------

Es ist Sommer und es sollen in einen Eimer 10000000 Kirschen gepflueckt werden.
Fuer Fred alleine ist das zu viel Arbeit, also arbeiten seine Freunde Barney, 
Franz und Karl mit. 
Das laeuft etwa so ab: Einer greift sich den Eimer, schaut rein, ob schon genug 
Kirschen drin sind, wenn das der Fall ist hoert er auf zu pfluecken, sonst 
klettert er auf den Kirschbaum und pflueckt eine Kirsche, die er von dort in 
den Eimer wirft. Nach etwa 1 Stunde (die vier waren fleissig) sind sie
fertig, der Eimer ist voll. Alle haben mitgezaehlt, wie viele Kirschen sie
gepfluekt haben. Jeder behauptet, mehr als ein Viertel der Kirschen im Eimer
gepflueckt zu haben. Sie beginnen zu streiten...

Was war passiert?
Leider sind oft Kirschen neben den Eimer gefallen, da die Freunde sich 
nicht absprachen. So kam es vor, dass waehrend der eine 
hochklettert und pflueckt sich ein anderer gerade den Eimer geholt hat und der 
erste die Kirsche nach unten, aber nicht in den Eimer geworfen hat.
Was kann man tun?

Aufgabe (konkret)
-----------------

Schreiben Sie ein C-Programm cherry_count,
das den Zaehler int cherries (globale Variable, Zugriff durch vier Threads)
von 0 bis auf 10000000 mit Hilfe von vier Threads  hochzaehlt. Jeder Thread i
zaehlt noch seinen eigenen exklusiven Zaehler my_cherries[i] mit. Die Threads 
zaehlen nur solange bis die gemeinsam genutzte Variable cherries den Wert 
10000000 erreicht. Ist dies der Fall, so gibt cherry_count folgende Daten
mit Leerzeichen getrennt

my_cheries[0], my_cheries[1], my_cheries[2], my_cheries[3], 
my_cheries[0]+my_cheries[1]+my_cheries[2]+my_cheries[3], 
cherries

aus, und beendet sich.

Sie werden merken, dass die korrekte Abarbeitung des Programms auf einer
Mehrprozessormaschine Syncronisationsmechanismen erfordert. Implementieren Sie
diese derart, dass die Syncronisation mit

gcc cherry_count.c -DSYNC -o cherry_count_s

eingeschaltet wird, und ohne diesen Schalter

gcc cherry_count.c -o cherry_count

ausgeschaltet bleibt. Testen Sie beide Varianten auf einer Mehrprozessormaschine
(gruenau3, gruenau4 (Linux) oder rabe, star (Solaris 11))
und schreiben Sie Ihre Beobachtungen hinsichtlich Laufzeit und 
Verlaesslichkeit als Kommentar in das C-File.


Referenzrechner ist GRUENAU4 (smp). 


Hinweis:
--------
Benutzen sie Konstruktionen wie:
#define ifdef SYNC
	.....
#endif
um Syncronisation an- bzw. auschschaltber zu gestalten!


             5 Punkte


Aufgabe 2
=========

Es ist ein Makefile fuer die obige Aufgabe zu erstellen, das folgende Funktionen 
bei der Bildung des obigen  Projektes enthaelt:
       1. Bildung der Programme(Binary) mit und ohne SYNC.
       2. Loeschen aller durch make erzeugten Files einschliesslich der Hilfsfiles
       3. Installieren der Binaries 
          an der ueblichen Stelle (/usr/local/bin)
       4. Drucken des Quelltextes, wenn dieser neu ist.
       5. Einpacken aller zum Projekt gehoerenden Files
          ohne Hilfsfiles in ein tar-File im uebergeordneten
          Verzeichnis

             3 Punkte

Abgabe des tar-Files in Goya

    ein kompremiertes tar-File(account-name.tgz)
    Aufgabe in einem Unterverzeichnis
  z.B.: sollte das File account-name.tgz folgende Files enthalten
            account-name/3.Aufgabe/Makefile
            account-name/3.Aufgabe/a1.c        # C-Quelltext
            account-name/3.Aufgabe/a1.h        # Headerfile, falls notwendig
                ....
        und mit /bin/tar -zxvf account-name.tgz unter 
        Linux (gruenau4) auspackbar sein



Mi 11. Jun 09:00:25 CEST 2014 Abgabe: 24. Juni 2014 23:59 Uhr Jan-Peter Bell