Является ли функция «страница-диск», о которой Линус говорит в своей автобиографии, по сути концепцией подкачки, которую мы используем сегодня?

Является ли функция «страница-диск», о которой Линус говорит в своей автобиографии, по сути концепцией подкачки, которую мы используем сегодня?

В своей автобиографииПросто для развлеченияЛинус упоминает функцию «страница-на-диск», которая сыграла решающую роль в превращении Linux в достойного конкурента Minix и другим клонам UNIX того времени:

Я помню, что в декабре в Германии был парень, у которого было всего 2 мегабайта оперативной памяти, и он пытался скомпилировать ядро ​​и не мог запустить GCC, потому что GCC в то время требовал больше мегабайта. Он спросил меня, можно ли скомпилировать Linux с помощью меньшего компилятора, которому не требовалось бы столько памяти. Поэтому я решил, что даже если мне не нужна эта конкретная функция, я сделаю это для него. Это называется page-to-disk, и это означает, что даже если у кого-то всего 2 мг оперативной памяти, он может сделать так, чтобы казалось, что он больше использует диск для памяти. Это было где-то под Рождество 1991 года.

Page-to-disk был довольно большой вещью, потому что это было то, чего Minix никогда не делал. Он был включен в версию 0.12, которая была выпущена в первую неделю января 1992 года. Люди сразу же начали сравнивать Linux не только с Minix, но и с Coherent, который был небольшим клоном Unix, разработанным Mark Williams Company. С самого начала, добавление page-to-disk заставило Linux подняться над конкурентами.
Вот тогда Linux и взлетел. Внезапно появились люди, переходящие с Minix на Linux.

Он по сути говорит swappingздесь? Люди с некоторой исторической перспективой Linux, вероятно, поймут.

решение1

Да, это фактически подмена. Цитатазаметки о выпуске для версии 0.12:

Виртуальная память.

В дополнение к программе "mkfs" на корневом диске теперь есть программа "mkswap". Синтаксис идентичен: "mkswap -c /dev/hdX nnn", и снова: это записывает поверх раздела, так что будьте осторожны. Затем можно включить подкачку, изменив слово по смещению 506 в загрузочном образе на желаемое устройство. Используйте ту же программу, что и для настройки корневой файловой системы (но, конечно, измените смещение 508 на 506).

ПРИМЕЧАНИЕ! Это было протестировано Робертом Блюмом, у которого есть машина 2M, и это позволяет вам запускать gcc без большого количества памяти. ОДНАКО, мне пришлось прекратить его использование, так как мое дисковое пространство было съедено beta-gcc-2.0, поэтому я хотел бы услышать, что это все еще работает: я был совершенно не в состоянии создать раздел подкачки даже для элементарного тестирования примерно с Рождества. Таким образом, новые изменения могли просто дать обратный эффект для виртуальной машины, но я сомневаюсь в этом.

В версии 0.12 подкачка страниц используется для ряда функций, а не только для подкачки на устройство: загрузка по требованию (загрузка страниц из двоичных файлов только по мере их использования), совместное использование (совместное использование общих страниц между процессами).

решение2

Да, это именно та концепция, которая известна какпейджинг или подкачка. (Давным-давно эти термины имели несколько иное значение, но в 21 веке они стали синонимами, за исключением, возможно, контекста некоторых не-Unix операционных систем.)

Если говорить точнее, подкачка не была инновационной функцией: она была у большинства «серьёзных» систем Unix, и эта функция старше Unix. Подкачка превратила Linux в «серьёзный» Unix, тогда как MINIX предназначалась для образовательных целей.

Сегодняшняя подкачка — это все та же концепция. Эвристика для принятия решения о том, какие страницы сохранять и когда их сохранять, стала намного сложнее, но основной принцип остался.

решение3

Своппинг — это концепция, предшествующая виртуальной памяти и даже защите памяти: это просто означает размещение процесса на диске, чтобы освободить место для другого. У оригинального Unix было две странности в этом отношении: программы «общего текста», которые сохраняли программный код только один раз в памяти и выгружали только раздел данных. И у него был системный вызов «fork», который выгружал процесс на диск, не заменяя образ памяти и вместо этого оставляя копию (потомка) запущенной.

Page-to-disk, в отличие от подкачки, позволяет запускать процессы, которые не помещаются в физическую память. Для этого требуется вся защищаемая память, отображение памяти виртуальных адресов на физические адреса и перезапускаемый механизм ошибок страниц, который позволит изменить отображение с неотображенного виртуального адреса на разумно выбираемый физический адрес и возобновить команду, которую пришлось прервать из-за отсутствия отображения.

UNIX мог работать на процессорах 68000 (включая подкачку) без MMU и эффективно использовал MMU, если он был доступен для защиты памяти, но для того, чтобы фактически реализовать механизмы, позволяющие возобновить программу после ошибки страницы, потребовался 68010.

80386 во многих отношениях был паршивым и устаревшим дизайном. Но его встроенный MMU и способность правильно обрабатывать сбои страниц сразу же сделали его более жизнеспособным для UNIX-подобных систем, которые могли не просто производить подкачку, но и выполнять запись страниц на диск.

Это своего рода историческая ирония, что эта великая жертва кремния (полноценный MMU и конструкция ЦП с возможностью виртуализации заняли довольно много места на кристалле) ради богов современных систем была в основном принята любителями, а «крупные игроки», такие как Xenix и OS/2, в конечном итоге отошли на второй план.

Хотя «ничего не загружено и не запланировано к запуску» можно назвать тем же, что и «подкачка», на самом деле это не предложение «все или ничего», как изначальное значение слова «подкачка».

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

Связанный контент