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