Monitore in Unix



  • Hallo,

    ich hab ein Problem. Und zwar sollen wir einen Monitor programmieren.
    Ich habe keine AHnung, wie das genau in C aussehen soll.
    Wenn mir jemand einen Link posten könnte wäre cool. Ich hab in Google nachgeschaut aber nichts gefunden. ^^

    Danke im voraus,
    Veteran



  • was soll denn überwacht werden?



  • Monitor ist mehrdeutig. Definiere mal was du genau machen sollst..



  • Also,

    wir sollen Prozesse überwachen. Es kann immer nur ein Prozess aktiv sein.
    Wenn ich einen zweiten über die Eingangsfunktion aufrufe soll geblockt werden.

    Wir sollen damit Verwaltung, Zuteilung u. Zugriffsoperationen für ein Betriebsmittel zusammenfassen.



  • Ok, also ein Monitor ist ja ein abstraktes Beschreibungsmittel, um eine Stelle im Programm als "kritisch" zu kennzeichnen, innerhalb der auf gemeinsame Variablen zugegriffen wird (aus womöglich mehreren Threads). Deshalb werden für einen abstrakten Pseudocode hinter dem "Schlüsselwort" Monitor auch oft die Variablen aufgelistet.
    So weit ich weiss ist das Konzept mit Monitoren allerdings nur ein Modell, um sich das Problem deutlich zu machen, dass um manche von mehreren Threads gleichzeitig genutzten Variablen ein kritischer Bereich vorliegt.
    In der Realität existiert meines Wissens nach nichts, was einem Monitor-Konstrukt entspricht. Statt dessen muss man im allgemeinen für jede "kritische" Variable einen Semaphoren (man semop) erstellen, der zum Beginn auf 1 steht. Betritt man den Bereicht, wird der Semaphore dekrementiert, nun kann kein 2. Thread mehr in den Bereich, verlässt man ihn, wird er wieder um 1 erhöht. Ok, bei diesem simplen Beispiel mit einem Semaphore habe wir noch keine faire Behandlung, aber ich denke mal, dass das Prinzip klar sein dürfte.

    So, aber noch mal zu Deinem Problem, dies in C zu machen... Dies hat im Prinzip nichts mit C zu tun. Semaphoren, wie man sie erstellt und manipuliert ist eine spezifische Sache vom Betriebssystem. Unter linux helfen Dir da die Funktionen semget, semop und semctl weiter, aber unter Windows heissen Sie ganz anders. Falls Du nur einen Pseudocode schreiben sollst, kannst Du auch normale numerische Variablen als Semaphoren verwenden, z.B. int foo; Erhöhen kannst Du einen solchen Semaphore ganz normal mit ++foo;, erniedrigen kannst Du ihn mit:

    while(foo<=0);
    --foo;
    

    Ich hoffe, dass ich etwas helfen konnte!



  • Danke,

    jetzt ist mir einiges klarer.

    cu Veteran



  • Musst du aber verdammt aufpassen um keinen deadlock zu produzieren! Am besten arbeitest du mit mutex (0 und 1).


Anmelden zum Antworten