What is a memory model, and why is it needed?
A memory model is a way of organizing and defining how memory behaves. It provides a structure and a set of rules for you to follow when you configure how addresses, or regions of addresses, are accessed and used in your system.
The memory model provides attributes that you can apply to an address and it defines the rules associated with memory access ordering.
Consider a simple system with the address space, like you can see in this diagram:
The arrangement of memory regions in the address space is called an address map. Here, the map contains:
- Memory and peripherals
- In the memories, code and data
- Resources belonging to the OS and resources belonging to user applications
The way that you want the processor to interact with a peripheral is different to how it should interact with a memory. You will usually want to cache memories but you will not want to cache peripherals. Caching is the act of storing a copy of information from memory into a location, which is called a cache. The cache is closer to the core and therefore faster for the core to access. Similarly, you will usually want the processor to block user access to kernel resources.
This diagram shows the address map with some different memory attributes that you might want to apply to the memory regions:
You need to be able to describe these different attributes to the processor, so that the processor accesses each location appropriately.