Erstmal zu deiner Frage, was Exception 5 ist: Das könntest du ganz leicht selber herausfinden. Wie alles fürs OS-Dev wesentliche steht das im Intel-Manual Volume 3, und zwar logischerweise im Kapitel über Interrupts und Exceptions. Dort findest du dann: "Interrupt 5—BOUND Range Exceeded Exception (#BR)". Ich gehe nicht davon aus, dass dein Code absichtlich BOUND benutzt, von daher ist entweder deine Ausgabe falsch (nimm qemu -d int zum prüfen, wenn du das nicht schon hast) oder du führst etwas aus, was du nicht ausführen willst.
Ich weiß nicht genau, was du mit der Speicherverwaltung schon machst, aber der normale Ansatz wäre, alle Aufrufe in die Speicherverwaltung nach und nach auszukommentieren, um zu sehen, welcher das Problem erzeugt, und dann mit vielen kprintfs zu versuchen, herauszufinden, wo der Kernel etwas anderes macht als du denkst.
Eine Option könnte sein, dass der PMM eigentlich belegte Adressen herausgibt, so dass du z.B. deinen Kernelcode überschreibst, wenn du den Speicher benutzt. Wenn du dir alle Adressen ausgeben lässt, die er für Allokationen benutzt, solltest du sowas recht schnell sehen. Das gilt natürlich nur, wenn die erste Allokation das Problem auslöst. Wenn schon die Initialisierung reicht, damit Dinge kaputtgehen, könnte vielleicht der Code, der versucht, die Bitmap zu platzieren, schuld sein. Auch da einfach wieder Adressen ausgeben lassen und schauen, ob das das ist, was du erwartest.