Вернемся к 70-м и 80-м годам. С моделью с плоской памятью реального режима программа имеет полный контроль над 64Кб памяти. Это означает, что после запуска DOS программа может перезаписать память, в которой находилась DOS, а также любую другую программу.

Учитывая это, как DOS смог "вернуться" после выхода из программы?

1 ответ1

0

Во-первых, оригинальная IBM DOS была выпущена в 1981 году с оригинальным ПК IBM 5150, хотя операционная система CP/M, на которой она была основана, существовала еще в 70-х годах.

Я думаю, что лучший способ описать это состоит в том, что DOS рассматривает свою основную память ("временную область программы" или TPA) как стек.

Обычно первая загруженная программа - это COMMAND.COM, и она находится внизу. COMMAND.COM может попросить DOS загрузить и передать управление другой программе - двоичный файл помещается в память, где заканчивается COMMAND.COM. Я полагаю, DOS поддерживает указатель "начало свободной памяти" для этой цели. Когда двоичный файл выполняет вызов DOS для завершения, DOS уменьшает указатель свободной памяти и память "освобождается".

Поскольку у вас была запущена только одна программа, в этой схеме не было никаких проблем с дырами или фрагментами.

DOS действительно поддерживал TSR, или программы, которые прекращали работу и оставались резидентами. Таким образом, в этом случае DOS не уменьшит этот указатель перед возвратом, и программа останется в памяти. Нет условия для его удаления без специальных сторонних утилит. TSR могут подключаться к функциям DOS или системным прерываниям и, таким образом, достигать ограниченной многозадачности. Статья в Википедии о TSR предоставляет более подробную информацию.

Но да, защита памяти отсутствует, поэтому любая программа может в любое время просто удалить всю оперативную память, включая место, где находится DOS. В этом случае выполнение обратного вызова DOS приведет к аварийному завершению или непредсказуемому поведению. Эта схема зависит от программ, сотрудничающих друг с другом, и не применяется. Вы даже можете полностью перезаписать DOS, это то, что делает программа LOADLIN - это загрузчик Linux для DOS. Я думаю, что Netware был таким же образом, он использовал DOS для загрузки, но в основном ОС Netware заменяла DOS в оперативной памяти при загрузке.

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