Каким образом DOS может возобновить работу после запуска программы с плоской моделью памяти в реальном режиме?

Каким образом DOS может возобновить работу после запуска программы с плоской моделью памяти в реальном режиме?

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

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

решение1

Во-первых, оригинальная 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 в оперативной памяти при загрузке.

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