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>