Memory Management Device Drivers

Memory Management Device Drivers

1.3. MINOS KERNEL 79 System Startup RPI (2) VC / firmware OS Initializer (we!) • Initialize hardware • Set stack registers for all processor modes • Copy boot image to RAM • Setup free heap list and module list • Jump to OS boot image (Initializer) • Initialize MMU & page table • Setup interrupt handlers & runtime vectors • Start timer & enable interrupts • Initialize other runtime data structures • Initialize UARTs • Initialize RAM disk • Enter scheduling loop on OS 80 Modular Kernel Structure The Big Picture Minos Command Interpreter and Scheduler Modules Dynamic Linker: "imports" Module Loader File I/O Kernel Logging etc. System Kernel Runtime floating point emulation, memory allocation … Memory Management Device Drivers 81 Modular Kernel Structure Minos Modules in More Detail OS User Interface Minos Command Interpreter and Module Scheduler Loader Modules Dynamic Linker: Module Loader File System I/O RamVolumes SerialLog Uart API abstract block device & concrete FS methods OFS Devices abstract character Tools device floating Tools Kernel Runtime point emulation Strings Log Kernel FPE Heaps memory UartMin Platform allocation 82 unit Kernel Module . MODULE Kernel; Platform IMPORT SYSTEM, Platform; FPE64 TYPE … ARMRuntime (* types of runtime data structure *) Heaps VAR … UartMin (* global runtime data structures *) Kernel PROCEDURE P* (…); (* exported *) Utils BEGIN … Strings (* low level routine *) Device END …; Uart PROCEDURE … (…); (* internal *) Log (* low level routine *) SerialLog BEGIN … OFS END …; IFSRamVolumes BEGIN … Tools (* runtime initialization *) Streams END Kernel. Modules Minos 83 Memory Layout -- Objectives . As simple as possible 0xFFFFFFFF . Support null-pointer checks via MMU (4G-1) . Classical Heap / Stack layout . 1 MB pages 0x40000000 devices 0x3F000000 VC 0x30000000 0x8000 kernel.img 0x0 84 Memory Layout: big picture 0xFFFFFFFF 0xFFFFFFFF (4G-1) 1MB 0xFFF00000 0x40000000 0x40000000 devices 1:1 (strongly ordered) devices 0x3F000000 0x3F000000 VC VC 0x30000000 0x30000000 (768 M) 1:1 kernel.img 0x108000 kernel.img initial stack 0x100000 kernel.imgfirst 1 MB first 1 MB unmapped 0x0 physical virtual 85 Virtual Memory Layout: Heap, Stack, RAMDisk 0x30000000 RAM Disk (256M) 0x20000000 stack (16M) 0x1F000000 unmapped 0x1EF00000 heap (493 MB) 0x00200000 kernel.img 0x00108000 0x00100000 first 1 MB 0x00000000 virtual 86 Virtual Memory Layout: IRQ Table / MMU unused 64KB-64 Fast IRQ Adr 4B 1MB IRQ Adr 4B 0xFFF00000 Not assigned 4B Data Abort Adr 4B Prefetch Adr 4B SWI Adr 4B UNDEF Adr 4B RESET Adr 4B 0xFFFF0020 FIQ 4B Pipeline! IRQ 4B Not assigned 4B Data Abort 4B Prefetch Abort 4B SWI 4B UNDEF 4B LDR PC, [PC+0x18] 0xFFFF0000 RESET 4B 0xFFFEFFFF encoded as hex number 359ff018 MMU Table 16KB 0xFFFEC000 0xFFFEBFFF 16KB UNDSP 0xFFFE8000 0xFFFE7FFF ABORT Stack 16KB 0xFFFE4000 0x00000000 0xFFFE3FFF virtual IRQ Stack 911KB 0xFFF00000 87 Initialization: Kernel (body) SYSTEM.LDPSR(u, src) [instruction MSR] u = 0 PSR of current processor mode u = 1 PSR of saved processor mode VAR lnk: PROCEDURE; src value to be loaded in PSR, an expression ... BEGIN (* do not enter any call here --> link register consistency ! *) store link register globally – we SYSTEM.PUT32(ADDRESSOF(lnk), SYSTEM.LNK()); are switching the stack! SYSTEM.LDPSR( 0, Platform.SVCMode + Platform.FIQDisabled + Platform.IRQDisabled ); SYSTEM.SETSP(Platform.SVCSP); SYSTEM.SETFP(Platform.SVCSP); disable IRQs, stay in SVC mode SYSTEM.LDPSR( 0, Platform.IRQMode + Platform.FIQDisabled + Platform.IRQDisabled ); SYSTEM.SETSP(Platform.IRQSP); new stack top for this mode 88 Initialization Kernel (body) SYSTEM.LDPSR( 0, Platform.FIQMode + Platform.FIQDisabled + Platform.IRQDisabled); SYSTEM.SETSP(Platform.FIQSP); ... SYSTEM.LDPSR( 0, Platform.SVCMode + Platform.FIQDisabled + Platform.IRQDisabled ); (* Disable interrupts, init SP, FP *) InitMMU; SetupInterruptVectors; InitHandlers; EnableIRQs; OSTimer; lnk END Kernel. continue execution (next body) 89 Initialization Heap Stack MODULE Heaps; heapEnd ... BEGIN heap heapStart := Platform.HeapBase; heap := Platform.HeapBase; heapBase heapEnd := Platform.HeapEnd; END Heaps. 90 Address Translation (1 MB pages) 31 4 K 20 19 1 M 0 Index Offset virtual MMU lookup 31 4 K 20 19 1 M 0 PhysAdr[20..31] PhysAdr[19..0] = Offset physical 91 Translation Table 31 4 K 2019 1 M 0 Index Offset virtual translation table TranslationTableBase Index register Translation table (4k entries) 92 Page Table Entries 31 4 K 20 19 1 M 0 Possible entries: Index Offset virtual translation table . Invalid register TranslationTableBase Index 31 2 1 0 Ignored 0 0 Translation table (4k entries) . Section 31 20 19 16 15 14 12 11 10 9 8 5 4 3 2 1 0 AP TEX AP S I Section base address 0 S B Domain M C B 1 0 [2] [2:0] [1:0] Z P 18 (Properties define memory type and sharing attributes) . Page table (2nd level: 4k or 64K pages), Supersection (16 MB pages) (cf. ARM v7-A Section B.3) (cf. ARM Reference Manual v7-A Section B.3) Accessing the System Control Processor MCR (Move to Coprocessor from Arm Register) ARM Processor System MMU / MPU MRC (Move to Arm Register from Coprocessor) Control Processor coprocessor CPU Coprocessor number register registers coprocessor number 15 opcodes 94 System Control Processor Registers ARM Cortex A7 ArchitectureARMARMARMARM MPCoreARMARMARMARM ArchitectureArchitectureReferenceArchitectureArchitecture ArchitectureArchitectureArchitectureTechnicalArchitecture ManualReferenceReferenceReferenceReference ARM ReferenceReferenceReferenceReferenceReference ManualManualManualManualv7A ARM ARM ARMARM ManualManualManualManualManual ARM ARM ARMARM v7,v7,v7,v7, B4.1.154 B4.1.154 B4.1.154B4.1.154 v7,v7,v7,v7, B4.1.154 B4.1.154 B4.1.154B4.1.154 B4.1.154 4.2.3. e.g. "MCR P15, 0, R0, C2, C0, 0 ; set page table base address" 95 Cache . ARM processors can support several levels of cache (from ARM Architecture Reference Manual ARM v7-A, Section A3.9.2 96 Cache Coherency Caches largely invisible to the application programmer in normal operation. Cache coherency breakdown: reads or writes agent 1 reads or writes cache memory agent 2 Examples: . agent 1 = processor, agent 2 = DMA controller relevant even for . agent 1 = processor (instruction cache), agent 2 = processor (data cache) single-core systems . agent 1 = processor x, agent 2 = processor y 97 Ensuring Cache Coherency . Not enabling caches in the system . RPI starts with MMU switched off and with caches disabled . Use memory maintenance operations to manage cache coherency issues in software . E.g. when sharing information between processors . E.g. when changing instruction memory from data path . Use hardware coherency mechanisms configurable for memory regions . E.g. strongly ordered memory for memory regions containing device registers 98 Memory types and attributes Memory type Shareable Other Objective attribute attribute attribute Strongly-ordered Shareable Memory accesses to Strongly-ordered memory occur in program order. Device Shareable Memory mapped peripherals that are shared by several processors. Non-Shareable Memory mapped peripherals that are used only by a single processor. Normal Shareable Non-cacheable Normal memory that is shared between Write-Through cacheable several processors. Write-Back cacheable Non-Shareable Non-cacheable Normal memory that is used only by a Write-Through cacheable single processor. Write-Back cacheable ... we will revisit this topic again when discussing memory ordering in the context of a multi- core kernel. 99 Cache properties (ARM v7) . Data memory cache: Reads and Writes from one observer to the same physical location, also from different virtual addresses, always happen in program order . No memory barriers required . Instruction caches are never written to or read from by memory load / store operations . The guarantees from above do not necessarily apply to instruction cache, depending on the cache implementation . Changing memory attributes in the page table can require a cache maintenance operation 100 Cache Coherency Issues Memory Location Update by a Processor not visible to other observers because 1. new updates are still in the writing's processor cache 2. cache of observer contains stale copy of the memory Two explicit mechanisms to address this Clean: updates made by a writer made visible to other observers that can access memory at the point to which the operation is performed. Invalidate: A cache invalidate operation ensures that updates made visible by writers that access memory are made visible to an observer that controls the cache. [precise definitions in ARM Architecture Manual v7, B 2.2.6] 101 Cache Maintenance . Instruction/Memory Cache can be selectively enabled / disabled . Cache manipulation: CRn = 7, TLB mainpulation: CRn = 8 clean data cache invalidate data / instruction cache, by set / way, by VA, ... 102 Barriers . ISB -- Instruction Synchronization Barrier flushes the pipeline: all instructions following the ISB are fetched from cache or memory. Important when code is written to data memory. Example: module loading. Important when instruction memory changes, e.g. page table / TLB modifications . DMB -- Data Memory Barrier: synchronizes memory accesses and provides memory ordering. DSB -- Data Synchronisation Barrier: data memory barrier that additionally synchronizes the execution stream with memory accesses. to be revisited in the multicore context 103 Initialization: Platform.IdentityMapMemory VAR pageTable-: POINTER {UNSAFE} TO ARRAY 4096 OF ADDRESS; PROCEDURE IdentityMapMemory-; VAR index: SIZE; BEGIN pageTable := MMUPhysicalTableBase;

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    28 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us