操作系统原理学习笔记(文件与I/O)

学习视频

随看随记

  • 成组链接法

文件管理

文件系统

文件的基本概念

文件的属性
  • 文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件。
  • 标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此 标识符只是操作系统用于区分各个文件的一种内部名称。(操作系统内部使用,与用户无关)
  • 类型:指明文件的类型
  • 位置:文件存放的路径(让用户使用)、在外存中的地址(操作系统使用,对用户不可见)
  • 大小:指明文件大小
  • 创建时间、上次修改时间、文件所有者信息
  • 保护信息:对文件进行保护的访问控制信息(访问权限(管理者权限、用户权限))
文件内部的数据怎样被组织起来
  • 无结构文件:如文本文件,由二进制或字符流组成,又称流式文件。
  • 有结构文件:如数据库表,由一个个记录组成,又称为记录式文件。
  • 记录式文件式数据库页表中的一组数据项的集合(表格中的一行)
  • 数据项是文件系统中最基本的单位(表格中的一格)
    操作系统原理学习笔记(文件与I/O)_第1张图片

操作系统原理学习笔记(文件与I/O)_第2张图片

文件之间怎样被组织起来
  • 文件之间是一个树形结构。
  • 除根目录外,每个目录都由目录(文件夹)和普通文件组成。
  • 用户可以自己创建一层一层的目录,各层目录中存放相应的文件。系统中的各个文件就通过一层一层的目录合理有序的组织起来了
  • 目录其实也是一种特殊的有结构文件(由记录组成),如何实现文件目录是之后会重点探讨的问题
  • 操作系统原理学习笔记(文件与I/O)_第3张图片
操作系统向上提供哪些功能(增删改查+开启关闭)
  • 增:创建文件(create系统调用)。
  • 删:删除文件(delete系统调用)。
  • 改:写文件(write系统调用)。
  • 查:读文件(read系统调用)。
  • 开启:(读/写文件开始时需要)打开文件(open系统调用)。
  • 关闭:(读/写文件结束时需要)关闭文件(close系统调用)。
  • 也可以通过多个系统效用功能完成一个复杂操作,比如剪切。首先在目标地址建立文件,读取原来文件,写入新文件,删除原文件。
    操作系统原理学习笔记(文件与I/O)_第4张图片
从上往下看文件如何存放到外存
  • 操作系统是以块为单位进行存储的。
  • 和内存类似:外存也是由一个个存储单元组成,每个存储单元可以存储一定的数据,每个存储单元能对应一个逻辑地址。
  • 操作系统以“块”为单位为文件分配存储空间,因此即使一个文件大小只有10B,但它依然需要占用1KB的磁盘块。外存中的数据读入内存时同样以块为单位。
  • 类似于内存分为一个个“内存块”,外存会分为一个个“块/磁盘块/物理块”。每个磁盘块的大小是相等的,每块一般包含2的整数幂个地址(如
    本例中,一块包含210个地址,即1KB)。同样类似的是,文件的逻辑地
    址也可以分为(逻辑块号,块内地址),操作系统同样需要将逻辑地址转
    换为外存的物理地址(物理块号,块内地址)的形式。块内地址的位数取决于磁盘块的大小。
  • 操作系统原理学习笔记(文件与I/O)_第5张图片
小结

操作系统原理学习笔记(文件与I/O)_第6张图片

文件的逻辑结构(在用户看来文件内部数据是如何被组织起来的)

  • 主要学习有结构文件的逻辑结构:包括顺序文件、索引文件和顺序索引文件。
  • 操作系统原理学习笔记(文件与I/O)_第7张图片
  • 有结构文件:由一组相似的记录组成,又称“记录式文件" 。每条记录有若干个数据项组成。如:数据库表文件。一般来说,每条记录有一个数据项可作为关键字==(主键)。根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录可变长记录==两种。
顺序文件
  • 顺序文件,文件中的记录一个接一个地顺序排列 (逻辑上)。记录可以是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
  • 顺序文件包括:串结构和顺序结构。
  • 串结构表示:记录的顺序与关键字无关,一般是以记录插入的时间决定记录的存储顺序
  • 顺序结构:记录的顺序根据关键字的顺序排列。

讨论是否可以随机存取或根据关键字对应记录?

  • 链式存储:无论是定长还是可变长都无法实现随机存取或关键字查找。
  • 顺序存储的可变长记录无法实现随机存取或关键字查找。
  • 顺序存储的变长记录(可以理解成数组)可以实现随机存取。如果采用串存储则无法实现关键字搜索,如果采用顺序结构则可以实现关键字搜索。
  • 顺序结构的难点是增加或删除一个记录比较困难。
索引文件
  • 建立一个索引表,加快文件的检索速度,每一个记录对应一个索引项。
  • 索引表本身就是一个定长记录的顺序文件中包括三项,索引号,长度,指针。
  • 其中关键字可以作为索引号的内容,当要增加或删除一个记录时,需要对索引表进行修改。由于索引文件有很快的检索速度,因此主要用于对信息处理的及时性要求比较高的场合。
  • 另外,可以用不同的数据项建立多个索引表。如:学生信息表中,可用关键字“学号”建立一张索引表。也可用“姓名"建立一张索引表。这样就可以根据“姓名"快速地检索文件了。(Eg: SQL 就支持根据某个数据项建立索引的功能)
  • 操作系统原理学习笔记(文件与I/O)_第8张图片
索引顺序文件
  • 结合了索引文件和顺序文件的思想,同样会为文件建立一个索引表,但不同的时并不是每个记录一个索引表项,而是一组记录一个索引表项。
  • 索引顺序文件的索引项也不需要按关键字顺序排列,这样可以极大地方便新表项的插入。
  • 若一个顺序文件有10000个记录, 则根据关键字检索文件,只能从头开始顺序查找(这里指的并不是定长记录。顺序结构的顾序文件)。平均须查找5000个记录。
  • 若采用素引顺序文件结构,可把10000个记录分为根号10000 = 100组。每组100个记录。则需要先顺序查找索引表找到分组(共100个分组,因此索引表长度为100, 平均需要查50次)。找到分组后,再在分组中同序查找记录(每个分组100个记录。因此平均需要查50次)。可见。采用索引顺序文件结构后。平均查找次数减少为50+50=100次。
  • 操作系统原理学习笔记(文件与I/O)_第9张图片
  • 操作系统原理学习笔记(文件与I/O)_第10张图片
  • 当记录还是比较多时,可以采用多级索引表的形式,每一级建立索引,减少搜索次数。
  • 操作系统原理学习笔记(文件与I/O)_第11张图片
小结

操作系统原理学习笔记(文件与I/O)_第12张图片

文件目录

文件控制块(FCB)
  • 一个文件对应一个FCB,一个FCB就是一个目录项,多个FCB组成一个文件目录。
  • 目录本身就是一个结构文件,由一条条记录组成,每条记录对应一个该放在该目录下的文件。
  • FCB实现了文件命和文件之间的映射,使用户可以实现按名存取。
  • FCB的有序集合称为“文件目录”,一个FCB就是一个文件目录项。FCB中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读可写、禁止访问的用户名.单等),使用信息(如文件的建立时间、修改时间等)。最重要,最基本的还是文件名文件存放的物理地址
  • 操作系统原理学习笔记(文件与I/O)_第13张图片
  • 操作系统原理学习笔记(文件与I/O)_第14张图片
  • 目录可以进行那些操作:
  • 创建文件(增):创建一个新文件时,需要在其所属的目录中增加-一个目录项
  • 制除文件(删):当删除-一个文件时,需要在目录中删除相应的目录项
  • 修改目录改):某些文件属性保存在目录中,因此这些属性变化时需要修改相应的目录项(如:文件重命名)
  • 搜索(查 文件):当用户要使用一个文件时,系统要根据文件名搜索目录,找到该文件对应的目录项
  • 显示目录(查 目录件):用户可以请求显示目录的内容,如显示该目录中的所有文件及相应属性
目录结构
  • 早期的操作系统仅支持单级目录系统,相当于仅有一级,不允许文件重名。
  • 操作系统原理学习笔记(文件与I/O)_第15张图片
  • 早期的多用户操作系统采用两级目录结构,分为主文件目录和用户文件目录。相当于第一级目录用来记录用户名和用户文件目录的存放位置。第二级才是真正的文件位置的存放目录。
  • 因为有了第一级的用户目录,因此二级目录结构可以实现不同用户的访问限制。
  • 对于相同的用户来说是不允许文件重名的,但是对于不同的用户来说,是可以文件重名的。
  • 操作系统原理学习笔记(文件与I/O)_第16张图片
  • 多级目录系统(树形目录系统)
  • 从根目录触发的是绝对路径,从当前目录出发的是相对路径。相对路径会比绝对路径需要更少的I/O操作。
  • 以下图为例从绝对路径开始的话则要找到“自拍.JPG"就需要访问外存3次:->根目录 -> 照片目录 ->"2015-08"目录共三次
  • 从照片的相对路径开始的话则要找到“自拍.JPG"仅需要访问外存1次: ->"2015-08"目录共1次 操作系统原理学习笔记(文件与I/O)_第17张图片
  • 为了便于实现文件的共享,提出了无环图目录结构
  • 如果User1的demo 和 User2的Mydemo是同一个文件,则两个可以指向一个文件。使得整个目录称为一个有向无权图。
  • 对于每个共享结点设置一个共享计数器,当有用户想要删除文件时,仅仅会删除对应的FCB,同时共享计数器减1。当共享计数器为0时,再删除结点。
  • 共享结点不同于复制节点,复制节点会增加一个文件,共享节点时两个PCB指向一个文件。再共享文件中,只要一个用户修改了文件,所有用户都会看到文件的变化。
  • 操作系统原理学习笔记(文件与I/O)_第18张图片
  • 操作系统原理学习笔记(文件与I/O)_第19张图片
索引节点(FCB的改进)
  • 还是封装的思想,如果FCB过于庞大,则会将FCB中的除了文件名的所有属性打包到索引节点中,来对FCB进行瘦身。
  • 如下图右下角,当需要搜索不同的盘块时,需要进行一次I/O操作。因此使用原来FCB时最多需要进行40次I/O,平均20次I/O。如果使用索引结点,需要5个盘块即可,最多需要进行10次I/O,平均5次I/O。节省了系统开销。
  • 操作系统原理学习笔记(文件与I/O)_第20张图片
  • 当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
  • 存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。
  • 相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等。
小结

操作系统原理学习笔记(文件与I/O)_第21张图片

文件的物理结构(文件数据应该怎样放到外存中)

  • 磁盘块的大小和内存块、页面大小相同。
  • 磁盘和内存都是以块为单位进行的,每次读出一块或写入一块。
  • 在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”于是文件的逻辑地址也可以表示为(逻辑块号,块内地址)的形式。
  • 用户通过逻辑地址来操作自己的文件,操作系统需要实现从逻辑地址向物理地址的转变(重点关注)。
  • 连续分配方式要求每个文件在磁盘上占有一组连续的块。操作系统原理学习笔记(文件与I/O)_第22张图片
连续分配
  • 连续分配方式要求每个文件在磁盘上占有一组连续的块。
  • 文件目录中会记录文件的起始块号和长度。
  • 将逻辑块号找到对应的地址就行,块内地址不变。
  • 用户给出要访问的逻辑块号,操作系统找到该文件对应的目录项(FCB) ,物理块号=起始块号+逻辑块号。当然,还需要检查用户提供的逻辑块号是否合法(逻辑块号≥长度就不合法)可以直接算出逻辑块号对应的物理块号
  • 因此连续分配支持顺序访问和直接访问(即随机访间)。
  • 操作系统原理学习笔记(文件与I/O)_第23张图片
  • 操作系统原理学习笔记(文件与I/O)_第24张图片
  • 优点:支持随机访问和直接访问。因为连续分配方式磁头的移动距离少,因此连续分配的文件再顺序读/写时速度最快。
  • 缺点:不宜拓展,当连续分配的情况下,绿色的磁盘块要拓展的时候,下图情况必须要将绿色迁移到黄色。
  • 会产生外部碎片,

操作系统原理学习笔记(文件与I/O)_第25张图片
操作系统原理学习笔记(文件与I/O)_第26张图片

链接分配
  • 隐式链接:每个磁盘块都存放文件的下一个磁盘块的指针(对用户透明)。

  • 从目录项中找到起始块号(0号块),将0号块读入内存后,知道1号块的逻辑块位置,读入1号逻辑快,以此类推。

  • 优点:易拓展,不会有碎片问题。

  • 缺点:只支持顺序访问,不支持随机访问。

你可能感兴趣的:(其他,学习,操作系统)