Skip to content

MMU (Memory Management Unit)

Cupertino Miranda edited this page Nov 18, 2020 · 1 revision

MMU (Memory Management Unit) was implemented to allow Linux booting. Any other features not really used by the Linux kernel were not extensively tested or are not implemented.

MMU features Qemu implementation support

  • Software managed

    • Page Table walking, TLB entry loading (supported)
    • Marking of valid pages - (supported)
    • TLB entry removal - (supported)
  • Variable Page Size - (parametric at QEmu compile time) (fixed to 13 bits = 8k page size)

  • Hardware suggested replacement policy

    • The software can either rely on the hardware to supply a location for new entries, or use its own algorithm (supported with Write or Insert command, respectively)
  • MMU Commands implemented:

    • TLBInsertEntry, TLBDeleteEntry, TLBWrite, TLBRead (tested and working) Associate TLB entries with libraries (not used in Linux)
  • Unified address space for instructions and data

  • Common address space for kernel and user modes

    • Independent user and kernel permissions for read, write and execute. (supported)
  • Eight-bit address space identifier (ASID) (supported & tested)

  • Configurable physical address extension

    • Four GB physical addresses address space (32-bit physical address) - (supported & tested)
    • One TB physical addresses address space (40-bit physical address) - (untested)
    • Virtual address remains 32 bits
  • Shared Library ASID option

    • Supports 64 shared pages of any available size (implemented but not tested)
  • Separate read/write/execute flags for user and kernel modes (supported and tested)

MMU Aux registers

AUX Register Comments
TLBINDEX Input / Output for MMU commands
TLBPD0 Input / Output for MMU commands
TLBPD1 Input / Output for MMU commands
TLBPD1_HI Input / Output, used for 40bit addressable space
SCRATCH_DATA0 Used by the kernel to ...
TLBCOMMAND When SR writes this address, MMU logic gets triggered inserting / deleting or probing TLB entries.
PID Associate TLB entries with processes
SASID0 Associate TLB entries with libraries (not used in Linux) (implemented, but not tested)
SASID1 Associate TLB entries with libraries (not used in Linux) (implemented, but not tested)
Clone this wiki locally