From 3023e868b65e993779b8d37e8786d5a352d4d94f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20Wei=C3=9F=20=28Poohl=29?= <45500341+Poohl@users.noreply.github.com> Date: Sat, 29 Jan 2022 16:00:39 +0100 Subject: [PATCH] U6 Ready for submission --- boards/portux/drivers/mmu.c | 8 +++++--- theory/Aufgabe_6-1.md | 5 +++++ 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 theory/Aufgabe_6-1.md diff --git a/boards/portux/drivers/mmu.c b/boards/portux/drivers/mmu.c index 245bb6c..00b19be 100644 --- a/boards/portux/drivers/mmu.c +++ b/boards/portux/drivers/mmu.c @@ -6,7 +6,8 @@ static first_level_pagetable l1table; void init_first_level_pagetable() { - // 1:1 mapping for all memories with priv-only access and domain 0 + // all initiallization applies to domain 0 + // 1:1 mapping for all memories with priv-only access for (uint i = 0; i < 4096; ++i) { l1table.desc[i] = (i << 20) | (AP_RW_NONE << 10) | 0b10; } @@ -15,18 +16,19 @@ void init_first_level_pagetable() { l1table.desc[i] = (AP_NONE_NONE << 10) | 0b10; for (uint i = (UNDEF_MEMORY2 >> 20); i < 249; ++i) l1table.desc[i] = (AP_NONE_NONE << 10) | 0b10; - + // make userland acessible by users uint userland_desc = EXTERNAL_SRAM >> 20; l1table.desc[userland_desc] = (userland_desc << 20) | (AP_RW_R << 10) | 0b10; for (uint i = 0; i < 63; ++i) { l1table.desc[userland_desc + 1 + i] |= (AP_RW_RW << 10); } + // modify the mapping to switch 1MB of sram with 1MB of undef memory l1table.desc[(EXTERNAL_SRAM + 17*MEGABYTE) >> 20] = (UNDEF_MEMORY1) | (AP_RW_RW << 10) | 0b10; l1table.desc[(UNDEF_MEMORY1) >> 20] = (EXTERNAL_SRAM + 17*MEGABYTE) | (AP_RW_RW << 10) | 0b10; } void init_mmu() { - asm volatile( // set domain 0 as manager + asm volatile( // program to be domain 0 client "mov r0, #0x1\n" "mcr p15, 0, r0, c3, c0, 0" : : : "memory"); diff --git a/theory/Aufgabe_6-1.md b/theory/Aufgabe_6-1.md new file mode 100644 index 0000000..dad395e --- /dev/null +++ b/theory/Aufgabe_6-1.md @@ -0,0 +1,5 @@ +# Auswahlstrategien + +Alle Ansätze haben im worst case bei Verwendung einer linked list von freien Speichersegmenten eine Laufzeit von O(n), da alle freien Stücke auf "fit" überprüft werden müssen. Im average case hat Best-fit (fast) immer eine Laufzeit von O(n) da man sich erst nach Überprüfung aller Optionen sicher sein kann die beste gefunden zu haben. Sowohl Next- als auch First-fit finden im bei Erfolg vor Überprüfung aller Optionen ein passendes Speichersegment, jedoch muss First-fit Erfahrungsgemäß mehr kleine Stücke zu Beginn überprüfen, da es dazu tendiert alle Anfragten an den Anfang des Speicherbereichtrs zu allokieren und dabei viele kleine unbrauchbare Fragmente zu erzeugen. + +Die Laufzeit von Best-Fit lässt sich auf O(log n) durch die Verwendung eines nach Speichergröße sortierten Binärbaumes reduzieren. -- GitLab