32
1/32 Programming Embedded Systems Lecture 13 Overview of memory management Monday Feb 27, 2012 Philipp Rümmer Uppsala University [email protected]

13 Memory

Embed Size (px)

Citation preview

Page 1: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 1/32

1/32

Programming Embedded Systems

Lecture 13

Overview of memory management

Monday Feb 27, 2012

Philipp RümmerUppsala University

[email protected]

Page 2: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 2/32

2/32

Lecture outline

● Memory architecture of micro-controllers, in particularARM CORTEX M3

● Memory management inembedded software

● Scoped memory in RTSJ

Page 3: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 3/32

3/32

Memory architecture of 

micro-controllers(in particular considering ARM CORTEX M3)

Page 4: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 4/32

4/32

Architecture

● MCUs often use a Harvard approach

● Separate memory + buses for

code (ROM) and data (RAM)● Code is executed “in place”

(not copied to RAM before execution)

● Some amount of RAM/ROM is

integrated in MCU●  Typically: much ROM, little RAM

● Can be extended using external

memory if needed

Page 5: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 5/32

5/32

Read-only memory (ROM)

● Used to store code + static data(e.g., lookup tables)

Unrestricted reading,separate procedure for writing

● Most common (today):flash memory

● Other kinds:PROM, UV-EPROM, EEPROM

● STM32F10x has 16KiB – 1MiB of ROM

Page 6: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 6/32

6/32

Random-access memory (RAM)

Used for data (stack, heap)● In principle also for code, but uncommon

●  Two main kinds: SRAM, DRAM

→ Both very common● Often accessed through a hierarchy of 

caches

Not so common for internal RAM inMCUs; difficult WCET analysis

● STM32F10x has 4KiB – 96KiB of internalSRAM, no cache (but low latency)

Page 7: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 7/32

7/32

CORTEX M3 memory map

● RAM + ROM + special-purpose regionsare uniformly mapped into a32bit address space

● Details depend of CORTEX M3 version

Page 8: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 8/32

8/32

   S

   T   M   3   2   F

   1   0  x

  m  e  m  o  r  y

  m  a  p

E.g., interfacefor debugging

On-chipperipherals

Internal

External

Page 9: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 9/32

9/32

Bit band interface

● Motivation: accessing individual bits inmemory is cumbersome

● Multiple instructions to set/reset bit,

not atomic● But very often necessary:

access control bits, locks, etc.

Page 10: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 10/32

10/32

Bit band interface (2)

● Bit band alias:32MiB region B that allows to accessindividual bits of a 1MiB region A

Every bit in A corresponds to a word(4 byte) in B

● 0 ↔ 0x00000000

● 1 ↔ 0xFFFFFFFF

Page 11: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 11/32

11/32

Managing memory

Page 12: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 12/32

12/32

Ways to manage memory

● At compile-time

● At startup-time

● Dynamically during runtime

Page 13: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 13/32

13/32

Management at compile time

● Compiler/linker creates segments fordifferent kinds of code/data

code (read-only, .text)● read-only data

● read-write data

● zero-initialised read-write data

● Further segments possible, as needed

● Code/data is directly flashed to MCU;RAM is initialised during start-up

put into ROM

Page 14: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 14/32

14/32

Management at compile time

● Mapping of data to segments can beautomatic or explicit (compiler-specific)

#pragma to specify segment● Layout of segments in memory can be

chosen

Page 15: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 15/32

15/32

In MDK-ARM

● Zero-initialised read-write data(→ .bss, RAM):  char rwData[1024];

● Read-write data(→ .data, RAM):  char rwData[3] = {1, 2, 3};

● Read-only data(→ .constdata, ROM):  const char roData[3] = {1, 2, 3};

Default segmentused

Page 16: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 16/32

16/32

In MDK-ARM (example)

int x1 = 5; // in .data (default)int y1[100]; // in .bss (default)

int const z1[3] = {1,2,3}; // in .constdata (default)

#pragma arm section rwdata = "foo", rodata = "bar"

int x2 = 5; // in foo (data part of region)

int y2[100]; // in .bss

int const z2[3] = {1,2,3}; // in barchar *s2 = "abc"; // s2 in foo, "abc" in .conststring

Page 17: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 17/32

17/32

In embedded systems

● Most common way of memory management:Allocate all required memory atcompile-time (in read-write or read-onlysegments, as needed)

● Little risk of runtime errors due to

memory management(e.g., it is checked at compile-timewhether enough memory is present)

Page 18: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 18/32

18/32

Dynamic memorymanagement

● Manual management: malloc, free

● More flexible, might be necessary in

some cases● E.g., to implement OS functions:

allocate stack for tasks, task controlblocks, queues, semaphores, etc.

Page 19: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 19/32

19/32

Dynamic memorymanagement (2)

● Can cause various problems inembedded systems

Possibly insufficient memory at runtime● Fragmentation

● Implementation of malloc, free can beof substantial size

● malloc, free thread-safe?

● Compromise: no free, malloc is onlyused during startup

Page 20: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 20/32

20/32

Dynamic memorymanagement (3)

● FreeRTOS comes with 3 allocators(programmer can choose)

Heap_1: only malloc is implemented,memory is never freed

● Heap_2: also provides free

● Heap_3: in addition, thread-safe

implementation● Size of managed heap is specified in

FreeRTOSConfig.h:#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 17 * 1024 ) )

Page 21: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 21/32

21/32

More high-level memory management?

Memory in Real-time Java

Page 22: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 22/32

22/32

Real-time garbage collectors

● GCs for real-time systems are hard toget right

Interruptions by GC have to bescheduled correctly

● GC must keep up with application

● Overhead in memory consumption due

to delayed deallocation●  Too large, complicated, not trustworthy

→ Mostly for soft real-time systems

Page 23: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 23/32

23/32

Kinds of memory in RTSJ

● Heap memory● “Real-time” garbage-collected,

otherwise same as in normal Java

Immortal memory● Memory that is never reclaimed

● Scoped memory

● Region-based memory management● Allocation using new , deallocation by

deleting regions (reference-counting)

Physical memory

Page 24: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 24/32

24/32

Basic idea of scoped memory

● Organise memory in different regionse.g.,one region for long-living objects of a

thread,one region for temporary objects of amethod, ...

● Allocate memory as usual, but withinregions (using malloc, new , etc.)

● Free memory by explicitly deleting

whole regions

Page 25: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 25/32

25/32

Memory Areas

● Areas are in RTSJ represented usingclass MemoryArea

● NB: each MemoryArea object is related

to two memory regions:●  The region in which the MemoryArea 

object itself is allocated

 The region represented by theMemoryArea object

● Important MemoryArea methods:enter, newInstance, newArray

Page 26: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 26/32

26/32

Scoped memory

● Every RealTimeThread runs in amemory allocation context

Refers to some MemoryArea● Chosen explicitly by programmer

● Nested contexts possible → stack

While in allocation context A, objectscreated with new are stored in A

Page 27: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 27/32

27/32

Scoped memory (2)

● Contents of a scoped MemoryArea arecleared when the last thread exits thecontext

(“reference counting”)

● MemoryArea can then be reused

Page 28: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 28/32

28/32

Examples

● Simple use of memory scopes

● Nesting

Page 29: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 29/32

29/32

Observations

● Scope nesting has to be acyclic

● References between scopes are

restricted

Page 30: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 30/32

30/32

Allowed references

(Taken from “The Real-Time Specification for Java”, Version 1.0.2)

Page 31: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 31/32

31/32

 Typical use of scopes

● Identify self-contained computations(or parts)

Estimate memory consumption of eachcomputation

● Allocate sufficient amount of memory,using LT/VTMemory

● Execute computation withinenter-block

● NB: memory areas can be reused!

Page 32: 13 Memory

7/30/2019 13 Memory

http://slidepdf.com/reader/full/13-memory 32/32

32/32

Further reading

● Peter C. Dibble, “Real-Time JavaPlatform Programming”