Übung zu Grundlagen der Betriebssysteme 3. Übung 30.10.2012
Aufgabe 1 Schließen Sie sich über die URL http://userpages.uni-koblenz.de/~mips/bs/anmeldung/ Bearbeitungsgruppen bestehend aus 3 Teilnehmern zusammen. Der Name Ihrer Gruppe entspricht dem SVN- Repository, über welches sie die bearbeiteten Übungsaufgaben abgeben können.
Aufgabe 2 Aufgabe eines Betriebssystems: - Schnittstelle zwischen Hardware und Anwendungen - Verwaltet Hardwarekomponenten des Computers und stellt diese der Anwendungssoftware zur Verfügung - Speicherverwaltung - Prozessverwaltung - Geräte- und Dateiverwaltung - (Rechteverwaltung (Mehrbenutzer)) - Abstraktion der Hardware Quelle: wikipedia
Aufgabe 2 Zählen Sie fünf (beliebige) Betriebssysteme auf und nennen Sie kurz deren Einsatzgebiet/-zweck (z.b. Hardware/Funktion), bzw. was diese Betriebssysteme auszeichnet.
Aufgabe 2 Windows NT/XP/Vista/7/8: Windows Server (2003/2008/2012) Windows Phone 8 DOS (Windows 3.1/3.11/95/98/ME) Linux (Ubuntu/Gentoo/Debian/ ) Google Chrome OS Unix: Mac OS X: Apple ios: Android: BS2000: OS/2, ecomstation : Cisco IOS: http://de.wikipedia.org/wiki/liste_von_betriebssystemen
Aufgabe 2 Windows (Entwicklung) Weiterentwickelt Quelle: wikipedia beeinflusst
Aufgabe3 http://top500.org/list/2012/06/100
Aufgabe 3 SuperMUC München/Garching Platz auf der Top-500er Liste: 4 Übersicht: 155,656 processor cores in 9400 compute nodes >300 TB RAM 4 PB of NAS-based permanent disk storage 10 PB of GPFS-based temporary disk storage >30 PB of tape archive capacity Blick auf einen der IBM-Knoten im SuperMUC ((c) IBM) Suse Linux Enterprise Server SLES 11 SP2 System management: xcat from IBM Batch processing: Loadleveler from IBM http://www.lrz.de/services/compute/supermuc/systemdescription/
Aufgabe 3
SuperMUC
Aufgabe 3 >300 TB RAM 4 PB of NAS-based permanent disk storage 10 PB of GPFS-based temporary disk storage >30 PB of tape archive capacity Quelle: wikipedia
Aufgabe 4 Schreiben Sie ein Programm in der Programmiersprache C mit den folgenden Eigenschaften: 1) Soll den Namen ihrer Bearbeitungsgruppe ausgeben und Vor- und Zunamen der Gruppenmitglieder. 2) Anschließend soll das Programm eine Tastatureingabe erwarten: 0: nur der Gruppenname wird ausgegeben 1: Gruppenname + 1 beliebiges Gruppenmitglied 2/3: Gruppenname + 2/3 beliebige Gruppenmitglieder 1 2
Aufgabe 4 #include <stdio.h> #include <stdlib.h> int main (void) { int input; printf("banias\n"); printf( Name 1\n"); printf( Name 2\n"); printf( Name 3\n"); while(1) { printf("geben Sie eine Zahl ein:\n"); printf("0 - Gruppenname\n"); printf("1 - Name eines Mitgliedes\n"); printf("2 - Name zweier Mitglieder\n"); printf("3 - Name dreier (aller) Mitglieder\n"); printf("alles andere beendet das Programm.\n"); scanf("%d",&input); //Wartet auf die Eingabe printf("die Zahl, die Sie eingegeben haben, war %d\n",input); switch(input) { case 0: printf("banias\n"); break; case 1: printf("banias, Name 1\n"); break; case 2: printf("banias, Name 1, Name 2\n"); break; case 3: printf("banias, Name1, Name2, Name3n"); break; default: return 0; break; printf("ende der geforderten Ausgabe.\n"); printf("-----\n");
Aufgabe 4 #include <stdio.h> int main (void) { char arr[4][18]= {"barcelona\n", Name1\n", Name2\n", Name3\n"; int i=0; while(i<4){ printf( %s, arr[i++]); printf("bitte Zahl fuer erneute Ausgabe eingeben: "); i=0; int x; scanf("%i",&x); while(x < 4 && i<=x){ printf( %s, arr[i++]); return 0; 1 4
Aufgabe 5 Schreiben Sie ein Programm in der Programmiersprache C, nach Eingabe zweier Integerwerte Durchführen einer ganzzahlige Division mit Rest über eine Schleife (for oder while) Es soll die größere Zahl bestimmt und diese immer durch die kleinere dividiert werden. Der Ganzzahlquotient und der Rest sollen auf der Konsole ausgegeben werden.
Aufgabe 5 #include <stdio.h> int main() { unsigned int a, b, rest, i = 0; signed int temp; printf("eingabe Integer 1: "); scanf("%i", &a); printf("\neingabe Integer 2: "); scanf("%i", &b); if (a < b) { a ^= b; b ^= a; a ^= b; while(1) { temp = a- b; if (temp < 0) break; rest = temp; a = temp; i++; printf("\nergebnis: %i \nrest:%i\n",i,rest); return 0;
Aufgabe 5 #include <stdio.h> int main(int argc, char** argv) { //Eingaben durch Benutzer int x; int y; printf("eingabe 1:"); scanf("%d", &x); //Solange abziehbar, abziehen while(gtr - lss >= 0) { result += 1; gtr -= lss; printf("eingabe 2:"); scanf("%d", &y); //Vorläufige Abbruchbedingung if(x <= 0) return -1; if(y <= 0) return -1; //Größeren und kleineren Wert bestimmen int gtr = x > y? x : y; int lss = x > y? y : x; //Rueckgabewert initialisieren int result = 0; //Rest bestimmen int rest= gtr!= 0? gtr : 0; //Ausgabe printf("ganzzahliger Teil: %d\n", result); printf("rest: %d\n", rest); return 0;
Debugging mit gdb GNU Debugger (gdb) UNIX-Programm zum diagnostizieren und Auffinden von Fehleren in Computersystemen / Programmen - Standard-Debugger von Linux-Systemen - Bietet Möglichkeiten zur Ablaufverfolgung wie Breakpoints, Ausgabe, Stacktrace, usw - Ermöglicht eingreifen in die Ausführung von Programmen. - Manipulieren von Variablen oder Funktionen unabhängig vom normalen Programmablauf Quelle: http://www.cs.dartmouth.edu/~dwagn/cs58/tutorial/
Debugging mit gdb fact1.c int computefact(int n) { int accum=0; while(n>1) { accum *= n; n--; return accum;
Debugging mit gdb fact1.c 1: Programm kompillieren gcc -g -o fact1.x fact1.c 2: GDB starten gdb fact1.x 3: bestimmte Stellen im Code anschauen, z.b. Funktion computefact (gdb) list computefact 4: Breakpoint an einer bestimmten Stelle im Code setzen (gdb) break 44
Debugging mit gdb fact1.c 5: Programm starten (gdb) run 6: bestimmte Variablen anschauen (gdb) display accum 7: durch das Programm durchgehen und die Variable beobachten (gdb) step (gdb) 8: das Problem finden und beheben. (gdb) set accum = 1