7

Как многозадачность UNIX работала без виртуальной памяти? Разве приложениям по-прежнему не нужно отдельное пространство памяти? Или приложения должны были знать, что теперь все видимое пространство памяти принадлежит им?

(Обратите внимание, чтобы избежать путаницы: под "виртуальной памятью" я подразумеваю виртуализированную память, а не файл подкачки.)

2 ответа2

4

Старые версии Unix многозадачны путем замены. Когда задача достигла точки блокировки (например, в ожидании чтения), она была выгружена на диск, а другая задача была заменена.

В основном одна задача за раз может находиться в памяти, и все они были сопоставлены с одним и тем же набором областей памяти.

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

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

(Я не знаю, какую схему использует Linux.)

2

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

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

Существуют ли в настоящее время системы Unix, которые не используют виртуальную память?

Я предполагаю, что все современные версии Unix используют MMU.

uClinux - это версия Linux, которая не требует MMU и не использует виртуальную память. Но не ожидайте такой же уровень безопасности между процессами, как в реальном Linux. Это ОС для встроенных устройств для запуска доверенных прикладных программ.

Среда выполнения C даже поддерживает это?

Язык программирования C не привязан к Unix или Linux. И при этом это не требует виртуальной памяти. C может использоваться для программирования 8-битных микроконтроллеров. Библиотека времени выполнения зависит от версии операционной системы и компилятора. Существуют версии библиотеки времени выполнения C для uClinix для процессоров, которые не имеют MMU.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .