Как исходное ядро ​​unix обращалось к памяти?

Для настройки пакетов, которые устанавливаются вместе с дистрибутивом, можно использовать такие приложения, как Remastersys и live-magic.

Они позволяют либо клонировать существующий дистрибутив, либо с помощью мастера настроить новый.

Быстрый поиск в Google по debian custom distro привел к этой статье (среди прочих), которая, кажется, охватывает основы:

Build Your Own Linux Distro | Linux Voice

4
25.12.2016, 17:30
2 ответа

Виртуальная память почти на десятилетие старше Unix: она была в Burroughs B5000 в 1961 году. Она не имела MMU в современном смысле (т.е. основанного на страницах), но обеспечивала те же основные функции. IBM System/360 Model 67 в 1965 году (все еще старше Unix) имел MMU. Процессоры Intel x86 получили MMU только в модели 80386 в 1986 году.

Реализация системы Unix на самом деле не требует MMU. Она требует некоторой формы виртуальной памяти, иначе реализация системного вызова fork непомерно сложна. Системный вызов fork, для создания процессов путем копирования существующего процесса, был фундаментальной частью Unix с самой первой версии, поэтому он требует виртуальной памяти. См. D. M. Ritchie and K. Thompson, The UNIX Time-Sharing System, CACM, 1974, §V "Процессы и образы".

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

Хотя практически все реализации Unix обеспечивают изоляцию процессов, это не относится к некоторым историческим реализациям на аппаратном обеспечении, которое не имело защиты памяти (как в 1970-х, так и в 1980-х годах с MINIX на 8088 и 80286). Защита памяти в некоторой степени ортогональна виртуализации адресов; MMU обеспечивает и то, и другое, простая сегментированная архитектура - нет, MPU¹ обеспечивает защиту без виртуализации. Существует реализация Linux для систем без MMU, uCLinux, но из-за отсутствия fork многие программы не могут быть запущены (единственная поддержка fork - vfork которая требует execve вызова в дочерней системе сразу после этого).

¹ MPU (блок защиты памяти) записывает права доступа для каждой страницы памяти.

6
27.01.2020, 20:49

Для защиты памяти не требуется MMU подкачки.

Модули MMU подкачки решают множество более сложных проблем, таких как фрагментация памяти (недоступность больших блоков) и mmap (сохранение в памяти только недавно использованных частей файла). Кроме того, блоки MMU подкачки необходимы для реализации «унифицированного кэша страниц» для кэширования обращений к файлам во всех процессах.

Но базовая защита памяти может быть реализована только с помощью более простой «сегментации», которая, вероятно, была доступна для ранних реализаций Unix. Например, защищенная память ядра может быть помещена в сегмент, для которого установлено значение «нет доступа» при выполнении кода пользовательского режима. Даже в современной ОС Linux с разбивкой на страницы системные вызовы brk () и sbrk () существуют как ограничения совместимости со времен сегментированных реализаций.

По сути, сегментация подобна постраничному MMU, за исключением того, что вы получаете только фиксированное количество «страниц» переменного размера (фактически называемых сегментами) вместо переменного количества страниц фиксированного размера.

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

2
27.01.2020, 20:49

Теги

Похожие вопросы