BS Übung 06 (Stefan Bosse) [15.12.2025]
Gruppe und Namen der Mitglieder
Punkte:Total/21./22./23./24./25./26./2

Basekernel OS (Praktische Übung)

Ziele dieser Übung sind:

  1. Verständnis der Speicherverwaltung in Betriebssystemen
  2. In dieser Übung soll der Kernel des Basekernel OS näher untersucht werden und einige Änderungen an der Kernel Shell vorgenommen werden.

Ausgabe : 15.12.2025

Abgabe : 10.1.2026

Speichermanagement

Folgende Dateien im basekernel Verzeichnis sollen untersucht werden:

  1. kernel/kmalloc.c und kernel/kmalloc.h
  2. library/malloc.c und library/malloc.h

Aufgabe 1. Was sind die wesentlichen Unterschiede bei der Speicherverwaltung im Kernel (vor allem kmalloc und kfree) zu der Userspace Implementierung? Vergleiche Datenstrukturen und Algorithmen. Die Userspace Implementierung beinhaltet viele Informationen und weiterführende Links, die oberflächlich gelesen werden sollten. Welche Belegungsalgorithmus wird jeweils verwendet? Wie sehen die Datenstrukuren aus (d.h. welche Klasse, Liste, Baum, Tabelle usw.)?


Kernel Debugging

Folgende Dateien im basekernel Verzeichnis werden betrachtet:

  1. kernel/main.c
  2. kernel/kshell.c
  3. kernel/kmalloc.c

Jetzt geht es in den Kernel. Die Zugriff über die VM86 Oberfläche via serielle Schnittstelle wird derzeit nicht benutzt (d.h. // #define KSHELL_SERIAL muss undefiniert bleiben).

Die Datenstruktur von kmalloc ist eine verkettete Liste:

struct kmalloc_chunk {
	int state;
	int length;
	struct kmalloc_chunk *next;
	struct kmalloc_chunk *prev;
};

Aufgabe 2. Die Struktur implementiert?


Der Status (state) ist einer von den beiden folgenden Werten:

#define KMALLOC_STATE_FREE 0xa1a1a1a1
#define KMALLOC_STATE_USED 0xbfbfbfbf

Aufgabe 3. Warum werden für den Status eines Blocks folgende seltsamen Werte verwendet?


Aufgabe 4. Ist im Kernel Speichereallokation möglich und welche Funktion wird dafür benötigt und wartum?


Aufgabe 5. In der kernel/kmalloc.c und kernel/kmalloc.h soll der Kopf der obigen Liste global gemacht werden. Da die Variable head benannt ist sollte man diese konsistent in kmalloc_head umbennen. Teste die Veränderung so dass der Kernel noch funktioniert. Desweiteren muss die Datenstruktur kmalloc_chunk in den Header verschoben werden.


Hier die globale Definition (kmalloc.c) und Deklaration (kmalloc.h) eintragen

 ▸ 
 ℙ 
[]
 ✗ 
 ≡ 

ZXh0ZXJuIDxiPnN0cnVjdDwvYj4ga21hbGxvY19jaHVuayAqa21hbGxvY19oZWFkOyAvLzxpPiBIPC9pPgoKPGI+c3RydWN0PC9iPiBrbWFsbG9jX2NodW5rICprbWFsbG9jX2hlYWQgPSAwOyAgICAvLzxpPiBDPC9pPgo=

Aufgabe 6. Jetzt soll der kshell_execute (kshell.c) Funktion ein weiteres Kommando hinzugefügt werden: memstats. Dieses soll die Belegung anhand der verketteten Blockliste des Speichers ausgeben. Dabei soll die Liste als Tabelle ausgegeben werden (Addresse des Datenbereichs, Status, Länge). Teste die Funktion 1. Nach dem Kernelstart, 2. nachdem via kshell und automount das Dateisystem eingeunden wurde, und 3. nachdem run bin/shell.exe ausgeführt wurde. Notiere grob die Ausgabe.


Hier die Erweiterung von kshell_execute eintragen.

 ▸ 
 ℙ 
[]
 ✗ 
 ≡ 

dm9pZCBrbWFsbG9jX3N0YXRzKCkgewogIDxiPnN0cnVjdDwvYj4ga21hbGxvY19jaHVuayAqYz1rbWFsbG9jX2hlYWQ7CiAgcHJpbnRmKCI9PT09PT0gS01BTExPQyA9PT09PT1cbiIpOwogIHByaW50ZigiJXMgJXMgJXNcbiIsIlNUQVQiLCJBRERSRVNTICIsIkxFTkdUSCIpOwogIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKCTxiPmZvcjwvYj4oYyA9IGttYWxsb2NfaGVhZDsgYzsgYyA9IGMtJmd0O25leHQpIHsKICAgIHByaW50ZigiJXMgJXggJWRcbiIsYy0mZ3Q7c3RhdGU9PUtNQUxMT0NfU1RBVEVfRlJFRT8iRlJFRSI6IlVTRUQiLGMrMSxjLSZndDtsZW5ndGgpOwoJfQogIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKfQoKa3NoZWxsX2V4ZWN1dGUgLi4uCjxiPmlmPC9iPighc3RyY21wKGNtZCwgInN0YXJ0IikpIHsKfSAuLi4uCi8qCiAgRXh0ZW5zaW9uIG9mIHRoZSBrc2hlbGwgaW50ZXJwcmV0ZXIKKi8KLi4uLgp9IDxiPmVsc2U8L2I+IDxiPmlmPC9iPighc3RyY21wKGNtZCwibWVtc3RhdHMiKSkgewogICBrbWFsbG9jX3N0YXRzKCk7Cn0gCTxiPmVsc2U8L2I+IHsKICAgcHJpbnRmKCIlczogY29tbWFuZCBub3QgZm91bmRcbiIsIGFyZ3ZbMF0pOwp9Cg==



Hilfe



Created by the NoteBook Compiler Ver. 1.41.3 (c) Dr. Stefan Bosse (Mon Dec 15 2025 16:26:01 GMT+0100 (Central European Standard Time))