Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ monitor(3C) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

profil(2)

monitor(3C)                                                     monitor(3C)

NAME
     monitor - Ausführungsprofil vorbereiten

SYNTAX
     #include <mon.h>

     void monitor(int (*lowpc)(), int (*highpc)(), WORD *buffer,
                     sizet bufsize, sizet nfunc);

BESCHREIBUNG
     monitor() ist eine Schnittstelle zu profil(). monitor() wird automa-
     tisch für jedes Programm, welches durch cc -p erstellt wurde, mit
     Standard-Parametern aufgerufen. monitor() muß nur explizit aufgerufen
     werden, wenn zusätzliche Informationen zum Ausführungsprofil gewünscht
     werden.

     monitor() wird mindestens am Anfang und am Ende eines Programms aufge-
     rufen. Der erste Aufruf von monitor() startet die Aufzeichnung zweier
     Arten von Informationen bezüglich des Ausführungsprofils: die Vertei-
     lung der Laufzeiten und die Anzahl der Aufrufe von Funktionen. Die
     Daten zur Verteilung der Laufzeiten werden von profil() erzeugt, die
     Zählung der Funktionsaufrufe durch den Programmcode, der durch die
     Compileroption -p den Objektdateien zur Verfügung gestellt wurde. Der
     letzte Aufruf von monitor() schreibt die gesammelten Daten in die Aus-
     gabedatei mon.out.

     lowpc und highpc sind die Anfangs- und Endadressen des Bereichs, der
     gemessen werden soll.

     buffer wird von monitor() dazu verwendet, das von profil() erstellte
     Histogramm und die Zählung der Funktionsaufrufe zu speichern.

     bufsize gibt die Anzahl von Feldelementen in buffer an.

     nfunc bezeichnet die Anzahl der Feldelemente in buffer, die für die
     Zählung von Funktionsaufrufen reserviert wurden. Weitere Feldelemente
     werden automatisch zugewiesen, sobald sie benötigt werden.

     bufsize sollte nach folgender Formel berechnet sein (C-Notation):

        sizeofbuffer =
          sizeof(struct hdr) +
          nfunc * sizeof(struct cnt) +
          ((highpc-lowpc)/BARSIZE) * sizeof(WORD) +
          sizeof(WORD) - 1 ;

        bufsize = (sizeofbuffer / sizeof(WORD)) ;

     Dabei gilt:

     -  lowpc, highpc, nfunc haben dieselben Werte wie die Argumente für
        monitor();



Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

monitor(3C)                                                     monitor(3C)

     -  BARSIZE ist die Anzahl der Programmbytes, die jedem Balken des
        Histogramms oder jedem Feld des profil()-Puffers zugeordnet sind.

     -  Die Stukturen hdr und cnt und der Typ WORD sind in der Include-
        Datei mon.h definiert.

        monitor() wird standardmäßig folgendermaßen aufgerufen (C-
        Notation):

             monitor (&eprol, &etext, wbuf, wbufsz, 600);

        Dabei ist:

        -  eprol der Anfang des Benutzerprogramms, das mit der Option -p
           übersetzt wurde

        -  etext das Ende des Benutzerprogramms;

        -  wbuf ein Feld von WORD mit wbufsz Elementen;

        -  wbufsz wird mit der oben gezeigten Formel für bufsize berechnet,
           wobei für BARSIZE der Wert 8 eingesetzt wird;

        -  600 ist die Anzahl der Felder zum Zählen der Funktionsaufrufe,
           die in buffer reserviert wurden.

        Mit diesen Parametereinstellungen kann das Histogramm zur Laufzeit-
        verteilung unter Verwendung von profil() für das gesamte Programm
        berechnet werden. Zu Beginn werden 600 Einträge in buffer reser-
        viert, und es werden genügend Histogrammeinträge zur Verfügung
        gestellt, um signifikante Ergebnisse bezüglich der Laufzeitvertei-
        lung zu erzeugen. (Weitere Informationen zu dem Einfluß von bufsize
        auf die Berechnung der Laufzeitverteilung finden Sie unter pro-
        fil(2).)

        Sie können die Messung stoppen und die Ergebnisse in eine Datei
        schreiben, wenn Sie die folgende Programmzeile verwenden:

             monitor((int (*)())0, (int (*)())0, (WORD *)0, 0, 0);

HINWEISE
     Zusätzliche Aufrufe von monitor() nach dem Aufruf von main() und vor
     exit() fügen weitere Felder zum Zählen der Funktionsaufrufe hinzu.
     Solche Aufrufe setzen jedoch auch die Berechnung des profil-
     Histogramms zurück.

     Der Name der von monitor() erzeugten Datei wird durch die Umgebungsva-
     riable PROFDIR gesteuert. Wenn PROFDIR nicht existiert, wird die Datei
     mon.out im aktuellen Verzeichnis angelegt. Wenn PROFDIR existiert,
     aber keinen Wert trägt, dann unternimmt monitor() keine Messungen und
     erzeugt keine Ergebnisdatei. Wenn PROFDIR auf dirname gesetzt ist und
     monitor() automatisch aufgrund der Übersetzung mit der Option -p


Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

monitor(3C)                                                     monitor(3C)

     aufgerufen wird, so heißt die erzeugte Datei dirname/pid.progname.
     Dabei ist progname der Name des Programms.

DATEIEN
     mon.out

SIEHE AUCH
     cc(1), profil(2).














































Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026