Voltemos aos anos 70 e 80. Com um modelo de memória plana em modo real, um programa tem controle total de 64K de memória. Isso significa que, após o DOS ser iniciado, o programa pode sobrescrever a memória em que o DOS estava, assim como qualquer outro programa.
Diante disso, como o DOS conseguiu "retornar" após o encerramento do programa?
Responder1
Primeiro, o IBM DOS original foi lançado em 1981 com o PC IBM 5150 original, embora o sistema operacional CP/M no qual ele foi baseado existisse na década de 70.
Acho que a melhor maneira de descrever isso é que o DOS trata sua memória principal (a "Área de Programa Transiente" ou TPA) como uma pilha.
Normalmente, o primeiro programa carregado é COMMAND.COM e está na parte inferior. COMMAND.COM pode pedir ao DOS para carregar e dar controle a outro programa - o binário é colocado na memória onde COMMAND.COM termina. Suponho que o DOS mantenha um ponteiro de "início de memória livre" para esse propósito. Quando o binário executa a chamada do DOS para encerrar, o DOS diminui o ponteiro de memória livre e a memória é "recuperada".
Como você só tinha um programa em execução por vez, não havia nenhuma preocupação com buracos ou fragmentos nesse esquema.
O DOS suportava TSRs, ou programas que seriam encerrados e permaneceriam residentes. Portanto, neste caso, o DOS não diminuiria esse ponteiro antes de retornar e o programa permaneceria na memória. Nenhuma provisão para removê-lo sem utilitários especiais de terceiros. Os TSRs poderiam conectar-se a funções DOS ou interrupções do sistema e, como tal, alcançar multitarefa limitada. OArtigo da Wikipédia sobre TSRsfornece informações mais detalhadas.
Mas sim, não há proteção de memória, então qualquer programa pode simplesmente destruir toda a RAM, incluindo onde reside o DOS, a qualquer momento. Nesse caso, a execução da chamada de retorno do DOS travaria ou se comportaria de maneira imprevisível. Este esquema depende da cooperação dos programas e não há fiscalização. Você pode até sobrescrever completamente o DOS, é isso que o LOADLIN
programa faz - é um carregador Linux para DOS. Acho que o Netware era da mesma forma, usava o DOS para inicializar, mas basicamente o sistema operacional do Netware substituiu o DOS na RAM durante o carregamento.