1、MS-DOS的进程控制块程序段前缀与环境块;,第9章 实例分析: MS-DOS操作系统,1.,2.,3.,本章讲述内容:,4.,MS-DOS对常规内存的管理以及地址的“分段”表示 法;,MS-DOS的文件分配表和树型目录结构 ;,MS-DOS的设备头链以及对块设备、字符设备的不同管理方法 。,MSDOS.SYS :DOS的内核,管理对磁 盘文件的操作、内存、外部设备以及其他系 统资源,为用户提供使用DOS和资源系统调用。,硬件接口和设备,9.1 MS-DOS的处理机管理,9.1.1MS-DOS的基本组成,MS-DOS的基本组成,1.,BOOT:是一个极短的引导程序,先检查哪个磁盘驱动器为DOS
2、的系统盘,再检查系统盘根目录下的头两个文件是否是IO.SYS和MSDOS.SYS。若为真,则把IO.SYS文件读入内存,完成系统的引导任务。,.,IO.SYS (BIOS接口模块),ROM-BIOS,MSDOS.SYS (DOS内核),COMMAND-COM (命令处理模块),BOOT (引导程序),键盘命令,用户,用户程序,MS-DOS操作系统,上层,中层,上层,.,IO.SYS及ROM-BIOS:是输入/输出管理模块,有两个部分:系统盘上的IO.SYS,是进行输入/输出的接口模块;固化在ROM里的BOM-BIOS,是具体的设备驱动程序。,.,.,COMMAND.COM:命令处理程序模块,是
3、 MS-DOS操作系统与用户之间的接口。它接收用户输入的各种DOS命令,解释后加以执行。,COMMAND.COM的常驻内存模块(CCPR)与暂驻内存模块隔着可用存储空间相对而放。该模块很小,主要是一个检查并重新安装暂驻模块的程序。,COMMAND.COM暂驻内存模块(CCPT),2.,DOS的层次结构,COMMAND.COM在内存由两部分组成:一是COMMAND.COM的暂驻内存模块(CCPT),一是COMMAND.COM的常驻内存模块(CCPR)。它们分散存放在不同的区域里。,COMMAND.COM常驻内存模块(CCPR),系统配置区,MSDOS.SYS模块,IO.SYS模块,DOS与ROM
4、-BIOS通信区,ROM-BIOS工作区,中断向量表,640K,0,高端,低端,内存可用 存储空间,.,.,COMMAND.COM的暂驻内存模块(CCPT)定位在内存储器(640K)的最高端,这个区域实际上是整个内存的可用存储空间,即可以分配给用户程序使用的空间。因此,如果用户程序很大的话,就有可能将其覆盖掉。,.,.,MS-DOS三大模块形成层次结构:命令处理程序是人-机界面,体现MS-DOS的外部特性,在最上层,便于与用户进行交往;DOS内核实行文件管理,兼管外部设备,处于中间层;BIOS与计算机硬件关系密切,所以放在最下层。,9.1.2 MS-DOS的进程,1.,2.,MS-DOS是一个
5、单用户操作系统,MS-DOS的进程,.,MS-DOS只对进程的建立和终止提供系统调用,由于不支持并发,因此也就没有提供进程调度的能力。,MS-DOS里,进程是指一个已调入内存、当前正在执行的或未执行的程序。它由三部分构成:程序段(包括代码、数据、堆栈),程序 段前缀(PSP),环境块(EVB)。,MS-DOS在内存可用存储空间里为程序段分配一个用户地址空间加上256个字节的连续分区。这256个字节,就是该程序的“程序段前缀(PSP)”,即进程的进程控制块。,.,.,MS-DOS中,全部资源总是由运行的那个进程使用,进程不会因为申请不到资源而被阻塞。因此,对于MS-DOS的进程来说,没有什么进程
6、状态的变化可言。,.,由于MS-DOS内核不可重入,对内存管理未采取安全措施,对输入/输出缺乏保护机制,因此MS-DOS本身没有向用户提供多任务的运行环境。,.,程序段前缀(PSP),程序段前缀(PSP),程序 (代码、数据、堆栈),256字节,MCB,.,程序段前缀的作用,通过程序段前缀,能得到进程的程序段以及环境块在什么位置。,(1),在程序段前缀里,设置了文件打开表(JFT)。因此,通过程序段前缀,能够得到该进程对系统软件资源的使用情况。,(2),(3),程序段前缀里存有返回的地址,有调用者的PSP地址。这样,根据返回地址可把控制从子进程返还给父进程。另外,DOS还将按照子进程里记录的P
7、SP地址,把调用者的PSP地址送入“ 当前PSP ”单元。确保能顺利地从子进程切换到父进程。,.,环境块(EVB),环境块由一系列格式为“变量名=参数”的环境参数组成,以便为进程的运行提供良好的环境。通常把DOS中的进程环境块视为进程控制块的扩充,即是进程的扩充控制块。,程序段前缀,程序 (代码、数据、堆栈),*,环境块,MCB,*,EVB,PSP,一个内存分区,另一个内存分区,.,为管理空闲的和已分配的内存分 区,DOS在每个分区前开辟一个固定 区域,称为“内存控制块(MCB)”。 在MCB里,有“分区使用标志”。当一 个分区已分配时,在此填写该分区的 起始地址。而环境块的“分区使用标志”,
8、 填写的仍是它所依附的进程的PSP地址。,内存控制块(MCB),带参数%0%9的复杂批处理文件 。其中%0是批处理文件名本身,%1%9出现在批处理程序中。调用时,用实际参数替换%1%9 。,命令处理模块(COMMAND.COM)提供了一组操作命令,用户可通过键盘键入。功能简单、使用频率高的操作命令为“内部命令” ,它们在COMMAND.COM暂驻内存模块里。“外部命令”是使用频度较小的命令,以文件的形式存放在磁盘上。当暂驻内存模块接收到一个外部命令时,须先将它从磁盘读入内存,然后再执行。,DOS中,以.BAT为扩展名的文件是所谓的“批处理”文件。若希望多次重复执行若干条命令,或有选择地执行不同
9、的命令,就可把它们编成一个批处理程序来完成。,9.1.3 MS-DOS的作业管理,1.,MS-DOS的命令处理(联机方式),.,2.,MS-DOS的批处理(脱机方式),.,DOS向用户提供专门用于编写批处理程序的一些语句,以便能够在这种程序里实现分支、循环、嵌套等程序结构。,.,DOS的三类批处理文件,(1),由用户自己编写的、不带参数的普通批处理文件。,(2),(3),名为AUTOEXEC.BAT的自动执行批处理文件,它总是位于系统启动盘根目录上。只要该文件存在,DOS启动时它就会被自动执行。,9.2.1 MS-DOS对常规内存的管理,1.,对常规内存的基本管理思想,MS-DOS对常规640
10、K内存的管理,采用的是静态式分区存储管理技术,向用户提供多种存储分配策略,每一个调入内存的程序,无论当前是否处于执行,DOS都为其分配一个连续的内存分区。,9.2 MS-DOS的存储管理,.,.,MS-DOS规定,从地址0 开始每16个字节为一个“ 节 ”,它是进行存储分配的单位。,为管理内存中所有已分配和空闲的分区,DOS在每个内存分区前都开辟一个16字节(即一个节长)的区域,在它里面存放该分区的尺寸和使用信息。这个区域称为是该内存分区所对应的 “ 内存控制块(MCB)”。,.,分区性质标志,分区使用标志,分区尺寸,保留区,分区的内存控制块(MCB),16个字节,MCB,MCB,分区尺寸,分
11、区尺寸,一个分区,一个分区,内存储器(640K),(放大),2.,常规内存分配的三种策略,从最低地址的MCB开始,顺着MCB链往下搜索,链上第一个满足申请尺寸的空闲分区是分配对象。从该分区开始的低地址处往高地址方向划分出相当尺寸的分区进行分配,剩余部分形成一个新的空闲分区。,.,这样管理内存分区后,各分区间有这样的关系:从一个内存控制块的起址出发,加上一节长度(即16个字节),就到达该控制块所管理的内存分区;再加上该分区的长度(它记录在内存控制块里),就到达下一分区的内存控制块的起始位置。于是,通过MCB组成了一个管理内存分区的MCB链。,.,最先适应法,.,最佳适应法,从最低地址的MCB开始
12、,从MCB链上所有满足申请尺寸的空闲分区中选出最小的那个分区作为分配对象。从该分区开始的低地址处往高地址方向划分出相当尺寸的分区进行分配,剩余部分形成一个新的空闲分区。,.,最后适应法,从最低地址的MCB开始,从MCB链上找出满足申请尺寸的最后那个空闲分区作为分配对象。从该分区高地址往低地址方向划分出相当尺寸的分区进行分配,剩余部分形成一个新的空闲分区。,分区性质标志=“Z” 分区使用标志=“0000H” 分区尺寸=768(节),3.,空闲分区的合并与回收,空闲分区的合并,.,MS-DOS通过“ 申请内存分区”系统调用来实施空闲分区分配。该系统调用的主要功能是根据当时采用的存储分配算法,先进行
13、空闲分区的合并,然后再分配。分区合并时,只考虑它后面分区的情形:若后面分区是空闲的,那就将两者合并成一个大的空闲分区。,分区性质标志=“M” 分区使用标志= 分区尺寸=512(节),欲释放的8K分区,MCB,当前释 放分区,分区性质标志=“Z” 分区使用标志=“0000H” 分区尺寸=256(节),空闲的4K分区 最后的一个分区,MCB,原先空 闲分区,常规内存(640K),空闲的12K分区 是最后一个分区,常规内存(640K),MCB,合并后 的分区,.,空闲分区的回收,MS-DOS是通过“释放 内存分区”系统调用来实施 分区回收工作的(在MS-DOS里,该系统调用的功能号为49H)。要注意
14、的是,该系统调用只管分区的回收,不过问是否需要进行空闲分区的合并。,MS-DOS规定,从任何一节开始的、最多64K(即4096节)大小的存储区域为一个“段”。由于一段最长为64K字节,因此一段内各单元的相对地址正好可用一个字长表示出来。,矛盾:用字长可以直接表示的存储空间小,由处理器地址引线可以直接访问的存储空间来得大(即实际的物理存储器大)!,9.2.2 PC机地址的构成“分段”表示法,1.,问题的提出,86系列各类处理器的内存地址引线数目如表所示。,.,.,存储器以字节为单位存储信息,每个字节有与之对应的地址。IBM PC机的字长是两个字节,即16个二进制位。因此用字长表示地址,可从0到6
15、5535。若用十六进制表示,则为0FFFFH。即16位字长的机器,可直接表示的存储空间是64KB。,地址引线数目,20 (A0A19),24 (A0A23),32 (A0A31),处理器,8086/8088,80286,80386/80486,最大物理空间,1MB,16MB,4096MB=4GB,.,2.,存储地址的“分段”表示法,根据段的定义,在MS-DOS中,段只能从内存的某个节开始划分,而不能从随便一个内存单元起划分。,.,MS-DOS把16个字节作为一个“节”,它是存储分配的单位。,.,.,.,MS-DOS中的段与非段,以8088为例,它的物理空间为1M。在该物理空间里,一个节的地址,
16、最后4位肯定是0!该特征说明可用一个字长表示一个节物理地址的高16位,将低4位理解为0。这样,1M存储空间里的任何一个地址就可用“分段”的方法表示出来了。,1节,0,00010H,1节,X,00020H,Y,Z,20K (一个段),12K (一个段),64K (一个段),1节,0,00010H,00018H,B,A,1M内存,1M内存,24K,78K,段的例子,非段的例子,以8088为例,存储单元0、00010H、00020H等都是节的开始地址。从0地址开始往下的、大小为20K的存储区域(0Y)构成一个段;从00010H地址开始往下的、大小为12K的存储区域(00010HX)构成一个段;从00
17、020H地址开始往下的、大小为64K的存储区域(00020HZ)构成一个段。,.,.,从00010H地址开始往下的、大小为78K的存储区域(00010HA)不是一个段,因为虽然它起始于一个节,但长度却超过了64K;从00018H地址开始往下的、大小为24K的存储区域(00018HB)不构成一个段,因为它没有在一节处开始。,3.,MS-DOS物理地址的形成,所谓存储空间地址的“分段”表示法,就是用“段址:段内位移 ”来表示20位的单元地址。其中,“段址 ”指某一段的起始地址,因段总是从节开始,低4位是0,故只需保存它的高16位,使用时再把低4位0补上;“ 段内位移 ”指在一个段内其单元相对于段址
18、的偏移量。,.,地址的分段表示法,1M内存,0002H:0000H=00020H,0002H:0001H=00021H,0002H:0002H=00022H,0002H:0003H=00023H,0002H:03FEH=0041EH,0002H:03FFH=0041FH,0 (0000H),1 (0001H),2 (0002H),3 (0003H),1022 (03FEH),1023 (03FFH),1K,段内位移,段址,段内位移,物理地址,16位段地址,添加4位,16位段内位移,20位物理地址,(做加法),0,0,0,0,.,由“段址:段内位移”形成一个物理地址的过程是: 在十六位段址的后面
19、添加4位,然后和十六位的段内位 移相加,从而得到所对 应的物理地址。,.,单元的物理地址是唯一的。但单元可划分在不同存储段,因此用“分段”法时,单元地址可能有不同表示。,9.2.3 MS-DOS的各种内存区域,1.,常规内存区,最开始的640K称为“常规内存区”,也称基本内存。通常存放MS-DOS操作系统以及大多数运行在DOS下的应用程序。DOS的存储管理就是针对这部分存储区里的“内存可用存储空间”进行的。,2.,上位内存区,3.,高端内存区,4.,扩展内存区和扩充内存区,0KB,640KB,1024KB(1M),1088KB,16MB,常规内存,上位内存 (UM),高端内存 (HMA),扩充
20、内存,扩展内存,在直接寻 址范围外,8086/8088直接寻址范围,在直接寻 址范围外,80286以上直接寻址范围,从常规内存最高端往上到1M的384K内存区域称为“上位内存区(UM)”。,按“段址:段内位移”方法,没有和有A20地址引线的CPU,在直接寻址范围上有64K的差异,于是把1024K到1088K之间的64K区域单独称为“高端内存区(HMA)”。,对8086/8088而言,1024K以上的区域已超出直接寻址范围。因此把这以上范围称为“扩展内存区”。对80286以上而言,1088K以上区域才超出CPU直接寻址的范围,因此这个区域被称为“扩充内存”。,引导扇:为整个 盘卷的第0扇区,它包
21、 含两部分内容:一是引导程序(BOOT),一是该盘卷的基本参数表(BPB)。,.,9.3 MS-DOS的文件管理,9.3.1 MS-DOS文件管理综述,1.,对软盘的格式化,文件分配表1 (FAT1),文件分配表2 (FAT2),根目录区,文件存放区,引导扇,一个盘卷:,.,文件分配表:记录普通和目录文件在文件存放区里占用的存储空间。系统设置两个完全一样的文件分配表FAT1和FAT2,以便必要时,能用另一个做恢复工作。,.,根目录区:用来存放盘卷根目录下的各个目录项内容。,.,文件存放区:存放普通文件和目录文件(除根目录以外)的内容。整个盘卷,去除引导扇、文件分配表、根目录区所占用的扇区后,剩
22、余扇区全作为文件存放区。,2.,对硬盘的格式化,.,对于硬盘,使用前必须经过如下3步处理:低级格式化、使用FDISK命令对硬盘进行分区、使用FORMAT命令进行高级格式化。,.,低级格式化的任务,一是对整个硬盘按磁头、按盘面划分磁道和扇区;一是对磁盘上的所有“坏”扇区做上标记。,用FDISK对硬盘分区,即把经低级格式化后的整个硬盘,按用户所需容量划分成不同类型的两种区域:一是主分区,在该分区存有操作系统,当系统从硬盘启动时,就由此分区取得对计算机的控制权;一是扩展分区,只作为数据盘使用。,.,.,主引导扇,整个硬盘:,分区1 (C:),分区2 (D:),分区3 (E:),(具体放大),一个分区
23、:,次引导扇,文件存放区,又一个扇区,一个扇区,根目录区,文件分配表2(FAT2),文件分配表1(FAT1),用FORMAT命令对 磁盘各分区进行格式化, 与对软盘进行格式化相当。 即把硬盘的一个分区视为 一张很大的软盘,对它进 行盘面的划分:有引导扇、 文件分配表区、根目录区 以及存放文件内容的文件存放区。,3.,MS-DOS文件的命名,MS-DOS的文件名由两部分组 成:基本文件名最多有8个字符,文件名中的字母,不区分大小写;基本文件名的后面可跟扩展名,扩展名以一个点开始,然后是1到3个字符,用来识别文件的性质。,.,.,在MS-DOS,从根目录出发、经过子目录、然后到达一个文件的路径,称
24、为该文件的路径名。路径名之间用字符“”进行分隔 。从根目录(“”)开始的路径为绝对路径。MS-DOS也有从当前目录开始的相对路径,并经常用字符“.”代表当前目录,用“”代表当前目录的上一级目录(父目录)。,1.,2.,.,9.3.2 MS-DOS的文件分配表(FAT),文件分配表,MS-DOS通过文件分配表,记录普通文件和子目录文件占用磁盘存储空间的情形。FAT中的表目从0顺序编号,表目0和1用于存放磁盘介质标志信息。因此,文件分配表从第2个表目开始,才真正用来记录磁盘空间的分配情形。,.,为配合文件分配表,文件存放区按簇的尺寸划分后,从2顺序编号。于是,文件分配表的第2个表目,对应磁盘文件存
25、放区上第2簇的使用情况(实际是第1簇)。一般地,文件分配表上第i个表目,就对应磁盘文件存放区上第i簇的使用情况。,.,文件总是占用存放文件区里的若干个簇,每个簇都有自己的编号。分配给文件的第一个簇的簇号,MS-DOS把它登记在该文件的目录项里,下一个簇的簇号登记在以其前一个簇的簇号为编号的文件分配表的相应表目中。这样一来,在文件分配表里形成了文件占用存储空间的“簇链”:从文件目录项里得到文件所在第1簇的簇号后,顺着文件分配表相应表目中记录的簇号,就能逐一找到该文件在盘卷中占用的簇。,簇链,.,向一个文件(包括子目录文件)里追加记录时,就要涉及簇的分配;删除一个文件或子目录,就会涉及到簇的释放。
26、,文件C:,文件B:,.,.,3.,文件分配表的作用,EOF,X,X,15,9,FREE,EOF,2,8,4,EOF,FREE,5,FREE,BAD,10,文件分配表(FAT),0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,3,文件C目录 项中首簇号,6,文件A目录 项中首簇号,12,文件B目录 项中首簇号,6,8,4,2,文件A:,12,5,9,3,15,10,MS-DOS文件采用的是链接文件这种物理结构。,.,存放在文件存放区里的文件长度,只受盘空间容量的限制。子目录文件是存放在磁盘文件存放区的,因此MS-DOS虽然对根目录里的目录项数有限制,但对子目录里的目
27、录项数没有限制,它只受限于盘空间的容量。,.,文件分配表起到了管理磁盘空间的作用。,.,MS-DOS把簇的链接指针 集中存放在FAT里,加快了定位 文件位置的速度,且使对文件既可顺序访,也可随机访问。,由于以簇为文件存储空间的分配单位,因此,每一个文件平均要浪费半簇,它是由内部碎片造成的浪费。,从根目录的一般文件目录项出发,得到的分支是叶子(即具体的文件);从根目录里的子目录项出发,得到的是一个枝杈(即一个子目录文件)。每一个枝杈又可以继续往下分出叶子或枝杈。,9.3.3 MS-DOS的树型目录结构,文 件 H,文 件I,文 件J,子目录项表,.,当前目录,父目录,文 件 G,子目录项表,.,
28、文 件 E,文 件F,子目录项表,.,子目录甲,子目录丙,子目录乙,文 件 C,文 件D,根目录项表,文 件 A,文 件 B,根目录,.,MS-DOS的每个盘卷都有一个根目录表,简称根目录。根目录里有很多目录项,它们可是一般文件的目录项,也可是子目录文件的目录项。整个根目录放在盘卷的根目录区里。,.,.,这种树型结构的优点是能够方便地组织和查找文件,在不同目录下允许出现重名。,每一个子目录表里,除具体的目录项外,还有目录项“.”和“”,分别表示当前目录和父目录。当一个目录表里仅包含“.”和“”时,才意味该目录表为空。,.,9.3.4 MS-DOS文件访问的实现,1.,系统文件表(SFT),表头
29、,一个表项(53个字节),子表1,子表2,0,1,2,3,4,5,6,7,n-2,n-1,系统文件表(SFT),表头,一个表项(53个字节),.,为提高文件访问速度,系统设置了“ 系统文件表(SFT) ” ,记录系统当前同时打开的文件的有关信息,起活动文件目录作用。,.,SFT包括两个子表:子表1由表头及5个表项构成,子表2由表头及n-5个表项构成,每一个表项占用53个字节。,.,子表表头的第一部分是一个指针,通 过它使两个子表链在一起,成为一个整体。 第二部分记录该子表表项的数目,子表1为5, 子表2是n-5。两个表的表目总数为n。用户打 开一个文件时,就在SFT里申请一个表目,把文件的目录
30、信息等从磁盘拷贝到表目中。,2.,文件访问的实现步骤,.,打开文件时,先用文件名查SFT。看该文件是否已被别人打开。若查到,说明该表目里是该文件的目录等信息,并获得SFT的表目序号m;若没有,则申请一个空闲的SFT表项,把文件的目录信息从磁盘拷贝到表目中,并获得SFT表目序号m。,.,.,到该进程程序段前缀的文件打开表JFT里申请一个表项,把得到的SFT表目序号m填入该表项内,并获得JFT表项的序号k,即句柄。,这样,进行文件访问时,就由文件的句柄k,查进程的文件打开表JFT,由JFT的表项里得到该文件在SFT里的表目序号m。通过序号m去查SFT,就得到该文件的目录内容等信息,于是可对文件进行
31、各种操作了。,系统文件表(SFT),进程A的程序段前缀,专用句柄 (04),i,j,k,m,m,文件打开表 (JFT),文件X的 目录项信息,句柄,一个表项,序号,9.4 MS-DOS的设备管理,9.4.1 MS-DOS设备管理综述,.,操作系统一方面要为每类设备提供一个设备驱动程序,以便能按照确定的规则进行计算机和设备之间的数据传输;另一方面要提供有关的系统调用,以便用户能够方便地使用设备。,.,在MS-DOS的IO.SYS里,有一组常用的标准字符设备驱动程序和块设备驱动程序,由它们支持系统提供的标准配置。MS-DOS也向用户提供添加新设备的手段,以便能方便地安装相应的设备驱动程序。,.,键
32、盘、显示器、打印机、调制解调器等属于字符设备。系统为每个字符设备配有一个逻辑设备名。MS-DOS把字符设备视为文件来处理,称其为设备文件。设备的逻辑设备名,就是这个设备文件的名字。,.,软盘驱动器、硬盘驱动器等都属于块设备,它们用于文件的存储,并以块为数据传输的单位。因此,块设备与文件管理紧密相连。在MS-DOS中,对块设备的管理与对字符设备的管理,在做法上有所不同。一个块设备驱动程序可以用来驱动、控制多个磁盘驱动器。系统对这些磁盘驱动器进行统一编号,每一个称为该驱动程序的一个“单元”。,策略程序指针和中断程序指针 :这是两个指向具体程序代码的指针。系统接到I/O请求后,形成请求包发送给策略程
33、序,它把请求包转送给中断程序。中断程序是设备驱动程序中真正实施I/O服务的部分,它分析请求包里记录的I/O命令,然后执行命令,并将执行结果存入请求包中。输入/输出任务完成后,进程在请求包里获得结果。,9.4.2 MS-DOS设备驱动程序的构成,1.,MS-DOS设备驱动程序的结构,由两部分组成:一是18个字节组成的设备头(DH),一是驱动程序代码。前者用于标识各个驱动程序并给出它的一些属性,后者用于进行实际的输入/输出。设备头起到设备控制块的作用。,下一个设备头指针,设备属性,策略程序指针,中断程序指针,设备名,中断程序代码,策略程序代码,设备头(DH) (18个字节),驱动程序 实际代码,一
34、个设备驱动程序,.,.,下一个设备头指针:系统中已安装的设备驱动程序,通过各自设备头里的这个指针,链接成一个队列,称为“设备头链”。,.,.,.,设备属性:指设备的类型,以及该设备具有的特性。MS-DOS用一个字来刻画设备的属性。,设备名:字符设备在此存放逻辑设备名;块设备在此存放该设备驱动程序所支持的单元个数。,对字符设备,“设备属性” 最低4位为4时,表示是NULL设 备,取值为3时为标准输入设备, 取值为2时为标准输出设备。从 图看,位于LOL里的是NUL设备头,链接在它后面的名为CON的是标准输入/ 输出设备,即是键盘和显示器。,2.,MS-DOS的设备头链,.,为构成设备头链,系统设
35、置了“系统内部参数表(LOL)”。在那里模仿设备头开辟了18个字节,组成所谓的“NUL”设备头。它代表一个没有具体驱动程序代码的、输入/输出设备名,它总是位于设备头链之首,由它与其他的设备头链接成队列。,.,1,3,CON,1,-1,PRN,0,其他,03H,1,设备属性,LPT1,1,指针,COM1,1,4,NUL,设备名,NUL的 设备头,系统内部参数表(LOL),块设备头 (3个单元A:,B:,C:),MS-DOS通过设备头中的“设备属性”来区分不同的设备。总的来说,设备分为两大类:“ 设备属性 ”最高位为1,表示是字符设备;为0,表示是块设备。,.,.,在图里,标明为块设备的设备头,其
36、“设备名”处填写的是十六进制的03H,表示该设备驱动程序要驱动、控制3个单元的磁盘驱动器。,9.4.3 MS-DOS对块设备的管理,1.,驱动器参数块DPB,MS-DOS为每个具体的磁盘驱动器建立一个驱动器参数块(DPB),它通过指针连接形成DPB链,且在每个DPB中都有一个块设备头指针,指向相关的块设备驱动程序。这样可通过盘符查找驱动器参数块链,从找到的驱动器参数块,就可以得到块设备的驱动程序(设备头),进而完成对块设备的输入/输出服务。,1,CON,0,03H,字符设备 驱动程序,块设备 驱动程序,3,0,02H,块设备 驱动程序,-1,1,NUL,4,A:,0号DPB,B:,1号DPB,
37、C:,2号DPB,D:,3号DPB,E:,4号DPB,系统内部参数表(LOL),驱动器参数块链,设备头链,NUL的 设备头,2.,磁盘缓冲区DBF,MS-DOS的每个缓冲区都由两部分组成:一个是512个字节的、存放数据信息的缓冲区;一个是用于管理的缓冲区控制块。,9.4.4 MS-DOS对字符设备的管理,1.,为标准设备开辟专用的句柄,.,MS-DOS把字符设备视为流式文件,每一个字符设备的逻辑名就是这个文件的名字。因此,对字符设备的读写操作全统一成为对文件的读写操作。,.,MS-DOS将最前面的5个句柄号(04)规定为专用句柄,仅供系统的标准设备占用,如表所示。,句柄号,SFT中序号,逻辑设
38、备名,对应的物理设备,用途,0,1,CON,键盘,输入,1,1,CON,显示器,输出,2,1,CON,显示器,错误输出,3,0,CON,第1个串行通信口,辅助输入/输出,4,2,CON,第1个并行通信口,打印,2.,自动打开AUX、CON、PRN三个字符设备文件,系统初启时,MS-DOS就先将AUX、CON、PRN三个字符设备文件打开。这表明这三个文件将占用系统文件表(SFT)的最前面的三个表目,这三个设备文件在SFT中的序号分别是0、1、2。,3.,继承主控程序COMMAND.COM打开的文件信息,COMMAND.COM是系统所有进程的祖先,在其程序段前缀里的专用句柄中,总是按右表第1、2列所示打开设备文件。这些信息也将出现在所建子进程程序段前缀的专用句柄中。,感谢使用本片!,