Давайте вернемся в 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 в оперативной памяти при загрузке.