Код
#статьи

Медленно, но верно: как работает своп (раздел подкачки) и как он используется в iPadOS 16

Стив Бэгли рассказывает, как виртуальная память и раздел подкачки увеличивают возможности компьютера.

Кадр: Computerphile / YouTube

Стивен Бэгли


Об авторе

Доктор Стивен Бэгли — специалист в области информатики, работающий в Ноттингемском университете.



Переводчик

Марина Демидова


На июньской конференции 2022 года Apple объявила, что iPadOS 16 теперь будет поддерживать своп (подкачку) виртуальной памяти. Поэтому я решил рассказать подробнее, что такое виртуальная память и своп, как они работают и зачем их использовать в своём iPad.

В системах с виртуальной памятью легко уйти от физических адресов и заменить их на виртуальные, то есть абстрагировать их от железа. Кроме того, часть виртуальной памяти можно перенести на жёсткий диск или твердотельный накопитель — что позволяет как бы увеличить оперативную память.

Эта статья — пересказ видео Стивена Бэгли с YouTube-канала Computerphile.

Разберёмся получше. Начнём с чего-нибудь простого — того, что легко можно изобразить на листе бумаги. Допустим, у нас есть процессор и 16 байт оперативной памяти. Конечно, это очень мало — её не хватит даже для того, чтобы напечатать «Hello, world!». Но нам пока больше и не нужно.

А ещё пусть у нас будет устройство, с помощью которого процессор может обратиться к оперативной памяти (как вариант, некий аналог адресной шины) и получить данные из любого байта памяти.

Допустим, процессор хочет получить доступ к байту 8. Он указывает адрес байта в двоичном формате — 1000. И это уже виртуальный адрес ячейки памяти. Теперь представим, что у нас есть некоторое логическое устройство, переводящее виртуальные адреса в физические. Это устройство управления памятью (блок MMU) — часть аппаратного обеспечения компьютера, которая отвечает за управление доступом к памяти. Здесь виртуальный адрес — то, что видит программа, а физический — то, с чем работает сам компьютер.

Виртуальная и физическая память компьютера
Кадр: Computerphile / YouTube

Например, байт с виртуальным адресом 8 будет находиться в физической памяти по адресу 2, байт 7 — по адресу 1, байт 6 — по адресу 0.

А что будет, если две программы используют данные, находящиеся по одному и тому же физическому адресу? Пусть у первой программы будет один виртуальный адрес нужных данных — например, 42, а у второй — 84. MMU будет переводить оба виртуальных адреса в один и тот же физический.

Перевод двух виртуальных адресов в физический
Кадр: Computerphile / YouTube

Для каждого процесса MMU создаёт свою таблицу, в которую будет записывать виртуальные и соответствующие им физические адреса.

Рассмотрим ещё один пример — страничную организацию виртуальной памяти. В этом случае страница будет минимальной единицей выделяемой физической памяти. Даже если приложение запросит один байт, ему выделится целая страница.

Пусть у нас есть программа, которой требуется 64 килобайта памяти. Разобьём память на разделы, которые назовём страницами, и сделаем 16 страниц по 4 килобайта.

Почему мы берём такие числа? В 1970-х годах, когда эта технология разрабатывалась, адресное пространство популярных мини-компьютеров PDP-11 составляло 64 килобайта. Страницы по 4 килобайта были для них оптимальной единицей для разбиения.

Пронумеруем страницы от 0000 до F000 в шестнадцатеричной системе счисления:

Изображение: Skillbox Media

Адреса виртуальной памяти делятся на номера страницы и смещения внутри страницы. Мы используем шестнадцатеричную адресацию — каждый адрес разбивается на две части: в старших 4 битах находится шестнадцатеричное число от 0 до F — номер страницы, а в младших 12 битах — адреса байтов, входящих в страницу.

Процессор преобразует номер виртуальной страницы в адрес соответствующей ей физической страницы с помощью таблицы страниц, содержащейся в фиксированном месте памяти. Она содержит набор записей, где каждая запись — соответствие адреса страницы виртуальной памяти адресу физической памяти.

При запуске программы компьютер делает перевод всех страниц от 0000 до F000 в физические адреса, например:

Изображение: Skillbox Media

И когда мы захотим получить доступ к странице с виртуальным адресом 8000, компьютер сгенерирует запрос к таблице страниц и найдёт её физический адрес — 6000.

Но что будет, если процессор не найдёт в таблице физический адрес? Чтобы объяснить это, рассмотрим более интересный пример. Допустим, программе требуется 64 килобайта памяти, а объём ОЗУ компьютера — всего 32 килобайта. Компьютеры с таким объёмом ОЗУ существовали ещё в начале 1980-х.

Виртуальная память программы разбивается на 16 страниц из 4 битов каждая, а физическая память — всего на восемь страниц. Компьютер может установить между ними соответствие и заполнить таблицу всего для восьми страниц виртуальной и физической памяти, а когда программа запрашивает адрес, например, девятой страницы, возникает ошибка.

В этом случае операционная система берёт на себя управление и организует подкачку:

  • Анализирует заполненные страницы в ОЗУ.
  • Выбирает по определённому алгоритму ту из них, которая давно не использовалась или принадлежит завершённому процессу. В нашем примере пусть это будет страница с адресом A000.
  • При необходимости копирует её содержимое на жёсткий диск или твердотельный накопитель.
  • Очищает страницу ОЗУ.
  • Обновляет таблицу страниц в памяти.
  • Возвращает физический адрес очищенной ячейки.

Работа программы продолжается. Можно сказать, что у неё стало 36 килобайт доступной физической памяти вместо прежних 32. А данные из очищенной страницы A000 не потерялись, так как были скопированы во вторичное хранилище.

А что будет, если программе понадобились эти скопированные данные? Она не находит их в странице A000 и передаёт управление операционной системе. Та опять выбирает в ОЗУ страницу, которая давно не использовалась, копирует её содержимое в файл подкачки, очищает её и помещает туда нужные данные из вторичного хранилища.

То, как это работает, зависит от вашей операционной системы. Например, в Linux и Windows вы можете вручную настроить раздел подкачки. Кроме того, в Linux даже можно увидеть его в структуре каталогов.

Но вернёмся к Apple и iPadOS 16. Раньше, если вашему iPad Pro не хватало оперативной памяти, приложения начинали запускаться и перезапускаться. Теперь они могут переключаться на виртуальную память и использовать часть вашего свободного пространства в качестве файла подкачки.

У современных твердотельных накопителей для iPad есть большое преимущество — низкая задержка доступа, благодаря которой подкачка данных происходит очень быстро. Поэтому, если вы редактируете видео или запускаете много приложений, функция подкачки может вам пригодиться.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована