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