Комп'ютерні системи створюються із застосуванням декількох рівнів пам'яті. На рис. 8.1 показані найбільш важливі з них із зазначенням орієнтовних значень, отриманих в системі Linux автора. У міру переходу до правої частини малюнка ці види пам'яті стають більшими, але менш швидкодіючими (а також більш дешевими в розрахунку на один байт). Зокрема, можна бачити, що швидкості доступу характеризуються шістьма порядками величини і крайні їх значення відрізняються один від одного в 1000000 раз, а ємності характеризуються вісьмома порядками величини і крайні їх значення відрізняються один від одного в 312500000 разів. (На практиці різниця в швидкодії іноді не настільки помітна, але ці цифри цілком прийнятні для цілей нашого опису.) Найбільш значною відмінністю є останнім - відмінність між оперативною пам'яттю (або основною пам'яттю) і диском (або зовнішньою пам'яттю).
Мал. 8.1. Рівні зберігання з характеристиками швидкості і обміну
Потреба в додатковій зовнішній пам'яті надзвичайно велика, навіть незважаючи на таке низьке її швидкодію. Було б непогано змусити диск підміняти оперативну пам'ять, коли її не вистачає, тимчасово переміщаючи невикористаний код і дані на диск, щоб звільнити місце для діючих процесів. Як ви вже напевно знаєте, в Linux це вже зроблено: це так звана віртуальна пам'ять.
Таким чином, віртуальна пам'ять являє собою метод бездоганного поєднання доступу до оперативної пам'яті і диска - до основної і зовнішньої пам'яті. Додатки мають доступ до всієї оперативної пам'яті, як ніби вона дійсно існує. Ми знаємо, що її насправді немає і тому називаємо її «віртуальної», але завдяки ядру додатки цього не помічають. З погляду додатків, віртуальна пам'ять рівносильна наявності величезного обсягу оперативної пам'яті, яка на практиці іноді просто повільно працює.
Термін «віртуальна пам'ять» має ще одне значення, яке, строго кажучи, не пов'язане з першим значенням. Таке поняття, як віртуальна пам'ять, відноситься також до методу надання процесам відкоригованої інформації про адреси, в яких вони знаходяться. Кожному процесу дозволено вважати, що його адреси починаються з нульового адреси і від нього нарощуються. Безумовно, в дійсності це не може бути істинним для всіх процесів одночасно, але ця угода зручно при виробленні виконуваного коду, оскільки процесам не потрібно повідомляти, що вони насправді не розташовуються з нульового адреси, і вони не повинні цього враховувати.
Ці два тлумачення не обов'язково пов'язані, оскільки теоретично будь-яка операційна система може надати кожному процесу його власне логічний адресний простір, не поєднуючи основну і зовнішню пам'ять. Однак у всіх реальних системах, відомих автору, передбачені або обидві ці форми реалізації віртуальної пам'яті, або жодної. Саме з цим була пов'язана та плутанина, яка виникала на перших етапах розвитку операційних систем.
Щоб уникнути цієї багатозначності, багато хто воліє закріплювати за терміном «віртуальна пам'ять» значення, пов'язане з логічним адресним простором, і використовувати для позначення способу тимчасового зберігання інформації на диску термін «сторінковий обмін» або «підкачування» (свопинг), характеризуючи застосування віртуальної пам'яті лише як спосіб зберігання інформації (ми дамо визначення цих термінів трохи пізніше). Хоча в міркуваннях цих прихильників чистоти термінології є частка істини, автор дотримується більш поширеного тлумачення і рідко підкреслює така різниця, якщо цього не вимагає контекст.
Сайт управляється системою uCoz