HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><strong>Об авторе</strong></p>
1 <p><strong>Об авторе</strong></p>
2 <p>Доктор Стивен Бэгли - специалист в области информатики, работающий в Ноттингемском университете.</p>
2 <p>Доктор Стивен Бэгли - специалист в области информатики, работающий в Ноттингемском университете.</p>
3 <p><strong>Переводчик</strong></p>
3 <p><strong>Переводчик</strong></p>
4 <p>Марина Демидова</p>
4 <p>Марина Демидова</p>
5 <p>На июньской конференции 2022 года Apple объявила, что iPadOS 16 теперь будет поддерживать своп (подкачку) виртуальной памяти. Поэтому я решил рассказать подробнее, что такое виртуальная память и своп, как они работают и зачем их использовать в своём iPad.</p>
5 <p>На июньской конференции 2022 года Apple объявила, что iPadOS 16 теперь будет поддерживать своп (подкачку) виртуальной памяти. Поэтому я решил рассказать подробнее, что такое виртуальная память и своп, как они работают и зачем их использовать в своём iPad.</p>
6 <p>В системах с виртуальной памятью легко уйти от физических адресов и заменить их на виртуальные, то есть абстрагировать их от железа. Кроме того, часть виртуальной памяти можно перенести на жёсткий диск или твердотельный накопитель - что позволяет как бы увеличить оперативную память.</p>
6 <p>В системах с виртуальной памятью легко уйти от физических адресов и заменить их на виртуальные, то есть абстрагировать их от железа. Кроме того, часть виртуальной памяти можно перенести на жёсткий диск или твердотельный накопитель - что позволяет как бы увеличить оперативную память.</p>
7 <p>Разберёмся получше. Начнём с чего-нибудь простого - того, что легко можно изобразить на листе бумаги. Допустим, у нас есть процессор и 16 байт оперативной памяти. Конечно, это очень мало - её не хватит даже для того, чтобы напечатать "Hello, world!". Но нам пока больше и не нужно.</p>
7 <p>Разберёмся получше. Начнём с чего-нибудь простого - того, что легко можно изобразить на листе бумаги. Допустим, у нас есть процессор и 16 байт оперативной памяти. Конечно, это очень мало - её не хватит даже для того, чтобы напечатать "Hello, world!". Но нам пока больше и не нужно.</p>
8 <p>А ещё пусть у нас будет устройство, с помощью которого процессор может обратиться к оперативной памяти (как вариант, некий аналог адресной шины) и получить данные из любого байта памяти.</p>
8 <p>А ещё пусть у нас будет устройство, с помощью которого процессор может обратиться к оперативной памяти (как вариант, некий аналог адресной шины) и получить данные из любого байта памяти.</p>
9 <p>Допустим, процессор хочет получить доступ к байту 8. Он указывает адрес байта в двоичном формате - 1000. И это уже виртуальный адрес ячейки памяти. Теперь представим, что у нас есть некоторое логическое устройство, переводящее виртуальные адреса в физические. Это устройство управления памятью (блок MMU) - часть аппаратного обеспечения компьютера, которая отвечает за управление доступом к памяти. Здесь виртуальный адрес - то, что видит программа, а физический - то, с чем работает сам компьютер.</p>
9 <p>Допустим, процессор хочет получить доступ к байту 8. Он указывает адрес байта в двоичном формате - 1000. И это уже виртуальный адрес ячейки памяти. Теперь представим, что у нас есть некоторое логическое устройство, переводящее виртуальные адреса в физические. Это устройство управления памятью (блок MMU) - часть аппаратного обеспечения компьютера, которая отвечает за управление доступом к памяти. Здесь виртуальный адрес - то, что видит программа, а физический - то, с чем работает сам компьютер.</p>
10 Виртуальная и физическая память компьютера<em>Кадр:</em><a><em>Computerphile</em></a><em>/ YouTube</em><p>Например, байт с виртуальным адресом 8 будет находиться в физической памяти по адресу 2, байт 7 - по адресу 1, байт 6 - по адресу 0.</p>
10 Виртуальная и физическая память компьютера<em>Кадр:</em><a><em>Computerphile</em></a><em>/ YouTube</em><p>Например, байт с виртуальным адресом 8 будет находиться в физической памяти по адресу 2, байт 7 - по адресу 1, байт 6 - по адресу 0.</p>
11 <p>А что будет, если две программы используют данные, находящиеся по одному и тому же физическому адресу? Пусть у первой программы будет один виртуальный адрес нужных данных - например, 42, а у второй - 84. MMU будет переводить оба виртуальных адреса в один и тот же физический.</p>
11 <p>А что будет, если две программы используют данные, находящиеся по одному и тому же физическому адресу? Пусть у первой программы будет один виртуальный адрес нужных данных - например, 42, а у второй - 84. MMU будет переводить оба виртуальных адреса в один и тот же физический.</p>
12 Перевод двух виртуальных адресов в физический<em>Кадр:</em><a><em>Computerphile</em></a><em>/ YouTube</em><p>Для каждого процесса MMU создаёт свою таблицу, в которую будет записывать виртуальные и соответствующие им физические адреса.</p>
12 Перевод двух виртуальных адресов в физический<em>Кадр:</em><a><em>Computerphile</em></a><em>/ YouTube</em><p>Для каждого процесса MMU создаёт свою таблицу, в которую будет записывать виртуальные и соответствующие им физические адреса.</p>
13 <p>Рассмотрим ещё один пример - страничную организацию виртуальной памяти. В этом случае страница будет минимальной единицей выделяемой физической памяти. Даже если приложение запросит один байт, ему выделится целая страница.</p>
13 <p>Рассмотрим ещё один пример - страничную организацию виртуальной памяти. В этом случае страница будет минимальной единицей выделяемой физической памяти. Даже если приложение запросит один байт, ему выделится целая страница.</p>
14 <p>Пусть у нас есть программа, которой требуется 64 килобайта памяти. Разобьём память на разделы, которые назовём страницами, и сделаем 16 страниц по 4 килобайта.</p>
14 <p>Пусть у нас есть программа, которой требуется 64 килобайта памяти. Разобьём память на разделы, которые назовём страницами, и сделаем 16 страниц по 4 килобайта.</p>
15 <p>Почему мы берём такие числа? В 1970-х годах, когда эта технология разрабатывалась, адресное пространство популярных мини-компьютеров PDP-11 составляло 64 килобайта. Страницы по 4 килобайта были для них оптимальной единицей для разбиения.</p>
15 <p>Почему мы берём такие числа? В 1970-х годах, когда эта технология разрабатывалась, адресное пространство популярных мини-компьютеров PDP-11 составляло 64 килобайта. Страницы по 4 килобайта были для них оптимальной единицей для разбиения.</p>
16 <p>Пронумеруем страницы от <strong>0000</strong>до <strong>F000</strong>в шестнадцатеричной системе счисления:</p>
16 <p>Пронумеруем страницы от <strong>0000</strong>до <strong>F000</strong>в шестнадцатеричной системе счисления:</p>
17 <em>Изображение: Skillbox Media</em><p>Адреса виртуальной памяти делятся на номера страницы и смещения внутри страницы. Мы используем шестнадцатеричную адресацию - каждый адрес разбивается на две части: в старших 4 битах находится шестнадцатеричное число от 0 до F - номер страницы, а в младших 12 битах - адреса байтов, входящих в страницу.</p>
17 <em>Изображение: Skillbox Media</em><p>Адреса виртуальной памяти делятся на номера страницы и смещения внутри страницы. Мы используем шестнадцатеричную адресацию - каждый адрес разбивается на две части: в старших 4 битах находится шестнадцатеричное число от 0 до F - номер страницы, а в младших 12 битах - адреса байтов, входящих в страницу.</p>
18 <p>Процессор преобразует номер виртуальной страницы в адрес соответствующей ей физической страницы с помощью таблицы страниц, содержащейся в фиксированном месте памяти. Она содержит набор записей, где каждая запись - соответствие адреса страницы виртуальной памяти адресу физической памяти.</p>
18 <p>Процессор преобразует номер виртуальной страницы в адрес соответствующей ей физической страницы с помощью таблицы страниц, содержащейся в фиксированном месте памяти. Она содержит набор записей, где каждая запись - соответствие адреса страницы виртуальной памяти адресу физической памяти.</p>
19 <p>При запуске программы компьютер делает перевод всех страниц от 0000 до F000 в физические адреса, например:</p>
19 <p>При запуске программы компьютер делает перевод всех страниц от 0000 до F000 в физические адреса, например:</p>
20 <em>Изображение: Skillbox Media</em><p>И когда мы захотим получить доступ к странице с виртуальным адресом 8000, компьютер сгенерирует запрос к таблице страниц и найдёт её физический адрес - 6000.</p>
20 <em>Изображение: Skillbox Media</em><p>И когда мы захотим получить доступ к странице с виртуальным адресом 8000, компьютер сгенерирует запрос к таблице страниц и найдёт её физический адрес - 6000.</p>
21 <p>Но что будет, если процессор не найдёт в таблице физический адрес? Чтобы объяснить это, рассмотрим более интересный пример. Допустим, программе требуется 64 килобайта памяти, а объём ОЗУ компьютера - всего 32 килобайта. Компьютеры с таким объёмом ОЗУ существовали ещё в начале 1980-х.</p>
21 <p>Но что будет, если процессор не найдёт в таблице физический адрес? Чтобы объяснить это, рассмотрим более интересный пример. Допустим, программе требуется 64 килобайта памяти, а объём ОЗУ компьютера - всего 32 килобайта. Компьютеры с таким объёмом ОЗУ существовали ещё в начале 1980-х.</p>
22 <p>Виртуальная память программы разбивается на 16 страниц из 4 битов каждая, а физическая память - всего на восемь страниц. Компьютер может установить между ними соответствие и заполнить таблицу всего для восьми страниц виртуальной и физической памяти, а когда программа запрашивает адрес, например, девятой страницы, возникает ошибка.</p>
22 <p>Виртуальная память программы разбивается на 16 страниц из 4 битов каждая, а физическая память - всего на восемь страниц. Компьютер может установить между ними соответствие и заполнить таблицу всего для восьми страниц виртуальной и физической памяти, а когда программа запрашивает адрес, например, девятой страницы, возникает ошибка.</p>
23 <p>В этом случае операционная система берёт на себя управление и организует подкачку:</p>
23 <p>В этом случае операционная система берёт на себя управление и организует подкачку:</p>
24 <ul><li>Анализирует заполненные страницы в ОЗУ.</li>
24 <ul><li>Анализирует заполненные страницы в ОЗУ.</li>
25 <li>Выбирает по определённому алгоритму ту из них, которая давно не использовалась или принадлежит завершённому процессу. В нашем примере пусть это будет страница с адресом A000.</li>
25 <li>Выбирает по определённому алгоритму ту из них, которая давно не использовалась или принадлежит завершённому процессу. В нашем примере пусть это будет страница с адресом A000.</li>
26 <li>При необходимости копирует её содержимое на жёсткий диск или твердотельный накопитель.</li>
26 <li>При необходимости копирует её содержимое на жёсткий диск или твердотельный накопитель.</li>
27 <li>Очищает страницу ОЗУ.</li>
27 <li>Очищает страницу ОЗУ.</li>
28 <li>Обновляет таблицу страниц в памяти.</li>
28 <li>Обновляет таблицу страниц в памяти.</li>
29 <li>Возвращает физический адрес очищенной ячейки.</li>
29 <li>Возвращает физический адрес очищенной ячейки.</li>
30 </ul><p>Работа программы продолжается. Можно сказать, что у неё стало 36 килобайт доступной физической памяти вместо прежних 32. А данные из очищенной страницы A000 не потерялись, так как были скопированы во вторичное хранилище.</p>
30 </ul><p>Работа программы продолжается. Можно сказать, что у неё стало 36 килобайт доступной физической памяти вместо прежних 32. А данные из очищенной страницы A000 не потерялись, так как были скопированы во вторичное хранилище.</p>
31 <p>А что будет, если программе понадобились эти скопированные данные? Она не находит их в странице A000 и передаёт управление операционной системе. Та опять выбирает в ОЗУ страницу, которая давно не использовалась, копирует её содержимое в файл подкачки, очищает её и помещает туда нужные данные из вторичного хранилища.</p>
31 <p>А что будет, если программе понадобились эти скопированные данные? Она не находит их в странице A000 и передаёт управление операционной системе. Та опять выбирает в ОЗУ страницу, которая давно не использовалась, копирует её содержимое в файл подкачки, очищает её и помещает туда нужные данные из вторичного хранилища.</p>
32 <p>То, как это работает, зависит от вашей операционной системы. Например, в Linux и Windows вы можете вручную настроить раздел подкачки. Кроме того, в Linux даже можно увидеть его в структуре каталогов.</p>
32 <p>То, как это работает, зависит от вашей операционной системы. Например, в Linux и Windows вы можете вручную настроить раздел подкачки. Кроме того, в Linux даже можно увидеть его в структуре каталогов.</p>
33 <p>Но вернёмся к Apple и iPadOS 16. Раньше, если вашему iPad Pro не хватало оперативной памяти, приложения начинали запускаться и перезапускаться. Теперь они могут переключаться на виртуальную память и использовать часть вашего свободного пространства в качестве файла подкачки.</p>
33 <p>Но вернёмся к Apple и iPadOS 16. Раньше, если вашему iPad Pro не хватало оперативной памяти, приложения начинали запускаться и перезапускаться. Теперь они могут переключаться на виртуальную память и использовать часть вашего свободного пространства в качестве файла подкачки.</p>
34 <p>У современных твердотельных накопителей для iPad есть большое преимущество - низкая задержка доступа, благодаря которой подкачка данных происходит очень быстро. Поэтому, если вы редактируете видео или запускаете много приложений, функция подкачки может вам пригодиться.</p>
34 <p>У современных твердотельных накопителей для iPad есть большое преимущество - низкая задержка доступа, благодаря которой подкачка данных происходит очень быстро. Поэтому, если вы редактируете видео или запускаете много приложений, функция подкачки может вам пригодиться.</p>