【OS】犯困File

文件结构.

  • 文件结构是指文件的构造方式。

逻辑结构.

  • 用户从使用的角度出发去组织文件,所以从用户观点出发所观察到的文件组织形式称为文件的逻辑结构。

物理结构.

  • 系统从存储的角度出发去组织文件,所以文件在外存上的存储组织方式称为文件的物理结构。

文件の逻辑结构.

有结构文件.

  • 整个文件由若干条记录组成,数据的组织形式分为数据项、记录和文件三级,大量的数据结构和数据库都是采用有结构文件的形式。

顺序文件.

  • 【串结构】串结构文件中的记录通常按照存入时间的先后进行排序,各记录之间的顺序与关键字无关,这样的组织方式导致该类文件的检索操作是顺序查找的,较为费时。
  • 【顺序结构】用户指定一个字段作为关键字,文件中的所有记录按照关键字排序。

索引文件.

  • 【核心思想】为文件中的所有记录建立一份索引表文件,对于主文件A中的每一个记录,在索引表文件B中都设立一个表项,表项中包括指向该纪录的指针以及该纪录的长度。
  • 索引表文件B本身是按照记录排序的,因而它是一个顺序文件。
  • 索引的思想灵活多变,我们可以按照关键字来建立索引,并且不同的用户可以根据不同的需求,按照不同的关键字建立索引。

索引顺序文件.

  • 最为常见的逻辑文件形式,它是顺序文件和索引文件相结合的产物,将顺序文件中的所有记录分为若干个组,并为顺序文件建立一张索引表,在索引表中为每组中的第一个记录建立一个索引项,其中含有该记录的键值和指向该记录的指针。
  • 为了进一步提高检索效率,可以采取多级索引的思想,也就是为索引表文件再建立索引。
举例分析.
  • 【例题】 1 0 6 10^6 106个记录的顺序文件,以100个记录为一组,采用两级索引,检索记录数平均是多少?效率提高了多少?
  • 当不采用索引时, n n n个记录的顺序文件,按照顺序查找的方式检索其中一条记录平均需要进行 ( n + 1 ) / 2 (n+1)/2 (n+1)/2次比较,在这个题中,需要的比较次数高达 5 × 1 0 5 5×10^5 5×105次。
  • 如果采用题中所说的二级索引方式,首先我们将 1 0 6 10^6 106条记录按照100个记录一组分为 1 0 4 10^4 104组,并且为每一组中的第一条记录建立一个索引项,那么第一层索引文件 I n d e x 1 Index_1 Index1中就有 1 0 4 10^4 104条记录(注意我们提到过, I n d e x 1 Index_1 Index1实际上是一个顺序文件);再次应用索引的思想,为 I n d e x 1 Index_1 Index1按照同样的方式建立一个索引文件,这个第二层的索引文件称为 I n d e x 2 Index_2 Index2,那么 I n d e x 2 Index_2 Index2中就有100条记录。
  • 到目前为止,我们的二层索引结构已经建立完毕,也就是将原本的 1 0 6 10^6 106条记录,分布到了3个规模为 1 0 2 10^2 102的文件中。在这样的组织方式下以顺序查找法检索某一条记录,平均仅需要在每一个文件中检索50条记录,总共也就是150条记录,效率得到了极大的提升。

直接文件.

  • 直接文件的特点是可以根据关键字直接获得指定记录的物理地址,其核心在于键值转换算法,也就是从关键字到物理地址的转换。
哈希Hash文件.
  • 是目前使用最广泛的一种直接文件,利用Hash函数将记录的关键字转换为记录的物理地址。

文件の物理结构.

  • 物理块,也称为磁盘块或簇,指的是磁盘上的一组连续扇区(一般都是 2 n 2^n 2n个扇区),是文件分配和传输信息的基本单位。
  • 常见的物理结构有:连续文件、链接文件和索引文件。

连续文件.

  • 很容易理解,就是将逻辑文件中的信息在磁盘中顺序摆放而形成的。优点在于每一个文件都只需要记录起始位置和长度,顺序访问的速度快并且支持随机访问;但不足之处在于必须连续分配内存空间,必须事先知道文件的长度,插入和删除也很笨重,类比于数组结构理解。

链接文件.

  • 类比于链表理解,不要求连续分配磁盘空间,但需要额外维护链接指针以连接起离散的磁盘块。优点在于能够有效消除碎片,插入、删除和修改都很灵活,并且支持文件长度的动态增长。不足之处在于访问方式只能是顺序访问,并且链接指针会消耗额外的空间。

索引文件.

  • 系统建立一张索引表,为逻辑文件中的每一个块构造一个表项,属性包括逻辑块号和对应的磁盘号。
  • 依旧可以引入多级索引概念,为一级索引表再建立一张索引表,姑且称为二级索引表。二级索引表中的索引块指向一级索引表的索引块,而一级索引表的索引块指向文件块。
  • 【组合方案】在Unix的文件系统中,将索引块的前15个指针存储在文件的内码中,其中前12指针直接指向文件块,我们假定磁盘的块大小为4KB,索引指针的大小为4B,那么就表示了 48 K B 48KB 48KB大小的内容;第13号指针指向了一级间接索引表(4KB/4B=1K,表示其中有1K个索引),这当中就表示了 1 K ∗ 4 K B 1K*4KB 1K4KB大小的内容。依此类推第14和15个指针分别指向了二级索引表和三级索引表,其中包含的内容分别为 1 K ∗ 1 K ∗ 4 K B 1K*1K*4KB 1K1K4KB 1 K ∗ 1 K ∗ 1 K ∗ 4 K B 1K*1K*1K*4KB 1K1K1K4KB.

文件访问方法.

  • 【顺序访问】文件信息按照顺序,一条一条地进行处理,类比链表结构。
  • 【直接访问】允许程序按任意顺序读取和写入,类比数组结构。

目录结构.

目录管理の要求.

  • 实现"按名存取";
  • 需要合理地组织目录,以具有较高的目录检索速度;
  • 允许文件重名;
  • 提供文件共享功能。

单级目录结构.

  • 整个系统只建立一张目录表,为每个文件分配一个目录项。
  • 优点在于便于理解和支持,不足之处是查找速度感人,并且整个系统中的所有文件不允许重名。

两级目录结构.

  • 系统建立一张主文件目录Master File Dictionary,而后为每一个用户建立用户文件目录User File Dictionary。为了将两个文件目录关联起来,需要为每一个UFD在MFD中分配一个目录项。
  • 两级目录结构的优点在于大大提高了查询的速度,这一点可以参照前述关于二级索引的叙述,并且这样的结构也允许处于不同UFD中的文件同名,其不足之处是不利于文件共享。

其他目录结构.

  • 【树形目录结构】于两级目录的基础上,允许UFD创建自己的子目录。
    在这里插入图片描述
  • 【无环图目录】目录结构中有共享的子目录和文件,同一文件或子目录可出现在两个不同的目录中,无环图是树形结构目录的扩展。优点在于链接方式实现的目录中共享很容易,但存在同一个文件有多条绝对访达路径的问题,以及通过指针A删除了文件,那么就会导致指向该文件的另一个指针B成为野指针。
    在这里插入图片描述

文件保护.

  • 防止未核准用户存取文件;
  • 防止一个用户冒充另一个用户存取文件;
  • 防止已核准用户误用文件。

存取控制.

  • 现代OS中,大多配置了用于对系统中资源进行保护的保护机制,引入了【保护域】和【访问权】的概念,每个进程仅能在保护域内执行操作,只允许进程访问它们具有访问权的对象。
  • 【保护域】进程对一组对象访问权的集合,进程只能在指定域内执行操作。
  • 【访问矩阵Access】利用一个矩阵来描述系统的访问控制,行代表域,列代表对象,矩阵中的每一项是由一组访问权组成的。 A c c e s s [ i ] [ j ] Access[i][j] Access[i][j]所代表的是在域 D o m a i n i Domain_i Domaini中执行的进程对于对象 O b j e c t j Object_j Objectj能够执行的操作集合。

访问矩阵权限.

  • 【拷贝权Copy Right】可以利用拷贝权将某个域中所拥有的访问权 A c c e s s [ i ] [ j ] Access[i][j] Access[i][j]扩展到同一列的其他域中。
  • 【所有权Owner Right】可以利用所有权增加或删除某种访问权,如果在 A c c e s s [ i ] [ j ] Access[i][j] Access[i][j]中包含所有权,则在域 D i D_i Di上运行的进程可以增加或删除第 j j j上任何项中的访问权,即可以增加或删除任何其他域中对对象 j j j的访问权。
  • 【控制权Control Right】控制权可用于改变矩阵内统一行(域中)的各项访问权,如果在 A c c e s s [ i ] [ j ] Access[i][j] Access[i][j]中包含控制权,则在域 D i D_i Di上运行的进程可以删除在域 D j D_j Dj中运行的各进程对各对象的任何访问权。

访问权限.

  • 访问模式:读、写、执行;
  • 用户分类:文件拥有者(Owner)、和文件属于同一组的用户(Group)、其它公共用户(Public)
  • 每一类用户在三种访问模式上权限以 0 / 1 0/1 0/1来表示,前者代表不具有该权限,后者代表具有该权限,总共构成9位权限位。
  • 例如拥有者能够进行读、写、执行;组用户能够读和写;公共用户只能够执行,所以权限就表示为 111 − 110 − 001 111-110-001 111110001,也可以写为 761 761 761.

空闲空间管理.

  • 【空闲表】很经典的表格,前面说过的段表也是这种结构,表项中包括空闲区域基址以及区域长度。
  • 【位向量】系统专设几个字,字中每一位对应一个磁盘块,其中 1 1 1表示该号磁盘块空闲, 0 0 0表示该号磁盘块已被占用。假设磁盘块,其块2、3、4、5、8、9、10、11、12、13、17、18、25、26、27空闲,则空闲空间位向量为: 001111001111110001100000011100000 … 001111001111110001100000011100000… 001111001111110001100000011100000
  • 【空闲块链】将所有的空闲块链接在一起,组成一个队列。分配时从链首摘取n块即可,回收的磁盘块插入队尾。
  • 【成组链接法】Unix采用的方式,设置空闲盘块号栈,存放当前可用的一组空闲盘块的盘块号(最多存放100个盘块号),以及堆栈中尚有的空闲块数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值