BS Übung 03 (Stefan Bosse) [18.11.2024] |
Punkte: | Total | /2 | 1. | /2 | 2. | /2 | 3. | /2 | 4. | /2 |
Aufgabe 1. Was charakterisiert Mikrokernelbetriebssysteme?
Aufgabe 2. Nenne jeweils drei komplementäre Vorteile-Nachteile die Mikro- von monolitischen Kernelbetriebssystemen unterscheiden (+: Vorteil, -:Nachteil, jeweils gegenseitig, nur + nennen, also z.b Mikro + lustig bedeutet Mono - traurig/nicht lustig).
Es gibt folgende Struktur:
Aufgabe. Wechsle in das kernel Quellcode Verzeichnis. Suche nach (C) Dateien die die goto
Anweisung enthalten. Benutzte dazu z.B. grep
. Öffne diese Dateien mit einem Texteditor. Frage: Wie wird dort goto
verwendet? Gibt es Vorwärts-, Rücwärts- oder gar Interfunktionssprünge? Wo befinden sich die Labels? Wofür wird also goto
dort meistens verwendet?
In dieser Übung wird ein eingebauter C-JS Transpiler verwendet. Die Ausführung der einzelnen Aufgaben wird unabhängig in einem eigen Kontext ausgeführt. jede teilaufgabe benötigt eine main Funktion! Es gibt nur eine C Stdlib Header Datei: clib.h. Diese muss immer eingebunden werden.
Aufgabe. Es soll eine swap(int *a,int *b)
Funktion für zwei Ganzzahl Variablen und eine zyklische Rotationsfunktion rot(int *a,int *b, int *c,char dir)
für drei Variablen mit Zeigerreferenzen programmiert werden. Dabei bedeutet dir='L'
eine Linksrotation, d.h. (a:=b,b:=c,c:=a), und dir='R'
eine Rechtsrotation (a:=c,b:=a,c:=b). Da weder Vertauschung noch Rotation sequenziell direkt mit den Variablen ausgeführt werden können müssen gengend aber nur maximal erforderlich temporäre Variablen verwendet werden. Teste für die Werte (a=1,b=2,c=3).
▸
ℙ
[] |
✗
≡
|
I2luY2x1ZGUgImNsaWIuaCIKdm9pZCBzd2FwKGludCAqYSxpbnQgKmIpIHsKICBpbnQgdDsKICB0PSphOyAqYT0qYjsgKmI9dDsKICByZXR1cm47Cn0Kdm9pZCByb3QoaW50ICphLGludCAqYiwgaW50ICpjLGNoYXIgZGlyKSB7CiAgaW50IHUsdjsKICBzd2l0Y2ggKGRpcikgewogICAgY2FzZSAnTCc6CiAgICAgIHU9KmM7dj0qYTsKICAgICAgKmE9KmI7KmI9dTsqYz12OwogICAgICBicmVhazsKICAgIGNhc2UgJ1InOgogICAgICB1PSphO3Y9KmI7CiAgICAgICphPSpjOypiPXU7KmM9djsKICAgICAgYnJlYWs7CiAgfQp9CgppbnQgbWFpbigpIHsKICBpbnQgYT0xLGI9MixjPTM7CiAgc3dhcCgmYSwmYik7CiAgcm90KCZhLCZiLCZjLCdMJyk7CiAgcHJpbnRmKCJhPSVkIGI9JWQgYz0lZFxuIixhLGIsYyk7Cn0=
Aufgabe. Führe jetzt die drei Variablen a,b, und c als Zeiger ein und reserviere mit malloc genügend Speicher (auf dem Heap), führe obige Operationen noch einmal mit den Zeigern durch, gebe Ergebniss aus, gebe den Speicher wieder frei.
▸
ℙ
[] |
✗
≡
|
aW50IG1haW4oKSB7CiAgaW50ICpwYSwqcGIsKnBjOwogIHBhPShpbnQqKW1hbGxvYyhzaXplb2YoaW50KSk7CiAgcGI9KGludCopbWFsbG9jKHNpemVvZihpbnQpKTsKICBwYz0oaW50KiltYWxsb2Moc2l6ZW9mKGludCkpOwogICpwYT0xOyAqcGI9MjsgKnBjPTM7CiAgc3dhcChwYSxwYik7CiAgcm90KHBhLHBiLHBjLCdMJyk7CiAgcHJpbnRmKCJhPSVkIGI9JWQgYz0lZFxuIiwqcGEsKnBiLCpwYyk7CiAgZnJlZShwYSk7IGZyZWUocGIpOyBmcmVlKHBjKTsKfQ==