עד עכשיו כל כתובת שיצאה מהמעבד הגיעה אל הזכרון. כתובת שמגיעה אל מערכת הזכרון נקראת כתובת פיזית. כשמה שיש לנו זה רק כתובות פיזיות נוצרות בעיות קשות אם רוצים להריץ מספר תוכניות במקביל.
כל תוכנית מסוגלת לגשת לזכרון של כל תוכנית אחרת.
צריך הסכמים בין כל התוכניות כדי להסתדר ביחד.
בהרצות שונות תוכנית יכולה להיטען לכתובות שונות בזכרון, וצריך ללמוד לחיות עם זה.
לסיכום: בלאגן גדול.
כדי לפתור את כל הנ"ל צריך לבודד בין הכתובות של התוכניות השונות. בצורה כלשהי צריך לאפשר לכמה תוכניות שונות להשתמש במרחבי כתובות שבהן הן לא יכולות לגשת אחת לזכרון השניה.
הכתובות הללו שהמעבד יוצר אך הן לא כתובות פיזיות נקראות כתובות וירטואליות. כמובן צריך להוסיף חומרה שתקבל כתובת וירטואלית ותייצר ממנה כתובת פיזית. יחידה זו נקראת היחידה לניהול הזכרון (memory management unit - mmu). השם הזה לא מאוד מוצלח כי יחידה זו לא מנהלת את הזכרון, או כל דבר אחר. היא מתרגמת כתובת וירטואלית לכתובת פיזית.