利用开放定址法实现散列表的创建、插入、删除、查找操作_操作系统—文件管理...

462fc382b1da3f1c59db2c8a6b414f53.png

文件管理

概念

定义

  • 概念:文件是以计算机硬盘为载体的存储在计算机上的信息集合。
  • 组成形式:
    • 数据项:数据项是文件最低级的数据组成形式,主要可分为基本数据项(用来描述一个对象的某种属性的一个值)、组合数据项(由多个基本对象组成)。
    • 记录:记录是一组相关的数据项之和。
    • 文件: 文件是创建者所对的一组相关信息的集合。

属性

  • 文件名:一个文件夹下文件名称为一,但是不能唯一确定一个文件
  • 标识符:标识文件系统里文件的唯一标识符,可以唯一确定文件
  • 类型:文件的分类,比如 .java,.txt文件
  • 位置:指向设备上和设备上文件的指针
  • 大小:文件当前的大小(字节、字或者块表示),可能包含文件最大值
  • 保护:对文件进行保护的访问控制信息,比如:只读、可读可写、拒绝访问等
  • 时间、日期、用户标识符:文件创建、文件修改和上次访问的一些信息,用来保护和跟踪文件使用。

基本操作

  • 创建文件:create系统调用
    • 系统调用参数:所需要的大小空间、文件存放路径、文件名
    • 系统调用步骤:在外存中找到文件申请的存储空间;系统调用根据文件路径找到该目录对于的目录表,插入目录项
  • 删除文件:delete系统调用
    • 系统调用参数:文件路径、文件名
    • 系统调用步骤:根据文件路径找到目录表;根据文件名找到目录项;回收文件占用磁盘块;删除目录项
  • 读文件:read系统调用
    • 系统调用参数:文件名、读入多少数据;读入数据放在内存什么位置
    • 系统调用步骤:读文件的时候已经打开文件了;所以进程只用提供文件在打开文件表中的索引号即可;操作系统读出进程指定大小的数据存到进程指定的区域
  • 写文件:write系统调用
    • 系统调用参数:文件名、写多少数据、写到什么位置
    • 系统调用步骤:将进程指定文件数据写到指定大小的外存中
  • 打开文件:open系统调用
    • 系统调用参数:文件名、文件路径、打开之后对文件的操作
    • 系统调用步骤:根据路径找到目录表;根据文件名找到目录项;根据目录项检查用户是否有操作权限;有的话操作系统会把文件的目录项复制到“打开文件表”(两种,系统文件表:系统记录所有打开的文件;进程文件表:进程记录自己打开的文件)中;用户根据编号打开文件
  • 关闭文件:close系统调用
    • 系统调用参数:文件路径、文件名
    • 系统调用步骤:将进程打开文件表中相应表项删除;回收分配给该文件的内存空间;系统打开文件表的计数器count-1,如果count=0,页删除表项

文件管理的逻辑结构

文件的逻辑结构是从用户的角度出发看到文件的组织形式;文件的物理结构(存储结构)是从实现观点出发看文件在外存上的存储形式。按照逻辑结构可以划分成无结构文件和有结构文件两种。

无结构文件

无结构文件又叫做流式文件,将数据桉顺序组织、记录、积累保存,以字节(byte)为单位,是有序信息项的集合。因为没有结构,只能通过穷举搜索的方式查找,查找非常低效率。

有结构文件

有结构文件按照记录的组成形式可以分成顺序文件、索引文件、索引顺序文件

顺序文件

  • 文件记录一个接一个的顺序排列,通常是定长的。顺序排列通常有两种:
  • 串结构:按照记录之间的顺序排列与关键字无关,通常和时间有关。
  • 顺序结构:文件中的记录按照关键字来排序。
  • 特点:在文件中对记录批量修改,顺序文件效率较高,但是增删改查单条记录效率比较低。

索引文件

  • 索引文件就是建立一张索引表,如果是定长的记录索引表中只需要有索引号(按顺序排列,二分查找)和对应指向逻辑文件的指针,第i条记录的地址就是i*L(L是记录的定长);如果是不定长的记录,索引表会有索引号(按顺序排列,二分查找)、记录长度和执行逻辑地址的指针,第i条记录的地址是钱i-1条记录地址之和+1。
  • 特点:索引表可以提高访问速度,但是每个记录都会对应一个索引表项,如果索引表项比较大的,如果文件为8B,索引表项占32个字节这样对存储空间利用率太低了。

索引顺序文件

  • 索引顺序文件是指顺序和索引文件二者结合。将文件的所有记录分成若干组,为顺序文件建立一张索引表,在表中为每组的第一条记录建立索引项(该记录的关键字和指向该记录的指针)。查找的时候先根据索引表找到改组,然后在组中顺序查找。
  • 提高了存取速度,减少了索引表的空间

文件管理的目录结构

一些概念

文件控制快(FCB):

  • 概念:是用来存储控制文件需要的各种信息的数据结构,已实现“按名存取”。FCB是一个有序集合称为目录文件,一个FCB就是一个文件目录项。创建一个新的文件,系统会分配一个FCB存放在文件目录中,成为目录项。
  • 组成:
    • 基本信息:比如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构。
    • 存取控制信息:文件存取的权限
    • 使用信息: 文件建立时间、文件修改时间

索引节点

  • 概念:在检索目录文件的过程中,只用到了文件名,所以可以将文件名与它的描述信息分开,文件的描述信息单独形成一个称为索引节点的数据结构。那么文件的目录结构就是(文件名,索引节点编号)
  • 组成:文件主标识符、文件类型、文件存取权限、文件物理地址、文件长度、文件链接计数(所有指向该文件的文件名计数器)、文件存取时间、索引节点编号、状态、访问次数、逻辑设备号、链接指针(分别指向空闲表和散列表的指针)

目录结构

目录的操作主要有:搜索、创建文件、删除文件、显示目录、修改目录

单级目录

  • 概念:整个文件系统中只有一张目录表,每个文件占领一个目录项。
  • 操作:
    • 搜索:访问一根文件的时候,首先根据文件名在目录表中找到FCB,然后检查合法就访问。
    • 创建:如果建立一个新的文件,首先检索所有的目录检查受否有重名,然后在目录中新增一项,把FCB保存在里面。
  • 特点:查找速度慢、文件不允许重名、不便于文件共享、不适合多用户操作。

两级目录

  • 概念:将文件目录分成主文件目录和用户文件目录。主文件目录存储用户名和用户目录所在的存储位置;用户文件目录记录该用户的FCB信息。
  • 操作:用户对文件进行操作的时候,只需要搜索用户级目录找到对应的FCB就行了。
  • 特点:解决了多用户操作,但是不利于共享,缺乏灵活性,不能对文件进行分类

树形目录(多级目录结构)

  • 概念:将两级目录进行推广,就能够实现多级文件目录。
  • 路径:用户操作的时候根据文件路径标识文件,文件路径是一个字符串,目录名和数据文件之间用“/”分开(从根目录开始的路径叫做绝对路径)。
  • 操作:用户对文件进行操作的时候,找到文件的路径就可以找到文件。
  • 特点:可以很方便的对文件进行分类,层次结构清晰,便于文件管理与保护。但是查找文件,需要按照路径名(中间可能有很多文件目录)去寻找,增加了磁盘的访问次数。

图形目录(无环图目录结构)

  • 概念:在树形结构的基础上增加了一些指向同一个节点的边,让整个目录成为了一个有向无环图。便于文件共享,减少存储空间。
  • 操作:多个用户指向一个共享节点,这个文件会有一个用户计数器,有用户访问的时候计数器+1,当有用户需要删除文件的时候,计数器的值必须为0后才能删除。当文件被修改每个用户看到的信息都是修改后的。
  • 特点:方便了文件的共享,但是让文件管理系统变得更加复杂。

文件共享

文件共享就是让多个用户共享使用一个文件,系统中只保存一个文件的副本,不需要每个用户都复制一份。

基于索引节点的共享方式

  • 思想:让每个用户的文件目录(文件名,索引节点编号指针)索引节点编号指针,指向同一个文件的索引节点,从而读取文件信息。
  • 注意:索引节点里面会有一个计数器,来记录当前访问文件的用户数量;如果此时有连个用户访问,用户A想要删除共享文件,而此时用户B还在使用,用户A只能删除它目录中的关于共享文件的目录项,不能删除共享文件。用户B可以删除索引节点,也就是删除文件。

利用符号链来实现文件共享

  • 思想:两个用户A、B,如果B想要访问A的中的文件F。系统会创建一个新的文件,新的文件也叫F,并将其写入B的目录下面。新文件F中存储的只是A中文件F的文件路径。其实就是你桌面上的快捷方式。
  • 注意:如果A中的F文件被删除了,B中的F依然存在,但是找不到文件了。用这种方式需要查找多级文件目录,会有很多次磁盘操作。

共享和复制区别

注意共享文件与复制文件是不同的,当某一文件被修改的话复制文件另一个文件夹里的数据不会被修改。但是如果共享文件被修改的话,两个文件都会被修改。

文件保护

访问类型

对文件的访问有:读、写、执行、添加、删除、列表清单(列出文件名和文件属性)

访问控制

访问控制表法

  • 概念:根据用户的类型控制其对文件访问的操作,文件中一般会增加一个访问控制表(行为操作,列为用户)一般0表示无权限,1表示有权限。
  • 改进:如果一个文件被很多用户访问,那么文件的访问控制表会很长,所以可以对用户进行划分,精简访问控制表用户包括:拥有者(创建文件的用户)、组(具有相同访问的用户)、其他(其他用户)。

口令法

  • 概念:文件在创建的时候提供一个口令,将口令存入文件的FCB中。用户访问的时候需要输入口令,才可以访问文件。
  • 特点:时间、空间开销小;口令在系统内部不安全。

密码法

  • 概念:用户对文件进行加密,使用文件的时候必须要相应的密匙来解密。比如异或加密。
  • 特点:保密性强,节约了存储空间;但是编码译码要消耗时间。

文件系统实现

层次结构

操作系统有很多种文件管理,也会有很多种层次结构。 用户调用接口 文件目录系统 存取控制验证模块 逻辑文件系统与文件信息缓冲区 物理文件系统 辅助分配模块 * 设备管理程序模块

目录实现

打开文件的时候,操作系统利用路径找到目录项,然后根据目录项找到文件磁盘所需要的信息。最主要的是怎么根据目录项找到文件信息,有以下两种方法

线性表

  • 概念:最简单的目录实现方法就是线性表法,线性表的每个节点存储文件名和数据块的指针,当创建新的文件的时候首先会搜索目录边查看有没有重名,然后在目录表后面增加一个目录项。
  • 特点:实现简单;但是每次查宅太过于耗时

哈希表

  • 概念:根据文件名得到一个值,然后返回一个指向线性表的一个指针。
  • 特点:增删改查比较方便,但是为了更快的操作会把当前的目录项复制到内存中,在内存中操作;哈希表的长度固定,哈希函数对表长的依赖性强

文件实现

文件分配就是文件数据在物理设备上是如何分布和组织的。主要在两方面文件的分配方式,就是对磁盘非空闲块的管理;文件存储空间,就是对磁盘空闲块的管理

文件的分配方式

连续分配

  • 分配方法:要求每个文件在磁盘上占有一组连续的块,磁盘地址是线性排序的。比如一个文件长n块,那么必须在磁盘上划分出n块连续空间存储文件
  • 特点:实现简单、存取速度快;文件大小不能动态增加,并且会产生外部碎片。

链接分配

  • 链接分配采用的是离散分配方式,对文件的增删改查比较方便,链接分配又分成隐式链接分配和显式链接分配。
  • 隐式链接分配
    • 分配方式:每个文件对应一个磁盘块的链表,文件块在磁盘中以链表的方式链接。添加文件的时候会在目录项中存储指向该文件首地址的指针。写文件的时候,系统会在磁盘中找到空闲块然后将这一块插入到文件里面。
    • 特点:增删改查比较方便,不会产生外部碎片;但是只能顺序访问文件,磁盘块中的指针会消耗空间,稳定性不好,如果指针丢失文件就会被破坏
  • 显式链接分配
    • 分配方式:把链接文件各个物理块的指针制作成一张链接表(文件分配表FAT),FAT是由盘块号和指向下一块的指针构成(盘块号,下一块号),由于盘块号是从0开始的所以可以省略。然后这张表存放在内存中,系统启动就调入内存。
    • 特点:因为表在内存中,提高了查找速度,减少访问磁盘的次数。

索引分配

  • 分配方式:把每个文件的所有盘块都存储在索引块中,在目录项中存储指向该文件索引块的指针。
  • 特点:没有外部碎片,支持直接访问文件的任意块。
  • 注意:当文件过大的时候索引块可能存储不了一个文件的所有块号,所以索引块很难解决大的文件,但是可以引入以下三种机制解决
  • 链接方案:将多个索引块链接起来
  • 多层索引:第一层索引块存储第二层索引块的信息,第二层索引块存储文件信息,或者更多层。
  • 混合索引:将多钟索引方式混合使用,一个索引块中可以有直接地址、一级索引块的信息、二级索引块的信息。

访问磁盘次数

如果一个文件有n个索引块,那么连续分配访问磁盘1次;链接分配访问磁盘n次;m级索引访问m+1次。

文件存储空间管理

存储空间的划分与初始化

  • 存储空间的划分:存储空间划分成物理磁盘,比如c、d、e、f盘
  • 存储空间的初始化:将各个磁盘划分成文件区和目录区

空闲表法

  • 概念:空闲表法是连续的分配方式,他与内存的动态分配方式相似。为文件划分一块连续的空间。系统为外存上的所有空闲区域建立一张空闲盘块表(序号,空闲盘块的第一块号,空闲盘块数)。同样可以使用首次适应,最佳适应等算法。

空闲链表法

空闲连表法就是根据构成链表的基本元素不同,分成空闲盘块链和空闲盘区链,对空闲区域进行管理。 空闲盘块链 * 概念:将符合要求的盘块组成一张链表,创建文件的时候,系统从链首开始依次给文件分配块,当回收的时候依次插入到文件的末尾 * 特点:分配与回收简单,没有碎片产生;但是分配空间的时候要产生多次重复的操作。 空闲盘区链 * 概念:将外存上的所有空闲盘区拉成一条链,每个盘区上存储指向下一个盘区的指针,和这个盘区的大小信息。当需要分配的时候会根据文件的大小+算法(一般是首次适应算法)找到合适区域。当回收的时候要注意与相邻的空闲盘区合并 * 特点:可以用作连续分配,也可以离散分配;效率更高,可以一次给一个文件分配一个区域,分配效率高

位示图法

  • 概念:用0,1分别表示盘块的使用情况,0代表盘块空闲,1代表盘块已分配。磁盘会成为一张位示图。
  • 分配
    • 扫描位示图,找到一个或者一组值为0的二进制位
    • 将找到的这一个二进制位转换成盘块号。设位于第i行第j列,每一行有n块,盘块号为b。如果盘块从0开始编号:b=n•i+j;如果盘块从1开始编号:b=n•(i-1)+j;
    • 修改位示图a[i][j]=1
  • 回收:
    • 将回收的盘块号转换成行和列。设位于第i行第j列,每一行有n块,盘块号为b。如果盘块从0开始编号:i=b÷n,j=b%n;如果盘块从1开始编号:i=(b-1)÷n,j=(b-1)%n
    • 修改位示图a[i][j]=0

成组链接法

  • 概念
    • 超级块:在文件的目录区中会设置一个专门的磁盘块作为“超级块”,当系统启动的时候就把它调入内存,保证他与外存中的超级快数据一致。
    • 概念:超级快中会记录下一组空闲盘块的数量与盘块号;在每个空闲盘块的第一个空闲盘块会记录下一个空闲盘块的地址信息和盘块数量。
  • 分配:根据指针+分配算法分配,分配之前会将这个空闲盘块的首地址和盘块数等信息存放到超级块中。
  • 回收:假设每个磁盘块又上限,如果前面的那个分组没有满可以直接加入到前面一个分组中,从新更新分组数据信息;如果前面空闲块已经满了,就会新建一个分组将它作为超级快指向的第一块,把超级块中的数据存放到新的分组中,超级块存放新分组的数据。

磁盘

磁盘是由表面涂有磁性金属物质的金属或者塑料组成。

访问时间

一次磁盘的访问时间是由寻找时间、延迟时间、传输时间所决定的。

寻道时间

  • 概念:活动头在读写信息前,会将磁头移动到指定的磁道所需要的时间。
  • 计算公式:设活动头需要跨越n个磁道,启动磁臂的时间s,磁盘驱动器运动常数m。T = m•n+s

延迟时间

  • 概念:磁头定位到某一扇区所需要的时间
  • 计算公式:设磁盘转速为r。T=1/2r

传输时间

  • 概念:从磁盘读取数据或者向磁盘写入数据的时间
  • 计算公式:读写字节数b,磁盘转速r,一个磁道上的字节数N。T=b/rN

调度算法

调度算法是通过对请求访问磁盘进程排序,只能寻道时间。

先来先服务

  • 概念:根据进程的请求访问磁盘的顺序进行调度,首先请求的最先满足
  • 特点:实现简单,适合于少量的请求,且访问的磁道区域小这种算法性能比较好;但是对于大量的请求,这种算法和随机访问的性能差不多。

最短寻找时间优先

  • 概念:活动头会选择处理与当前磁道距离最近的磁道。比如当前磁道为50,这时候一个进程请求65,一个进程请求40。那么它将会处理磁道为40的请求。
  • 特点:只能保证每次的寻道时间最短,但是不能保证总的寻道时间最短,且可能会造成饥饿的现象。

扫描算法

  • 概念:在最短寻找时间优先算法的基础上,扫描算法开始会找一个最近的然后只有磁头移动到最外侧后才会向内侧移动,同时当移动到最内侧的时候才能向外侧移动。
  • 特点:解决了饥饿问题,但是过于浪费时间,如果磁盘从1~100。当最大的请求为80的时候他还是会移动到100,在往回移动。
  • 为了解决过度浪费问题,出现了Look调度算法,磁头只移动到一端最远的那个请求就会返回。

循环扫描算法

  • 概念:每次都从其实位置开始扫面到最后,然后再快速的返回其实位置。
  • 特点:解决了扫描算法的不公平性,扫描算法在段时间内过于专注处理两边的磁道。但是它同扫描算法一样浪费时间
  • 引入了C-Look调度,每次回从最近的一个请求位置开始,到最远的请求位置结束。

减少延迟时间

磁盘是一个连续的自转设备,磁头读/写一个物理块后会

磁盘的管理

磁盘初始化

  • 低级格式化(物理分区):磁盘出场的时候只是一块空盘,必须分成扇区,以便磁盘控制器进行读写
  • 逻辑格式化:将磁盘分成多个柱面组成的分区,比如c、d、e盘;操作系统将初始化文件系统数据结构存储到磁盘上,包括空闲空间、已经分配的空间和一个空白目录。

引导块

  • 背景:磁盘完成格式化后将操作系统的数据写到磁盘中,开机的时候会初始化CPU、初始化内存等。初始化这些硬件会有一个初始化程序(自举程序),会存放在ROM(只读存储器,出厂就写好了)中,但是自举程序可能需要更新但是ROM是不能更改的,所以就出现了引导块来存放初始化程序(自举程序)。ROM中只存放很小的“自举装入程序”(可以引导CPU读取在磁盘的引导块上读取完整的自举程序)。
  • 概念:就是装自举程序的磁盘块,比如C盘

解决坏块问题

  • 方式1:磁盘会在逻辑格式化中标明哪些磁盘块是坏块,比如标注在FAT(文件分配表中)。
  • 方式2:磁盘控制快回在磁盘内部设立一个坏块链表保存坏块,同时也会有一些备用扇区用来替换坏块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值