修正内存控制块 在另一篇介绍内存控制块MCB的文章中对这个东西有所介绍,当我们在高端地址为自己分配内存后,MCB中记录的这块内存是归属低端PSP的,使用DOS int 21h的4ch功能退出程序时,DOS会扫描内存MCB链,把所有属于这个PSP的内存块全部释放掉,为避免麻烦,我们必须修改一下这块内存的归属
把当前PSP设为新的PSP 在开始在高端地址执行之前,让高端地址的PSP成为当前PSP,也就是当前进程,使用DOS int 21h的50h功能调用
Largest executable program size 519K (531,440 bytes) Largest free upper memory block 0K (0 bytes) MS-DOS is resident in the high memory area. C:> 然后我们开始加载RAMDISK.SYS驱动程序: C:>loaddrv ramdisk.sys Load Device Driver From Command Line. Dos Ver5.0 or newer.
The Whowin Group 100k RAM Disk Drive = F: C:> 我们在看一下内存情况 C:>mem Memory Type Total = Used + Free ---------------- ------- ------- ------- Conventional 640K 228K 412K Upper 0K 0K 0K Reserved 0K 0K 0K Extended (XMS) 61,952K 64K 61,888K ---------------- ------- ------- ------- Total memory 62,592K 292K 62,300K
Total under 1 MB 640K 228K 412K
Largest executable program size 412K (421,504 bytes) Largest free upper memory block 0K (0 bytes) MS-DOS is resident in the high memory area. C:> 我们看到,空闲内存从原来的519K变成了现在的412K,少了107K,要知道,我们调入的驱动程序是一个空间为100K的RAM DISK,其数据空间就有100K,加上驱动程序、目录区、引导区等,107K应该是合理的。 我们在《如何写DOS下的设备驱动程序(二)》一文中曾经编写过一个程序可以列出所有的DOS下的驱动程序,我把这个程序叫showddh,我们来运行一下这个程序。 C:>showddh Device Driver Entry (011C:0048)
评论