Fachschaft Informatik

Prüfungsprotokolle


Prüfungsprotokolle lesen



Protokolle (44 gefunden)

Nr.PrüferFach
127 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
10.Aug.2005

= Benötigte Lernzeit als Empfehlung
1-3 Wochen

= Verwendete Materialien (Bücher, Skripte etc...)
Vorlesungsfolien, Übersicht Prüfungskomplexe

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Ruhige, freundliche, ungezwungene Atmosphäre.

= Prüfungsfragen
Erstes Thema "Prozesse" (fast die ganze Prüfungszeit):
Definition, Beschreibung, Wie realisiert? Im Prinzip genau
so, wie in der Übersicht Prüfungskomplexe angezeigt und in
den Folien ausgeführt (PID, fork, exec exit, Adressierung,
Prozesskontrollblock, Aufbau aus Stack, Heap, Data, Code,
..., besonders auch clone, vfork, fork und ihre Besonder-
heiten). Dazu ein bisschen Quelltext:
Zunächst einen Prozess neu per fork erzeugen, später dann
eine Pipe mit hinzufügen und zwischen Eltern- und Kind-
prozess Nachrichten umherschicken (aber sehr genau und jede
Anweisung auch erklären können!).

Letztes Thema "Virtuelle Maschinen" (5-10 min):
Ziele und Anwendungsgebiete virtueller Maschinen.
Welche Virtuelle Maschinen gibt es, worin unterscheiden
sie sich? Wie sind sie umgesetzt? Und ganz wichtig (ich
hatte es vergessen): Die x86-Architektur ist schwierig bis
gar nicht zu virtualisieren, weil manche Befehle Sachen
machen, die die Virtualisierungssoftware nicht nachvoll-
ziehen kann (pushf, iret: Folie 22 von Nr. 1-5 Virtual
Machines).

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Gute Prüfung. Meine 2,0 war sehr angemessen, weil ich das,
was er fragte wusste, manchmal ein bisschen unsicher war,
und nur beim letzten Thema wirklich Dinge nicht mehr
wusste.

Nr.PrüferFach
130 Redlich, Jens-Peter, Prof. Mobile Communication

Protokoll

= Datum der Prüfung
September 2005

= Benötigte Lernzeit als Empfehlung
~ 2 Wochen

= Verwendete Materialien (Bücher, Skripte etc...)
Vorlesungsfolien (sehr ausführlich)
Buch "Computer networks" von Tanenbaum (in Bibliothek
vorrätig). Notfalls auch die deutsche Übersetzung
"Computernetzwerke", nur dort werden auch viele Fachbegriffe
eingedeutscht (inkl. Namen von Algortihmen) und sind dann
teilw. schwierig mit der Vorlesung zu matchen

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
entspannt, motivierend

= Prüfungsfragen
Wie in VL angekündigt konnte man zwei Lieblingsthemen
angeben, eines sucht er sich als Startthema aus. Bei mir war
es dann "TCP". Fragen zum gesamten Kapitel: Sinn von TCP,
3-Wege-Handshake, Congestion Control, Congestion Avoidance
inkl. DECbit und RED. 
Danach kurzer Schwenk zu "Wireless", hier besonders
"Cellular IP"

= Note (Optional)
1.3
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
sehr faire Prüfung. Fragt nach Lieblingsthema, will das dann
auch allerdings in allen Details wissen. Ist aber immer
fair. Um es mit eBay zu sagen: Jederzeit wieder :)

Nr.PrüferFach
150 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung: 02.03.2006

= Benötigte Lernzeit als Empfehlung:
bei regelmäßigem Besuch der VL und Lösen der Praktikums-
Aufgaben - 1-2 Wochen

= Verwendete Materialien (Bücher, Skripte etc...)
ausschließlich die VL-Folien

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Beisitzer: A. Zubow (Prüfer im Bereich EJB)
Atmosphäre: Locker und freundlich

= Prüfungsfragen
Beginn mit Wunschthema: EJB
- Client View: Wie kommt der Client an eine Bean heran
(EJB-Server, Container, Namensdienst, Home-/Remote-Interface)
- Transaktionen: Was ist CMT? BMT? Wo beschrieben (DD)? 
Was bedeutet supported? Was mandatory?
- JMS: am Beispiel einer MDB (Code skizzieren)
(JMS-Provider, ConnectionFactory, Connection, Topic,
Session, Publisher, Text-/Map-/Obj-Message, MessageListener
Interface, onMessage-Methode der Bean, Home für MDBs?)

Wechsel auf Java-RMI
- Client/Server Code skizzieren
(java.rmi.Remote, RemoteException, UniCastRemoteObj, Naming)
- Stub: Wer generiert ihn? Warum Class-Impl und nicht nur 
Interfaces von rmic benötigt? Casting der Referenz? Wie 
sieht das mit CORBA Referenzen aus?
- Referentielle Integrität: Wie gesichert? Immer erhalten?
- Distributed Garbage Collection

= Note (Optional): 1.0

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Gute Prüfung. Gute/Sehr gute Ergebnisse im Praktikum können
positiven Einfluss auf die Note haben!

Nr.PrüferFach
157 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
02.03.06

= Benötigte Lernzeit als Empfehlung
haben zu zweit 5 Tage intensiv (ca. 8h) anhand des
Skripts aber vor allem mit gegenseitigem Hinterfragen des
Verständnisses und ggs. Erklären gelernt

= Verwendete Materialien (Bücher, Skripte etc...)
eigentlich nur das Skript, an manchen Stellen auch noch
die Java API Doc (nützlich für Detailfragen zu CORBA und RMI)

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
sehr entspannte Atmosphäre, kaum Druck, eher positive
Erwartungshaltungs; Beisitzer (Zubow) war ernst und man sah
ihm nicht so recht an, ob ihm die Antworten gefielen oder nicht

= Prüfungsfragen
verschiedenes zu CORBA und ein wenig zu EJB; die
spannendste Frage war, warum es bei CORBA nicht auch so eine
schöne verteilte Garbagecollection wie bei RMI gibt -
Antwort: IORs können beliebig gespeichert werden und sind
damit nicht mehr nachvollziehbar

= Note (Optional)
1,3

= Fazit
eine meiner angenehmsten und besten Prüfungen :-)

Nr.PrüferFach
182 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
23.09.2006
= Benötigte Lernzeit als Empfehlung
2-3 Wochen
= Verwendete Materialien (Bücher, Skripte etc...)
Vorlesungsfolien + Mitschriften, Google
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
sehr freundlich, entspannt, gemütlich
= Prüfungsfragen
1. Virtual Memory (als Einstieg ausgesucht)
warum gibt es das?
Welche Techniken zum Mapping?
Abgrenzung der Begriffe logische, virtuelle, physikal. Adresse
Vor-/Nachteile der verschiedenen Mappings, Kombination
Segment. und Paging
invertierte Pagetable (was ist das, Vor- Nachteile)

2. NTFS
(das war mein schwarzes Loch und hat mich eine bessere Not
gekostet)

3. Virtualisierung
Grafik zu VMM, VM + Erklärung
Techniken zur Virtualisierung der CPU (direct Execution +
binary Translation)
welche Formen der Binary Translation gibt es, warum gibt es
immer noch beide Formen (synthetische Instruktion vs. call)

4. Deadlocks und Starvation
Unterschied zw. Deadlock und Starvation
Avoidance: was ist das, wie funktioniert das
Safety-Algorithmus + Resource-Request-Algo. erläutern

Zusatzfrage: Monitore als Synchron.
Prinzip der Monitore, was ist das besondere an Monitoren (im
Unterschied zu den Semaphoren)

= Note (Optional)
2.0 (leider)
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Die Note geht so in Ordnung. Leider hat mich das Nichtwissen
um NTFS eine bessere Note gekostet. Fair war insbesondere,
dass ich die Möglichkeit bekam, mit einer Zusatzfrage
wenigstens noch eine 2,0 zu bekommen.
Insgesamt kann ich nur jedem diesen Kurs und Prof. Redlich
als Prüfer empfehlen. Auch wenn der Aufwand während des
Semesters im Praktikum sehr hoch ist.

Nr.PrüferFach
185 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
August 2006

= Benötigte Lernzeit als Empfehlung
6 Tage, 5-8Stunden pro Tag - macht ungefähr 42 Stunden ;)

= Verwendete Materialien (Bücher, Skripte etc...)
lediglich das Vorlesungsskript (zusätzlich noch wikipedia)

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
sehr entspannte Athmosphäre

= Prüfungsfragen
- entweder, man wählt das Anfangsthema, oder man darf ein
Thema gänzlich ausschliessen
- ansonsten sollte man alle Fragen der Prüfungskomplexe
beantworten können

* mein Thema: Scheduling
- es wurden alle Punkte der Prüfungskomplexe angesprochen
- wie kann man  bei RR fairness erzeugen (Kredits verteilen)

* Virtuelle Maschinen
- VM-Typen
- warum kann man in XEN diese nicht virtualisierbaren
Befehle normal benutzen? (weil man sich ausschließlich im
user-level befindet)

* NTFS (scheint sehr häuffig gefragt zu werden!!!)
- Aufbau (Boot, MFT, Daten, Attribute, Extends ... )
- wie sieht ein Eintrag (einer Datei) in der MFT aus?
- warum können Dateien 2 Namens-Attribute haben? (DOS, Extendet)
- warum können Dateien 2 Daten-Attribute haben? (Daten + 1
Stream - z. B. Bild mit Voransicht)
- Encrypted Filesystem (EFS) (also kurz erklären: FEK ist
ein symmetrischer Schlüssel, der wird für jeden user mit dem
jeweiligen asymetrischen schlüssel verschlüsselt ... +
vorteile / nachteile ... )


= Note (Optional)
1.3 :)

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
kann jedem empfehlen diese Prüfung zu machen 

Nr.PrüferFach
198 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
  10.10. 2006

= Benötigte Lernzeit als Empfehlung
        Da der Berg an in der Vorlesung besprochenem Stoff
riesig ist, sollte man für eine gute Note schon 2-3 Wochen 
veranschlagen. Prof. Redlich bemüht sich, die gesamte
Bandbreite von Themen abzufragen.

= Verwendete Materialien (Bücher, Skripte etc...)
        Folien der Vorlesung.
Ein kleiner Tipp am Rande: SAR ist nicht sehr zuverlässig.
Sichert euch also am besten alle Folien im Vorraus, dann
steht ihr nicht so dumm da wie ich, wenn am Wochenende vor
der Prügung der Server nicht erreichbar ist.
        Silberschatz (neueste Auflage)
        Linux-Kernelarchitektur (Kernel 2.6)
-> Für beide sind nur wenige Exemplare in der Bibliothek   
   vorhanden.
        Inside Windows NT 

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Die Prüfungsatmosphäre ist mit Abstand die entspannteste,
die ich bisher bei einer Prüfung erlebt habe.
Prof. Redlich lässt einen immer Ausreden und macht selten
abrupte Sprünge, was die behandelten Themen angeht.
Weiß man einmal nicht weiter, versucht er einem mit kleinen
Tipps wieder auf die Beine zu helfen. 

= Prüfungsfragen
        Linux-Bootprozess
        Virtuelle Maschinen:
VMM, VM, Ablauf der Codeausführung, nicht
strikt-virtualisierbare Architekturen, insbesondere x86 mit
iret + fpush, Lösung dieser Probleme auf Xen.
        Threads
User-Level vs Kernel-Level, Many-To-Many-Model.
        Thrashing
Beschreibung des Phänomens; Situationen, in denen es
auftritt; Rolle von Working-Set und Balance-Set bei der
Vermeidung; Bestimmung des Working-Sets durch die
PageFaultFrequency (Diagramm im entsprechenden Foliensatz).

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Für mich persönlich kann ich ein durchweg positives Fazit
der Prüfung ziehen. Die Benotung war gerade angesichts der
ein oder anderen Schwäche meinerseits (Xen - *aaarrggghhh*)
sehr fair. Der Praktikumsaufwand sowie der Lernaufwand für
die Prüfung sind meines Erachtens enorm. Trotzdem liegt man
mit diesem Halbkurs sicherlich nicht daneben.

Nr.PrüferFach
200 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

Datum der Prüfung:
10.10.2006

Benötigte Lernzeit als Empfehlung:
Nicht zu knapp! Mehrere Wochen.

Verwendete Materialien (Bücher, Skripte etc...)
V. a.:
-"Operating System Principles", Seventh Edition 
(Silberschatz, Galvin, Gagne)
Ansonsten:
-VL-Folien (v. a. für Thema Virtual Machines)
-"Structured Computer Organization", Fourth Edition 
(Tanenbaum) (für Linking, Loading, Segmentation, Paging)
-"Moderne Betriebssysteme" (Tanenbaum) (Unix filesystem, 
NTFS)
-Online Manuskript zu "Linkers and Loaders" (Levine) 
(Kapitel 0 und 1)

"Atmosphäre" der Prüfung / Verhalten der Beisitzer:
Angenehm. Prof. Redlich sagte mir, ich müsste zwar meinen 
Personal- und Studentenausweis zeigen, aber er kennt mich 
ja schon, und auch dem Beisitzer Herr Gandre war ich nicht 
unbekannt. ;)
Das Verhalten von Herrn Gandre war tadellos. ;)

Prüfungsfragen:
Ich konnte mir zu Beginn aussuchen, ob ich ein bestimmtes 
Thema abwählen oder auswählen möchte. Ich entschied mich 
für die Auswahl von Virtual Memory, was Prof. Redlich 
irgendwie erfreute. ;) Über dieses Thema durfte ich dann 
auch lange und ausführlich sprechen.
Dann ging es um NTFS, wozu ich zwar so einiges sagen 
konnte, was aber nicht meine Stärke war.
Zu Encrypted File Systems konnte ich garnichts sagen.
Dann ging es noch kurz um Virtal Machines

Microkernel war auch noch kurz dran: Hat Linux einen 
Microkernel? Merkmale von einem Microkernel


Note:
1,3

Fazit (Gute/schlechte Prüfung , angemessene Benotung 
etc...):
Gute Prüfung, freundliche Bewertung. Man muss viel lernen, 
eine gute Note ist kein Schnäppchen. Aber die Benotung war 
völlig o.k. und fair. Andere Prüfer (keine Namen... ;)) 
hätten möglicherweise härter bewertet.

Nr.PrüferFach
239 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung: 
27.03.2007
= Benötigte Lernzeit als Empfehlung
da relativ viel Stoff würde ich mind. eine Woche empfehlen 
und zusätlich in einer Lerngruppe sich den Stoff 
gegenseitig erklären (was ich leider nicht gemacht habe)
= Verwendete Materialien (Bücher, Skripte etc...)
Script und nebenbei auch das Netz und ein Buch zu EJB2.1
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
normal, halt ne Prüfung
= Prüfungsfragen
EJB
- Warum Local API
- kurz etwas über Entity und Session Beans
- Unmanaged und managed
.NET Remoting 
Wie funktionierts? Wie kommt Client an das Remoteobjekt.
CORBA
Was ist Bestandteil des GIOP?
Etwas wenig Fragen, da ich sehr oft stocken musste
= Note (Optional): leider deshalb auch nur eine 3.0
= Fazit: war OK

Nr.PrüferFach
240 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
26.03.2007
= Benötigte Lernzeit als Empfehlung
mindestens eine Woche: es ist sehr viel Stoff
= Verwendete Materialien (Bücher, Skripte etc...)
CORBA-Spec, Folien, Internet
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
sehr angenehm, locker
= Prüfungsfragen
Wunschthema: CORBA
* Aufbau erklären (Client,Server,Orb,DII,DSI ...)
* kurz die Schritte bei der Softwareentwicklung erklären
(idl->...->Server) in Sprache der Wahl (Java oder C++)
* wie funktioniert die narrow-Methode (Signaturen aus dem IR
holen ... )
* RMI: referenzielle Intigrität: wie lange bleibt sie
erhalten (lt. spec nur innerhalb eines Methodenrufes)
* RMI: kann man rausfinden, dass 2 remote-Objekte gleich
sind? wenn ja, wie, wenn nein, warum? (ja -> referenzielle
integrität, ...)
* Rest: EJB
* Was sind beans
* Software schreiben (Client, SessionBean)
* was ist "configuration by exception"
* wie kommt man an remote-objekte?
* resource injection (so kommt man an den jndi ...)
* wie kommt man an ejb3 entities (sie haben kein remote-iface!)
* etwas über Persistenz-Kontexte erzählen (entity-manager,
aber auch in session-beans)
* default transaction-type? 
* managed/unmanaged : was, wann, warum?

= Note (Optional)
sehr gut
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
sehr faire Prüfung, nur leider auch sehr viel Stoff, der
gelernt werden muss. Wenn man in den VL anwesend war, und
auch das Praktikum einigermaßen verstanden hat, sollte es
nicht viele Probleme machen. Außerdem ist noch an zu merken,
dass man sich am Anfang der Prüfung ein Thema aussuchen
darf, oder auf Wunsch eines Abwählen!

Nr.PrüferFach
241 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
03/27/07

= Benötigte Lernzeit als Empfehlung
4-5 Tage (Bei einigen Erfahrungen und guter Intuition)

= Verwendete Materialien (Bücher, Skripte etc...)
- Skripte
- Advanced Corba Programming
- EJB 3.0 von O`Reilly

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
- Locket und echt nett

= Prüfungsfragen
   1. Vergleich Corba/RMI Objekte
   2. Garbage Collection in RMI, wie funktionierts, warum
nicht in CORBA
   3. Ein Remote/Servant Objekt in RMI implementieren
   4. dann zusätzlich CORBA-Servant draus machen
   5. dann zusätzlich .NET-remoting-Objekt machen
(MarshalByValue implementieren)
   6. habe ich damit eine CORBA-GC gebaut? Nein? Warum nicht?
   7. EJB: 2 Vorhandene Klassen + Interfaces in Beans
umwandeln, dabei
         1. bean als stateless session bean
         2. Injection für referenz
         3. probleme bei aufruf von methoden mit this
parameter (holen der beanreferenz über den Context habe ich
nicht gewusst(fand er aber wohl nicht so schlimm), wäre auch
über injection gegangen (da das bean stateless war), was ich
ihm auch gesagt habe)
   8. An dieser Stelle kam ein Hinweis, dass es ab jetzt
nicht mehr ums durchkommen geht (also vermutlich, ob es 1.3
oder 1.0 wird)
   9. Transparentes Lastverteilungssystem für CORBA
implementieren (idee ist, dass der ORB über den GIOP-Befehl
LocateReply die Referenz auf ein anderes Objekt, auf einem
anderen Server zurückgibt), da musste er mir etwas
nachhelfen (ich hatte schon vorher den Tip bekommen, dass es
was mit GIOP zu tun hat, und dann sind wir die Befehle
durchgegangen), irgendwann fiel der Groschen, ich habe ihm
die Idee erzählt, war mir aber nicht sicher. Daraufhin hat
er erklärt wie das genau funktioniert.


= Note (Optional)
1.0
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Gute Prüfung. Generell denke ich: Man muss nicht viel wissen
um 2.0 zu bekommen, man muss aber selbst nachdenken um 1.0
zu bekommen

Nr.PrüferFach
242 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
  27.03.2007

= Benötigte Lernzeit als Empfehlung
  3-4 Wochen

= Verwendete Materialien (Bücher, Skripte etc...)
  Allgemein:
  - Folien zur Vorlesung:
    Bieten eine gute Zusammenfassung des Stoffes.
  - Wikipedia ( englischsprachige Version )
  - Prüfungskomplexe:
    Prof. Redlich hält sich bei seinen
    Fragen weitestgehend an die von ihm herausgegebenen
    Vorgaben. Schränkt den doch erheblichen Stoffumfang
    zumindest ein wenig ein.
  RMI:
  - Java RMI - Grosso - O`Reilly
  - JDK 1.6 API
  - jGuru Tutorial zu RMI
  CORBA:
  - Advanced CORBA Programming with C++ - Henning, Vinoski -
    Addison-Wesley
  - CORBA 2.0 - Redlich - Addison Wesley
  - CORBA Explained Simply 
    http://www.ciaranmchale.com/corba-explained-simply/
  - CORBA-Spec der OMG  
  EJB:
  - EJB2.0 - Monson-Haefel - O`Reilly
  - EJB3.0 - Monson-Haefel, Burk - O`Reilly
  .NET
  - Die .NET-Technologie - Beer, Birngruber, etc. - 
    dpunkt.verlag
  - Verteilte Systeme mit .NET Remoting - Kuhrmann -
    Spektrum

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
  Die Atmospäre war - wie immer bei Prof. Redlich - sehr
  entspannt.

= Prüfungsfragen
  RMI:
  - Grundlegende Bestandteile anhand einer selbst
    anzufertigenden Zeichnung aufzeigen und in Beziehung
    zueinander setzen.
  - Unterschied zwischen Marshalling und Java Serialization:
    - Serialisierung der Stubs anstelle von Remote Objects
      + Codebase-Annotationen.
  - Unterschiede in der Aufrufsemantik zwischen lokalen
    und entfernten Aufrufen:
    - PBV statt PBR für nicht-remote Objekttypen
    - PBR lässt sich durch Rückübertragung der entfernt
      getätigten Veränderungen an einem per Value
      versendeten Objektargument zwar simulieren, 
      allerdings gilt dies nicht für Objekte wie Threads
      oder FileInputStreams, da diese erst gar nicht
      serialisierbar sind.
  .NET:
   - Server Activated Objects: Schritte zum Erhalt eines
     Proxys durch einen Klienten auflisten.
   - Merke: Serverseitg empfiehlt sich bei hoher Last
     der Einsatz der Single-Call- gegenüber der Singleton-
     Variante, da die Thread-Synchronisation für ein
     Singleton-Objekt wesentlich teurer ist als das 
     ständige Erzeugen eines neuen Remote-Objektes pro
     Request.
   EJB:
   - Code für einer 3.0-Stateless-SB anhand von Vorgaben
     aufschreiben.
   - Vorsicht mit this-Referenzen:
     Eine Bean darf niemals eine this-Referenz an Klienten
     herausgeben. Sämtliche Kommunikation muss indirekt über
     das EJB-Object erfolgen, damit der Container Tx- und
     Security-Management betreiben kann.
     Anstelle der this-Referenz lässt sich über die Methode
     SessionContext.getBusinessObject( ... ) eine Referenz
     auf das eigene EJBObject erhalten und weitergeben.
 
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
  Durchweg positive Prüfung. Faire Benotung.

Nr.PrüferFach
297 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
9.10.2007

= Benötigte Lernzeit als Empfehlung
2-3 Wochen

= Verwendete Materialien (Bücher, Skripte etc...)
Folien, Buch von Silberschatz, Wikipedia (englische Variante)

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Angenehme, entspannt Atmosphäre. Beisitzer war ruhig.

= Prüfungsfragen

Man hat eine Vorbereitungsaufgabe bekommen, die man in der
Zeit lösen konnte wie der Vorgänger in der Prüfung ist.

1. Vorbereitungsaufgabe: Deadlock
   - Was ist ein Deadlock?
   - Welche Bedingungen müssen gelten, damit einer auftritt?
(Coffmann Kriterien)
   - Für jedes Kriterium erklären, wie man es verhindern kann.
   - Dann konkrete Frage zur Aufgabe: PC Pool mit
Druckerserver (inkl. Spooling)
     - Kann ein Deadlock auftreten? Wie behebt man diesen?
     - Welche Ressourcen sind unterbrechbar, welche nicht?
2. Synchronisation und Nebenläufigkeit
   - Was ist das Problem? (Race Conditions)
   - Wie kann man das Lösen? ( Mutexe + Atomare Instruktionen)
   - Wie sind Mutexe implementiert?
   - Was kann man machen, wenn kein ASWAP unterstützt wird?
(Simulation mit restartible atomic sequence -> Scheduler
anpassen)

3. Bootprozess
   - Was passiert wenn Sie Ihren Rechner anschalten?
   - Wie kommt das BIOS in den Speicher?
   - Master Boot Sector, Partitionstabelle erläutern
   - Bootloader erläutern

4. Flash File System
   - welche zwei Ansätze (layered vs. YAFFS + JFFS)
   - Unterschiede erläutern
   - ein bisschen genauer auf YAFFS eingehen (logged file
system)

5. Mitzenbacher Theorem erläutern + Kurve zeichnen und erklären.

= Note (Optional)
1.3

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Gute und faire Prüfung. Die Veranstaltung und Prüfung kann
ich nur empfehlen.

Nr.PrüferFach
524 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
18.07.11

= Benötigte Lernzeit als Empfehlung
min. 1 Woche
= Verwendete Materialien (Bücher, Skripte etc...)
Skript, Wiki
= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
SCHRIFTLICHE PRÜFUNG
= Prüfungsfragen
Die Prüfung wurde in BA und D unterteilt. Wobei BA Aufg 1-8 + opt. 9 
und     D  Aufg 1-11 + opt. 12 
erledigen mussten.

1) Vorteile Mikrokernel gegenüber Monolith und umgekehrt
2) ...
3) Schedulingstrategien (FCFS, SJF, Priority, RR), dazu auswerten der turarroundtime und Latenz
4) Programmierung eines Semaphors mittels vorgegebenen Mutex
5) Threadsafe / re-entrant Unterschied? Warum ist das wichtig für Threads?
6) Pagetable.. Größe berechnen, Anzahl Einträge, Inverted Pagetable
7) zu gegebenen Quellcode eines Bankenproblems (Transaktionen) entscheiden, ob es zu Deadlocks bzw. Race Conditions kommen kann (Begründung!)
8) Coffmann Kriterien nennen
im weiteren noch : 
9) 
-FAT : Berechnung der Cluster und FAT Größe bei gegebenen Plattengrößen
-Inode : zu gegebenen Werten max. Dateigröße berechnen
Zusatz : Page Fault Frequenzy eines konkreten CPUs angeben, sodass CPU Leistung min. die Hälfte ist

= Note (Optional)
noch nicht da
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
absolut faire Prüfung, es hätte wohl wesentlich schlimmer kommen können. Man sollte in der Vorbereitung ALLE Rechnungen nachvollziehen. Prof. Redlich übernimmt die Beispiele aus der Folien nicht, sondern ändert die Werte. Es muss also verstanden werden ! 
Alles in allem eine empfehlenswerte Prüfung

Nr.PrüferFach
535 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung: Oktober 2011
= Benötigte Lernzeit als Empfehlung: 2 Wochen täglich 8 Stunden - Ich konnte die Vorlesung nicht besuchen.
Vorbereitung:
Relevante Kapitel im Tannenbaum durcharbeiten und danach die Folien durchgehen und das Wissen mit den zusätzlichen kleinen Konzepten ergänzen. Vor allem werden in den Folien zum teil andere Begriffe benutzt. Man muss sich manchmal klarmachen, dass zwei Begriffe ein Konzept meinen. Virtuelle Maschinen habe ich ganz zum schluss gelernt um im Blick zu haben, was da wirklich alles getan werden muss. Aber die Großen Zusammenhänge sind wohl nicht erwünscht (in der Prüfung). s.u.

Fragen:
Womit wollen wir Anfangen?: Prozesse
Was ist ein Prozess und was gehört so dazu?
Wie wird ein Prozess erstellt?
Was ist eine Pagetable?
Wei groß wird denn eine Pagetable maximal wenn die Virtuelle Adresse soundso lang ist und soundsoviel Bit davon Offset sind.
Wie funktioniert eine Inverse Pagetable?
Wie kommt es zu Thrashing? 
Er wollte unbedingt wissen, dass es ab einem bestimmten Verhältnis von Resident Set und Working Set umkippt. 

Ich habe so gelertn, dass ich eine klare Vorstellung von den Dingen bekomme, über die man da redet. Ich hatte die ganzen Zusammenhänge und Konzepte zu einem Großen Bild erarbeitet. Auf eine Frage konnte ich also auf völlig verschiedenen Ebenen Antworten. Das heißt, ich wusste nicht welche Ebene er nun grad meint.

Beispiel:
Wie entseht ein Prozess? (genau diese Formulierung)
Aus welcher Sicht soll man das Beantworten?
Betriebssystemsicht und Hardwaresicht?: Das OS berechnet wie viel Speicher benötigt wird, initialisiert alle möglichen Tabellen (Processtable, Pagetable,...) und MMU und TLB und so weiter

Er wollte aber einfach ganz KONKRET fork() wissen - Also die Programmiersicht aus der ich wenn ich über Betriebssysteme nachdenke nicht gucke. Außerdem ist ja fork() und seine Arbeitsweise total UNIX-Spezifisch  und hat nichts mit dem großen ganzen Verständnis zu tun...


Was Professor Redlich aber leider haben will ist nicht prüfen ob eine Vorstellung vom großen und ganzen da ist sondern: Er stellt eine Frage sehr konkret gemeinte (aber leider nicht so zielgerichtet gestellte) Frage und hat seine 5 Punkte und Buzzwords im Kopf die kommen müssen.
Er will von der ABstrakten Vorstellung sehr schnell ins Detail und hakt so lange nach bis ein Wort fällt. 

Beispiel: Sie haben Workingset erwähnt wie heißt den die Menge von Pages die grad eingelagert sind? Gefragt war nach Residentset (was einfach nur ne Übersetzung von der Bedeutung ist. Das hat meinermeinung nach nichts mit Verständnis zu tun sondern mit Auswendiglernen. Nochdazu fällt dieser Begriff im Tanenbaum nicht, mit dem ich gelernt habe.

Entgegen allen anderen Berichten von Redlich über angenehme, faire Prüfung muss ich leider sagen, dass die Art des Stoffes der für eine gute Note verlangt wird, nicht meinen Vorstellungen von Lernen und Verstehen entspricht.

Er bemängelte genau das, was ich als erfolgreiches Verstehen sehe. Zu einem Aspekt alle anderen auch im Kopf zu haben. Er bemängelte, dass ich auf die Fragen viel zu breit gefächert und \"unkonzentriert\" geantwortet habe.

Also doch Karteikarten mit den 6 Begriffen zum Thema Threads auswendigkernen. Pah.

Aufgrund all dessen wurde das nur ne 3...

Nr.PrüferFach
548 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
20.02.2012
= Benötigte Lernzeit als Empfehlung
ca. 5 Tage
= Verwendete Materialien (Bücher, Skripte etc...)
Skript, Wikipedia
= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
Sehr angenehm, Prof. Redlichs Prüfungen sind definitiv die Entspanntesten.
Ich hab mich entschieden .NET zu streichen, Redlich hat dann von selbst mit Corba angefangen.
= Prüfungsfragen
1. Corba
-grober Ablauf einer Corba Transaktion
-grundlegende Komponenten
-bisschen Interface-Repostory
-Details der Narrow-Methode
2. EJB
-EJB Komponenten
-Entitiy-Bean schreiben (es geht hauptsächlich um die Annotations)
= Note (Optional)
1.7
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Die Prüfung kam mir ziemlich kurz vor, Note geht voll in Ordnung.

Nr.PrüferFach
588 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

Dieses Prüfungsprotokoll ist direkt nach der Prüfung und vor der Bewertung entstanden.
= 27. Februar 2013
= 3 Tage bis eine Woche
= Vorlesungs - und Übungsfolien
= Sehr angenehm. Keineswegs gezwungen.
= 13 Aufgaben

1. Umrechnen von Zahlen in andere Zahlensysteme
a) 2016 von Hex in Dez umwandeln
b) 11001100 Als 16 Bit 2er Komplement dargestellte Zahl in Dez umwandeln
c) 11001100 Als 8 Bit 2er Komplement dargestellte Zahl in Dez umwandeln
d) Einen Ausdruck berechnen (sowas wie 1 + 4.4 + \"3\" + 10/4 * 0.5)
2. Definition \"Datentyp\" angeben.

3. Es waren zwei verschachtelte For-Schleifen gegeben, zu denen die entsprechenden Ausgaben angegeben werden sollten.

4. Sichtbarkeit von Variablen
   Der Code einer Klasse war gegeben. Dieser hatte neben main() eine Methode, die in main() innerhalb einer
   For-Schleife aufgerufen wurde. 
   Dazu gab es fünf bis sechs mögliche Antworten, die anzukreuzen waren. 
   (z.B Die Iterationsvariable der For-Schleife erreicht niemals die Abbruchbedingung.\" oder \"Die For-Schleife durchläuft 100 Iterationen.\")
   

5. Einfache Rekusion
   Gegeben war eine Rekursion.
a) Was ist die Ausgabe bei Eingabe 5, 4?
b) Welche mathematische Funktion wird durch die Rekursion simuliert?

6. Rekursion mit Draw
   Es war eine Rekursion gegeben, die Rechtecke zeichnete.
   Dazu gab es um die 8 Bilder sowie 4 Aufrufe der Rekusion mit je unterschiedlichen Kommandozeilenparametern.
   Den Aufrufen sollten die richtigen Bilder zugeordnet werden.

7. Referenzen, Veränderbarkeit von Datentypen
   Der Code einer Klasse war gegeben. Innerhalb dieses Codes gab es neben main() eine Methode, die innerhalb
   von main() aufgerufen wurde. An die zweite Methode wurden einige Variablen übergeben. 
   Hier sollte nun geprüft werden - durch das Niederschreiben der Ausgabe des Codes - welche der übergebenen
   Variablen nach außen hin verändert wurden.   

8. Einen Ausdruck in Postfix Notation war zu berechnen.

9. Es waren eine Klasse und eine von dieser abgeleiteten Klasse gegeben. 
   Dazu gab es Variablen und Funktionsaufrufe, zu denen die Ausgabe angegeben werden sollte.

10. Verlinkte Listen: Gegeben waren 3 Methoden zum Suchen eines Knotens \"Key\". 
	Dazu gab es 4 Darstellungen von verlinkten Listen.
	Die Methoden sollten den Listendarstellungen zugeordnet werden.

11. Es war ein Toy Programm gegeben.
a)  Gegen sie an, was nach dem Durchlaufen des Programms in den Registern [...] steht.
b)  Gleiche Aufgabe, aber mit einderen Eingaben

Zusatzaufgaben
a) Geben sie 3 No-Ops der Toy-Maschine an. Einer davon darf nicht R[0] enthalten.s

b) Geben sie Zahlen a und b an, sodass gilt: (a>b && a-b < 0)

Nr.PrüferFach
609 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
08.08.13

= Benötigte Lernzeit als Empfehlung
Eine Woche, wenn man die Vorlesung mehr oder weniger regelmäßig besucht und die Praktikumsaufgaben bearbeitet hat.

= Verwendete Materialien (Bücher, Skripte etc...)
Vorlesungsfolien, Wikipedia

= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
Schriftliche Prüfung, genügend Zeit, insgesamt angenehm

= Prüfungsfragen
1. Scheduling (6 Punkte)
Gegeben ein Zustandsgraph mit drei Zuständen (Running, Ready, Blocked) und sechs gerichteten Kanten zwischen je zwei Zuständen. Man sollte für jede Kante beschreiben, ob der Zustandsübergang auftreten kann und falls ja, durch welches Ereignis dieser ausgelöst wird.

2. Scheduling (10 Punkte)
Jeweils eine gute und eine schlechte Eigenschaft folgender Scheduler nennen: First Come First Serve, Round Robin, Shortest Job First, Multilevel Feedback Queue, Lottery Scheduling.

3. Synchronisation/Locks (8 Punkte)
Auf einer Kreuzung können von allen vier Seiten Autos ankommen. Um Kollisionen zu vermeiden, soll vor Befahren der Kreuzung von jedem Fahrer eine Funktion auf einem zentralen Rechner ausgeführt werden. Erst wenn diese zurückkehrt, darf die Kreuzung befahren werden. Selbiges für das Verlassen der Kreuzung.
Die Aufgabe bestand darin, die Funktionen hinauffahren() und herunterfahren() in Pseudocode zu implementieren, wobei Locks gegeben waren. Dabei waren folgende Bedingungen zu beachten:
- Wenn ein Auto fahren kann, soll es auch fahren
- Es sollen keine Kollisionen vorkommen
- Es sollen keine Deadlocks entstehen.

4. Synchronisation/Semaphoren (6 Punkte)
Mehrere Prozesse sollen sich an einer bestimmten Stelle im Programm \"treffen\", um danach die Bearbeitung gemeinsam fortzusetzen. Dies soll durch den Aufruf einer Funktion barrier() passieren, die solange blockiert, bis alle Prozesse sie aufgerufen haben. Die Aufgabe bestand darin, diese Funktion in Pseudocode mithilfe von Semaphoren zu implementieren.

5. Synchronisation/Deadlocks (4 Punkte)
Auf einem System gibt es drei identische Ressourcen, wobei jeder Prozess maximal zwei davon benötigt. Welche der folgenden Aussagen ist richtig? Begründung!
a) Deadlocks sind unmöglich
b) Deadlocks sind möglich, aber vermeidbar
c) Ob ein Deadlock auftritt, hängt von der Reihenfolge ab, in der die Prozesse die Ressourcen beanspruchen. Es gibt Fälle, in denen Deadlocks unvermeidbar sind.

6. Demand Paging, Thrashing (6 Punkte)
Gegeben ein System mit 100ns Zugriffszeit für den Hauptspeicher und 10ms Zugriffszeit für die Festplatte.
a) Berechne die durchschnittliche Zugriffszeit, wenn 0,1% der Anfragen in einem Page Fault resultieren.
b) Berechne die maximale Page Fault Rate, damit die durchschnittliche Zugriffszeit maximal 110ns beträgt.

7. Thrashing (5 Punkte)
Auf einem Unix-System mit einer Multilevel Feedback Queue tritt Thrashing auf. Gesucht waren die möglichen Ursachen.
a) Ist der Verursacher ein Prozess mit hoher oder mit niedriger Priorität?
b) Welche Eigenschaft des Prozesses könnte die Ursache sein?
c) Welche Eigenschaft des Gesamtsystems könnte die Ursache sein?

8. Linking (4 Punkte)
a) Nenne einen Vorteil von dynamischem Linking gegenüber statischem.
b) Nenne ein Problem, das bei dynamischem Linking auftritt, bei statischem aber nicht.

9. Virtual Memory (Zusatzaufgabe, 1 Punkt)
Müssen virtuelle Adressen immer gleich lang sein wie die physikalischen Adressen?

10. Virtual Memory (Zusatzaufgabe, 1 Punkt)
Muss der Offset bei virtuellen Adressen immer gleich lang sein wie bei den physikalischen?

11. Synchronisation (Zusatzaufgabe, 4 Punkte)
Gegeben ein System mit vier laufenden Threads, die alle auf eine Shared Variable V zugreifen. Dabei muss vor dem Zugriff ein Lock L angefordert werden, das nach dem Zugriff wieder freigegeben wird. Kann es dabei trotzdem zu einer Race Condition kommen? Begründung!

= Note (Optional)
1,3

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Angenehme Prüfung, keine unlösbaren oder zu schweren Aufgaben dabei. Benotung war auch sehr fair.

Nr.PrüferFach
625 Redlich, Jens-Peter, Prof. Operating Systems Principles 2

Protokoll

= Datum der Prüfung
17.2.2014
= Benötigte Lernzeit als Empfehlung
1-2 Wochen
= Verwendete Materialien (Bücher, Skripte etc...)
VL Skript, Internet
= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
angenehm und locker Beisitzer hat nichts gesagt
= Prüfungsfragen
Mit was würden sie gerne anfangen?
-Raft/Paxos - Consensus Protokolle
-Konsitenz im Allgemein, und spezielle Modelle (Strikt, Sequentiell, Kausal) an Beispielen erklären
- Kausale Konsitenz, wie kann die hergestellt werden (Happens-Before-Relation, Lamport Time, Vektor-Time)
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Ich war ganz schön durcheinander, konnte nichts auf den Punkt bringen, aber auch das sieht Prof Redlich nach und vergibt faire Noten. Die Fragen sind erstmal einfach und dann knifliger. Absolut Machbare Prüfung!

Nr.PrüferFach
629 Redlich, Jens-Peter, Prof. Operating Systems Principles 2

Protokoll

= Benötigte Lernzeit als Empfehlung
ca. eine Woche, die Themen waren zwar nicht allzu schwer/tief aber dafür viele und breit gefächert

= Verwendete Materialien (Bücher, Skripte etc...)
Folien der Vorlesung, bei Unklarheiten die entsprechenden Paper (entweder in den Folien referenziert oder duch suchen nach Buzzwords)

= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
sehr locker, Beisitzer hat fast nichts gesagt
Ich durfte mir mein erstes Themengebiet aussuchen (\"Womit wollen Sie denn anfangen?\")

= Prüfungsfragen

#Konsistenzmodelle:
Wofür brauchen wir überhaupt Konsistenz? (CAP-Theorem etc), Warum brauchen wir Konsistenzmodelle?
Welche Konsistenzmodelle gibt es so?
Erklären sie mal anhand dieser 4 Grafiken jeweils um welche Konsistenz es sich handelt (mit entsprechenden Ablaufplänen der Form P1: W(x)a, W(x)b, R(x)a, etc, die ungeordnet waren)
#Consensus
Welche grobe unterteilung von Consensus-Protokollen gibt es? (Leader-based, gleichberechtigt)
Was für eine Form davon ist RAFT? 
Was ist der Vorteil von Leader-Based?
Wie funktioniert RAFT denn so grundlegend?
#File-Systems
Was ist der Unterschied zwischen Log-Structured und Journalling Filesystems?
Was ist der unterschied zwischen Log und Journal?
Was ist denn der Vorteil einer Log? Warum benutzt man das?
Hat Logging/Journalling auch nachteile?
Wie funktioniert externe Synchronität? Warum tut man das?
Warum sehen Flash-Speicher-FS\' meistens aus wie Log-Structured?
Warum hat Facebook Haystack entwickelt? (Long-Tail Distribution, minimierung random reads)


= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Faire Prüfung, lockerer Umgang

Nr.PrüferFach
630 Redlich, Jens-Peter, Prof. Operating Systems Principles 2

Protokoll

= Datum der Prüfung
18. 2. 2014
= Benötigte Lernzeit als Empfehlung
1 Woche intensiv (hatte selbst nur 5 Tage)
= Verwendete Materialien (Bücher, Skripte etc...)
Vorlesungsfolien, Google
= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
Lockere Athmosphäre, Beisitzer hat nichts gesagt.
= Prüfungsfragen
Konnte Startthema aussuchen (Google FS) und dann erstmal selber anfangen zu erklären, zwischendurch kamen immer wieder Fragen.
 - Google FS (Warum verteilt, Woher kennt Master die Chunkserver, Vor- und Nachteile Master-Slave, usw, Welche Consistency hat es?)
- Anschließen BigTable (Wie findet man einen Tablet, Wo ist METADATA gespeichert)
- NCQ/TCQ (Warum macht man das?)
- External Synchronization (Unterschied zu sync/async)
- Threads: Lock free code (Wie funktioniert das?)
- Da er sich nicht sicher war, letztes Thema: Consistency (3 Diagramme, welche Consistency liegt vor, warum?)
= Note (Optional) 1.3
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Sehr faire Prüfung, bei meinen Erklärungen fehlte oft der rote Faden und musste oft Denkpausen machen. Herr Redlich fragt aber gerne Fragen, auf die man gerade nicht vorbereitet ist (\"Warum macht man das genau so?\" \"Ich behaupte jetzt mal folgendes: ...\"). Dabei unterbricht er einen oft, und man weiß oft nicht wo er mit der Frage hin will. Die resultierenden Noten sind aber trotz Fehler die man macht gut.

Nr.PrüferFach
669 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
Juli 2014
= Benötigte Lernzeit als Empfehlung
1 Woche, länger wäre besser gewesen
= Verwendete Materialien (Bücher, Skripte etc...)
VL-Folien, CORBA-Vendor-Docs
= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
Beisitzer hat nichts gefragt, gute Stimmung 
= Prüfungsfragen
Wurde gefragt womit ich anfange möchte, habe leider CORBA gewählt. Damit war die ganze Prüfung dann CORBA.
Fragen u.a.:
- Corba skizzieren
- Warum mehrere POAManger, POAs möglich? Wie werden Requests dort durchgereicht?
- Was passiert wenn kein Servant für Objekt bereit liegt? (Incarnation oder Default Servant)
- Wie geht DII, gibt es sowas in RMI? Warum nicht?
- Objekt-Referenzen in CORBA vergleichen? (geht nicht)
- Referentielle Integrität? (Ist alles CBV)
- Sie sind _narrow, wie genau arbeiten sie? (Fragt im IR nach) Was für ein Interface hat das IR?
- Garbage Collection, vgl zu RMI, wie kann man welche in CORBA hinzufügen?
= Note (Optional)
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Sehr in die Tiefe, wenig in die Breite. Note aber sehr fair auch wenn man öfters mal hängt.

Nr.PrüferFach
670 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
7/2014
= Benötigte Lernzeit als Empfehlung
Ich habe ca. 9 tage gebraucht. 

= Verwendete Materialien (Bücher, Skripte etc...)
Eigentlich alle Bücher und Pfds die auf der Website verlinkt wurden, außerdem CORBA 3 von Siegel. Aber nur um unklare themen nachzuschlagen (POA, RMI runtime, narrow(), interface + implementation repository ...) 

= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
Sehr locker. Sombrutzki hat nicht viel gesagt.
Redlich honoriert auch wackeres überlegen.

= Prüfungsfragen
Ich habe RMI als Anfangsthema gewählt.

1.) Was passiert bei RMI während eines Methodenaufrufs?
2.) Was zerstört alles die illusion der location transparency bei RMI (außer: Netzwerklatenz, ...). Antwort: dass remote Funktionsaufrufe call-by-value sind, lokale call-by-reference
3.) Frage zu dynamic class loading (was wenn ziel des aufrufs die klasse zu einem parameter nicht hat, sondern nur eine oberklasse?) -> aufrufer schreibt bei aufruf die codebase location (http:// url vom .class file) neben den serialisierten parameter, ziel kann von dort das class file downloaden
4.) Wieso ist CORBA schneller als RMI
5.) Wie würde man corba narrow() (typsicher) implementieren? (Das ist die statische methode der corba/c++ X-helper klasse die eine corba referenz des typs object auf typ x downcastet). Aw: zB via der corba::object funktion getInterface(), die einem ja schon sagt, welche klasse ein corba::object wirklich hat.
6.) Kann man bei RMI und bei CORBA wissen, ob zwei objektreferenzen (stubs) dasselbe objekt referenzieren? Wie? Wieso nicht, wenn nicht? Antwort: Bei Corba nein sofern das Objekt es nicht explizit unterstützt. Weil der ORB gar nicht mitbekommt, wenn zweimal dasselbe objekt (d.h. mit demselben speicherplatz für den persistent state) von verschiedenen POAs erzeugt wird.
7.) Ist es notwendig so dass bei RMI die aufrufe call-by-value sind, oder waren die RMI entwickler bloß zu faul, und man hätte es so implementieren können, dass die Aufrufe alle call-by-reference sind?
8.) Grundlegende Fragen zu EJB - was ist ein: pojo, persistence context, persistence unit, ...
9.) Thema referential integrity bei RMI.
10.) Unterschied zwischen CORBA inout aufrufsemantik und normalen call-by-reference.
11.) Wieso gibt es kein DII in RMI? Antwort: Bei RMI sind Objektreferenzen = Stubs; den Stub kann man aber fragen, welche methoden die klasse hat, und diese methoden dann aufrufen. D.h. via reflection, zB API methode Object.getClass().getMethods().invoke(). Damit gibt es de facto bereits DII bei RMI, nämlich über reflection. Wenn ich\'s richtig verstanden habe. Bitte selber überlegen.

= Note (Optional)
1.0

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Einige \'trickfragen\' die man aber kennt weil sie hier stehen. 

Nr.PrüferFach
671 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
SS 2014

= Prüfungsfragen
1. RMI + CORBA:
---------------------
- schematische Skizze: Client/Server/Registry + Stub/Skel/RRL/TPL
- Wie kommt Client an Remote Reference?
- Woher weiß Client was die Remote Reference \"kann\"?
- Unterschied Marshalling zu Serialization?
- Was passiert wenn man ein Remote Object marshalled oder serialisiert?
  Ist das Ergebnis das Gleiche?
- Was ist das CORBA DII? Wofür gebraucht? Welche Art von Applikation könnte so etwas brauchen? (z.B. Class Browser)
- Gibt es so etwas wie das DII von CORBA auch bei RMI? In welcher Form?
- Bei RMI werden die Parameter ja per Call-by-Value übertragen, Client sieht also Änderungen an den Parametern nicht. Warum kann der Server nicht einfach die geänderte Kopie zurück übertragen und der Client mergt dann einfach sein Original mit der neuen Version?
-> Antw: Ginge vielleicht, hat aber neue Probleme: Was ist wenn sich die alte Version auf dem Client ändert? Wie Mergekonflikt auflösen?
- Warum ist CORBA schneller als RMI?
-> Antw: keine wirklich konzeptionelle Schwäche nur Umsetzung anders: RMI übertragt die dynamische Typen, d.h. Serialization nutzt run-time type inspection. CORBA überträgt nur die statischen Typen, daher beim compilen schon bessere Optimierung möglich und zur Laufzeit keine type inspection
2. EJB
------
- Was ist eine Entity Bean?
- Wie wird aus nem POJO eine Entity Bean?
- Was passiert wenn man dem EntityManager ne Bean fürs persist() zuschieben
  will, für die er gar nicht zuständig ist?
- Woher weiß der EntityManager für welche Beans er zuständig is?
  -> Antw: Persistence Unit im Deployment Descriptor definiert
- weiter erläutern was eine Persistence Unit, was ein Persistence Context ist
  und wie die beiden zusammenhängen/was die Unterschiede sind

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Faire Benotung und im Zweifel immer für den Studenten. Prüfer hat gutes Gefühl dafür welche Fragen schwer und welche leicht sind und wenn man bei ner schweren länger überlegen muss oder sich nicht ganz sicher ist, wird es einem schon als positiv gewertet wenn man die
richtige Idee hatte. Also alles in allem top Prüfung.

Nr.PrüferFach
672 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
24.07.2014

= Benötigte Lernzeit als Empfehlung
1 Woche++

= Verwendete Materialien (Bücher, Skripte etc...)
Folien sowie Internet zur Recherche, Übungsaufgaben, Mitschriften

= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
Prüfung in einem klimatisierten Raum wegen hoher Außentemperaturen, etwas kalt, aber das erledigte sich in der Prüfung dann...
Beisitzer war der Übungsleiter (Sombrutzki), der nur 1-2x was gesagt hat während der Prüfung, wenn ich Herrn Redlich partout nicht verstanden habe

= Prüfungsfragen
Ich habe mir kein Lieblingsthema / Startthema ausgesucht, was im Nachhinein glaube eine schlechte Entscheidung war (hätte \"Java: RMI / EJB\" gewählt) erspart hätte.

Er hat daher dann ein Thema ausgewählt: Corba ...
- Erklären Sie einfach mal, was es dort so gibt, wofür ist es da, wie funktioniert das Ganze
>> Hier dann eine Grafik mit Client/Server, Stub, DII, DSI, Skeleton, InterfaceRepo, ImplRepo, POA und ORB aufgemalt und daran kurz erklärt (von seinen Folien)

- 2 Clients haben 2 Referenzen, die er durch einen Debugger gejagt hat und man am Ende weiß, dass es am gleichen Servant rauskommt: kann man dann sagen, dass es aufs gleiche Corba Objekt zeigt?
>> Nein: die Corba Objekte können auch unterschiedlich sein, aber mit dem gleichen Servant verbunden. Die Corba Objekte haben bspw, dann vlt eine unterschiedliche ID.
- - Umgekehrte Frage: Ich weiß, dass 2 Referenzen auf 2 vollkommen verschiedene Servants zeigen, sind die Corba Objekte 100% verschiedenen? Nein.

- Wofür braucht man jetzt DII? Wenn man bereits eine bestehende Anwendung hat: Methode a und b schon bekannt, \"c\" kommt neu hinzu.
>> Hier habe ich lange gebraucht, um das korrekte zu sagen. Natürlich geht es darum, dass Methoden zur Compile-Zeit nicht vorhanden waren. Es geht dann aber auch nicht darum, \"c\" per se über DII dann aufzurufen bzw. dies zu implementieren, da man dann auch c über den Stub nutzen könnte. Viel mehr geht es um generische Aufrufe durch ein Userinterface: Der Client hat nichts speziell implementiert außer die Möglichkeit dem Nutzer zu geben selber zu entscheiden, welche Methode er aufrufen möchte und mit welchen Parameter. Erst mit einem UI das generischen Code erzeugt wird DII wirklich nützlich, sonst hätte man auch den Client-Stub jeweils erweitern /nutzen können.
-- Gibt es DII auch in Java / RMI?

- Wie funktioniert die Narrow Methode? Angenommen es gibt auch 2 InterfaceRepos mit jeweils den Klassen A, B und C und Sie bekommen eine Referenz von B und wollen zu A. Woher wissen Sie dann, dass das A im Repo ihrer A-Klasse entspricht, von dem Sie narrow aufrufen?
>> Hier habe ich auch Schwierigkeiten gehabt, weil das Wording wichtig ist. In der Objektreferenz gibt es eine RepoID, so dass man an das richtige kommt sowie eine Referenz auf das Interface. Im InterfaceRepo sind dann die Hierarchien gespeichert und über einen _Interface Identifier_ lässt sich prüfen, ob meine Klasse dem Interface entspricht. Annahme hier noch, dass B von A ableitet - sonst klappt das natürlich nicht. Identifier / Identität und Referenz sollte man hier strikt trennen, weil man dann ans Falsche denkt. Ich habe zumeist Referenz benutzt, was er dann leider immer missverstanden hat. Zudem sollte man sich das Szenario auch wirklich klar machen, weil das B von A ableiten soll war mir unbekannt - bis zur Nachfrage bzw. dem Hinweis von dem Beisitzer.

- JINI: Wofür ist es, wie funktioniert es, was ist der besondere Unterschied zum regulären Naming Service bspw. RMIRegistry?
>> Geht üebr einen Lookup-Service; gibt ggf. einen allgemeinen Stub zurück, der Anfragen weiterleiten kann; ermöglicht _Broadcast_ (hierauf wollte er hinaus..): \"Kann sich jemand um einen Druckauftrag kümmern?\", was normal nicht funktioniert.

- RMI: Ich bekomme eine Referenz auf ein Remoteobjekt, welches über RMI-Compiler \"SpecialOne\" compiliert wurde, lokal habe ich das Interface aber mit dem Standard rmic compiliert: kann ich jetzt damit arbeiten, wenn ja, wie?
>> Der eigene Stub passt nicht zum RemoteObjekt, so dass über Dynamic Class Loading die richtige Implementierung aus der Codebase gesucht wird.

- Thema Lokationstransparenz in RMI und wie sieht es mit Call-by-Reference in Corba aus? Ginge es nicht über inout?
>> RMI hat remote + non-remote Objekte und letztere lokal CBR aber entfernt CBV sind. Zudem muss man RemoteExceptions behandeln, was auffällig ist. Corba gibt es nur Remote-Objekte oder Primitive Typen / Value Types, die CBV übertragen werden. \"Non-remote Objekte\" so gibt es nicht. Inout kopiert Werte in ein existierendes Objekt. Beim Übertragen und beim Server werden jedoch eigene Objekte genutzt, die die Werte nur vorhalten - keine richtige Referenz.

= Note (Optional)
1.0

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Ich habe sehr schnell geredet und durch die falsche Wortwahl kam auch häufig etwas in den falschen Hals. Man sollte alles sehr langsam erklären und auf die Wörter achten, so dass 100% ersichtlich wird, dass man es verstanden hat. Viele Fragen habe ich auch falsch verstanden, so dass wir auch da immer wieder von anderen Dingen sprachen. Insgesamt hatte er wohl gesehen, dass ich es eigentlich kann, aber meine Erklärungen waren schlecht, so dass es gerade bei der Entscheidung 1.3 / 1.0 immer den Zwiespalt gab. Durch 2-3 zusätzliche Fragen (>15 Minuten die Prüfung überzogen), wo wir leider auch teilweise aneinander vorbei sprachen bzw. meine Erklärung nicht 100% exakt war, konnte er erst mit der letzten Detailfrage sich entscheiden zur 1.0. Insgesamt versucht er schon viel zu tun, um dem Studenten gerecht zu werden, wofür ich auch dankbar bin.

Nr.PrüferFach
677 Redlich, Jens-Peter, Prof. Middleware Platforms

Protokoll

= Datum der Prüfung
Juli 2014
= Benötigte Lernzeit als Empfehlung
7 Arbeitstage
= Verwendete Materialien (Bücher, Skripte etc...)
Hauptsächlich Skript
englische Wiki-Artikel zu den Themen

= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer
sehr locker, freundlich
Beisitzer hat nichts gesagt.

= Prüfungsfragen
Leider erinnere ich mich nicht mehr an alle Fragen aber:
RMI:
Allgemeine Archtitektur
Client/Server, rmiregistry
Warum ist RMI langsam?
Warum brauch ich dynamische Typen?
Die \"angenommen ich habe einen eigenen RMI-Compiler gebaut\" frage (siehe zwei prüfungen frauen)
Warum brauchen wir bei RMI kein Interface Repository?

CORBA:
Allgemeine CORBA-Architektur
Wofür ist das Interface Repository da?
Angenommen ich will ein CORBA-Objekt von einem Server auf einen anderen migrieren: Wie könnte ich da vorgehen? (Ziel sollte sein das weniger Requests auf dem Server aufschlagen)

EJB:
Wo werden Datenbank-verbindungen verwaltet? Wie erkennen wir Entity-Beans? (er wollte persistance unit erklärt haben)
Was für Arten von Primary-Key Erzeugung gibt es?

= Note (Optional)
1,0
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
faire prüfung, habe wenig \"fiese\" fragen abbekommen, es lohnt sich seine Terminologie zu benutzen

Nr.PrüferFach
678 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

28.07.14= Datum der Prüfung
5tage á ca. 4h, dann schafft man aber nicht jedes detail, aber es sollte reichen= 
Benötigte Lernzeit als Empfehlung
Folien, Wikipedia= Verwendete Materialien (Bücher, Skripte etc...)
sehr angenehm, redlich lockert wieder mal gut durch seine witze und storries auf= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer

1. Grundlagen
Was ist Micro-kernel, \"Spooling\"?
Vor-/Nachteil bei Micro- und bei monolithischem kernel.
Warum ist \"time-sharing\" gut?
Szenario nennen, bei dem das sequentielle abbarbeiten der jobs besser ist als time-sharing. Hier sollte nicht nur mit \"kontext switch dauert lange\" argumentiert werden.

2. Scheduling
a) Gegeben war ein Zustandsgraph mit drei Zuständen (Running, Ready, Blocked) und sechs gerichteten Kanten zwischen je zwei Zuständen. Man sollte für jede Kante beschreiben, ob der Zustandsübergang auftreten kann und falls ja, durch welches Ereignis dieser ausgelöst wird.
b) Drei segmente des Unix-Hauptspeichers nennen und angeben ob sie bei fork() kopiert werden.

3. Multilevel Feedback Queue
Es wurde behauptet, dass MFQ schlecht ist. Ein Prozess der lange braucht, würde, wenn er erstmal an der reihe ist alles ewig blockieren, weil MFQ nicht wie bei RR unterbricht. Verifizieren, bzw. Falsifizieren mit Begründung

4. Threads
Unterschied erklären von Reentrant und thread-safe

5.
Synchronisation/Semaphore
Mehrere Prozesse sollen sich an einer bestimmten Stelle im Programm \"treffen\", um danach die Bearbeitung gemeinsam fortzusetzen. Dies soll durch den Aufruf einer Funktion barrier() passieren, die solange blockiert, bis alle Prozesse sie aufgerufen haben. Die Aufgabe bestand darin, diese Funktion in Pseudocode mithilfe von Semaphoren zu implementieren. Die Anzahl der Threads war durch die Variable MAX gegeben, außerdem konnten die Prozesse ihre PID abfragen. Weiterhin war es erlaubt globalen Code hinzuschreiben.

6. Synchronisation/locks
Auf einer Kreuzung können von allen vier Seiten Autos ankommen. Um Kollisionen zu vermeiden, soll vor Befahren der Kreuzung von jedem Fahrer eine Funktion auf einem zentralen Rechner ausgeführt werden. Erst wenn diese zurückkehrt, darf die Kreuzung befahren werden. Selbiges für das Verlassen der Kreuzung.
Die Aufgabe bestand darin, die Funktionen hinauffahren(int fahrbanabschnitt) und herunterfahren(int fahrbahnabschnitt) in Pseudocode zu implementieren, wobei Locks gegeben waren. Dabei waren folgende Bedingungen zu beachten:
- Wenn ein Auto fahren kann, soll es auch fahren
- Es sollen keine Kollisionen vorkommen
- Es sollen keine Deadlocks entstehen.

7. 
a) Unterschied ext./int. Fragmentierung
b) virt. adr. gleich groß wie physikalische? Begründung!
c) Eine CPU vertauscht Offset und VPN, beides ist gleich lang. Funktioniert das? Gibt es trotzdem Probleme?

8. Paging
Gegeben ein System mit 100ns Zugriffszeit für den Hauptspeicher und 10ms Zugriffszeit für die Festplatte.
a) Berechne die durchschnittliche Zugriffszeit, wenn 1% der Anfragen in einem Page Fault resultieren.
b) Berechne die maximale Page Fault Rate, damit die durchschnittliche Zugriffszeit maximal 150ns beträgt.
Alle Teilaufgaben brachten ungefähr 4-5 Punkte. Insgesamt jedenfalls 40 reguläre Punkte plus 4 Zusatzpunkte

9. Massenspeicher
a) Greift man auf eine Festplatte mit random access zu dauert das Ergebnis weit länger als erwartet. Warum?
b) Zwei Dinge nennen um obiges Problem zu verbessern.

10. UNIX Datei System
Blockgröße: 2KB
Adresse(Platte): 8B
a) Max. Dateigröße, falls i-node zehn direkte einträge und jeweils einen einfachen, einen doppelten und einen dreifachen indirekten eintrag besitzt.
b) Größte Datei bei FAT16, Blockgröße 4KB
c) Wie groß ist die FAT-Datenstruktur bei b) wenn die Platte 10MB hat

11. Zusatzaufgabe
Job A schickt Daten zu Job B. Job B bearbeitet diese und schickt ein gleich großes Paket (2B) wieder zurück. Beide Jobs haben einen 2B großen Puffer. Was ist das kleinste N, was zu einem deadlock führt?

A:
send N bytes to B
while(receive data)
	display data
exit

B: while(receive 2 bytes of data)
	proces data
	send 2 bytes result to A
exit= Prüfungsfragen
noch nicht da= Note (Optional)
ausreichend zeit, schwierigkeit auch in ordnung und die altklausur zu rechnen hat mir sehr geholfen, da diese sehr ähnlich war= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)

Nr.PrüferFach
679 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

28.07.14= Datum der Prüfung
5tage á ca. 4h, dann schafft man aber nicht alles= 
Benötigte Lernzeit als Empfehlung
Folien, Wikipedia= Verwendete Materialien (Bücher, Skripte etc...)
sehr angenehm, redlich lockert wieder mal gut durch seine witze und storries auf= \"Atmosphäre\" der Prüfung / Verhalten der Beisitzer

1. Grundlagen
Was ist Micro-kernel, \"Spooling\"?
Vor-/Nachteil bei Micro- und bei monolithischem kernel.
Warum ist \"time-sharing\" gut?
Szenario nennen, bei dem das sequentielle abbarbeiten der jobs besser ist als time-sharing. Hier sollte nicht nur mit \"kontext switch dauert lange\" argumentiert werden.

2. Scheduling
a) Gegeben war ein Zustandsgraph mit drei Zuständen (Running, Ready, Blocked) und sechs gerichteten Kanten zwischen je zwei Zuständen. Man sollte für jede Kante beschreiben, ob der Zustandsübergang auftreten kann und falls ja, durch welches Ereignis dieser ausgelöst wird.
b) Drei segmente des Unix-Hauptspeichers nennen und angeben ob sie bei fork() kopiert werden.

3. Multilevel Feedback Queue
Es wurde behauptet, dass MFQ schlecht ist. Ein Prozess der lange braucht, würde, wenn er erstmal an der reihe ist alles ewig blockieren, weil MFQ nicht wie bei RR unterbricht. Verifizieren, bzw. Falsifizieren mit Begründung

4. Threads
Unterschied erklären von Reentrant und thread-safe

5.
Synchronisation/Semaphore
Mehrere Prozesse sollen sich an einer bestimmten Stelle im Programm \"treffen\", um danach die Bearbeitung gemeinsam fortzusetzen. Dies soll durch den Aufruf einer Funktion barrier() passieren, die solange blockiert, bis alle Prozesse sie aufgerufen haben. Die Aufgabe bestand darin, diese Funktion in Pseudocode mithilfe von Semaphoren zu implementieren. Die Anzahl der Threads war durch die Variable MAX gegeben, außerdem konnten die Prozesse ihre PID abfragen. Weiterhin war es erlaubt globalen Code hinzuschreiben.

6. Synchronisation/locks
Auf einer Kreuzung können von allen vier Seiten Autos ankommen. Um Kollisionen zu vermeiden, soll vor Befahren der Kreuzung von jedem Fahrer eine Funktion auf einem zentralen Rechner ausgeführt werden. Erst wenn diese zurückkehrt, darf die Kreuzung befahren werden. Selbiges für das Verlassen der Kreuzung.
Die Aufgabe bestand darin, die Funktionen hinauffahren(int fahrbanabschnitt) und herunterfahren(int fahrbahnabschnitt) in Pseudocode zu implementieren, wobei Locks gegeben waren. Dabei waren folgende Bedingungen zu beachten:
- Wenn ein Auto fahren kann, soll es auch fahren
- Es sollen keine Kollisionen vorkommen
- Es sollen keine Deadlocks entstehen.

7. 
a) Unterschied ext./int. Fragmentierung
b) virt. adr. gleich groß wie physikalische? Begründung!
c) Eine CPU vertauscht Offset und VPN, beides ist gleich lang. Funktioniert das? Gibt es trotzdem Probleme?

8. Paging
Gegeben ein System mit 100ns Zugriffszeit für den Hauptspeicher und 10ms Zugriffszeit für die Festplatte.
a) Berechne die durchschnittliche Zugriffszeit, wenn 1% der Anfragen in einem Page Fault resultieren.
b) Berechne die maximale Page Fault Rate, damit die durchschnittliche Zugriffszeit maximal 150ns beträgt.
Alle Teilaufgaben brachten ungefähr 4-5 Punkte. Insgesamt jedenfalls 40 reguläre Punkte plus 4 Zusatzpunkte

9. Massenspeicher
a) Greift man auf eine Festplatte mit random access zu dauert das Ergebnis weit länger als erwartet. Warum?
b) Zwei Dinge nennen um obiges Problem zu verbessern.

10. UNIX Datei System
Blockgröße: 2KB
Adresse(Platte): 8B
a) Max. Dateigröße, falls i-node zehn direkte einträge und jeweils einen einfachen, einen doppelten und einen dreifachen indirekten eintrag besitzt.
b) Größte Datei bei FAT16, Blockgröße 4KB
c) Wie groß ist die FAT-Datenstruktur bei b) wenn die Platte 10MB hat

11. Zusatzaufgabe
Job A schickt Daten zu Job B. Job B bearbeitet diese und schickt ein gleich großes Paket (2B) wieder zurück. Beide Jobs haben einen 2B großen Puffer. Was ist das kleinste N, was zu einem deadlock führt?

A:
send N bytes to B
while(receive data)
	display data
exit

B: while(receive 2 bytes of data)
	proces data
	send 2 bytes result to A
exit= Prüfungsfragen
noch nicht da= Note (Optional)
ausreichend zeit, schwierigkeit auch in ordnung und die altklausur zu rechnen hat mir sehr geholfen, da diese sehr ähnlich war= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)

Nr.PrüferFach
709 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Datei (Zugriff nur aus dem HU-Netz)

25. Februar 2015 - GdP - Gedächtnisprotokoll.pdf

Nr.PrüferFach
723 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

Datum der Prüfung: 21.07.15 
Entspannte, angenehme "Atmosphäre"

11 Aufgaben, 2 Zusatzaufgaben
120 Minuten Bearbeitungszeit, sehr ausreichend

Aufgabe 1:  Architektur

a)	Zwei Vorteile von monolithischer Kernel zu Mikrokernel
b)	Zwei Vorteile von Mikrokernel zu monolithischem Kernel

Aufgabe 2: Context Switch

Intel SSE Register für Multimedia gesichert in PCB bei Context Switch? Begründung

Aufgabe 3: Context Switch

I/O Register gesichert in PCB bei Context Switch? Begründung

Aufgabe 4:  Scheduling

FIFO soll kleinere Turnaround-Time haben als Round Robin, dafür 4 Prozesse mit Ankunftszeit und Dauer angeben und Time Quantum für Round Robin.

Aufgabe 5: Thread Safe / Re-entrant

a)	Was passiert wenn eine Funktion keine der beiden Eigenschaften hat?
b)	Unterschied zwischen threadsafe und reentrant?
c)	Kann eine Funktion gleichzeitig beides sein?

Aufgabe 6: Rade Condition / Deadlock

Code gegeben:
Class Account {

	Lock L;
	Int balance;
	
	Private void book(int x) {
		Acquire(L);
		Balance += x;
		Release(L);
	}

	Transfer1(Account dest, int x) {
		This.book(-x);
		Dest.book(x);
	}

	Transfer2(Account dest, int x){
		Acquire(This.L);
		Acquire(Dest.L);
			This.Balance -= x;
			Dest.Balance += x;
		Release(Dest.L);
		Release(This.L);
	}
}

a)	Race Condition bei Verwendung von ausschließlich Transfer1? Begründung
b)	Race Condition bei gemischter verwendung von Transfer1 und Transfer2? Begründung
c)	Deadlock bei ausschließlicher Verwendung von Transfer1? Begründung
d)	Deadlock bei ausschließlicher Verwendung von Transfer2? Begründung

Aufgabe 6b (Vergessen zu Nummerieren): Deadlock

Drei identische Ressourcen, jeder Prozess braucht maximal 2 davon
MC:
[ ] kein Deadlock möglich
[ ] Deadlock möglich, aber vermeidbar
[ ] Deadlock möglich und nicht vermeidbar
Begründung.

Aufgabe 7: External/Internal Fragmantation

Erkläre beide Begriffe so dass der Unterschied klar wird.

Aufgabe 8: Page Table

24 bit virtuelle Adressen, 32 bit physische Adresse, 256 MB RAM, 4KB große Seiten, 16 Prozesse
Wie viele Einträge in der Pagetable bei

Einstufiger Page Table _____
Invertierter Page Table _____

Aufgabe 9: MMU

Prozessor mit defekter MMU, die virtuelle Page Number und Offset vertauscht. Funktioniert das trotzdem? Wenn ja, mit welchen „Nebenwirkungen“?

Aufagbe 10: Thrashing

Es kommt zu Thrashing
a)	Multilevel-Feedback-Queue
	Hat Prozess hohe oder niedrige Priorität? Begründung
b)	Prozesseigenschaft, die zu Thrashing führt
c)	Systemeigenschaft, die zu Thrashing führt

Aufgabe 11: Page Faults

CPU: 1000 MIPS (Million Instructions per Second)
Festplatte: 10 ms Zugriffszeit
Berechne die Page Fault Frequency, so dass man nicht mehr als die Hälfte an CPU-Rechenleistung verliert.

-----------------------------------------------------------------------------------------

Zusatzaufgabe 1: FAT

Festplatten mit 512 GB und 4 TB
a)	Berechne jeweils minimale Clustergröße für FAT16 und FAT 32
b)	Berechne jeweils die Größe der FAT für FAT16 und FAT32

Zusatzaufgabe 2: Unix File System

2KB Blöcke, 8 Byte Adressen
a)	Berechne die maximale Dateigröße
b)	Berechne die maximale Größe des Dateisystems

Nr.PrüferFach
740 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung 25.02.2015
= Prüfungsfragen

== 1.
a)  2015 als Binärzahl
b) -2015 als Binärzahl im 16-Bit-Zweierkomplement
c)  2015 zur Basis 9
d) Asugabe von System.out.println( 2+3+"=="+3+2);
e) Ausgabe von System.out.println( 0.5 + 1/2 );
f) Ausgabe von System.out.println( 1/2 + 1/2 );
g) Ausgabe von: 

public class Mystery {
	public static double toFarenheit(double celsius) {
		return celsius * (9/5) + 32;
	}
	public static void main(String[] args) {
		for(int c = 10; c < 40; c += 10)
			System.out.println(toFarenheit(c));
	}
}


== 2. Die nachfolgenden Werte sind Zahlen im 16-Bit-Zweierkomplement. Was ist das Ergebnis?
BEEF < 1
BEEF + 1
BEEF | 1
BEEF & 1
BEEF ^ 1
BEEF < FACE
FEED | FACE
FEED & FACE
FEED ^ FACE
FEED + FACE


== 3. Wie viele Zeilen gibt das folgende Programmfragment aus, wenn N = 5 ist?
a)
for(int i = 0; i < N; i++)
	for(int j = 0; j < 3; j++)
		System.out.println("GdP macht Spass");
		
b)
for(int i = 0; i < N; i++)
	for(int j = N; j > 0; j--)
		System.out.println("GdP ist cool");
		
c)
for(int i = 0; i < N; i++) {
	int k = 0;
	do {
		System.out.println("GdP ist einfach");
		--k;
	} while(k > 0);
}


== 4. Welchen Wert liefert g(3122013) ?
public static int g(int n) {
	if(n % 2 == 0) return n/10;
	return g(g(n/10));
}


== 5. Referenzen (Welche Ausgabe erzeugt das Programm)

public class References {
	public static void mystery(int x, int[] y, int[] z) {
		x = x + 1;
		y[0] = y[0] + 1;
		z = y;
	}
	
	public static void main(String[] args) {
		int xx = 1;
		int[] yy = { 2, 3, 4, 5 };
		int[] zz = { 6, 7, 8, 9 };
		mystery(xx, yy, zz);
		System.out.println(xx);
		System.out.println(yy[0]);
		System.out.println(zz[0]);
		yy = zz;
		mystery(xx, yy, zz);
		System.out.println(xx);
		System.out.println(yy[0]);
		System.out.println(zz[0]);		
	}
}


== 6. Polymorphie (Welche Ausgabe erzeugt das Programm)

class A {
	public int x;
	public A(int a) { this.x = a; }
	public int getX() { return x; }
	public int getY() { return this.getX() + 1; }
}

class B extends A {
	public int x;
	public B(int b) { suber(b); this.x = 2 * b; }
}

class C extends B {
	public C(int c) { super(c); }
	public int getX() { return 5; }
}

public class Inheritance {
	public static void main(String[] args) {
		A aa = new A(10);
		A ab = new B(100);
		A ac = new C(1000);
		System.out.println(aa.getY());
		System.out.println(ab.getY());
		System.out.println(ac.getY());
		
		B bb = new B(10);
		B bc = new C(100);
		System.out.println(bb.getY());
		System.out.println(bc.getY());
		
		C cc = new C(10);
		System.out.println(cc.getY());^
	}
}


== 7. Implementiere folgende Funktion ohne for/while. Zusatzpunkt für eine Lösung ohne if.

class Node {
	int value;
	Node next;
}

int count(Node liste) {
	int cnt = 0;
	for(Node n = liste; n != null; n = n.next)
		cnt++;
	return cnt;
}


== 8. Toy-Programm schreiben

- Zahl zwischen 0 und 100 von Adresse 01 lesen
- mit 517 multiplizieren
- Ergebnis an Adresse 02 schreiben
- eine generelle Multiplikation ist nicht gefragt
- 517 Additionen sind wegen Speichermangels nicht möglich
- 517 = 512 + 4 + 1, 1 = 2^0   4 = 2^2   512 = 2^9
- Instruktionsreferenz ist gegeben


== Zusatzaufgabe.

in Postfix-Notation: 2 3 + 4 5 * + 1 *
Schreiben Sie den Ausdruck in den geforderten Notationen:
	Infix-Notation
	Prefix-Notation
	Ergebnis des Ausdrucks (als eine Zahl)

	
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Wenn man keine Probleme mit den Übungsaufgaben hatte, war die Klausur eher einfach. Die Zeit hätte für mich gereicht um doppelt so viele Aufgaben zu bewältigen. Dank der Zusatzpunkte ist eine Spitzennote leicht zu erreichen.


Nr.PrüferFach
763 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
25.07.2016

= Benötigte Lernzeit als Empfehlung
1-2 Wochen, je nach dem wie gut man aufgepasst hat.

= Verwendete Materialien (Bücher, Skripte etc...)
Redlichs Folien, manchmal Google

= Prüfungsfragen

Maximale Anzahl der Punkte 31.
Es gab zwei Zusatzpunkte.

AUFGABE 1 (6 Punkte)

a) Was ist ein Mikro-Kernel?
b) Was sind die Vorteile von einem Mikro-Kernel gegenüber einem monolithischen Kernel?
c) Was sind die Nachteile von einem Mikro-Kernel gegenüber einem monolithischen Kernel?
d) Was ist Spooling?
e) N Jobs werden sequenziell ausgeführt. Hätte man Time-Sharing benutzt, wäre die Bearbeitung schneller gegangen. Bei welchem Typ Job ist das der Fall?
f) Wann ist das sequenzielle Ausführen von Jobs schneller als die Benutzung von Time-Sharing?

= = = =

AUFGABE 2 (3 Punkte)

Implementieren sie eine Funktion "halfbarrier".
Es gibt N Threads und es ist bekannt, dass jeder Thread halfbarrier einmal aufruft.
Wenn ein Thread die Funktion halfbarrier aufruft, dann soll die Funktion blockieren, bis mehr als N/2 Threads die Funktion halfbarrier aufgerufen haben.
Wenn bereits mehr als N/2 Threads die Funktion halfbarrier aufgerufen haben, dann soll die Funktion für die anderen Threads nicht mehr blockieren, sondern sofort zurückkehren.

Als Hilfe kann man die Funktion threadID benutzen, welche jedem Thread seine eindeutige ID zwischen 0 und N-1 zurückgibt.

Wichtig ist, dass man kein Spin-Lock benutzt, sondern dass die Funktion wirklich blockiert!

[Tipp von mir: In der VL wurde die Funktion barrier implementiert, halfbarrier funktioniert fast genauso und die Funktion threadID braucht man in der "optimalen" Lösung nicht!]

= = = =

AUFGABE 3 (3 Punkte)

Gegeben die Implementierung eines Buffers (genau das gleiche Bild wie in der Vorlesung):

char buf[];
int head = 0, tail = 0;
sem cnt = 0;

void put(char c)
   buf[head++] = c;
   V(cnt);

char get(void)
   P(cnt);
   c = buf(tail++);
   return c;

a) Was ist mit dem obigen Code nicht in Ordnung?
b) Korrigieren Sie den Code!

= = = =

AUFGABE 4 (3 Punkte)

Die Firma BilligPC verkauft CPUs, die eine defekte MMU haben. Die defekte MMU vertauscht die VPN (Virtual Page Number) und den Offset. Das bedeutet: Die MMU schaut mit dem Offset in der Page-Table nach und addiert dann die VPN darauf.
Ihr Freund behauptet, mann kann mit der defekten MMU trotzdem virtuelle Adressen realisieren. Hat er damit recht? Und wenn ja, gibt es negativen Nebenwirkungen?

= = = =

AUFGABE 5 (2 Punkte)

Graf Zahl hat eine neue malloc-Funktion geschrieben: malloc(len). Die funktioniert wie folgt: Die Größe (len in Bytes) wird auf ganze tausender aufgerundet (dh. 512 -> 1000, 1024 -> 2000, usw.). Dann wird der Speicher allokiert, aber immer mindestens eine ganze Seite (4K groß).

Wie groß ist die externe Fragmentierung: _____
Wie groß ist die interne Fragmentierung: _____

= = = =

AUFGABE 6 (3 Punket)

Der Prinz und die Prinzessin lassen sich scheiden. Die Gütertrennung der beiden wird mit folgendem Algorithmus vollzogen:
Beide schreiben an den Anwalt des anderen einen Brief, in dem sie einen Gegenstand X fordern. Sollten beide am gleichen Tag denselben Gegenstand fordern, so müssen sie am folgenden Tag einen Brief schreiben, der die Forderung (ganz offiziell) wieder rückgängig macht.
Unter den Besitztümern der beiden befinden sich auch ein Hund und sein Hundehaus, sowie ein Vogel und dessen Vogelkäfig. Man hat sich geeinigt: Sollte am Ende der Gütertrennung ein Tier von seiner Behausung getrennt sein, das heißt, einer der beiden bekommt das Tier und der andere sein Haus, so fängt man die Gütertrennung wieder ganz von vorne an.
Der Prinz und die Prinzessin fahren nun getrennt in den Urlaub. Beide haben ein Programm geschrieben, um die Gütertrennung für sie nach dem Algorithmus abzuhandeln. Als sie lange Zeit später aus dem Urlaub zurückkommen stellen sie fest: Die Güterverhandlung ist immer noch nicht fertig.
Warum? Nehmen Sie zu folgenden drei Aussagen stellung:
a) Es ist ein Deadlock aufgetreten.
b) Es ist ein Livelock aufgetreten.
c) Eines der Programme ist "verhungert". (Hiermit sollte Starvation gemeint sein...)

= = = =

AUFGABE 7 (2 Punkte)

[Hier bin ich mir nicht so sicher.]
Jemand hat eine Idee, Computer "besser" zu machen: Das Textsegment soll nicht aus dem Swap-Space geladen werden, sondern direkt aus dem Programm-Code von der Platte. Nennen Sie zwei Probleme dabei bzw. Voraussetzungen, unter denen es funktioniert.

= = = =

AUFGABE 8 (3 Punkte)

Gegeben sind 8 identische Festplatten, die jeweils 1TB groß sind.

(Hier folgte eine Erklärung von RAID0, RAID1 und RAID4)

Wie viele Daten kann man mit dem jeweiligen System speichern?
RAID0:
RAID1:
RAID5:

Wie viele Festplatten müssen mindestens kaputt sein, damit Daten verloren gehen, wenn die Fehler MAXIMAL UNGÜNSTIG verteilt sind?
RAID0:
RAID1:
RAID5:

Wie viele Festplatten müssen mindestens kaputt sein, damit Daten verloren gehen, wenn die Fehler MAXIMAL GÜNSTIG verteilt sind?
RAID0:
RAID1:
RAID5:

[Hierbei ist anzumerken: Fehler bedeutet, dass eine ganze Festplatte ausfällt.]
[Zweite Anmerkung: Pro Frage gab es 1 Punkt und zwar NUR wenn man alle 3 richtig hatte]

= = = =

AUFGABE 9 (3 Punkte)

Gegeben ein Dateisystem: FAT10 und eine 1GB große Festplatte.

Wie groß muss ein Cluster mindestens sein?
Wie groß ist die größte Datei, wenn ein Cluster 1KB groß ist?
Wie groß ist die FAT, wenn ein Cluster 1KB groß ist? [Gemein: die Clustergröße spielt hier keine Rolle!]

= = = =

AUFGABE 10 (3 Punkte)

Gegeben ein Unix-Dateisystem, das wie folgt aussieht:
Die ersten 8 Einträge einer inode sind direkt, es gibt 1 indirekten Eintrag, 2 zweifach-indirekte Einträge und 3 dreifach-indirekte Einträge.
Blöcke sind 2KB groß, Adressen sind 8 Byte groß.

Was ist die maximale Dateigröße?
Was ist die maximal verwaltbare Festplattengröße?

= = = =

ZUSATZAUFGABE (2 Zusatzpunkte)

Zuerst wurde (sehr ausführlich) die Page Fault Frequency (PFF) erklärt (sogar mit dem Bild aus den Folien).

Aufgabe:
Die CPU arbeitet mit 1000MIPS (Millionen Instruktionen pro Sekunde). Ein Festplatttenzugriff dauert 10ms. Wie groß darf die PFF maximal sein, damit das System nicht mehr als 4 mal so langsam wird?

= Note (Optional)
1.0

WICHTIGER TIPP FÜR ALLE:
Ich würde es jedem empfehlen zur Klausureinsicht zu gehen!
Die Korrektoren waren bei uns schon am selben Abend fertig und haben dabei auch Fehler gemacht. Auf Aufgabe 2 haben viele Studenten 0/3 Punkten trotz einer richtigen Lösung bekommen.
Viele Studenten die da waren konnten ihre Note noch aufbessern - es lohnt sich :)

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Die Aufgabe mit der Internen und Externen Fragmentierung war komisch, weil nicht klar war, auf was sich die Fragmentierungen beziehen sollen (den Allokator oder die Pages?).
Prinz und Prinzessin waren zwar witzig, aber mir gefallen solche Textaufgaben nicht.

Ansonsten ließ sich alles mit dem Wissen aus der VL gut beantworten, besonders haben auch die vorherigen Protokolle geholfen, denn es stellt sich heraus: Viele Aufgaben werden immer wieder gestellt. Diese vorher zu üben/durchzurechnen kann ich nur empfehlen.


Nr.PrüferFach
795 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung
02.03.2017
= Benötigte Lernzeit als Empfehlung
-Voraussetzung: Anwesenheit bei allen Vorlesungen und Übungen
-ein Nachmittag für die, die Java schon Java vor dem Modul sehr gut konnten
-2 Tage für Java Anfänger
= Verwendete Materialien (Bücher, Skripte etc.)
Vorlesungsfolien,Übungsfolien
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Entspannt, selbst bei der Prüfung verliert Redlich nicht seinen Humor 
= Prüfungsfragen
1. Toy Maschine
Drei Werte sind im Hauptspeicher abgespeichert, welchen Wert haben sie nach der Ausführung des Programms ?

2. Statische/Dynamische Bindung
Was wird bei den einzelnen Zeilen ausgegeben?
Die Zeilen beziehen sich auf eine Klasse A und eine Klasse B extends A, welche Variablen und Mehtoden enthalten, die in beiden Klassen die selben Bezeichnungen haben, jedoch unterschiedliche Werte in den Variablen oder Effekte/Ergebnisse bei den Funktionen hat. Dort werden Zeilen angefragt wie:
A a=new B();
a.v1;
a.f1();

3. Java Operatoren
Ist die Benutzung dieser Operatoren(+,-,++,--,|,+=,...) in diesem Kontext erlaubt ? Warum oder warum nicht ?
Tabelle mit Bedeutung der Operatoren ist gegeben.
10 Codezeilen werden gegeben.

4. Rekursives Zeichnen
Aufgabenstellung: Geben sie alle Kombination der folgenden 7 Codezeilen an, damit das Programm folgendes Bild liefert

5. Zahlensysteme
-dezimal zu binär
-binär negieren
-dezimal zur Basis 7 (geht am Besten über dezimaö -> binär -> Basis 7
-größte und kleinste int Zahl

6. Datentypen/Referenztypen
int und String Variablen sind gegeben.
Diese werden einer Funktion übergeben, welche die übergebenden Werte ändert.
Werden auch die Werte bei den Originalvariablen geändert oder nur innerhalb der Funktion?
danach kam für den String noch eine replaceAll Funktion, die den Wert geändert hat, leicht zu überlesen.

= Note (Optional)
1.3
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Eine sehr faire Prüfung, obwohl ich das mit den Operatoren nicht gerechtfertigt fand, da Redlich sagte er will uns nicht Java beibringen sondern das Programmieren und nimmt dann etwas javaspezifisches ran.

Nr.PrüferFach
797 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung
02.03.2017
= Benötigte Lernzeit als Empfehlung
-Voraussetzung: Anwesenheit bei allen Vorlesungen und Übungen
-ein Nachmittag für die, die Java schon Java vor dem Modul sehr gut konnten
-2 Tage für Java Anfänger
= Verwendete Materialien (Bücher, Skripte etc.)
Vorlesungsfolien,Übungsfolien
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Entspannt, selbst bei der Prüfung verliert Redlich nicht seinen Humor 
= Prüfungsfragen
1. Toy Maschine
Drei Werte sind im Hauptspeicher abgespeichert, welchen Wert haben sie nach der Ausführung des Programms ?

2. Statische/Dynamische Bindung
Was wird bei den einzelnen Zeilen ausgegeben?
Die Zeilen beziehen sich auf eine Klasse A und eine Klasse B extends A, welche Variablen und Mehtoden enthalten, die in beiden Klassen die selben Bezeichnungen haben, jedoch unterschiedliche Werte in den Variablen oder Effekte/Ergebnisse bei den Funktionen hat. Dort werden Zeilen angefragt wie:
A a=new B();
a.v1;
a.f1();

3. Java Operatoren
Ist die Benutzung dieser Operatoren(+,-,++,--,|,+=,...) in diesem Kontext erlaubt ? Warum oder warum nicht ?
Tabelle mit Bedeutung der Operatoren ist gegeben.
10 Codezeilen werden gegeben.

4. Rekursives Zeichnen
Aufgabenstellung: Geben sie alle Kombination der folgenden 7 Codezeilen an, damit das Programm folgendes Bild liefert

5. Zahlensysteme
-dezimal zu binär
-binär negieren
-dezimal zur Basis 7 (geht am Besten über dezimaö -> binär -> Basis 7
-größte und kleinste int Zahl

6. Datentypen/Referenztypen
int und String Variablen sind gegeben.
Diese werden einer Funktion übergeben, welche die übergebenden Werte ändert.
Werden auch die Werte bei den Originalvariablen geändert oder nur innerhalb der Funktion?
danach kam für den String noch eine replaceAll Funktion, die den Wert geändert hat, leicht zu überlesen.

= Note (Optional)
1.3
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Eine sehr faire Prüfung, obwohl ich das mit den Operatoren nicht gerechtfertigt fand, da Redlich sagte er will uns nicht Java beibringen sondern das Programmieren und nimmt dann etwas javaspezifisches ran.

Nr.PrüferFach
817 Redlich, Jens-Peter, Prof. Operating Systems Principles 2

Protokoll

= Datum der Prüfung
2018
= Benötigte Lernzeit als Empfehlung
1-2 Wochen
= Verwendete Materialien (Bücher, Skripte etc...)
Folien
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Sehr angenehm
= Prüfungsfragen

Womit möchten Sie anfangen? --> Konsensus:
Was ist Konsensus?
Warum brauchen wir das? 
Warum haben wir das in 'Grundlagen der Programmierung' nicht gebraucht?
Fehlermodelle (fail-stop, byzantine) und Protokolle (Raft/Paxos, BGP) zuordnen.
BGP Voraussetzungen erklären. --> 3m +1 (m+2 mit Signaturen)
Raft erklären.
Commitment-Regeln. 
Leader-Wahl-Regeln.

LBFS:
Was ist das besondere? --> Übertragung geringerer Datenmengen, bei mehr Latenz
Wie funktioniert das mit den Hashfunktionen genau? --> Rabin-Fingerprint grob erklärt und was der Vorteil ist.

Konsistenz:
Perterson-Algorithmus wurde mir gegeben und ich sollte erklären, was dieser tut und ob er funktioniert.
Wir sind auf atomics zu sprechen gekommen.
Wie funktionieren diese? --> load-aquire- und store-release-Barrieren
Warum hilft es nicht jede Variable als atomic zu definieren? Kritische Sektion kann mehr als eine Anweisung umfassen!
Muss ich immer jede shared Variable als atomic definieren? --> nein siehe Bsp. in den Folien


= Note (Optional)
Ich bin zufrieden ;)
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
War alles sehr angenehm. Es wurden oft auch sehr tief gehende Fragen gestellt bzw. ich habe von mir aus viele Details angeboten.

Nr.PrüferFach
858 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Datei (Zugriff nur aus dem HU-Netz)

OSP-Klausur SOSE2018.pdf

Nr.PrüferFach
872 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Datei (Zugriff nur aus dem HU-Netz)

Pruefungsprotokoll20190221.pdf

Nr.PrüferFach
873 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

Datum der Prüfung: 
    21. Februar 2019
Verwendete Materialien:
    Folien der Übung, Folien der Vorlesung, Prüfungsprotokolle
"Atmosphäre" der Prüfung / Verhalten der Beisitzer:
   Sehr angenehm, entspannt. Zeit ist sehr großzügig bemessen

Prüfungsfragen:
1. (7 Punkte die *1,0 zählen)
Eine Funktion tr(n) implementieren die die n-te Tribonacci Zahl ausgibt.
tr(n)=tr(n-1)+tr(n-2)+tr(n-3) für n >= 3.
Bei Eingabe einer negativen Zahl soll das Programm abgebrochen werden.
Für n=0 ist das Ergebnis 0, Für n=1 und n=2 ist das Ergebnis 1.
a) rekursiv
b) iterativ, also mit einer Schleife


2.(3 Punkte die *2,33 zählen)
Eine Funktion schreiben, die drei boolean übergeben bekommt und falls zwei oder mehr davon "true" sind "true" zurückgibt. Ansonsten soll "false" zurück gegeben werden.


3. (6 Punkte die *1,67 zählen)
Gegeben waren drei kurze Toy Programme mit jeweils 5 Zeilen. Für alle drei Programme sollte entschieden werden ob 
a) das Proogramm endlos lange läuft
b) falls es nicht endlos lange läuft, was steht am Ende in Register 2

Alle drei Programme unterschieden sich nur durch 2 Zeilen.
erstes Programm: 
Zahl 11 wird in Register 1 geladen; Zahl 55 wird in Register 2 geladen; Register 2 bekommt das Ergebnis von Register 2 minus Register 1; Falls der Wert im Register 2 größer als 0 ist Sprung zur Subtraktion; halt
10: 7111
11: 7255
12: 2221
13: D212
14: halt
zweites Programm:
Zahl 11 wird in Register 1 geladen; mem[10] in R2 geladen; R2 bekommt R2 minus R1; Falls Wert in R2 größer als 0 Sprung zur Zeile in der zuerst etwas in Register 2 geladen wurde; halt
10: 7111
11: 8210
12: 2221
13: D211
14: halt
drittes Programm:
Zahl 11 wird in Register 1 geladen; mem indirekt [R[1]] in R2; R2 bekommt R2 minus R1; Falls Wert in R2 größer als 0 Sprung zur Subtraktion; halt
10: 7111
11: A2??
12: 2221
13: D212
14: halt


4. (10 Punkte die *1,0 zählen)
Zahlensysteme
a) 16 stetige Binärzahl in Hexazahl umwandeln 
b) 42662 (als Dezimalzahl) in eine Hexazahl umwandeln
c) -51 in 16Bit Zweierkomplement umwandeln
d) (9.0 * (19/3)) als Java Ausdruck


5. (14 Punkte die *0,93 zählen)
Klasse A
    string s
    foo(.....)
    bar(.....)

Klasse B extends A
    string s
    foo(......)

main
    B b = new B()
    A a = b
    .
    .
    .

Alles war auf Public gesetzt.
in der bar stand in etwa (foo() + s), in der foo ("A" + s) in der A Klasse und ("B" + s in der B Klasse), s wurde immer entweder auf "a" oder auf "b" gesetzt.
Gesucht waren die Ausgaben von 
a.foo
b.foo
a.bar
b.bar


6. (6 Punkte die *1,67 zählen)
Gegeben war ein kurzes Programm, das eine Zahl einlesen sollte, so viele Zeichenketten einlesen sollte und in umgekehrter Reihenfolge ausgeben sollte. Das Programm enthielt drei Fehler die korrigiert werden sollten
erstens: Das Programm kompiliert nicht, wieso? Korrektur angeben.
zweitens: Das Programm kompiliert jetzt aber stürzt ab, wieso? Korrektur angeben.
drittens: Das Programm kompiliert jetzt und stürzt nicht mehr ab, aber es wird nicht das richtige ausgegeben, wieso? Korrektur angeben.


7. (4 Punkte die *1,75 zählen)
Ausgabe angeben für ein Programm.
    .
    .
    .

point (x, y)
    this.x = x
    this.y = y

scale(int factor)
    x = factor * x
    y = factor * y

main
    p.point(-2, -1)
    q.point(42, 13)

    System.out.println(p)
    System.out.println(q)

    q = p

    p.scale
    q.scale

    System.out.println(p)
    System.out.println(q)

Nr.PrüferFach
888 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung :  2019 Nachklausur

Bemerkung : Hier gibt es nicht alle fragen, sondern nur 2 die ich gut erinnern konnte 

= Prüfungsfragen 

1) 

 public class Main {
    public static void main(String[] args) {
        A aa = new A(10);
        A ab = new B(100);
        A ac = new C(1000);
        System.out.println(aa.getY());
        System.out.println(ab.getY());
        System.out.println(ac.getY());

        B bb = new B(10);
        B bc = new C(100);
        System.out.println(bb.getY());
        System.out.println(bc.getY());

        C cc = new C(10);
        System.out.println(cc.getY());
    }
}



class Main {
    public static void main(String[] args) {
        int x = 2;
        int[] y = {2, 3, 4};
        String z = "5";
        f(x, y, z);
        z = z.replaceAll("5", "7");
        System.out.println(x);
        System.out.println(y[0]);
        System.out.println(z);
        z.replaceAll("7", "11");
        System.out.println(z);
    }

    public static void f(int x, int[] y, String z) {
        x = 1111;
        y[0] = 2222;
        y = new int[5];
        y[0] = 4444;
        z = "5555";
    }
} 


***** Antwort ist: 
2
2222
7
7
*****

2) Was ist in Java erlaubt und was ist nicht erlaubt? Was is das ergebis bei diejenigen, die erlaubt sind?

 boolean b = false;
        int i1 = 1 * (2) - (b ? 2 : 5 - 3 / 2);
        int i2 = (2 ** (2 + 4) | 3);
        int i3 = (2 - 2 > 0 ? 4 : 2) / 4;
        int i4 = 2 | 1 | 6 & 12;

        double f1 = 1 / .2 * 1. / 2;
        boolean b1 = true + false;
        boolean b2 = !!!true || !true;

        String s1, s2, s3;
        s1 = s2 = 4 + "";
        s3 = "4" += "2";



3) Zahlendarstellung frage genau wie in 2015 Prüfung gekommen ist. 

 Die nachfolgenden Werte sind Zahlen im 16-Bit-Zweierkomplement. Was ist das Ergebnis?

BEEF < 1
BEEF + 1
BEEF | 1
BEEF & 1
BEEF ^ 1
BEEF < FACE
FEED | FACE
FEED & FACE
FEED ^ FACE
FEED + FACE


Nr.PrüferFach
894 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
25.07.2019

= Benötigte Lernzeit als Empfehlung
4 Monate intensiv jeden Tag 8 std Netflix und eine halbe stunde Skript lesen. Also auch sehr gut in zwei Wochen zu schaffen.

= Verwendete Materialien (Bücher, Skripte etc...)
Little Book of Semaphores, Operating Systems Principles and Practices von Anderson und die guten Folien.

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
In der Ferne hat man ein verhaltenes Wimmern gehoert. Es hat den Ernst der Lage dramarturigsch unterstrichen. Aber Redlich ist natuerlich, wie immer, sehr freundlich.

= Prüfungsfragen
 1) [6]
	a) Was ist ein Micro-Kernel.
	b) Nenne einen Vorteil von Micro-Kernel gegenueber von Monolithischem Kernel.
	c) Nenne einen Nachteil von Micro-Kernel gegenueber con Monolithischem Kernel.
	d) Time-Sharing Single CPU hat geringere Laufzeit als sequentielle ausfuehrung. Warum?
	e) Wann ist Time-Sharing schlechter als sequentielle ausfuehrung.

 2) Scheduling [6]
Eine Single CPU mit 1GB phsischen Hauptspeicher und irgednwas mit Swap. Ein Prozess A mit 4GB working set und ein Prozess B mit einem 100MB working set. Es wird eine Multilevel Feedback Queue verwendet.

	a) Nach einiger Zeit wird geschaut welcher Prozess welche Prioritaet hat. Gebe an welche Prioritaet Prozess A und B haben (hoch = bevorzugt gescheduled)
	b) Es wird eine zweite CPU eingebaut. Aendert sich etwas?
	c) Es wird 8GB HS eingebaut. Aendert das etwas?

 3) Coffman Conditions [8]
	Nenne alle 4 Coffman Conditions beim Namen und erklaere, wie man jede einzelne nutzen kann, um 
	Deadlocks zu vermeiden.

 4) F-Barrier [5]
	Implementiere eine Art Barrier aber anstatt, das N Threads passieren muessen, sollen nur N-1 Thread
	passieren, bevor fbarrier() nicht mehr blockiert. Dazu waren einem Semaphore, Locks und Mutexe gestellt. Es gab drei Punkte Abzug, wenn
	mann Busy Waiting in seiner Implementierung verwendet hatte (also lieber keine Locks verwenden).

 5) Producer/Consumer [3]
	a) Was ist das Problem im Code.
	b) Korrigiere den Code.

 6) Virtual Memory [2]
	Es gibt Systeme die Segmentierung mit Paging verbinden. Macht es auch andersherum Sinn? Begruende.

 7) Linking [6]
	a) Vorteile von statischem Linken gegenueber dynamischen Linken
	b) Vorteile von dynamischen Linken gegenueber statischem Linken
	c) Wird das Working-Set kleiner, wenn dynamisches Linken verwendet wir?

 8) Page Fault Frequency [3] (exakt die gleiche aus wie im Jahr 2016)
	Zuerst wurde (sehr ausführlich) die Page Fault Frequency (PFF) erklärt (sogar mit dem Bild aus den Folien).

	Die CPU arbeitet mit 1000MIPS (Millionen Instruktionen pro Sekunde). Ein Festplatttenzugriff dauert 10ms. Wie groß darf die PFF maximal sein, damit das System nicht mehr als 4 mal so langsam wird?


 9) Filesystems (i-Node) [3]
	2kb Bloecke, 8byte Adressen, 10 direkte, 
	a) max Datei
	b) max Filesystem groeße

10) Filesystems (FAT) [4]
	a) min cluster groeße
			FAT16	FAT32
	   512GB
	     4TB
	b) FAT Groeße (bei platzoptimierter Speicherung)
			FAT16	FAT32
	   512GB
	     4TB

= Note (Optional)
1.0

= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Die Pruefung war ok. Gerne wieder.

Nr.PrüferFach
946 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung:
24.02.2021
= Benötigte Lernzeit als Empfehlung:
Mit Vorerfahrung nur 1-2 Tage
= Verwendete Materialien:
Vorlesunfsfolien
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Online-Prüfung, hab also nicht viel von ihm mitbekommen
= Prüfungsfragen
Es waren insgesamt 21 Fragen (mit Unterfragen), kann mich jedoch weder an Reihenfolge noch Punkte erinnern und bin mir auch sicher, dass ich bestimmt welche vergessen hab.

1. Implementieren sie die Tribonaccifunktion tri(k) rekursiv und iterativ mit tri(0)=0,tri(1)=1, tri(2)=1 und tri(k)=tri(k-1)+2*tri(k-2)+3*tri(k-3). Bei negativen Zahlen soll abgebrochen werden.

2. Der Folgende Code soll N Zeichenketten einlesen und in umgekehrter Reihenfolge wieder ausgeben.

import gdp.stdlib.*;

public class Test {
	public static void main(String[] args) {
		int N=Integer.parseInt(args[0]);
		String s;
		for(int i=1;i<N;i++) {
			s[i]=StdIn.readString();
		}
		for(int i=N;i>=0;i++) {
			System.out.println(s[i]);
		}
	}
}

Erst gibt es einen Compilerfehler. In welcher Zeile und wie wäre sie richtig?
Dann gibt es einen Laufzeitfehler. In welcher Zeile und wie wäre sie richtig?
Zuletzt macht das Programm das was es soll nicht richtig. An welcher Zeile liegt das und wie wäre sie richtig?

3. Zahlensysteme
    2021_7 in Dezimal
    -1575 in 14-Bit Zweierkomplement
    Ausgabe von System.out.println(12+5+"=="+12+5)
    Max und min Werte von int



4. Geben sie die Ausgabe von folgendem Programm an:



public class Test {

	public static void f(int x, int[] y, String z) {
	   x = 1111;
	   y[0] = 2222;
	   y = new int[5];
           y[0] = 4444;
           z = "5555";
	}
		
	public static void main(String[] args) {
		   	int x = 3;
		   	int[] y = { 2, 3, 4 };
		   	String z = "5";
		   	f(x, y, z);
		   	z = z.replaceAll("5", "8");
		   	System.out.println(x);         

		   	System.out.println(y[0]);      


		   	System.out.println(z);         


		 	z.replaceAll("8", "14");
		 	System.out.println(z);         
		

	}
}




5. Geben sie Ausgabe von folgendem Programm:

class A {
	public int x;
	public A(int a) { this.x = a; }
	public int getX() { return x; }
	public int getY() { return getX() + 2; }
}

class B extends A {
	public int x;
	public B(int b) { super(b); this.x = 2 * b; }
}

class C extends B {
	public C(int c) { super(c); }
	public int getX() { return 17; }
}

 public static void main(String[] args) {
        A aa = new A(100);
        A ab = new B(1000);
        A ac = new C(10000);
        System.out.println(aa.getY());
        System.out.println(ab.getY());
        System.out.println(ac.getY());

        B bb = new B(100);
        B bc = new C(1000);
        System.out.println(bb.getY());
        System.out.println(bc.getY());

        C cc = new C(100);
        System.out.println(cc.getY());
}


7. Programmtracing

public static int BS(int x, int[] a , int i, int j){
    int m=(i+j) /2;
    if(a[m]=x) return m;
    if(i>=j) return -1;
    if(a[m] > x) return BS(x,a,i,m);
    return BS(x,a,m+1,j);


public static void main(String[] args){ 
 N=Integer.parseINt(args[0]);
 a={ .... 59,65 ....}; //8 Zahlen. Ich weiß nur noch, dass 59 an Stelle 4 und 65 an Stelle 5 war
 System.out.println(BS(N,a,0,7));
}

Geben sie die Ausgabe von 59 und 60 und erklären was das Programm macht.


8. Rekursion
Es war ein Rekursives Bild von Quadraten gegeben und man sollte die Reihenfolge folgender Codezeilen angeben, damit das Bild rauskommt.(Ist natürlich witzlos ohne das Bild und Ich schreib nur Pseudocode)

public static void recur(int n, double x, double y, double size){
2      drawSquare(x,y,size);
3      recur(n-1, x +size /2, y + size/2 , size/2.2);
4      recur(n-1, x +size /2, y - size/2 , size/2.2);
5      recur(n-1, x -size /2, y + size/2 , size/2.2);
6      recur(n-1, x -size /2, y - size/2 , size/2.2);
7      if(n<=0)return;
}

Ich glaube die Richtige Reihenfolge war 734256 

9. Multiplikation mit 517 in TOY wie in 2015

10. sind folgende Ausdrücke immer wahr oder nicht immer. Wobei vorausgesetzt ist, dass immer mindestens zwei Variablen gleich sind:
a==b && a==c && b==c
a==b || a==c || b==c
(a-b) * (a-c) * (b-c) == 0

10. Eine Methode majority implementieren, die drei booleans als Parameter erhält und true zurückgibt, wenn zwei oder mehr wahr sind.

11. Die Begriffe public, static, void und String[] erklären und zeigen warum sie nötig sind. (Anhand der main-Methode).
       



= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)
Wir haben eine halbe Stunde extra bekommen und ich war trotzdem sehr kanpp fertig. Kann aber auch an meiner Trödelei liegen. Ansonsten sehr angenehme Klausur.

Nr.PrüferFach
952 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung 24.03.2021

= Benötigte Lernzeit als Empfehlung
  - Wenn alle Vorlesungen besucht wurden: 2 Wochen

= Verwendete Materialien (Bücher, Skripte etc...)
  - Vorlesungsfolien, Übungsfolien, Prüfungsprotokolle

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
  - Sehr locker

= Prüfungsfragen

1. Grundlagen:

- Stellen Sie die Dezimalzahl -1275 als 13-bit Binärzahl im Zweierkomplement dar.
- Stellen Sie die Zahl 1477 zur Basis 9 als Dezimalzahl dar.
- Stellen Sie Dezimalzahl 1525 zur Basis 12 dar.
- Welche Ausgabe erzeugt das folgende Programmfragment?
  System.out.println( 7 / 3 * 3 + "==" + 3 + 4);
- Welche ist die größte Zahl die man im 48-bit-Zweierkomplement repräsentieren kann? 
  2^48+1, 2^48, 2^47, 2^47-1
- Welche ist die kleinste Zahl die man im 48-bit-Zweierkomplement repräsentieren kann? 
 -2^48+1, -2^48, -2^47, -2^47-1


2. Binärdarstellungen:

Die Nachfolgenden Werte sind Zahlen im 16-bit-Zweierkomplement. Sie wurden im Hexadezimal notiert.

Sind folgende boolsche Ausdrücke true oder false?

- CAFE < 2
- F00D < 1D01

Was sind die Ergebnisse folgender Rechenoperationen?

- CAFE + 2
- CAFE | 2
- CAFE & 2
- CAFE ^ 2
- F00D | 1D01
- F00D & 1D01
- F00D ^ 1D01
- F00D + 1D01


3. Einfache Rekursion:

In der Vorlesung haben wir erfahren, dass man eine for-Schleife in eine Tail-
Rekursion umschreiben kann und zurück.
Für eine Liste vom typ

   class Node{
       int value;
       Node next;
   }

braucht Ihr noch eine Funktion, die die Anzahl der Elemente in der Liste
aufzählt. Würde man es als for-Schleife schreiben, würde die Funktion beispielsweise
so aussehen.

   public static int count(Node liste){
        int cnt=0;
        for(Node n=liste; n!=null; n=n.next){
            cnt++;
        }
        return cnt;
   }

Jedoch sind eure f und w Tasten defekt, daher dürft ihr weder for noch while
schreiben, if sei aber erlaubt.
Schreibt die Funktion als (Tail-)Rekursion auf, falls ihr if nicht verwendet
erhaltet ihr einen Zusatzpunkt.


4. Vererbung

Was ist die Ausgabe von der folgenden main-Methode Quizz?

class D {
public String s;
public D() { s= "d"; }
public String foo() { return "D" + s; }
public String bar() { return foo() + s; } 
}

class E extends D {
public String s;
public E() { s= "e"; }
public String foo() { return "E" + s; }   
}

public class Quizz {

public static void main(String[] args) {
E e = new E();
D d = e;
		 
System.out.println( d.foo() + d.s );
System.out.println( e.foo() + e.s );
System.out.println( d.bar() + d.s );
System.out.println( e.bar() + e.s );

}


5. Elementare Datentypen:

Was ist die Ausgabe von der folgenden main-Methode Quizz?

public class Referenz{

  public static void mystery(int x, int[] y, int[] z) {
	 x = x + 4;
	 y[0] = y[0] + 4;
	 z = y;
	 }
	
	
  public static void main(String[] args) {
	int xx = 14;
	 int[] yy = {11,16,29,37};
	 int[] zz = {7,22,27,42};
		  
	 mystery(xx,yy,zz);
		  
	 System.out.println(xx);    

	 System.out.println(yy[0]);     
	 System.out.println(zz[0]);    

		  
	 yy = zz;
	 mystery(xx,yy,zz);
		  
	 System.out.println(xx);         

	 System.out.println(yy[0]);      

	 System.out.println(zz[0]);

    }
}

6. Debugging:

Welche der Folgenden Fehlermitteilungen erhalten Sie, wenn Sie die folgenden Programme übersetzen und wie folgt auszuführen versuchen?

% javac Bugs.java
& java Bugs 1

Folgende Fehlermeldungen stehen zur Auswahl:

- Bugs.java: ';' expected
- Bugs.java: cannot resolve symbol
- Bugs.java: missing method body, or declare abstract
- Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
- Exception in thread "main" java.lang.NumberFormatException
- Exception in thread "main" java.lang.StackOverflowError
- Bugs.java: possible loss of precision 
- Bugs.java: ')' expected
- Bugs.java: missing return statement


1) public class Bugs{
        public class void main (String[] args) {
             a=5;
        }
   }

2) public class Bugs{
        public class void main (String[] args) {
            int a=4
            int b=5;
            int c=6
            System.out.println(c);
        }
   }

3) public class Bugs{
        public class void main (String[] args) {
            int a= Double.parseDouble(args[0]);
        }
   }

4) public class Bugs{
       
     public static void recur(int i) {
              recur(i-1);
     }

     public class void main (String[] args) {
              int a= Double.parseDouble(args[0]);
     }
   }

5) public class Bugs{
       
     public static String f() {
              String s = "";
              for(int i=0; i<3; i++{
                 s = s+"*";
              }
     }

     public class void main (String[] args) {
              String result = f();
     }
   }


7. Toy

Entscheiden Sie für den jeweiligen Code, der sich nur in Zeile 11 und 13 unterscheidet,
ob das Programm terminiert und geben sie falls ja den Wert aus Register
2 (R[2]) an. (Toy Referenzcard gegeben)


Toycode 1:
10: 7111 R[1] <- 0011
11: 7255 R[2] <- 0055
12: 2221 R[2] <- R[2] - R[1]
13: D212 if (R[2] > 0) goto 12
14: 0000 halt

Toycode 2:
10: 7111 R[1] <- 0011
11: 8210 R[2] <- mem(10)
12: 2221 R[2] <- R[2] - R[1]
13: D211 if (R[2] > 0) goto 11
14: 0000 halt

Toycode 3:
10: 7111 R[1] <- 0011
11: A201 R[2] <- mem(R[1])
12: 2221 R[2] < - R[2] - R[1]
13: D212 if(R[2] > 0) goto 12
14: 0000 halt

8. Grafische Rekursion:


Folgendes Programm war gegeben:

public class SquareArt {

 public static void fieldOfScreens(double x, double y, double radius, boolean fill, int level) {
 if (level == 0) {
 if (fill) StdDraw.filledSquare(x, y, radius);
   return;
  }
   else {
   double r = 0.5 * radius;
  fieldOfScreens(x - r, y - r, r, fill, level-1);
  fieldOfScreens(x - r, y + r, r, !fill, level-1);
   fieldOfScreens(x + r, y - r, r, !fill, level-1);
  fieldOfScreens(x + r, y + r, r, fill, level-1);
  }
 }
		    
   public static void main(String[] args) {
   int N = Integer.parseInt(args[0]);
   fieldOfScreens(0.5, 0.5, 0.5, true, N);
   }

} 

Es sollte entschieden werden welches Bild ausgegeben wird für N=0, N=1, N=2 und N=3.



9. Aufrufkonvention

Was ist die Ausgabe bei dem folgenden Programm?

public class Param {

	private char c;
	     
        public Param(char c) {this.c = c;}
	    
        public void print() {
	 char a = 'a';
	 char b = 'b';
	   
	 char c[] = {'c'};
	 char e[] = {'e'};
	    
	 Param g = new Param('g');
	 Param i = new Param('i');
	     
	 foo(a);
	 bar(b);
	 foo(c); 
	 bar(e);
	 foo(g); 
	 bar(i);
	       
	 System.out.println("" + a + b + c[0] + e[0] + g + i);
	     }
	     
	public void foo(char p)   {p = 'k';}
	public void foo(char p[]) {p = new char[] {'q'};}
	public void foo(Param p)  {p.c = 'u'; }
	     
	public void bar(char p)   {p = new Param('o').c;}
	public void bar(char p[]) { p[0] = new Param('r').c;}
	public void bar(Param p)  {p = new Param('v');}
	     
	public String toString() { return "" + c;}
	     
	public static void main(String s[]) {
	       new Param('z').print();
	 }

} 

Note: Das Programm lässt sich übersetzen und ausführen


10: Minimum

Implementieren Sie die folgenden zwei Funktionen:

static int min2(int a, int b)
static int min6(int a, int b, int c, int d, int e, int f)

Die Funktionen sollen jeweils das kleinste ihrer Argumente als Ergebnis zurückliefern.
Es dürfen keine Bibliothesfunktionen verwendet werden. Für jede Anwendung einer gewöhnlichen ("if) oder arithmetischen (?:") Kontrollstruktur werden Ihnen drei Punkte abgezogen (Maximal 9 Punkte sind zu erreichen).
Ansonsten dürfen alle anderen Anweisungen benutzt werden, einschließlich Aufrufe von min2() und min6().


11: Programmausführung

Der Binomialkoeffizient C(int N, int k) gibt an wie viele verschiedene Arten man aus einer Menge von N Elementen eine Teilmenge mit k Elementen auswählen kann. Er kann wie folgt rekursiv berechnet werden:

public static int C(int N, int k) {
   if (k==0) return 1;
   if (N==0) return 0;
   return C(N-1, k) + C(N-1, k-1);
}

1) Welches Ergebnis liefert der Aufruf C(6,2)

2) Für die Berechnung von C(36,18) braucht ein herkömmlicher Pc über 15 Minuten. Des Weiteren liefert dieser Aufruf ein falsches Ergebnis, nämlich 485.200.700 anstatt 9.075.135.300. Erklären sie diese beiden Phänomene.






= Note (Optional)
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)

  - Eine sehr faire Klausur die mit genügend Vorbereitung gut zu bestehen war.
    Einzig und alleine die Aufgabe 6 hat mir Kopfzerbrechen bereitet, da ich selber nicht mit 
    Linux arbeite und daher andere Fehlermeldungen gewöhnt bin.

Nr.PrüferFach
983 Redlich, Jens-Peter, Prof. Grundlagen moderner Betriebssysteme

Protokoll

= Datum der Prüfung
19.07.2022

= Benötigte Lernzeit als Empfehlung
1 Woche

= Verwendete Materialien (Bücher, Skripte etc...)
Folien

= "Atmosphäre" der Prüfung / Verhalten der Beisitzer
Angenehm , Redlich geht die Klausur vor Beginn einmal durch

= Prüfungsfragen
Aufgabe 1)    [2+2 Punkte]

a) Intel SSE Register für Multimedia gesichert in PCB bei Context Switch? Begründung

b) I/O Register gesichert in PCB bei Context Switch? Begründung

Aufgabe 2)   [3]
3 Segmente eines Unix Prozesses angeben und ankreuzen, ob sie bei fork() kopiert werden

Aufgabe 3)   [5]
Vorteil und Nachteil nennen von:
- FCFS
- Round Robin
- SJF
- Multilevel Feedback Queue
- Lottery 

Aufgabe 4)    [6]
Auf einer Kreuzung können von allen vier Seiten Autos ankommen. Um Kollisionen zu vermeiden, soll vor Befahren der Kreuzung von jedem Fahrer eine Funktion auf einem zentralen Rechner ausgeführt werden. Erst wenn diese zurückkehrt, darf die Kreuzung befahren werden. Selbiges für das Verlassen der Kreuzung.
Die Aufgabe bestand darin, die Funktionen hinauffahren(int fahrbanabschnitt) und herunterfahren(int fahrbahnabschnitt) in Pseudocode zu implementieren, wobei Locks gegeben waren. Dabei waren folgende Bedingungen zu beachten:
- Wenn ein Auto fahren kann, soll es auch fahren
- Es sollen keine Kollisionen vorkommen
- Es sollen keine Deadlocks entstehen.
- Auto 1 und 3 müssen immer links abbiegen 
- Auto 0 und 2 fahren geradeaus

Aufgabe 5)   [3]
Gegeben die Implementierung eines Buffers (genau das gleiche Bild wie in der Vorlesung):

char buf[];
int head = 0, tail = 0;
sem cnt = 0;

void put(char c)
   buf[head++] = c;
   V(cnt);

char get(void)
   P(cnt);
   c = buf(tail++);
   return c;

a) Was ist mit dem obigen Code nicht in Ordnung?
b) Korrigieren Sie den Code!

Aufgabe 6)   [6]
Programmierung eines Semaphors mittels vorgegebenen Mutex

Aufgabe 7)   [2+3]
a) Gegeben war eine 32-Bit Architektur, 9 Bit für die erste Pagetable und 11 Bit für die zweite Pagetable und das Offset.
- Wie viele Pagetable gibt es?
- Wie groß ist eine solche Page?
b) Gegeben waren 32 Bit für virtuelle und physische Adressen, 256 MB Ram, 8KB große Pages, 1 Programm, welchen 4MB Daten hatte, die ab Stelle 0 im virtuellen Speicher liegen und 1MB Stack welche in den Letzten virtuelle Adressen liegt.
- Wie viele Pageeinträge sind für dieses Programm bei einer einstufigen Pagetable nötig?
- Wie viele Pageeinträge sind für dieses Programm bei einer zweistufigen Pagetable nötig?
- Wie viele Pageeinträge sind für dieses Programm bei einer invertierten Pagetable nötig?

Aufgabe 8)   [3]
Auf einem Unix-System mit einer Multilevel Feedback Queue tritt Thrashing auf. Gesucht waren die möglichen Ursachen.
a) Ist der Verursacher ein Prozess mit hoher oder mit niedriger Priorität? Begründung!
b) Welche Eigenschaft des Prozesses könnte die Ursache sein?
c) Welche Eigenschaft des Gesamtsystems könnte die Ursache sein?

Aufgabe 9)   [2]
Es gibt 40 Zylinder, die Seektime pro Zylinder beträgt 6ms, 2 aufeinander folgende Blöcke liegen im nicht optimierten Fall 13 Zylinder voneinander entfernt, im optimierten Fall liegen sie nur 2 Zylinder voneinander entfernt.
Zu berechnen war die Zeit für 100 Blöcke mit einer Umdrehungszeit von 100ms und einer Transferzeit von 25ms.
a) Für nicht optimierten Fall
b) Für optimierten Fall

Aufgabe 10)  [2]
Gegeben ein Unix-Dateisystem, das wie folgt aussieht:
Die ersten 10 Einträge einer inode sind direkt, es gibt 1 indirekten Eintrag, 1 zweifach-indirekte Einträge.
Blöcke sind 1KB groß, Adressen sind 4 Byte groß.

Aufgabe 11)   [3]
Festplatten mit 1 GB
a)	Berechne minimale Clustergröße für FAT10
b)	Berechne die Größe der FAT für FAT10
c)      Berechne größte Datei, wenn die Cluster 1KB groß sind

= Note (Optional)
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...)

Nr.PrüferFach
998 Redlich, Jens-Peter, Prof. Grundlagen der Programmierung

Protokoll

= Datum der Prüfung: 16.02.23
= Benötigte Lernzeit als Empfehlung: Keine Erfahrung: 2-3 Wochen, Viel Erfahrung: 1-3 Tage
= Verwendete Materialien (Bücher, Skripte etc...): Toy-Reference-Card
= "Atmosphäre" der Prüfung / Verhalten der Beisitzer: Angenehm
= Prüfungsfragen (nicht unbedingt diese Reihenfolge), insgesamt 9:



Aufgabe Bugs:
Welche Fehlermeldung erhält man, wenn man nacheinander in der Konsole "javac Test.java" und "java Test 5.0" ausführt:

Mögliche Fehlermeldungen:
- Test.java:n: error: non-static method cannot be referenced from a static   context
- Test.java:n: error: ';' expected
- Exception in thread "main" java.lang.NullPointerException
- Test.java:n: error: cannot resolve symbol
- Test.java:n: error: missing return statement
- Exception in thread "main" java.lang.StackOverflowError
- Test.java:n: error: missing method body, or declare abstract
- Test.java:n: error: incompatible types: possible lossy conversion

a)
public class Test{
  public static void main(String[] args){
    int a = Double.parseDouble(args[0]);
  }
}

b)
public class Test{
  public static void main(String[] args){
    a = 3;
    System.out.println(a);
  }
}

c)
public class Test{
  public static void main(String[] args){
    String s = f(8);
  }
  public static String f(int n){
    String s = "";
    for(int i = 0; i < n; i++){
      s += "*";
    }
  }
}

d)
public class Test{
  public static void main(String[] args){
    System.out.println(rec(3));
  }
  public static int rec(int i){
    return rec(i-1);
  }
}

e)
public class Test{
  public static void main(String[] args){
    int a = 12
    int b = 2;
    int c = 20;
    System.out.println(c);
  }
}




Aufgabe Toy: Was steht nach Ausführung des Programms in den Speicherzellen 00, 01, 02? (a) und b) unterscheiden sich nur in Zelle 02)
00: 2059
01: 35C3
02: 0000 (a)/ 000B (b)

10: 8A00
11: 8B01
12: 8C02
13: CC16
14: 9B00
15: C017
16: 9A01
17: 0000




Aufgabe Stern: 
a) Was gibt mystical(3) aus?
b) Was gibt mystical(4) aus?
c) Was gibt mystical(-1) aus?
   []  es passiert nichts
   []  es werden unendlich viele * Ausgegeben
   []  es geht in eine Endlosschleife und nichts wird ausgegben
   []  es wird eine Leerzeile ausgegeben und es gibt einen Stackoverflow
   []  es wird genau ein * ausgegeben
   []  Die Lösung ist oben nicht angegeben
   (eventuell noch weitere Möglichkeiten)

public class Stern{
  public static void stern(int N){
    for(int i = 0; i < N, i++)
      System.out.print("*");
    System.out.println();
  }

  public static void mystic(int N){
    if(N == 0) return;
    stern(N);
    mystic(N-1);
    stern(N);
  }
}




Aufgabe 5: Was gibt folgendes Program aus?
public class a5 {
    public static void f(int x, int[] y, String z) {
        x = 1111;
        y[0] = 2222;
        y = new int[5];
        y[0] = 4444;
        z = "5555";
    }

    public static void main(String[] args) {
        int x = 1;
        int[] y = { 2, 3, 4 };
        String z = "5";
        f(x, y, z);
        z = z.replaceAll("5", "6");
        System.out.println(x);
        System.out.println(y[0]);
        System.out.println(z);
        z.replaceAll("6", "12");
        System.out.println(z);
    }

}




Aufgabe Quizz: Was gibt folgendes Program aus?
class B {
    public String s;

    public B() {
        s = "b";
    }

    public String foo() {
        return "B" + s;
    }

    public String bar() {
        return foo() + s;
    }

}

class C extends B {
    public String s;

    public C() {
        s = "c";
    }

    public String foo() {
        return "C" + s;
    }

}

public class Quizz {

    public static void main(String[] args) {
        C c = new C();
        B b = c;

        System.out.println(b.foo() + b.s);
        System.out.println(c.foo() + c.s);
        System.out.println(b.bar() + b.s);
        System.out.println(c.bar() + c.s);
    }

}




Aufgabe Inheritance : Was gibt folgendes Program aus?
class A {
    public int x;

    public A(int a) {
        this.x = a;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return this.getX() + 2;
    }
}

class B extends A {
    public int x;

    public B(int b) {
        super(b);
        this.x = 2 * b;
    }
}

class C extends B {
    public C(int c) {
        super(c);
    }

    public int getX() {
        return 18;
    }
}

public class Inheritance {
    public static void main(String[] args) {
        A aa = new A(10);
        A ab = new B(100);
        A ac = new C(1000);
        System.out.println(aa.getY());
        System.out.println(ab.getY());
        System.out.println(ac.getY());

        B bb = new B(10);
        B bc = new C(100);
        System.out.println(bb.getY());
        System.out.println(bc.getY());

        C cc = new C(10);
        System.out.println(cc.getY());
    }
}




Aufgabe Umrechnen:
a) 1738 Dezimal in Hexadezimal 

b) -1738 Dezimal in 16 Bit Zweierkomplement

c) 110010101110_2 und 100111110_2 addieren und das Ergebnis im Heptalsystem angeben

d) Ausgabe von: "Die Summe ist: " + 5 + 33 / 9

e) Ankreuzen was die größte und kleinste Zahl in Java im 32 Bit Zweierkomplement ist

Größte: 2^(32)     2^(31)     2^(32)-1     2^(31)-1     2^(32)+1     2^(31)+1

Kleinste: -2^(32)     -2^(31)     -2^(32)-1     -2^(31)-1     -2^(32)+1     -2^(31)+1




Aufgabe Binomialkoeffizient:
Der Binomialkoeffizient C(int N, int k) gibt an wie viele verschiedene Arten man aus einer Menge von N Elementen eine Teilmenge mit k Elementen auswählen kann. Er kann wie folgt rekursiv berechnet werden:

public static int C(int N, int k) {
   if (k==0) return 1;
   if (N==0) return 0;
   return C(N-1, k) + C(N-1, k-1);
}

1) Welches Ergebnis liefert der Aufruf C(4,2)

2) Für die Berechnung von C(36,18) braucht ein herkömmlicher Pc über 15 Minuten. Des Weiteren liefert dieser Aufruf ein falsches Ergebnis, nämlich 485.200.700 anstatt 9.075.135.300. Erklären sie diese beiden Phänomene.




Aufgabe Tribonacci: 
Die tribonacci Reihe ist folgendermaßen rekursiv definiert: trib(n) = trib(n-1) + trib(n-2) + trib(n-3), 
wobei trib(0) = 0, trib(1) = 1, trib(2)=1. Implementiere eine Funktion trib(int n) 
  a) rekursiv, 
  b) iterativ, also mit einer Schleife, 
welche die n-te Tribonacci Zahl berechnet. Bei negativen Zahlen soll das Programm abgebrochen werden.



= Note (Optional) 1.0
= Fazit (Gute/schlechte Prüfung , angemessene Benotung etc...) War denke ich eine ganz faire Prüfung, aber es gab einen Fehler bei der Benotung.... Die Einsicht kann ich jedem empfehlen