Скидки до 50% и розыгрыш MacBook 1 день 23 :21 :59 Выбрать курс
Код
#статьи

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

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

Кадр: Computerphile / YouTube

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

Курсы за 2990 0 р.

Я не знаю, с чего начать
Бесплатный курс по Python ➞
Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе.
Смотреть программу

Стивен Бэгли


Об авторе

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



Переводчик

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


На июньской конференции 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 есть большое преимущество — низкая задержка доступа, благодаря которой подкачка данных происходит очень быстро. Поэтому, если вы редактируете видео или запускаете много приложений, функция подкачки может вам пригодиться.

Понравилась статья?
Да

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

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