![Mind Map: [#1] Memory Management](https://www.mindmeister.com/image/xlarge/458045491/mind-map-1-memory-management.png)
1. Segmentation
1.1. Two addressing spaces
1.1.1. Virtual
1.1.2. Physical
1.2. Memory partitions
1.2.1. Created on runtime
1.2.2. Variable size upon process request
1.2.3. Each partition is called a segment
1.2.4. Description of the memory partition is called the Segment Table
1.2.4.1. How big is it?
1.2.4.2. Where is it stored?
1.2.5. Translation from virtual -> physical
1.2.5.1. Every memory operation requires two effective accesses to physical memory
1.2.5.2. Special hardware
1.3. Trade-offs
1.3.1. No internal fragmentation
1.3.2. Potential external fragmentation
1.3.2.1. Compacting memory
1.3.2.2. Allocation strategies
1.3.2.2.1. Best Fit
1.3.2.2.2. Worst Fit
1.3.3. Easy sharing mechanism implied
2. Historical evolution
2.1. Bare machine
2.2. Monolithic monitor
2.3. Partitioned (physical) memory
2.3.1. Contiguous
2.3.1.1. Variable
2.3.1.2. Fixed
2.3.2. Non-contiguous
2.3.2.1. Fixed size
2.3.2.1.1. Pages
2.3.2.2. Variable size
2.3.2.2.1. Segments
2.3.3. Consecuences
2.3.3.1. Memory management
2.3.3.2. Memory partition description tables
2.3.3.2.1. On system boot
2.3.3.2.2. Runtime
3. Paging
4. Segmented paging
5. The Pentium MMU
6. Consumers
6.1. Programs
6.1.1. Storage only
6.1.1.1. Code
6.1.1.2. Data
6.1.1.2.1. Global vs local variables
6.1.1.2.2. Initialized data
6.1.1.3. Addresses (locations)
6.1.2. Executable representacion
6.2. Processes
6.2.1. Virtual addressing
6.2.1.1. The MMU
6.2.1.2. Translation to physical
6.2.2. Runtime-only data structures
6.2.2.1. The Stack
6.2.2.2. The Heap
6.2.3. Locality
6.2.3.1. Two types
6.2.3.1.1. Spatial
6.2.3.1.2. Temporal
6.2.3.2. Supports
6.2.3.2.1. Memory hierarcalization
6.2.3.2.2. Virtual memory (in the future)
7. Hierarchy
7.1. Motivation
7.2. Relation with the locality behavior of the running processes
8. Fragmentation
8.1. Internal
8.2. External
9. Realocation
9.1. Static
9.1.1. Done by the compilers at compile time
9.1.2. Defined by the programmer
9.1.3. Processes are always in the same position
9.2. Dynamic
9.2.1. Done by the MMU at run time
9.2.2. Defined by the operating system
9.2.3. Processes can be easily reallocated
10. Protection and sharing
10.1. Between processes
10.2. Mechanisms
10.2.1. Base
10.2.2. Base + Limit
10.2.3. Paging
10.2.4. Segmentation
10.2.5. Segmented paging