文件的概念

---------文件的定义:

            文件是操作系统中的一个重要概念。文件是以计算机硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序,等等。在系统运行时,

      计算机以进程为基本单位进行资源的调度和分配而在用户进行的输入、输出中,则以文件为基本单位。大多数应用程序的输入都是通过文件来实现的,

      其输出也保存在文件中,以便信息的长期存储及将来的访问。当用户将文件用于应用程序的输入、输出时,还希望可以访问文件、修改文件和保存文件等,实现

      文件的维护管理,这就需要系统提供一个文件管理系统,操作系统的文件系统就是用于实现用户的这些管理要求。

            从用户的角度看,文件系统是操作系统的重要部分之一。用户关心的是如何命名、分类和查找文件,如何保证文件数据的安全性以及对文件可以进行哪些操作

      等。而对其中的细节,如文件如何存储在辅存上、如何管理文件辅存区域等关心甚少。

            文件系统提供了与二级存储相关的资源的抽象,让用户能在不了解文件的各种属性、文件存储介质的特征以及文件在存储介质上的具体位置等情况下,方便快捷

      地使用文件。

            用户通过文件系统建立文件,提供应用程序的输入、输出,对资源进行管理。首先了解文件的结构,我们通过自底向上的方式来定义:

            (1)、数据项。数据项是文件系统中最低级的数据组织形式,可分为以下两种类型:

                         基本数据项:用于描述一个 对象的某种属性的一个值,如姓名、日期或证件号等,是数据中可命名的最小逻辑数据单位,即原子数据。

                         组合数据项:由多个基本数据项组成。

            (2)、记录。记录是一组相关的数据项的集合,用于描述一个对象在某方面的属性,如一个考生报名记录包括姓名、出生日期、报考学校代号、身份证等

                         一系列域。

            (3)、文件。文件是指由创建者所定义的一组相关信息的集合,逻辑上可分为有结构文件无结构文件两种。在有结构文件中,文件由一组相似记录组成,

                        如报考某学校的所有考生的报考信息记录,又称为记录式文件;而无结构文件则被看成是一个字符流,比如一个二进制文件或字符文件,又称为流式文件


              虽然上面给出了结构化的表述,但实际上关于文件并无严格的定义。通常在操作系统中将程序和数据组织成文件。文件可以是数字、字母或二进制代码,基本

          访问单元可以是字节、行或记录。文件可以长期存储于硬盘或其他二级存储器中,允许可控制的进程间共享访问,能够被组织成复杂的结构


-------文件属性:

         文件有一定的属性,这根据系统的不同而有所不同,但是通常都包括如下属性。

         (1)、名称。文件名称唯一,以容易读取的形式保存。

         (2)、标识符。标识文件系统内文件的唯一标签,通常为数字,它是对人不可读的一种内部名称。

         (3)、类型。被支持不同类型的文件系统所使用。

         (4)、位置。指向设备和设备上文件的指针。

         (5)、大小。文件当前大小(用字节、字或块表示),也可包含文件允许的最大值。

         (6)、保护。对文件进行保护的访问控制信息。

         (7)、时间、日期和用户标识。文件创建、上次修改和上次访问的相关信息,用于保护、安全和跟踪文件的使用。

 

           所有文件的信息都保存在目录结构中,而目录结构也保存在外存上。文件信息当需要时再调入内存。通常,目录条件包括文件名臣及其唯一标识符,而

    标识符定位其他属性的信息。


--------文件的基本操作:

          文件属于抽象数据类型。为了恰当地定义文件,就需要考虑有关文件的操作。操作系统提供系统调用,它对文件进行创建、写、读、定位和截断。

          (1)、创建文件。创建文件有两个必要步骤,一是在文件系统中为文件找到空间;二是在目录中为新文件创建条目,该条目记录文件名称、在文件

                    系统中的位置及其其他可能信息。

          (2)、写文件。为了写文件,执行一个系统调动,指明文件名称和要写入文件的内容。对于给定文件名称,系统搜索文件目录以查找文件位置。系统

                   必须为该文件维护一个写位置的指针。每当发生写操作,便更新写指针。

          (3)、读文件。为了读文件,执行一个系统调用,指明文件名称和要读入文件块的内存位置。同样,需要搜索目录以找到相关目录项,系统维护一个

                  读位置的指针。每当发生读操作时,更新读指针。一个进程通常只一个文件读或写,所以当前操作位置可作为每个进程当前文件位置指针。由于

                 读和写操作都使用同一指针,节省了空间也降低了系统复杂度。

         (4)、文件重定位(文件寻址)。按某条件搜索目录,将当前文件位置设为给定值,并且不会读、写文件。

         (5)、删除文件。先从目录中找到要删除文件的目录项,使之称为空项,然后回收该文件所占用的存储空间。

         (6)、截断文件。允许文件所有属性不变,并删除文件内容,即将其长度设为 0 并释放其空间。

           补充:这6个基本操作可以组合到执行其他文件操作。例如,一个文件的复制,可以创建行文件、从旧文件读出并写入新文件。


--------文件的打开与关闭:

            因为许多文件操作都涉及为给定文件搜索相关目录条目,许多系统要求在首次使用文件时,使用系统调用 open ,将指明文件的属性(包括该文件在外存上

       的物理位置)从外存拷贝到内存打开文件目录表的一个表目中,并将该表目的编号(或称为索引)返回给用户。操作系统维护一个包含所有打开文件信息的表

      (打开文件表,open-file table) 。当用户需要一个文件操作时,可通过该表的一个索引指定文件,就省略了搜索环节。当文件不再使用时,进程可以关闭它,

        操作系统从打开文件表中删除这一条目。

            大部分操作系统要求在文件使用之前就被显式打开。操作 open 会根据文件名搜索目录,并将目录条目复制到打开文件表。如果调用 open 的请求(创建、

        只读、读写、添加等)得到允许,进程就可以打开文件,而 open 通常返回一个指向打开文件表中的一个条目的指针。通过使用该指针(而非文件名)进行

       所有的 I / O 操作,以简化步骤并节省资源。

            注意,open 调用完成之后,操作系统对该文件的任何操作,都不再需要文件名,只需要 open 调用返回的指针。 


          整个系统表包含进程相关信息,如文件在磁盘的位置访问日期和大小。一个进程打开一个文件,系统打开文件表就会为打开的文件增加相应的条目。当另一个

    进程执行 open 时,只不过是在其进程打开表中增加一个条目,并指向整个系统表的相应条目。通常,系统打开文件表的每个文件时,还用一个文件打开计数器(Open

       Count ),以记录多少进程打开了该文件。每个关闭操作 close 则使得  Count  递减,当打开计数器为 0 时,表示该文件不再使用。系统将回收分配给该文件的内存空

    间等资源,若文件被修改过,则将文件写回外存,并将系统打开文件表中相应条目删除,最后释放文件的文件控制块(FCB)。


          每个打开文件都有如下关联信息:

         》》文件指针:系统跟踪上次读写位置作为当前文件位置指针,这种指针对打开文件的某个进程来说是唯一的,因此必须与磁盘文件属性分开保存。

         》》文件打开计数器:文件关闭时,操作系统必须重用其打开文件表条目,否则表内空间不够用。因为多个进程可能打开同一个文件,所以系统在删除打开文件条目

                之前,必须等待最后一个进程关闭文件。该计数器跟踪打开和关闭的数量,当该计数为  0 时,系统关闭文件,删除该条目。

         》》文件磁盘位置:绝大多数文件操作都要求系统修改文件数据。该信息保存在内存中,以免为每个操作都从磁盘中读取。

         》》访问权限:每个进程打开文件都需要有一个访问模式(创建、只读、读写、添加等),该信息保存在进程的打开文件表中,以便操作系统能允许或拒绝之后的

                I / O 请求。


          

      

      

            

   

       

    

           


                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小达人Fighting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值