操作系统:第8章.ppt_第1页
操作系统:第8章.ppt_第2页
操作系统:第8章.ppt_第3页
操作系统:第8章.ppt_第4页
操作系统:第8章.ppt_第5页
已阅读5页,还剩113页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章实例分析:MS-DOS操作系统,MS-DOS是Microsoft公司为IBMPC系列微机研制的一个单用户、单任务的磁盘操作系统。1981年8月,MS-DOS1.0版诞生。它占据当时机器64KB内存中的12KB,支持5.25英寸软盘。随着时间的推移,MS-DOS不断地更新版本,1983年3月,推出MS-DOS2.0版,1984年8月,推出MS-DOS3.0版。MS-DOS3.0版有很多的改进版,比如3.1、3.2、3.3等。1988年7月,MS-DOS4.0版出现。1991年4月发布了MS-DOS5.0版。目前,可见MS-DOS的最高版本为7.X。,退出,正是由于MS-DOS随时根据市场的需求被不断地完善,才使它具有如此顽强的生命力,才能够获得如此广泛的普及与应用。1995年8月,Microsoft公司推出了窗口操作系统Windows95。由于它精美的外观、菜单式操作以及友好的界面,从而对MS-DOS产生了极大地冲击。但是,MS-DOS的实现原理、设计技术和方法,仍然可以给予人们很多的启迪和借鉴。,本章着重讲述四个方面的内容:(1)MS-DOS的进程控制块程序段前缀与环境块;(2)MS-DOS对常规内存的管理以及地址的“分段”表示法;(3)MS-DOS的文件分配表和树型目录结构;(4)MS-DOS的设备头链以及对块设备、字符设备的不同管理方法。,8.1MS-DOS的处理机管理8.2MS-DOS的存储管理8.3MS-DOS的文件管理8.4MS-DOS的设备管理,8.1MS-DOS的处理机管理,8.1.1MS-DOS的基本组成MS-DOS采用的是层次模块结构,由一个引导程序和三个程序模块组成,如图8-1所示。各部分的功能如下:,BOOT(引导程序):引导程序BOOT是在磁盘初始化时,由格式化命令FORMAT写在软盘的第0扇区或硬盘的主引导扇区上的。它是一个极短的程序,主要的任务是检查哪个磁盘驱动器为DOS的系统盘,然后再检查系统盘根目录下的头两个文件是否是IO.SYS和MSDOS.SYS。如果为真,则把IO.SYS文件读入内存,从而完成引导任务。可见,DOS的引导程序只在系统启动时起作用。,IO.SYS及ROM-BIOS:这是MS-DOS的输入/输出管理模块。它由两部分构成:在系统盘上的IO.SYS,是进行输入/输出的接口模块;固化在ROM中的ROM-BIOS,是一个具体的设备驱动程序。在DOS系统初启时,由引导程序负责将IO.SYS装入内存,引导任务结束,转而执行IO.SYS中的系统初始化程序。该程序负责调入MSDOS.SYS;负责解释DOS系统的配置文件(CONFIG.SYS),设置系统的运行环境;负责装入COMMAND.COM模块。在系统运行过程中,接到输入/输出请求后,先由IO.SYS对命令加以解释,转换成有关的设备控制命令。然后再与ROM-BIOS中具体的设备驱动程序发生关联,进而完成用户所要求的输入/输出任务。,MSDOS.SYS:这是DOS内核,一方面实施对DOS磁盘文件的操作管理,另一方面还管理内存、外部设备以及其他系统资源,并为用户使用DOS系统和这些资源提供诸多的系统调用。COMMAND.COM:这是命令处理程序模块,是MS-DOS操作系统与用户之间的接口。它接收用户输入的各种DOS命令,解释后加以执行。它将负责设置DOS的有关中断向量;负责检查启动时有无DOS的自动执行批处理文件(AUTOEXEC.BAT)。若有,则调入执行;然后处于等待用户输入的状态。,COMMAND.COM在内存由两部分组成:一是COMMAND.COM的暂驻内存模块(CCPT),一是COMMAND.COM的常驻内存模块(CCPR)。它们分散存放在不同的区域中,如图8-2所示。,COMMAND.COM的暂驻内存模块(CCPT)定位在内存储器(640KB)的最高端,这个区域实际上是整个内存中的可用存储空间,即可以分配给用户程序使用的空间。因此,如果用户程序很大,就有可能将其覆盖掉。正因为这个原因,才把它称为“暂驻内存模块”。它的内容是:命令接收及解释程序、内部命令程序、批命令处理程序以及外部命令装入程序四个部分。从其组成可以看出,该模块负责接收并解释用户通过键盘键入的命令。如果是内部命令,则立即从此模块中调用相应的程序执行(DOS把常用的命令称为内部命令);若是外部命令(DOS把不常用的命令称为外部命令),则通过INT21H中断处理程序,将外部命令调入并执行。,COMMAND.COM的常驻内存模块(CCPR)与暂驻内存模块隔着可用存储空间相对而放。该模块很小,主要就是一个检查并重新安装暂驻模块的程序。DOS内部是这样设计的:总是让用户程序执行完毕后返回到CCPR。于是只要用户程序执行完,CCPR就会立即投入运行。它检查CCPT是否被用户程序覆盖,如果被覆盖,则启动重新安装程序,将CCPT从它所在的系统盘区调入到它所在的内存高端区域中。,DOS把它的COMMAND.COM模块分成两个部分,各占一个存储区:一个常驻,一个暂驻。存储区域虽然分隔两处,却是DOS完成命令处理的不可分割的整体,暂驻模块完成命令处理的主体工作,常驻模块确保系统的正常运行。DOS之所以这样精心地安排COMMAND.COM,主要是为了给用户提供尽可能大的存储空间,提高整个内存储器的利用率。,MS-DOS的三大模块(IO.SYS、MSDOS.SYS、COMMAN.COM)形成了一个层次结构:命令处理程序(COMMAN.COM)是人-机界面,是体现MS-DOS操作系统外部特性的模块,因此它应该在最上层,以便与用户进行交往;DOS内核(MSDOS.SYS)主要是实行文件管理,也兼管外部设备,它起到呈上启下的作用,因此处于中间层;BIOS与计算机硬件关系密切,所以放在最下层。层次结构使系统清晰,有条理。,8.1.2MS-DOS的进程1程序段前缀(PSP)在MS-DOS中,由代码、数据、工作栈组成的用户程序,最终通过连接,形成一个扩展名为.EXE的可执行浮动代码程序,这个程序的地址空间就是用户作业的逻辑地址空间。当通过系统调用EXEC调用它时,就在内存可用存储空间里为其分配一个连续的分区(可以看出,MS-DOS实行的是可变式分区存储管理方案),成为它的绝对地址空间。但是要注意,这个分区的尺寸不等于用户地址空间大小,而是用户地址空间加上256个字节,如图8-3所示。这个加在程序绝对地址空间前面的256个字节,就是该程序的程序段前缀(PSP),也可以说是DOS进程的进程控制块。,2环境块(EVB)在MS-DOS中,进程的程序段与程序段前缀总是被分配在同一个内存分区中,环境块则被安排在另一个分区。进程的环境块由一系列格式为“变量名=参数”的环境参数组成,以便为进程的运行提供一个良好的环境。正因为如此,可以把DOS中进程的环境块视为进程控制块的扩充,即是进程的扩充控制块。进程程序段前缀与环境块之间的联系,如图8-4所示。它用到了DOS对常规内存管理中设置的数据结构内存控制块(MCB)。下面为此做一些解释。,为了管理空闲的和已经分配的内存分区,MS-DOS在每个分区的前面开辟一个固定的区域,这就是该分区的内存控制块(MCB)。在MCB中,有一项“分区使用标志”。当一个分区已经分配时,在此填写该分区的起始地址。比如,对于程序和程序段前缀所在的分区,它的MCB中所填写的正是程序段前缀PSP的起始地址,即图8-4中标有“*”的指针所示。对于环境块的“分区使用标志”,在使用上有一些特殊,即在这里填写的不是自己所在分区的起始地址,填写的仍然是它所依附的进程的PSP地址,即图8-4中标有“*”的指针所示。这样一来,DOS的进程控制块(即PSP)中有指向其环境块的指针,而环境块能从自己MCB的“分区使用标志”中得到进程控制块的地址,一个进程的程序段前缀与环境块之间就这样被联系在一起了。,8.1.3MS-DOS的作业管理鉴于MS-DOS的单用户、单任务,其内存中不可能允许有多个作业并存的情形出现,因此也就没有作业调度的问题。不过,DOS既提供有脱机的作业控制方式(成批处理作业),也提供有联机的作业控制方式(键盘命令或者菜单)。,1MS-DOS的命令处理(联机方式)MS-DOS中的命令处理模块(COMMAND.COM)提供了一组操作命令,用户可以通过键盘键入命令。MS-DOS把功能简单、使用频率较高的操作命令称为“内部命令”。如前所述,内部命令程序都在COMMAND.COM暂驻内存模块中。只要暂驻内存模块在内存,在接收到输入的一条内部命令时,就能够直接调用到它并执行。外部命令是一些使用频度较小的命令。它们都是以一个个文件的形式存放在磁盘上。当在内存的暂驻内存模块接收到一个外部命令时,必须先将它从磁盘上读入内存,然后再执行。所以,外部命令的执行要比内部命令的执行多一个读盘的过程。,图8-5给出了在MS-DOS管理下,从一个FORTRAN语言源程序的建立到执行完毕的整个作业管理过程。作为MS-FORTRAN3.3编译系统,由六个文件组成:FOR1.EXE、FORTRAN.LIB、LINK.EXE、FOR2.EXE、LIB.EXE和MATH.EXE。将FORTRAN源程序从编辑到运行,可以分为四步走:编辑过程、编译过程、连接过程和执行过程。如果出错,每一步都有可能循环重复再做。如图8-5的中间所示。,(1)源程序的建立。启动DOS,运行一个文字编辑软件,比如DOS自带的EDLIN(见图8-5右侧用户命令所示),就可以输入FORTRAN的源程序了,假定为该源程序起名为:ZONG.FOR。这就是源程序的编辑阶段。(2)编译。FORTRAN源程序需要经过两次编译才能够生成目标程序。第一趟编译由MS-FORTRAN3.3的FOR1.EXE完成,功能是词法分析,产生中间文件供第2趟编译使用。第2趟编译由FOR2.EXE完成,功能是进行语法、语义分析,最终产生目标代码,文件名为ZONG.OBJ。这是一个浮动代码程序,还不能直接投入运行。为了完成编译,用户在键盘上直接键入命令FOR1和FOR2即可。,(3)连接装配。在键盘上键入命令LINK,调用FORTRAN的LINK.EXE,对目标程序ZONG.OBJ与函数库以及其他已经过编译的目标程序进行连接装配。经过这一步所产生出来的就是可执行文件ZONG.EXE。(4)运行。连接装配后所产生的是一个可以直接投入运行的程序。在DOS提示符下,键入命令ZONG,就可以得到所希望的结果。,这是MS-DOS为用户提供的联机作业控制方式。在整个控制过程中,是否下一步进行什么工作,何时进行下一步工作,以及怎样进行下一步工作,都完全由用户来加以控制。从表面上看,MS-DOS并没有向用户提供显式的作业控制命令。其实,这一切都隐含在DOS的命令处理程序COMMAND.COM中,该程序负责接收键盘输入的各种命令。另外,在MS-DOS下,任何一个可执行程序都等同于一个外部命令。因此,在键盘上键入EDLIN、FOR1、FOR2、LINK和ZONG等,MS-DOS都会到磁盘上把相应的程序读入内存,然后执行,从而达到控制作业运行的目的。,2MS-DOS的批处理(脱机方式)在MS-DOS中,以.BAT为扩展名的是所谓的“批处理”文件。如果希望多次重复执行若干条命令(注意,这不仅指DOS提供的命令,它也包含任何一个可执行程序),或希望有选择地执行不同的命令等情形,就可以把它们编写成为一个批处理程序,以完成这样的任务。批处理文件无须编译,只要键入文件名,就由COMMAND.COM模块一条一条地读入并解释执行。,MS-DOS向用户提供专门用于编写批处理程序的一些语句,以便能够在程序中实现分支、循环和嵌套等程序结构。主要的有:ECHO(显示)、FOR(重复执行)、GOTO(无条件转移)、IF(条件判断)、PAUSE(暂停执行)、REM(注释)、SHIFT(移位替换参数)和CALL(嵌套调用另一个批处理程序)。,在MS-DOS中,有三类批处理文件,一是不带参数的普通批处理文件,它们是一些由用户自己编写的批处理文件。二是带参数的复杂批处理文件,在这种批处理文件里,可以出现参数%0%9。其中%0即是批处理文件名本身,%1%9出现在批处理程序中。调用时,用实际参数替换%1%9。三是名为AUTOEXEC.BAT的自动执行批处理文件,它总是位于系统启动盘根目录上。只要该文件存在,DOS启动时它就会被自动执行。因此,如果用户想启动后能有一个适合自己的工作环境,那么就可以把自己的设想编写进该文件中。,8.2MS-DOS的存储管理,自从DOS5.0版推出以来,使得MS-DOS的内存模式趋于复杂化,整个地址空间可以分为四个独立的区域(常规内存区、上位内存区、高端内存区、扩充内存区),各有其不同的大小与属性。之所以会造成这么复杂的存储结构,究其原因还是由于机器本身的结构引起的。为了保持与以往低版本的兼容性,MS-DOS的存储管理,仍然只局限于对常规的640K内存进行。本节主要介绍MS-DOS对常规内存的管理,另外也对MS-DOS的各种内存区域做一些说明。,8.2.1MS-DOS对常规内存的管理从总体上说,MS-DOS对常规640KB内存的管理,采用的是静态式分区存储管理技术,向用户提供多种存储分配策略,但又有其自身的某些特点。每一个调入内存的程序,无论当前是否正处于执行,MS-DOS都为其分配一个连续的内存分区。不过MS-DOS规定,从地址0开始每16个字节为一个“节”,它是进行存储分配的单位。比如,一个程序需要8K字节的存储空间,那么MS-DOS就分配给它512节,因为8192/16=512。为了管理内存中所有已分配的和空闲的分区,MS-DOS在每个内存分区的前面都开辟一个16个字节(即一个节长)的区域,在它的里面存放该分区的尺寸和使用信息。这个区域被称为是一个内存分区所对应的内存控制块(MCB)。其结构如图8-6所示。,一个分区的内存控制块里主要记录如下信息:分区性质标志:用于记录该分区是否是整个常规内存的最后一个分区。如果是“Z”,则表示是整个常规内存中的最后一个分区;如果是“M”,则表示是常规内存中的非最后一个分区。分区使用标志:用于记录该分区是一个已分配区还是一个空闲区。如果这里记录的是0000H,则表示这是一个空闲分区;如果是一个已分配的分区,则这里记录它所管理的那个分区的起始地址。,分区尺寸:用于记录除去MCB所占用的一节外,所管辖的整个分区的大小(多少节)。比如图8-7(a)给出了一个分区,从其分区性质标志为“Z”可以知道,它是整个内存中的最后一个分区;从分区使用标志为“0000H”可以知道,它是一个空闲分区,可以参与分配;从分区尺寸为512可以知道,它的长度是8KB。又比如,图8-7(b)给出了一个分区,从其分区性质标志为“M”可以知道,它是内存中的某一个分区;从分区使用标志为一个地址可以知道,它已经被分配,所管辖的分区的起始地址就在此记录着;从分区尺寸为512可以知道,它的长度是8KB。,MS-DOS采用这种方法管理内存中的分区后,在各分区之间建立起了这样一种关系:从一个内存控制块的起始地址出发,加上一节长度(即16个字节),就到达该控制块所管理的内存分区。在此基础上,再加上该分区的长度(它在内存控制块里记录着),就到达下一个分区的内存控制块的起始位置。于是,MS-DOS在各个分区之间虽然没有设置任何指针指向,但却通过上述方法,可以从一个分区的MCB出发,顺序找到下面各个分区的MCB,从中得到该分区的使用信息,犹如通过MCB组成了一个管理内存分区的MCB链。利用这种办法,也就能够实行分区的分配和释放操作了。,MS-DOS较高版本对常规内存的分配,提供了可做出选择的三种方法:(1)最先适应法:从最低地址的MCB开始,顺着MCB链往下搜索,链上第一个满足存储申请尺寸的空闲分区作为分配对象,然后MS-DOS从该分区开始的低地址处往高地址方向划分出相当尺寸的分区进行分配,剩余部分形成一个新的空闲分区。,(2)最佳适应法:从最低地址的MCB开始,顺着MCB链往下搜索,从链上所有满足存储申请尺寸的空闲分区中选出最小的那个分区作为分配对象,然后MS-DOS从该分区开始的低地址处往高地址方向划分出相当尺寸的分区进行分配,剩余部分形成一个新的空闲分区。,(3)最后适应法:从最低地址的MCB开始,顺着MCB链往下搜索,从链上找出满足存储申请尺寸的最后那个空闲分区作为分配对象,然后MS-DOS从该分区高地址往低地址方向划分出相当尺寸的分区进行分配,剩余部分形成一个新的空闲分区。系统初启时,MS-DOS默认的是最先适应法。如果希望采用新的存储分配策略,可以通过“获取或设置分配策略”系统调用达到目的(在MS-DOS中,该系统调用的功能号为58H)。在此系统调用中,包含两个子功能:0号子功能用于获得当前系统采用的分配策略;1号子功能用于重新设置分配策略。MS-DOS以00H代表最先适应法,01H代表最佳适应法,02H代表最后适应法。,MS-DOS是通过“申请内存分区”系统调用来实施空闲分区分配的(在MS-DOS中,该系统调用的功能号为48H)。该系统调用根据当时采用的存储分配算法,沿着MCB链去寻找一个满足条件的空闲分区加以分配。其功能主要是先进行空闲分区的合并工作,然后再进行分区的分配。要注意,在进行分区合并时,总是只考虑它后面分区的情形。如果后面分区是一个空闲的,那么就将两者合并成一个大的空闲分区,合并后的这个分区的“分区性质标志”应该呛喜暗暮笠桓隹障蟹智脑曛尽8-8给出了两个分区合并的情形。在图8-8(a)中,欲释放的内存分区为8KB(512节),在它的下面有一个原来就是空闲的分区,长度为4KB(256节)。图8-8(b)为合并后的情形,合并后的分区长度为12KB(768节),分区的使用标志是“0000H”,分区的性质标志是“Z”(最后一个分区)。,MS-DOS是通过“释放内存分区”系统调用来实施分区回收工作的(在MS-DOS中,该系统调用的功能号为49H)。要注意的是,该系统调用只管分区的回收,不过问是否需要进行空闲分区的合并。,8.2.2PC机地址的构成“分段”表示法要搞清楚MS-DOS的各种存储模式,就首先要了解PC机的地址结构。存储器是以字节为单位存储信息的,每个字节都有一个与之相对应的地址。IBMPC机的字长是两个字节,即16个二进制位。因此用一个字长来表示地址,可以从0到65535,若用十六进制表示,则为0FFFFH。这就是说,16位字长的机器,可以直接表示的存储空间是64KB。另一方面,86系列各类处理器的内存地址引线数目如图8-9所示。,这就产生了矛盾:用字长可以直接表示的存储空间小,由处理器地址引线可以直接访问的存储空间来得大(也就是说,实际的物理存储器要大)。就拿8088为例,这个矛盾具体表现为:16位字长可以表示的地址范围是0FFFFH(十六进制表示),即64KB;而通过20根地址引线能够直接访问的地址范围是0FFFFFH(十六进制表示),即1024KB=1MB,它需要用20个二进制位才能表示出来。用一个字长是无法表示的。,为了利用一个字长表示出地址引线可以直接达到的存储范围,在IBMPC机中,采用了构成存储器地址的“分段”表示法。前面已经提及,MS-DOS把16个字节算做一个“节”,用它做为存储分配的单位。另外,MS-DOS还规定从任何一节开始的、最多64KB(即4096节)大小的存储区域为一个“段”。由于一段最长为64KB字节,因此一个段内各个单元的相对地址正好可以用一个字长表示出来。特别要注意,根据段的定义,在MS-DOS中,段只能从某一个节开始划分,而不能从随便一个内存单元开始划分。,比如图8-10(a)中,仍以8088为例,它的物理地址空间为1MB,其中,存储单元0、00010H、00020H等都是一个节的开始地址(十六进制表示)。因此,从0地址开始往下的一个大小为20KB的存储区域(0Y)构成一个MS-DOS的段;从00010H地址开始往下的一个大小为12KB的存储区域(00010HX)构成一个MS-DOS的段;从00020H地址开始往下的一个大小为64KB的存储区域(00020HZ)构成一个MS-DOS的段。这些都是段的正确例子。又比如图8-10(b),从00010H地址开始往下的一个大小为78KB的存储区域(00010HA)不构成一个段,因为虽然它起始于一个节,但长度却超过了64KB,用MS-DOS的一个字长已无法表示出它里面含有的所有单元地址了;从00018H地址开始往下的一个大小为24KB的存储区域(00018HB)不构成一个段,因为它没有在一节处开始。,从图8-10(a)可以发现,在此物理空间里,凡是一个节的地址,其最后4位肯定是0。这是一个很重要的特征,也是一个很容易理解的特征:因为一节是16个字节,2的4次方为16,所以节的地址的最低4位只能是0。这个特征说明,可以用一个字长来表示一个节的物理地址的高16位,并理解它的低4位为0。有了这些基础,就可以把1MB存储空间里的任何一个地址用“分段”的方法表示出来了。,所谓存储空间地址的“分段”表示法,就是用“段址:段内位移”来表示20位的单元地址。这里,“段址”是指某一段的起始地址。由于段总是从节开始,低4位一定是0,故只需保存它的高16位,使用时再把低4位0补上。这里的“段内位移”是指在一个段内其单元相对于段址的偏移量。比如,图8-11中,在节地址为00020H处开始往下有一个长度为1KB的段,那么用16位字长表示段址应该是0002H(是地址去掉低4位的0)。在这一段中,所有地址的段址都是它,见图8-11左数第1列。该段共有1024个单元,在此段内的位移按十进制表示是01023,按十六进制表示是000H03FFH,见图8-11左数第2列,或右数第1列。物理地址的形成实际上是在段址后面添加一个0后与段内位移相加的结果。,总结上述可以得出,由“段址:段内位移”形成一个物理地址的过程如图8-12所示,即:在十六位段址的后面添加4位,然后和十六位的段内位移相加,从而得到所对应的物理地址。虽然一个单元的物理地址是唯一的,但因为一个单元可以被划分在不同的存储段中,因此用“段址:段内位移”表示单元地址时,可能出现不同的表示结果。在IBMPC机里,设有四个16位的段寄存器,每个寄存器里可以存放一个段址的高16位。它们是:代码段寄存器CS、数据段寄存器DS、栈段寄存器SS以及附加段寄存器ES。一个进程运行时,就把涉及它的各段段址存放在相应的段寄存器中。需要产生一个20位的地址时,CPU就会根据当时的情形,选择适当的段寄存器,将它里面的内容左移4位,形成低4位为0,然后再和段内位移相加,得到20位的物理地址。,8.2.3MS-DOS的各种内存区域图8-13给出了MS-DOS四个存储区域:常规内存区、上位内存区、高端内存区和扩充内存区的划分情形。下面对它们做一些简单的说明。,1常规内存区2上位内存区3高端内存区4扩展内存区和扩充内存区,8.3MS-DOS的文件管理,8.3.1MS-DOS文件管理综述在MS-DOS中,按照文件的内容,同样把文件分成普通文件、目录文件和特殊文件三类。特殊文件是针对设备而言的,普通文件和目录文件则都存放在硬盘或软盘上。无论是硬盘还是软盘,在使用前都需要对磁盘的整个存储区域进行统一安排,以便规定各个区域的具体用途。,(1)对于软盘,在使用前必须先用FORMAT命令进行格式化。该命令的功能是按照格式化后软盘的容量来划分磁道和扇区,然后再把整个盘片划分成如图8-14所示的5个区域,成为一个盘卷。,引导扇。引导扇为整个盘卷的第0扇区,它包含两部分内容:一是在前面提及过的引导程序(BOOT);一是该盘卷的基本参数表(BPB)。在BPB中,有关该盘卷的主要参数有:磁头数(单面还是双面)、每个磁道的扇区数、总扇区数、每个扇区的字节数、文件分配表(FAT)的个数、每个文件分配表占用的扇区数、根目录的项数以及每簇所含扇区数(“簇”是MS-DOS进行磁盘存储空间分配的单位,MS-DOS规定1簇由若干个连续扇区组成,并且所含扇区数必须是2的整数次方,比如1簇为1个扇区、为2个扇区、为4个扇区、为8个扇区,)等等。,文件分配表(FAT)。在MS-DOS的文件管理中,文件分配表起到很重要的作用,它用来记录普通文件和目录文件在盘卷文件存放区里占用的存储空间。一般地,系统将设置两个完全一样的文件分配表FAT1和FAT2,以便在必要时,能够用另一个做恢复工作,保证系统的安全运行。一个盘卷有几个文件分配表、每个文件分配表占用多少扇区,都记录在引导扇中。有关文件分配表的问题,后面还要详细介绍。,根目录区。根目录区用来存放盘卷根目录下的各个目录项内容。在MS-DOS中,一个文件的目录项要占用32个字节。由于盘卷格式化时规定了根目录的项数,因此在一个盘卷中,根目录中拥有的目录项数是一定的。文件存放区。文件存放区用于存放普通文件和目录文件(除根目录以外)的内容。整个盘卷,去除引导扇、文件分配表和根目录区所占用的扇区后,剩余的扇区就完全做为文件存放区使用了。,(2)对于硬盘,在使用之前必须经过如下3步处理:低级格式化,使用FDISK命令对硬盘进行分区,使用FORMAT命令进行高级格式化。低级格式化的任务主要有两个:一是对整个硬盘按磁头、按盘面划分磁道和扇区;一是对磁盘上的所有“坏”扇区做上标记。购买微机时,硬盘一般都已经经过了低级格式化,用户不必去做这项工作。,用FDISK对硬盘分区,就是把经过低级格式化后的整个硬盘,按照用户所需要的容量划分成不同类型的区域。对于MS-DOS,硬盘的分区有两种类型:一是MS-DOS的主分区,在该分区里存有MS-DOS操作系统,其盘符(即一个盘区的标识)必须是“C:”。当系统是从硬盘启动(MS-DOS也可以通过软盘启动,不过这时一定是通过A盘,且在A盘驱动器里插入的是一张系统盘)时,就由此分区取得对计算机的控制权。一是MS-DOS的扩展分区。扩展分区只能作为数据盘使用,不能承担计算机的启动任务。,只有在把硬盘容量的一部分总体划归成扩展分区后,才能对该分区再细划分若干个小分区,形成一个个逻辑磁盘,其盘符由FDISK命令依序自动分配为D、E、F,如图8-15所示。用FDISK命令对硬盘进行分区时,就把物理上的第1扇区开辟为整个磁盘的主引导扇,在那里存放有主引导程序和记录硬盘分区的有关信息。,使用FORMAT命令对磁盘各分区进行格式化,就与对软盘进行格式化相当。即把硬盘的一个分区视为一张很大的软盘,对它进行盘面的划分:有引导扇(并在其中建立基本参数表BPB)、文件分配表区、根目录区以及存放文件的文件存放区。在图8-15中,下面画的是某一个磁盘分区的放大效果。可以看出,对一个分区的安排,与一张软盘相同。最初的MS-DOS采用的是一级目录结构,即直接通过文件名查找目录,随之处理I/O。后来,MS-DOS揉进了一些UNIX操作系统的风格,开始采用树型目录结构,使得其文件管理更加符合用户使用的要求。,MS-DOS的文件名由两个部分组成:基本文件名和扩展名。基本文件名可以有最多8个字符组成。出现在文件名中的字母,不区分大小写。因此在MS-DOS中,书写成:ABC、Abc或abC表示是相同的一个文件。要注意的是,对于UNIX来说,这样书写代表了3个不同的文件。在基本文件名的后面,可以跟随扩展名(扩展名是可选的)。扩展名总是以一个点开始,然后是1到3个字符。在MS-DOS中,经常用扩展名来识别文件的性质。最常用的扩展名有:,.bat一个可以解释执行的批处理文件;.com可执行的二进制命令文件;.doc文档文件;.exe可执行的二进制文件;.obj由编译程序产生的目标代码文件;.sys系统文件或设备驱动程序文件;.txtASCII文本文件。,在MS-DOS,从根目录出发、经过子目录、然后到达一个文件的路径,称为该文件的路径名。要注意的是,MS-DOS路径名之间是用字符“”进行分隔,这一点又与UNIX不同,UNIX是用字符“/”做为路径分隔符的。这意味着UNIX文件“/usr/ast/zong”在MS-DOS中应该写为“usrastzong”。除了有从根目录(“”)开始的绝对路径外,MS-DOS也有从当前目录开始的相对路径,并经常用字符“.”代表当前目录,用“.”代表当前目录的上一级目录(父目录)。,MS-DOS为文件赋予某些属性,记录在该文件的目录项中。只读(R):具有此属性的文件不能被修改。存档(A):上次备份后又被修改的文件具有此属性。在MS-DOS中,用MSBACKUP(备份或恢复文件)、RESTORE(恢复备份文件)和XCOPY(拷贝目录机器子目录和文件)等命令,都会涉及到文件的归档,也可以用ATTRIB(显示和修改属性)命令来查看文件现有的属性和修改其属性。系统(S):具有此属性的文件,不能通过DEL(删除文件)命令删除。通常,MS-DOS的系统文件属于此列。,隐藏(H):不希望被DIR(显示文件和子目录)命令列出的文件,可以设置此属性。卷标(V):表示该目录项为一个子卷标。目录(D):表示该目录想是一个子目录。MS-DOS支持多个磁盘的文件系统,但没有像UNIX所提供的那种安装功能,没有把多个磁盘统一在一个根目录下,因此,在MS-DOS下,常会出现从这个盘切换到另一个盘,也就是从这个文件系统切换到另一个文件系统的情形发生。在每一个盘上都可以设置自己的当前目录,切换也就在当前目录之间进行。图8-16给出了UNIX和MS-DOS文件系统的简略对比。,8.3.2MS-DOS的文件分配表(FAT)MS-DOS通过盘卷上的文件分配表,记录普通文件和子目录文件占用磁盘存储空间的情形。FAT中的表目总是从0开始顺序编号,表目0和1被用来存放磁盘介质标志等信息。因此,一个文件分配表从第2个表目开始,才真正用来记录磁盘空间的分配情形。文件分配表到底有多大,这与磁盘上文件存放区包含多少簇有关。文件分配表的表目数,是磁盘文件存放区上所有的簇数加2。,在前面已经知道,MS-DOS是以簇为单位分配磁盘上的文件存放区的。为了与文件分配表配合,文件存放区在按照簇的尺寸划分后,规定从2开始顺序编号。于是,文件分配表的第2个表目,就对应于磁盘文件存放区上第2簇的使用情况(但是要记住,磁盘上文件存放区的第2簇实际上是第1个簇,只是由于编号从2开始)。一般地,文件分配表上第i个表目,就对应于磁盘文件存放区上第i簇的使用情况。通过这种办法,在文件分配表表目与文件存放区的簇之间,建立起了一一对应的关系。从文件分配表表目的内容,就能得到它所对应的簇的当前使用情况。,一个文件总是占用存放文件区中的若干个簇,每个簇都有自己的编号。分配给文件的第1个簇的簇号,MS-DOS把它登记在该文件的目录项中,下一个簇的簇号总是登记在以其前一个簇的簇号为编号的文件分配表的相应表目中。这样一来,在文件分配表中形成了文件占用存储空间的“簇链”:从文件目录项中得到文件所在第1簇的簇号后,顺着文件分配表相应表目中记录的簇号,就能够逐一找到整个文件在盘卷中占用的簇。图8-17给出了文件分配表的一个例子。,在图中,有三个文件A、B、C。分配给文件A的是第6簇、第8簇、第4簇和第2簇;文件B占用第12、5和9簇;文件C占用第3、15和10簇。于是,在文件A的文件目录项中存放着它占用的第1个簇的簇号6;在文件分配表的第6个表目中填写它占用的第2个簇的簇号8;在文件分配表的第8个表目中填写它占用的第3个簇的簇号4;在文件分配表的第4个表目中填写它占用的第4个簇的簇号2;在文件分配表的第2个表目中填写标志EOF,表明文件A的结束。同样地,可以形成文件B和文件C的簇链。,在图8-17的文件分配表中,使用了一些象征性的标志。比如标有FREE标志的表目,表示所对应的簇为空闲的簇;标有BAD标志的表目,表示所对应的簇为坏簇,不能分配,等等。具体实现时,不用它们做为标志。向一个文件(包括子目录文件)中追加记录时,就要涉及簇的分配;删除一个文件或子目录,就会涉及到簇的释放。就文件分配表而言,删除文件即是沿着该文件的簇链,将各簇号对应的FAT表项内容置为FREE,变为可以重新使用的表项;删除子目录时,首先要判定该子目录是否是当前目录,若是,则不准删除;其次是要判定该子目录是否为空,只有当子目录中只剩下“.”项和“.”项时,该子目录才能被删除。通过了这两关,删除子目录与删除文件的操作就一样了。,向一个文件追加记录时,首先要计算文件的新长度。有两种可能:一是如果创建一个新的文件,那么原来没有簇链,长度是0。于是除了需要向文件分配表申请簇以外,还要把申请到的簇号填入该文件的目录项中。另外一种情形是文件已经存在,原有簇链不够使用,因此要在原来基础上增加文件长度。这时就需要在文件分配表中寻找标有“FREE”标志的表目,并将它们所对应的簇一一链入原有的簇链。完成这项工作后,才能开始进行写入操作。MS-DOS在进行簇分配时,采用“就近双向查找”分配策略。,即以一个指定的簇号(比如文件尾的簇号)或一个已经找到的空闲簇号为中心,先正向增1(即簇号增1)查找,判定那个簇是否空闲。如果失败,就反向减1(即簇号减1)查找,判定那个簇是否空闲。如果失败,就正向增2(即簇号增2)查找,判定那个簇是否空闲。如果失败,就反向减2(即簇号减2)查找,判定那个簇是否空闲。找到一个空闲簇后,就又以它为中心进行查找。直到所需空闲簇全部找到,否则不予分配。这种分配策略,可以使文件分配的存储空间相对集中,从而减少文件读写时磁头移动的次数和距离。,8.3.3MS-DOS的树型目录结构MS-DOS的每一个盘卷都有一个根目录表,简称根目录。根目录中有很多目录项,它们可能是一般文件的目录项,也可能是子目录文件的目录项。整个根目录被固定在盘卷的根目录区中。从根目录中的一般文件目录项出发,得到的分支是叶子(即具体的文件),从根目录中的子目录项出发,得到的是一个枝杈(即一个子目录文件)。每一个枝杈又可以继续往下分出叶子或枝杈。子目录文件就是由一个个子目录项组成的子目录表,简称子目录。,这样一种带有分支的层次结构,犹如一棵倒置的树,根在上,分支和叶子在下。这种结构的优点是能够方便地组织和查找文件,在不同目录下允许出现重名。图8-18(a)给出了MS-DOS目录的层次结构示意图。在图中,倒三角表示一个目录项。在根目录表中,有6个目录项,其中4个是一般文件目录项,它们分别对应于文件A、B、C、D;有两个子目录项,子目录甲和子目录乙。在子目录甲中有两个一般文件目录项,分别对应于文件E和F。在子目录乙中有一个一般文件目录,它对应于文件G,有一个子目录项,对应于子目录丙。在子目录丙中,有三个一般文件目录项,它们对应于文件H、I、J。,在MS-DOS的每一个子目录表中,除了具体的目录项外,还安排一个目录项“.”,一个目录项“.”,它们分别表示当前目录和父目录。只有当一个目录表中仅包含“.”和“.”时,才意味该目录表为空。目录项是一个含32个字节长的数据区,它里面登记着一个文件或子目录的有关信息。MS-DOS的目录项结构如图8-18(b)所示,图中括号里的数字表示这一信息所需占用的字节数。下面是对目录项内容的简要说明:,文件名。MS-DOS规定文件名最多不得超过8个字符,因此在目录项中,为“文件名”准备了8个字节。当这里的第1个字节取值00H时,表示该目录项为空闲,可以被分配;当这里的第1个字节取值E5H时,表示原来占用该目录项的文件已经被删除,此目录项现在可以重新分配它用。扩展名。扩展名最多3个字符(因为这里给扩展名只准备了3个字节的位置)。如果扩展名不足3个字符,则用空格填充。,文件属性。MS-DOS为文件设置属性有两个作用,首先通过文件属性区分文件的类别:是卷标(V)、是目录(D)、还是一般磁盘文件。只有在是一般磁盘文件时,才利用属性给出文件的存取权限(A、H、R、S)。文件的建立和修改的日期和时间。文件的起始簇号。,由前面已经知道,MS-DOS总是把分配给一个文件的第1簇号填写在文件目录项中,也就是目录项的“文件起始簇号”处。通过它,就可以在文件分配表(FAT)中找到该文件的簇链,得到文件的存储位置。文件长度。文件长度是指该文件所需的总字节数。由于文件一般总要在最后一簇产生一些浪费,因此告知文件的总长度,对判定文件的结束位置是重要的。,8.3.4MS-DOS文件访问的实现为了提高对文件访问的速度,MS-DOS在整个系统中设置了一张“系统文件表”(SFT)。该表主要用于记录系统当前同时打开的文件的有关信息,从而起到了活动文件目录的作用。SFT中拥有的表目数,用户可以在系统配置文件CONFIG.SYS中,通过命令行“files=n”来设定,其默认值为8。整个系统文件表包括两个子表:子表1由表头以及5个表项构成,子表2由表头以及n-5个表项构成,每一个表项占用53个字节。图8-19是系统文件表的结构。,子表表头的第一部分是一个指针,通过它使两个子表链接在一起,成为一个整体。表头的第二部分记录该子表表项的数目,子表1固定为5,子表2是n-5,两个表的表目数总共为n。当用户打开一个文件时,就要在SFT中申请一个表目,把文件的目录信息从磁盘拷贝到表目中。除此之外,还要在表目中记录如下信息。(1)记录打开文件的文件目录项在磁盘的位置,以便关闭文件时,根据这一信息进行回写操作。(2)在此记录对文件操作的控制信息,比如文件的打开方式、文件的读写指针和已经传送的簇数等。,(3)记住这个文件被不同调用者同时打开的次数,打开一次就在计数值上加1,关闭一次就在计数值上减1。只有当计数值为0时,这个文件才能真正被关闭,即收回它所占用的系统文件表表目。,回忆一下MS-DOS为每个进程设置的程序段前缀。在程序段前缀里面,开辟着该进程的文件打开表(JFT)。文件打开表的作用一方面是把父进程已经打开的文件情况复制过来,另一方面是可以用来打开自己所需要使用的文件。打开一个文件,就意味着要在文件打开表中申请到一个表目。该表目的序号,就是以后访问这个文件的“句柄”。那么,为什么有了文件的句柄就可以对某个文件进行访问,这主要要弄清楚申请到的文件打开表表目是如何与具体文件沟通的。如果它能与文件沟通(也就是能够找到文件的目录信息),那么通过文件句柄也就能与文件沟通了,这就要用到上面介绍的系统文件表。具体地,要分两步进行。,(1)获得该文件在系统文件表中占用的表目序号:当进程打开一个文件时,首先通过文件名去查系统文件表,看里面有没有叫这个名字的文件。如果有,说明该表目中存放的是该文件的目录等有关信息,因此立即能够获得该表目序号;如果没有,则申请一个空闲的SFT表项,把文件的目录信息从磁盘拷贝到表目中,填写进其他信息,然后也获得该表目序号。(2)将系统文件表表目序号填入进程的文件打开表中:到进程程序段前缀的文件打开表中申请一个表项,把得到的系统文件表表目序号填入该表项内,并获得文件打开表项的序号,即句柄。,经过这样两步之后,由文件的句柄,就可以去查进程的文件打开表。由文件打开表,得到该文件在系统文件表中的表目序号。通过这个序号去查系统文件表,就得到该文件的目录内容等信息,就可以对文件进行各种操作了。图8-20给出了示意图。,在图中,进程A为了访问文件X,就通过句柄k查进程程序段前缀中的文件打开表。由该句柄得到这个文件在系统文件表中的序号m。通过序号m,查系统文件表,得到文件X的目录等信息,于是就可以访问该文件了。,8.4MS-DOS的设备管理,8.4.1MS-DOS设备管理综述8.4.2MS-DOS设备驱动程序的构成MS-DOS的所有设备驱动程序都有如图8-21所示的结构,总体上分成两个部分:一个是由18个字节组成的设备头(DH),另一个是驱动程序的实际代码。前者用于标识各个驱动程序并给出它的一些属性,后者用于进行实际的输入/输出。从这种划分看,MS-DOS中的设备头,起到了设备控制块的作用。下面对设备头中的各项内容做一些说明。,下一个设备头指针:MS-DOS把系统中已经安装的设备驱动程序通过各自设备头里的这个指针,链接成一个队列,称为设备头链。当然,这里存放的地址是以“段址:段内位移”给出的。设备属性:设备的属性是指设备的类型,以及该设备具有的特性。MS-DOS用一个字来刻画设备的属性。比如,用该字的最高位来区分是字符设备还是块设备,此位为1是字符设备,此位为0是块设备。其余15位的意义,有的位具有相同的含义,有的位将随是字符设备还是块设备而有不同的含义。,策略程序指针和中断程序指针:这是两个指向具体程序代码的指针。所谓“策略程序”,它的任务很简单。在系统接到一个I/O请求后,由文件系统形成请求包并发送给策略程序。策略程序接收到I/O请求包后,就把它的地址转送给中断程序。中断程序才是设备驱动程序中真正实施I/O服务的部分,它分析请求包里记录的I/O命令,然后执行命令,并将执行结果存入请求包中。在输入/输出任务完成后,进程就在请求包里获得结果。在处理输入/输出时,MS-DOS首先调用策略程序,作用是为设备下“工作任务单”。然后调用中断程序,作用是命令“雇员”(即设备)执行下达的任务。,设备名:对于字符设备,在“设备名”处存放逻辑设备名。对于块设备,在“设备名”处存放该设备驱动程序所支持的单元个数。为了构成设备头链,MS-DOS设置了名为“系统内部参数表”(LOL)的一张表。为了管理方便,在该表中模仿设备头开辟了18个字节,组成所谓的“NUL”设备头。“NUL”是一个没有输入/输出的设备名(因此没有具体的驱动程序代码),它的设备头总是位于设备头链之首,由它与其他的设备头链接成一个队列。如图8-22所示。,前面已经说过,要通过设备头中的“设备属性”来区分不同的设备。总的来说,MS-DOS把设备分为两大类:“设备属性”最高位为1,表示是字符设备;为0,表示是块设备。在图8-22中,包括NUL设备在内,给出了5个属于字符设备的设备头,1个属于块设备的设备头。在字符设备前提下,“设备属性”最低4位取值为4时,表示是NULL设备,取值为3时为标准输入设备,取值为2时为标准输出设备。从图8-22看出,位于LOL中的是NUL设备头,链接在它后面的名为CON的是标准输入/输出设备,即键盘和显示器。,在图8-22中,标明为块设备的设备头,其“设备名”处填写的是十六进制的03H,表示该设备驱动程序要驱动、控制3个单元的磁盘驱动器。MS-DOS中,对驱动器进行全系统统一编号。有了设备头链,在遇到输入/输出请求时,就根据设备的逻辑名,去查设备头链。由设备头链得到设备的驱动程序,从而就可以完成所需要的I/O。,8.4.3MS-DOS对块设备的管理块设备在MS-DOS中用于存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论