Übungen zu Grundlagen der Betriebssysteme Wintersemester 2012/2013 Prof. Hannes Frey / Frank Bohdanowicz Übungsblatt 2 Abgabe bis Freitag, den 02.11.2012, 16 Uhr, als PDF via SVN Gruppenname: Name Aufgabe 1 @Uni-Kennung (6 Punkte) Was ist ein Betriebssystem? Recherchieren Sie die Antworten zu folgenden Fragen im Internet (z.B. Wikipedia)! a) (3 Punkte) Erläutern Sie mit wenigen Worten den Begriff Betriebssystem und zählen Sie einige Hauptaufgaben eines Betriebssystems (im Allgemeinen) auf. b) (3 Punkte) Unterscheiden Sie mit wenigen Worten die Funktion eines BIOS (Basic Input/Output System) von einem Betriebssystem (OS - Operating System). Grundlagen der Betriebssysteme – WS 2012/13 – Blatt1 Aufgabe 2 2/4 (6 Punkte) Pointer Algebra Schreiben Sie ein C-Programm welches die folgende Deklarationen enthält: int A[] = {2,6,5,1,3}; int *p; p=A; Welches Ergebnis (welche Ausgabe) erhalten Sie dann für die folgenden Instruktionen: 1) *p 6) p 11) &A[0]+3 2) *p+2 7) A 12) p+(*(p+4)-3) 3) *(p+2) 8) A[0] 4) &p 9) A[0]+3 5) &p+1 10) &A[0] Aufgabe 3 (8 Punkte) a) (5 Punkte) Schreiben Sie ein C-Programm, welches den Wochentag anhand eines eingegebenen Datums berechnet. Die Wochentagsfunktion soll dabei in einer eigenen Datei liegen, auf die über eine zusätzliche Headerdatei von der main-Funktion aus zugegriffen wird. Das Datum soll über 3 Integervariablen d (Tag), m (Monat) und y (Jahr) eingegeben und an die Wochentagsfunktion übergeben werden. Die Eingabe kann entweder über die Tastatur zur Programmlaufzeit ( scanf() ) oder über die Startparameter des Programms ( int main (int argc, char *argv[]) ) erfolgen. Eventuell müssen Sie die Eingabe von String in Integer umwandeln ( int atoi( const char * str) ). Nutzen Sie zur Wochentagsberechnung die folgende Funktion: d = day , m= month , y = year m1 = m− 2 wenn m≥ 3 m+10 wenn m<3 { y1 = m≥ 3 {y−y 1wenn wenn m<3 wobei yc die beiden ersten Stellen der Jahreszahl darstellen (Jahrhundert) und yd die beiden letzten Stellen (Jahrzehnt). (Bsp: y1 = 1985 → yc = 19, yd = 85) y y 26⋅ m1− 2 f = d + y d + d − 2⋅ y c + c + 4 4 10 Der Tag der Woche wird dann durch modulo von f und 7 (dow=(f%7);) zurückgegeben (0=Sonntag, 1=Montag, …, 6=Samstag) und soll auf ein Array mit den ausgeschriebenen Wochentagen abgebildet und auf der Konsole ausgegeben werden. char * week[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; Geben Sie ihr Programm in kompilierfähig und ausführbar ab! Grundlagen der Betriebssysteme – WS 2012/13 – Blatt1 3/4 b) (3 Punkte) Schreiben ein Makefile für ihr Programm. Nutzen sie dabei soweit möglich Variablen, Makros und Wildcards, um ihr Makefile so klein und übersichtlich wie möglich zu halten. Aufgabe 4 (10 Punkte) Schreiben Sie ein C-Programm, das die Zufallsfunktion rand() benutzt, um 100 Zufallszahlen zwischen 0 und 9999 zu generieren. Die Zahlen sollen in einem Array gespeichert werden. Anschließend sollen die Zufallszahlen mit einem Sortierarlgorithmus ihrer Wahl (z.B. Insertionsort oder Bubblesort) sortiert werden. Schließlich soll ihre sortierte Zahlenfolge in einer Datei abgespeichert werden, wobei immer nach 10 Zahlen eine neue Zeile begonnen werden soll. Zahlen dürfen in der Zahlenfolge doppelt vorkommen. Anmerkung: rand() liefert eine ganzzahlige Zufallszahl zwischen 0 und 215-1 srand() wird zur Initialisierung des Zufallsgenerators benutzt. #include <stdlib.h> rand() % 9999 ; /* liefert immer die gleiche Zahlenfolge*/ /* Zufallsgenerator muss zuvor initialisiert werden */ time_t t; time(&t); srand((unsigned int) t); Hinweis: Geben sie alle ihre Programme in einer kompilierfähigen und ausführbaren Version sowei die C-Quelltext-Datei ab. Weitere Hinweise finden sie hier: http://openbook.galileocomputing.de/c_von_a_bis_z/ Für die Programmieraufgaben können Sie einen virtuellen BS-Server unter der folgenden Grundlagen der Betriebssysteme – WS 2012/13 – Blatt1 URL nutzen: http://bs.uni-koblenz.de/bs2012/ 4/4