70~80년대로 돌아가 보겠습니다. 리얼 모드 플랫 메모리 모델을 사용하면 프로그램이 64K 메모리를 완전히 제어할 수 있습니다. 이는 DOS가 프로그램을 시작한 후 프로그램이 DOS가 있던 메모리와 다른 프로그램을 덮어쓸 수 있음을 의미합니다.
그렇다면 프로그램이 종료된 후 DOS는 어떻게 "복귀"할 수 있었습니까?
답변1
첫째, 원본 IBM DOS는 1981년 원본 IBM 5150 PC와 함께 출시되었지만 이를 기반으로 한 CP/M 운영 체제는 70년대에도 존재했습니다.
내 생각에 이를 설명하는 가장 좋은 방법은 DOS가 주 메모리("임시 프로그램 영역" 또는 TPA)를 스택으로 처리한다는 것입니다.
일반적으로 로드된 첫 번째 프로그램은 COMMAND.COM이며 맨 아래에 있습니다. COMMAND.COM은 DOS에게 다른 프로그램을 로드하고 제어권을 부여하도록 요청할 수 있습니다. 바이너리는 COMMAND.COM이 끝나는 메모리에 배치됩니다. 나는 DOS가 이 목적을 위해 "사용 가능한 메모리 시작" 포인터를 유지한다고 가정합니다. 바이너리가 종료를 위해 DOS 호출을 실행하면 DOS는 여유 메모리 포인터를 감소시키고 메모리는 "회수"됩니다.
한 번에 하나의 프로그램만 실행했기 때문에 이 구성표에는 구멍이나 조각이 생길 염려가 없었습니다.
DOS는 TSR, 즉 종료되고 상주되는 프로그램을 지원했습니다. 따라서 이 경우 DOS는 반환되기 전에 해당 포인터를 감소시키지 않고 프로그램은 메모리에 남아 있게 됩니다. 특별한 타사 유틸리티 없이는 제거할 수 없습니다. TSR은 DOS 기능이나 시스템 인터럽트에 연결되어 제한된 멀티태스킹을 달성할 수 있습니다. 그만큼TSR에 관한 Wikipedia 기사더 자세한 정보를 제공합니다.
하지만 메모리 보호 기능이 없기 때문에 어떤 프로그램이든 DOS가 있는 곳을 포함하여 언제든지 전체 RAM을 폐기할 수 있습니다. 이 경우 DOS 반환 호출을 실행하면 충돌이 발생하거나 예기치 않게 동작합니다. 이 계획은 협력하는 프로그램에 따라 달라지며 시행은 없습니다. DOS를 완전히 덮어쓸 수도 있습니다. 이것이 바로 LOADLIN
프로그램이 하는 일입니다. 이것은 DOS용 Linux 로더입니다. Netware도 같은 방식이라고 생각합니다. 부팅에 DOS를 사용했지만 기본적으로 Netware OS는 로드할 때 RAM의 DOS를 대체했습니다.