-
Notifications
You must be signed in to change notification settings - Fork 10
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.
-
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)
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) |