目录 1
关于DOS的100个问题的启示 1
第一篇 BIOS层 1
第一章 DOS环境的建立:系统初始化SYS—INIT流程 1
1.1 ROM—BIOS开机自检过程概述 1
第一篇 BIOS层 2
图1.1 INT 19H流程 2
图1.2 IO.SYS的初始化程序 3
1.2 SYS—INIT过程概述 3
图1.3 MSDOS.SYS的初始化程序 3
图1.4 COMMAND初始化程序 3
图1.5 主引导扇区布局 4
1.3 第一阶段:硬盘主引导程序及BOOT 4
图1.6 主引导程序的流程 5
图1.7 B○○T执行时的内存布局 8
1.4 第二阶段:IO.SYS重装入程序 9
绪论 10
图1.8 BOOT程序的流程 10
图1.9 IO.SYS文件的结构 11
图1.10 I○.SYS重装入程序的流程 12
图1.11 执行SYS—INIT Ⅰ时的内存布局 13
1.5 第三阶段:SYS—INITI的实现流程 13
图1.12 供选择部份的构成 17
图1.13 SYS—INIT Ⅰ的完整流程 20
图1.14 SYS—INIT Ⅰ创建软驱DDTL的流程 28
图1.15 SYS—INIT Ⅰ创建硬盘D○S分区DDTL的流程 29
1.6 第四阶段:SYS—INIT Ⅱ与DOS—INIT 30
图1.16 执行SYS—INIT Ⅱ时的内存布局 31
图1.17 SYS—INIT Ⅱ前一部分的流程 32
图1.18 执行D○S—INIT时的内存布局 33
图1.19 DOS—INIT的完整流程 34
图1.20 执行DOS—INIT后的内存布局 37
图1.21 SYS INIT Ⅱ后一部分的流程 38
图1.22 处理CONFIG.SYS时的内存布局 40
图1.23 STACKS配置区的结构 43
图1.24 处理CCNFIG.SYS后的内存布局 44
1.7 第五阶段:COMMAND.COM的初始化流程 44
图1.25 执行COMMAND.COM时的内存布局 46
图1.26 COMMAND初始化程序的完整流程 47
第二章 IO.SYS驻留部份 50
2.1 DOS标准设备管理:5种常驻设备驱动程序分析 50
图2.1 传送到字符设备的参数块格式 62
图2.2 传送块设备的参数块格式 64
图2.3 从字符设备返回的参数块格式 64
图2.4 块设备返回的参数块格式 65
图2.5 常驻设备中断过程的主流程 67
图2.6 MS-DOS 3.30常驻设备支持的功能 68
图2.7 CON设备功能的实现流程 69
图2.8 AUX设备各功能的实现流程图 72
图2.9 PRN设备各功能的实现流程图 74
图2.10 CLOCK $设备各功能的实现流程图 77
图2.11 块设备01功能的实现流程图 80
图2.12 块设备02功能的实现流程图 82
图2.13 块设备04,08,09功能的实现流程图 84
图2.14 块设备的0DH,0EH功能的实现流程图 87
图2.15 块设备0FH功能的实现流程图 87
图2.16 块设备17H、18H功能的实现流程图 90
2.2 IO.SYS驻留部份接管的中断 91
图2.17 INT 13H功能主流程图(一) 92
图2.18 INT 13H的流程图(二) 93
第三章 可安装的设备驱动程序 96
3.1 DOS是如何接纳可安装的设备驱动程序的 96
图3.1 设备驱动程序安装后的内存片断 97
图3.2 一个设备头链表实例 97
图3.3 多设备头的设备驱动程序布局 98
图3.4 设备驱动程序的安装过程 99
3.2 可安装的设备驱动程序的编程原则及其模板 101
3.3 介绍DOS所提供的几个设备驱动程序 106
图3.5 换码序列的识别过程的有限自动机描述示例 112
3.4 安装设备驱动程序的新途径 113
图3.6 在命令行下装入设驱的程序流程 121
第四章 中断驱动的字符设备驱动程序 143
4.1 中断驱动的打印设备驱动程序 143
图4.1 不同的打印机适配器所使用的端口地址 143
图4.2 PRN设备的环形队列及扩大的环形队列示意图 153
4.2 中断驱动的异步通信设备驱动程序 157
图4.3 不同的异步通信口所使用的端口地址 158
图4.4 两台微机通过串行口互连的最简单形式 181
4.3 又一个中断驱动的字符设备:鼠标器驱动程序 183
4.4 中断驱动的磁盘设备初探 187
第二篇 DOS内核层 194
1.1 DOS保留中断 194
第一章 DOS总体布局 194
1.2 INT21各子功能分类及在DOS3.3/DOS5.0中的人口地址 195
1.3 内核数据区和数据结构 199
图1.1 DOS内部数据结构关系图 200
第二篇 DOS内核层 200
2.1 INT21的调用方式 202
第二章 DOS的公共处理例程 202
图2.1 INT 21H的总入口、总出口流程图 203
2.2 INT21H总人口及出口流程分析 204
2.3 DOS错误处理的设计与实现 205
图2.2 DOS错误处理总体思路图 206
2.4 DOS的几个正常和错误出口 207
2.5 DOS扩展错误、错误类型、错误位置、建议措施一览表 208
第三章 DOS文件系统综述 211
3.1 DOS文件系统的分类 211
图3.1 FAT文件系统的功能层次图 212
3.2 DOS文件系统的管理方法 213
图3.2 DOS文件系统总体关系图 214
3.3 DOS文件系统的总体构架 214
3.4 INT25H和INT26H—绝对磁盘读和写 215
图3.3 Enabledrive过程流程图 215
图3.4 读写盘过程流程图 216
图3.5 INT 25H/26H实现流程图 216
第四章 应用程序接口层 218
4.1 句柄处理 218
图4.1 Chkhandle过程流程图 219
图4.2 Gethandle-SFTptr过程流程图 219
4.2 传统文件控制块—FCB的处理 220
图4.3 FCB功能使用关系图 222
图4.5 Set—FCB—SFT过程流程图 224
图4.4 Apply—FCB—SFT过程流程图 224
4.3 SFT:系统文件表 225
图4.6 CHK—SFT过程流程图 225
图4.7 SFT、句柄、FCB关系图 228
4.4 当前目录结构—CDS 229
图4.8 Init-CDS过程的流程图 236
图4.9 Get-CDSptr过程的流程图 237
图4.10 Get-CurrDirName过程的流程图 238
4.5 字符串处理 238
图4.11 Modify-name过程的流程图 239
图4.12 Translatefilename过程的流程图 241
图4.13 FCB translatefilename过程的流程图 242
图4.14 FCB读写功能实现流程图 243
4.6 DOS文件系统各功能实现简图 244
图4.15 FCB打开及创建功能实现流程图 245
图4.16 删除文件功能实现流程图 246
图4.17 句柄文件打开功能实现流程图 247
图4.18 句柄读写功能实现流程图 248
图4.19 句柄文件关闭功能实现流程图 248
图4.20 FCB文件关闭功能实现流程图 249
图4.21 文件换名功能实现流程图 249
图4.22 文件时间日期功能实现流程图 250
图4.23 文件句柄复制功能实现流程图 250
图4.24 移动文件指针功能实现流程图 251
图4.25 取、置文件属性功能实现流程图 252
图4.26 扩展文件句柄数功能实现流程图 252
图4.27 分析FCB文件名功能实现流程图 253
图4.28 FCB取文件大小功能实现流程图 254
图4.29 查找文件功能实现流程图 255
图4.30 目录功能实现流程图 256
图4.31 取当前目录功能实现流程图 257
图4.32 取置DPB功能实现流程图 258
第五章 内核原语层 259
5.1 驱动器,参数表——DPB的处理 259
5.2 FAT、簇的处理 264
图5.1 FAT项组合图 265
图5.3 Get-Nextcluster过程流程图 266
图5.2 Get-FATvalue过程流程图 266
图5.4 Set-Nextcluster过程流程图 267
图5.5 簇链分配过程的流程图 268
图5.6 簇链释放过程流程图 269
图5.7 释放文件簇链过程流程图 269
5.3 目录项数处理 270
图5.8 取文件读写指针所对应的簇号过程流程图 270
图5.9 Read DIRsec流程图 271
图5.10 ModifyDirindex过程的流程图 272
图5.11 查找文件流程图 274
图5.12 查找文件规范串文件名流程图 275
图5.13 申请目录文件流程图 277
图5.14 创建目录项流程图 278
5.4 DOS文件系统的内部原语 278
图5.15 文件打开原语实现流程图 281
图5.16 文件创建原语实现流程图 282
图5.17 文件改名原语流程图 283
图5.18 取文件信息原语流程图 284
图5.19 置文件属性原语流程图 285
图5.20 文件闭原语流程图 286
图5.21 提交文件原语流程图 287
图5.22 删除文件原语流程图 288
图5.23 写原语流程图 290
图5.24 读原语流程图 292
图5.25 关闭指定进程的所有打开文件原语的流程图 293
图5.26 查找第一个匹配文件原语流程图 294
图5.27 查找下一个文件原语流程图 295
图5.28 创建子目录原语流程图 296
图5.29 删除子目录原语流程图 297
图5.30 检测子目录有效性原语流程图 297
图5.31 磁盘复位原语流程图 298
6.1 内核与BIOS的关系 299
第六章 设备驱动程序接口层 299
图6.2 DOS内核与设驱、RH头、DH头关系图 299
图6.1 设备驱动程序调用过程流程图 299
图6.3 开关设备过程流程图 300
6.2 块设备读、块设备写的实现 301
图6.4 读写区域划分示意图 301
图6.5 计算区域划分参数过程的流程图 302
图6.6 划分读写块实现流程图 303
图6.7 块设备写的实现流程图 304
图6.8 块设备读的实现流程图 307
6.3 介质检查 309
图6.9 介质检查各过程关系图 309
图6.10 介质检查流程图 310
图6.11 DOS严重错误处理总体思路图 311
6.4 严重错误处理及INT24的实现及编程 311
图6.12 块设备严重错误处理流程图 314
6.5 磁盘缓冲区 315
图6.13 DBUF的分配流程图 319
图6.14 DBUF释放流程图 320
图6.15 查找空闲DBUF流程图 321
图6.16 申请DBUF流程图 321
7.1 调用设驱的服务例程 322
7.2 INT23及lNT28的由来 322
第七章 实际I/O功能 322
图7.1 字符设备的I/O操作流程图 323
图7.2 ^C,^P处理流程图 324
7.3 各功能的实现 325
图7.3 0AH功能实现流程图 326
图7.4 06H功能实现流程图 328
图7.5 打印功能实现流程图 329
第八章 DOS内存分配和进程管理功能 335
8.1 DOS内存分配功能 335
8.2 DOS内存管理功能的实现流程 336
图8.1 申请内存分配功能的实现流程 337
图8.2 释放内存分配块功能的实现流程 339
图8.3 修改内存分配功能的实现流程 340
8.3 DOS进程管理功能 341
8.4 两个重要数据结构:EXE文件头和PSP详解 343
图8.4 EXE文件的静态相对段址示意图 344
8.5 DOS进程加载及装入功能的实现流程与程序清单 349
图8.5 DOS进程加载功能的实现流程 351
图8.6 DOS装入覆盖功能的实现流程 353
图8.7 折半划分后的内存布局 361
图8.8 EXE文件定位到内存块高段后的内存布局 362
图8.9 EXE文件的二进制信息表实例 368
8.6 DOS进程结束功能的实现流程与程序清单 377
图8.10 DOS加载执行与进程结束功能之间的对比 377
图8.11 DOS进程结束功能的实现流程 378
8.7 DOS的PSP创建/取置功能的实现流程 384
图8.12 DOS创建PSP功能的实现流程 386
第九章 IOCTL功能、码页功能及DOS内部服务功能 388
9.1 内核中的lOCTL功能及其重新认识 388
图9.1 DOS内核INT 21H/AX=4400H功能的流程 390
图9.2 DOS内核INT 21H/AX=4402H功能的流程 393
9.2 利用IOCTL功能为中断驱动的字符设备编程 405
9.3 码页功能与NLSFUNC 410
9.4 DOS内部服务INT 2FH/AH=12H功能 412
第十章 网络文件功能 423
10.1 文件共享 423
10.2 记录锁存 427
图10.1 5CH功能实现流程 429
10.3 检测局域网 432
10.4 识别站点 434
10.5 共享打印 435
10.6 网络重定向 437
10.7 五花八门的5DH调用 440
10.8 提交文件 442
10.9 小结 442
第十一章 DOS扩展:FASTOPEN与SHARE的原理及实现 443
11.1 FASTOPEN的作用与实现 443
图11.1 fastopen服务程序示意框图 445
11.2 SHARE的数据结构、功能及其实现 450
图11.2 SHARE所使用的数据结构网 454
图11.3 SHARE中“SCB创建或再次打开”子程序的流程 459
图11.4 SHARE中“并闭共享文件的SFT”子程序的流程 460
图11.5 SHARE中“关闭指定计算机的共享文件”子程序的流程 461
图11.6 SHARE中“以文件名关闭共享文件”子程序的流程 463
图11.7 两个锁定区域的六种相对位置 464
图11.8 SHARE“检测文件读/写时的锁定冲突”子程序的流程 466
图11.9 SHARE中“检查是否有打开模式等相同的句柄”子程序的流程 470
第三篇 MS—NET与IFS 473
第一章 问题的引入:Microsoft Network 473
1.1 分层结构中与DOS内核文件系统平行的分支 473
1.2 微机局域网的硬件特性 474
第三篇 MS—NET与IFS 475
图1.1 PC Network网络适配器硬件结构图 475
1.3 MS—NET的组成及其总体结构 477
图1.2 PC Network环境下的MS-NET总体结构 478
1.4 在不同层次实现网络文件系统的对比分析 478
图1.3 Novell Netware的总体结构 480
第二章 MS—NET的重定向服务程序 481
2.1 DOS内核与重定向接口 481
2.2 MS—NET的基石:NETBIOS 496
2.3 重定向服务程序的实现原理初探 507
第三章 MS—NET的文件/打印服务程序 511
3.1 文件服务程序概述 511
3.2 INT 2AH与前后台调度 511
3.3 文件服务程序所使用的数据结构 514
3.4 SMB请求的解释执行 515
第四章 可安装的文件系统IFS 517
4.1 IF重定向接口的奇妙用途 517
4.2 IFS的演示程序:Phantom驱动器介绍 518
4.3 利用IFS编程的一些构想 519
第四篇 DOS外壳层 521
图1.1 稳定状态下的DOS内存布局 521
第四篇 DOS外壳层 521
第一章 COMMAND.COM驻留部分总介 521
1.1 稳定状态下的DOS内存布局 521
1.2 各部份的功能介绍 522
第二章 COMMAND的暂驻部分 525
2.1 暂驻部分的主流程 525
图2.1 一般命令行的处理过程 526
图2.2 PROMPT子命令表的表项结构 527
图2.3 内部命令表的表项结构 528
2.2 对重定向操作及管道命令的处理 532
2.3 可安装命令的接口及其实现 535
2.4 DIR命令的实现流程 542
图2.4 DIR命令的显示过程流程 543
2.5 COPY命令的完整格式及实现流程 544
2.6 ERASE/DEL命令的实现流程 548
图2.5 ERASE/DEL命令的实现流程 549
2.7 其他内部命令的使用与实现 550
图2.6 RENAME/REN命令的实现流程 551
图2.7 cls命令的实现流程 553
图2.8 CTTY命令的实现流程 554
2.8 FOR命令的使用与实现 558
2.9 批处理命令的使用与实现 560
2.10 再论暂驻部份的完整流程 567
图2.9 COMMAND暂驻部分的完整流程 568
3.1 常驻部份的构成及其实现流程 575
第三章 COMMAND的常驻部份 575
图3.1 常驻部分加载执行子例程的流程 575
图3.2 COMMAND中INT23H服务程序的流程 576
图3.3 COMMAND中INT22H服务程序的流程 578
3.2 保留的lNT 2EH中断 582
4.2 批处理命令的增强 584
4.1 增强目录操作能力 584
第四章 COMMAND的改进方案 584
4.6 与汉字系统的融合 585
4.5 其他方面 585
4.4 环境块变量的编辑 585
4.3 命令行历史机制 585
1.1 多种内存的概念及区别 586
第一章 扩充内存和扩展内存 586
第五篇 DOS 5.0与DOS 6.O的新特性 586
图1.1 虚拟内存示意图 588
第五篇 DOS5.0和DOS6. 588
图1.2 DOS内存布局总图 589
1.2 从DOS6对UMB的管理的实现谈UMB的使用 589
图1.3 58H功能流程图 592
1.3 先进的80386存储管理 593
图1.4 48H功能流程图 593
图1.5 80386模式关系图 594
图1.6 80386和8086的物理地址形成对比图 595
图1.7 物理地址寻址示意图 596
图1.9 GDTR、LDTR示意图 597
图1.8 改变段寄存器示意图 597
图1.10 80386的段地址变换图 598
图1.11 分布功能示意图 599
图1.12 80386物理地址形成总图 600
图1.13 TLB算法流程 601
图1.14 TLB使用示意图 601
图1.15 XMS功能总体关系图 602
1.4 HIMEM.SYS与XMS 602
图1.16 DOS=HIGH时HIMEX.SYS的入口流程 605
1.5 EMS386.EXE与EMS 610
图1.17 扩展内存原理图 611
图1.18 55功能参数含义图 613
图1.19 56H功能控制流原理图 614
图1.20 56H功能参数含义图 614
图1.21 EMS功能总体关系图 615
1.6 虚拟控制程序接口VCPI 626
第二章 MSDOS 5.0和MSDOS 6.0总体结构的变化及原因 632
2.1 当DOS装入HMA中,DOS又是如何工作的 632
图2.3 2NT21 H A20切换流程 634
图2.2 4BDOH A20切换流程 634
图2.1 INT 23H、INT 24H、INT 28H调用流程 634
图2.5 DOS=HIGH时HMA中内存布局 635
2.2 DOS系统的静态和动态布局 635
图2.4 MS DOS.SYS的静态分布图 635
图2.6 DOS=LOW时常规内存布局 636
2.3 从DOS—INIT看DOS=HIGH的形成 637
图2.7 DOS—2NIT流程分析 638
图2.8 MSDOS模块安装流程 639
3.1 32位文件系统 641
第三章 DOS内核在功能和效率上的改进 641
3.2 先行缓冲区的使用 644
图3.1 使用先行缓冲器对256K字节的文件进行12800次顺序读写,所获得的性能改善图 644
图3.2 先行缓冲区管理总图 645
3.4 有趣的DOSKEY 646
3.3 EXEC功能的校正码到底是怎么回事? 646
第一章 C语言的高级应用 648
1.1 程序代码定位——先从汇编语言讲起 648
第六篇 DOS的高级编程启示与实例 648
1.2 内存模式 653
1.3 C语言启动代码 654
1.4 C语言的命令行处理 664
1.5 环境块的处理 669
1.6 如何用C语言编写设备驱动程序 671
1.7 用C语言编写中断驻留程序 694
2.1 TSR程序的分类 696
第二章 TSR编程 696
2.2 TSR的安装 696
2.3 TSR激活与弹出 700
2.4 INT9H、INT8H、INT1CH、INT16H、INT28H的截获技术 702
2.5 标准TSR识别技术 706
2.6 图形模式下弹出TSR 710
2.7 TSR的释放 718
2.8 利用SDA切换技术的TSR 724
第三章 调试器接口 729
3.1 调试器环境的建立 729
第六篇 高级应用篇 733
图3.1 DEBUG环讲建立及主循环框图 733
图3.2 INT22H流程图 734
图3.3 INT24H流程图 735
3.2 T、G、P命令的实现及用户态、管程态的互换原则 735
图3.4 下命令流程图 736
图3.5 P命令流程图 737
图3.6 INT1、INT3流程图 738
3.3 利用SDA技术扩展Debug功能 739
4.1 DOS为实现各国语言支持的总体设计 742
第四章 可翻译程序编程 742
4.3 国家码功能的使用 743
4.2 字符串翻译 743
图4.1 国家码的国家信息框图 744
4.4 怎样用国家信息 745
4.5 大小写转换 746
4.7 双字节引导字符集的使用 747
4.6 排序 747
4.8 小结 748
图5.1 命令解释器的大循环框图 749
第五章 命令解释器编程 749
5.1 命令解释器的基本要求和改进设计 749
5.2 其它命令解释器产品与COMMAND的比较 753
5.3 利用、定位、访问主环境块 754
5.4 批处理增强器 758
5.5 中断过滤程序 760
5.6 一个利用可安装的内部命令的实例 761
第六章 病毒的实现技巧和预防措施 775
6.1 计算机病毒的分类 775
6.2 计算机病毒的机制 775
6.3 计算机病毒的驻留方法及内存映象 776
6.4 检查内存中病毒的方法 777
6.5 病毒的截获技术 778
6.6 病毒的传染方法和磁盘映象 780
6.7 DIR_2病毒分析 781
第七章 DOS监视器 799
7.1 DOSSPY的设计 799
7.2 DOS监视器的一些实现技术 802
7.3 BIOSSPY的设计 808
中英文名词对照表 822
参考文献 823