Bauhaus-Universität Weimar service up

 

 
Fakultät Medien




Beleg Betriebssysteme SS 2000


Umfang

Bearbeiten Sie bitte im WS 00 selbstaendig:
Aufgaben 1 und 4 und 6 und (8 oder 9)
Wir empfehlen die gemeinsame Diskussion in Arbeitsgruppen, sichern Sie jedoch die eigenstaendige End-Bearbeitung.
Gleichartige Loesungen werden zurueckgegeben und koennen nicht anerkannt werden.

Qualitaet

| Die einzureichende Belegarbeit soll den Charakter eines
| anspruchsvollen ingenieurtechnischen Entwicklungs- bzw.
| Erfahrungsberichtes tragen, ausfuehrlich kommentiert sein,
| Ergebnisse reflektieren und auch auf alle verwendeten Quellen
| Bezug nehmen.

Variieren Sie "spielerisch" die Code-Gerueste und Parameter, um Erfahrungen im Umgang mit den Programmierschnittstellen zu sammeln. Wir empfehlen Ihnen, Ihre Loesungen auch auf weiteren Systemen zu erproben und Differenzen zu protokollieren (z.B. AIX, HP-UX, IRIX, Solaris, ... ). Diese Systeme sind an der Uni Weimar prinzipiell verfuegbar.

Notieren Sie daher auch vor allem auch Probleme und deren Ueberwindung, Fehlerursachen und deren Lokalisierung, Abweichungen zwischen Systemen bzw. Maengel der Dokumentationen als auch entsprechende Schlussfolgerungen.

Dokumentieren Sie alle Ihre Beobachtungen. Dazu Programme in C unter Linux bzw. Alternativen (dokumentiert, kommentiert, Compileroptionen, ggf. make-file).

Hilfsmittel



Abgabe

Schriftliche Dokumentation bitte bis 28.8.00 im Sekretariat bei Frau Kleinert (B 11, R 112) abgeben. Verlaengerungen sind nicht moeglich.
Die erfolgreiche Bearbeitung ist Voraussetzung fuer die Zulassung zur Klausur BS in der ersten Studienwoche im WS 00/01.

Fuer Faelle unklarer Autorenschaft behalten wir uns eine Konsultation vor.

Viel Erfolg wuenschen Ihnen
B. Schalbe + G. Schatter.



Aufgaben

1. Systemvariable, Systemkonstanten

1.1 Mit welchen Kommandos (Optionen) sind welche Informationen zur Maschinenkonfiguration, zur CPU, zum Betriebssystem, zum Dateisystem
abzufragen? Testen Sie mgl. verschiedene UNIX-Systeme.

1.2 Gesucht: programmtechnische Loesung zur Ausgabe einer gemeinsamen nach sinnvollen Sachgesichtspunkten g e o r d n e t e n Liste in Form eines Maschinendatenblatts fuer mgl. unterschiedliche UNIX-Systeme von:

- Variablen der Prozessumgebung (Hinweis: *envp[])
- Betriebssystem-, CPU-Identifikation
- wichtige Systemvariablen (Hinweis: sysconf())
- Limits, Architekturmerkmale, Konstanten, Ressourcen...
- Untersuchen Sie Ihr Homeverzeichnis (Hinweis: pathconf())

1.3 In welchen Dateien befinden sich wesentliche Systeminformationen bzw. Konstanten und Variable? Erlaeutern Sie wichtige Informationen fuer den Anwender.

_________________________________________________________

4. Fileoperationen

4.1 Im unten angefuegten Beispiel wird eine Zeichenkette ueber eine Datei uebergeben.
Finden sie den Fehler, weshalb das Lesen zunaechst nicht funktioniert.
Bauen sie entsprechende Fehlerauswertungen mit perror() ein.
Gibt es andere Moeglichkeiten der Fehlermeldung?

4.2 Am Anfang soll zusaetzlich der Originaltext aus dem Puffer
ausgegeben werden.
Muessen zwei Puffer im Programm verwendet werden?
Nach Programmende soll das Arbeitsfile geloescht werden.

4.3 Fuehren Sie einen Kommandozeilenparameter ein, der es erlaubt, erst ab einer bestimmten Byteposition aus dem File zu lesen.

4.4 Realisieren Sie ein Programm, um beliebig lange Files zu kopieren, das etwa die Funktionalitaet des cp(1)-Kommandos besitzt.
Verwenden Sie Kommandozeilenargumente.

4.5 Versuchen Sie das einfache Beispiel zum Laufen zu bringen.
Auf manchen Systemen gibt es Probleme. Ursachenforschung erwuenscht. (Hinweis: Datentypen)


#include
int
main(()
{
char c;
while ((c=getchar()) != EOF)
putchar(c);
}

.............. Beispiel zu 4.1: .....................................


#include

char buffer1[] = "Daten kommen und gehen und gehen auch verloren.\n";

/* buffer ist hier eine globale Variable,
initialisiertes Array von Charactervariablen */

main()
{

int ufd; /* user file descriptor */
int wbytes; /* Anzahl geschriebener Bytes */
int rbytes; /* Anzahl gelesener Bytes*/
char buffer2[30];

printf("\nDemo Dateioperationen\n_____________________________\n\n");

ufd = creat("newfile", 0744);
/* 0: Oktal, rwxr--r-- */

printf("user file descriptor: %d\n\n", ufd);

wbytes = write(ufd, buffer1, 30);

printf("geschriebene Bytes: \n Soll: 30\n Ist: %d\n\n", wbytes);

open("newfile", O_RDWR);

rbytes= read(ufd, buffer2, 19);

printf("gelesene Bytes:\n Soll: 19\n Ist: %d \n\n", rbytes);

printf("Inhalt:\n\n%20s\n", buffer2);

close(ufd);


_________________________________________________________


6. Zeitfunktionen

6.1 Implementieren Sie ein Systemkommando, das die Funktion von sleep(1) erlaubt und mit alarm() und pause() realisiert wird.

6.2 Formulieren Sie Anforderungen an Zeitfunktionen, die in Verbindung mit benchmark-Tests zu Laufzeituntersuchungen eingesetzt werden sollen.

6.3 Informieren Sie sich an verschiedenen UNIX-Systemen (z.B. Linux, HP-UX, IRIX, AIX, Solaris...) ueber Moeglichkeiten der Zeitmessung in der Systemumgebung (calls) im Hinblick auf die Verwendbarkeit fuer benchmark-Tests. Stellen Sie die Ergebnisse in einer vergleichenden Uebersicht unter besonderer Beruecksichtigung hochaufloesender Zeitfunktionen zusammen (Genauigkeit?).

6.4 Unter Linux soll ein Satz von Standardtestrahmen fuer Benchmarktests realisiert werden. Analysieren Sie die Leistungsfaehigkeit an selbst gewaehlten Beispielen.

6.5 Entwerfen Sie Testrahmen fuer ein System mit hochaufloesenden Zeitfunktionen.

_________________________________________________________

8. IPC - Performance

8.1 Versuchen Sie eine moeglichst praezise tabellarische Uebersicht ueber Prinzipien, Vor- und Nachteile von allen bekannten IPC-Mechanismen incl. Rufe zusammenzustellen.
Vergleichen Sie die Implementierung auf zwei Systemen.

8.2 Realisieren Sie Programme zum Performance-Vergleich von IPC-Mechanismen.
Zum Einsatz sollen einerseits shared memory unter Einsatz von Semaphoren und andererseits mindestens messages kommen. Variieren Sie den Parameter Blockgroesse und testen Sie zwei Systeme.
Interpretieren Sie die Ergebnisse.

_________________________________________________________

9. IPC - Sockets (fuer Fortgeschrittene empfohlen)

9.1 BSD-Sockets sind eine Variante von IPC und stellen eine Basis fuer Verteilte Systeme dar. Versuchen Sie eine Einordnung und Bewertung dieses Mechanismus gegenueber anderen IPC, insbes. gegenueber TLI von SVR4.

9.2 Modifizieren Sie das TCP-Beispiel aus Kap 6.6 (Stevens, W.R.: Programmieren von UNIX-Netzen, Hanser-Verlag, S.308 ff.) mit dem
Ziel, eine synchronisierte Anzeige von gegenseitig ueber das Netz gesendeten Daten zu ermoeglichen.



ENDE




[home] [search] [up] [media]
last modified:, by Günther Schatter