操作系统-文件管理(上)
初识文件管理
- 文件–就是一组有意义的信息/数据集合
文件的属性
文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,**同一目录下不允许有重名文件**标识符:一个系统内的各个文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于去分各个文件的一种内部名称类型:指明文件的类型位置:文件存放的路径(让用户使用)、在外村中的地址(操作系统使用、对用户不可见)大小:指明文件大小保护信息:对文件进行保护的访问控制信息创建时间、上次修改时间、文件所有者信息等
文件内部数据的组织形式
操作系统向上提供的基本功能
创建文件(create系统调用)删除文件(delete系统调用)读文件(read系统调用)写文件(write系统调用)打开文件(open系统调用)关闭文件(close系统调用)
可用几个基本操作完成更复杂的操作,如复制文件等
文件的逻辑结构
- 逻辑结构:指在用户看来,文件内部的数据应该是如何组织起来的
- 物理结构:指在操作系统卡莱,文件的数据时如何存放在外存中的
类似于数据结构中的“逻辑结构”和“物理结构”
如“线性表”就是一种逻辑结构,在用户角度看来,线性表就是一组有先后关系的元素序列
“线性表”这种逻辑结构可以用不同的物理结构实现,如顺序表/链表。
无结构文件
文件内部的数据就是一系列二进制流或字符流组成。又称“流式文件”。没有明显的结构特性,如Windows操作系统中的.txt文件有结构文件
由一组相似的记录组成,又称“记录式文件”。每条记录由若干个数据项组成。如数据库表文件。一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的ID)。根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录和可变长记录两种。
有结构文件的逻辑结构分为
顺序文件
- 文件中的记录一个接一个的顺序排列(逻辑上),记录可以使定长的或可变长的。- 各个记录在物理上可以顺序存储或链式存储- 顺序文件又可分为:串结构:记录之间的额顺序与关键字无关,通常按照记录存入的时间决定记录的顺序顺序结构:记录之间的顺序按关键字顺序排列
- 顺序文件的随机查找
- 顺序文件的随机查找
索引文件
- 建立一张索引表以加快文件检索速度。每条记录对应一个索引项
- 主要用于对信息处理的及时性要求比较高的场合
索引顺序文件
- 索引顺序文件是索引文件和顺序文件思想的结合。索引顺序文件中,同样会为文件建立一张索引表,但不同的是:并不是每个记录对应一个索引表项,而是一组记录对应一个索引表项。
- 例如:学生记录按照学生姓名的开头字母进行分组。每个分组就是一个顺序文件,分组内的记录不需要按关键字排序
文件目录
文件控制块
目录文件中的一条记录就是一个“文件控制块(FCB)”
FCB的有序集合称为“文件目录”,一个FCB就是一个文件目录项,FCB中包含了文件的基本信息
目录结构
单级目录结构整个系统中只建立一张目录表,没饿文件占一个目录表单级目录实现了“按名存取”,但是不允许文件重名
两级目录结构:分为主文件目录(MFD)和用户级目录(UFD) 1.主文件目录记录用户名及相应用户文件目录的存放位置2.用户文件目录由该用户的文件FCB组成3.允许不同用户名的文件重名
多级目录结构(树形目录结构) 用户要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用“/”隔开。从根目录出发的路径称为**绝对路径**,可以使用从当前目录出发的“相对路径”。
无环图目录结构可以用不同的文件名指向同一个文件,甚至可以指向同一个目录需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点,计数器为0时才真正删除该结点注意:共享文件不同于复制文件。在共享文件中,由于用户指向的是同一个文件因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化
索引结点
- 除了文件名之外的所有信息都放到索引节点中,每个文件对应一个索引结点
- 目录项中只包含文件名、索引结点指针,因此每个目录项的长度大幅减小
- 由于目录项长度减小,因此每个磁盘块可以存放更多个目录项,因此检索文件时磁盘I/O的次数就减少了很多
文件的物理结构(文件分配方式)
文件块、磁盘块
- 类似于内存分页,磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。很多操作系统中,磁盘块的大小与内存块、页面的大小相同
- 在内存管理中,进程的逻辑地址空间被分为一个个页面
同样的,在外存管理中,为了方便对文件数据的管理,文件的逻辑地址空间也被分为了一个一个的文件“块”。
于是文件的逻辑地址也可以表示为**(逻辑块号,块内地址)**的形式,用户通过逻辑地址来操作文件,操作系统要负责实现从逻辑地址到物理地址的映射
操作系统为文件分配存储空间都是以块为单位的
连续分配
连续分配方式要求每个文件在磁盘上占有一组连续的块
逻辑地址到物理地址的映射
(逻辑块号,块内地址)->(物理块号,块内地址)只需要转换块号就行,块内地址保持不变用户给出要访问的逻辑块号,操作系统找到改文件对应的目录项(FCB)...物理块号=起始块号+逻辑块号还需检查用户提供的逻辑块号是否合法(逻辑块号≥长度就不合法)
故连续分配方式支持顺序访问和直接访问(即随机访问)
- 读取某个磁盘时,需要移动磁头。访问的两个磁盘块相隔越远,移动磁头所需时间就越长。故连续分配的文件在顺序读/写时速度最快
- 物理上采用连续分配的文件不方便拓展,存储空间利用率低,会产生难以利用的磁盘碎片
链接分配
链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显示链接两种。
隐式链接
文件名 | … | 起始块号 | 结束块号 |
---|---|---|---|
aaaa | … | 9 | 16 |
- 目录中记录了文件存放的起始块号和结束块号
除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个潘快的指针,这些指针对用户是透明的 - 逻辑地址->物理地址
用户给出要访问的逻辑块号,操作系统找到改文件对应的目录项(FCB)…
从目录项中找到起始块号(即0块号),将0号逻辑块读入内存,由此知道1号逻辑块存放的物理块号…以此类推 - 故采用链式地方时的文件,只支持顺序访问,不支持随机访问,查找效率低。另外,指向下一个盘块的指针也需要耗费少量的存储空间。
- 采用隐式链接的链接分配方式,很方便文件拓展。另外,所有的空闲磁盘块都可以被利用,不会有碎片问题,外存利用率高。
显示链接
把用于链接文件各物理块的指针显示的存放在一张表中。即文件分配表(FAT,File Allocation Table)
- 目录中只需记录文件的起始块号
文件名 | … | 起始块号 |
---|---|---|
aaa | … | 2 |
bbb | … | 4 |
- FAT(文件分配表)
物理块号 | 下一块 |
---|---|
0 | 1 |
2 | -1 |
3 | 5 |
4 | -1 |
5 | 23 |
… | 0 |
22 | |
23 | 3 |
假设某个新创建文件“aaa”依次存放在磁盘块2->5->0->1
假设某个新创建文件“bbb”依次存放在磁盘块4->23->3
- 一个磁盘仅设置一张FAT。开机时,将FAT读入内存,并常驻内存
- 逻辑地址->物理地址
用户给出要访问的逻辑块号,操作系统找到改文件对应的目录项(FCB)…
从目录项中找到起始块号,若i>0,则查询内存中的文件分配表FAT,往后找到i好逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作
结论:采用显示链接方式的文件,支持顺序访问,也支持随机访问,由于块号转换过程不需要访问磁盘,因此相比于隐式链接来说,访问速度快很多,也不会产生外部碎片,也可以很方便的对文件进行拓展
索引分配
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(索引表功能类似于内存管理中的页表)。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。
- 目录中需要记录文件的索引块是几号磁盘块
文件名 | … | 索引块 |
---|---|---|
aaa | … | 7 |
bbb | … | 23 |
假设某个新创建的文件“aaa”的数据依次存放在磁盘块2->5->13->9。
7号磁盘块作为“aaa”的索引块,索引块中保存了索引表的内容
- 文件aaa的索引表
逻辑块号 | 物理块号 |
---|---|
0 | 2 |
1 | 5 |
2 | 13 |
3 | 9 |
- 注:在显示链接的链式分配方式中,文件分配表FAT是一个磁盘对应一张。而索引分配方式中,索引表是一个文件对应一张。
- 索引分配方式可以支持随机访问。文件拓展也很容易实现,只需要给文件分配一个空闲块,并增加一个索引表项即可。
物理结构总结
How? | 目录项内容 | 优点 | 缺点 | |
---|---|---|---|---|
顺序分配 | 为文件分配的必须是连续的磁盘块 | 起始块号、文件长度 | 顺序存取速度快,支持顺序访问 | 会产生碎片,不利于文件拓展 |
隐式链接 | 出文件的最后一个磁盘块之外,每个盘块中都存有指向下一个盘块的指针 | 起始块号、结束块号 | 可解决碎片问题,外存利用率高,文件拓展实现方便 | 只能顺序访问,不能随机访问 |
显示链接 | 建立一张文件分配表(FAT),显示记录盘块的先后关系(开机后FAT常驻内存) | 起始块号 | 除了拥有隐式链接的优点之外,还可通过查询内存中的FAT实现随机访问 | FAT需要占用一定的存储空间 |
索引分配 | 为文件数据块建立索引表,若文件太大,可采用链接方案、多层索引、混合索引 | 链接方案记录的是第一个索引块的块号,多层/混合索引记录的是顶级索引号的块号 | 支持随机访问,易于实现稳健的拓展 | 索引表需占用一定的存储空间。访问数据块前需要先读入索引块。若采用链接方案,查找索引块时可能需要很多次读磁盘操作。 |
操作系统-文件管理(上)相关推荐
- 操作系统——文件管理
文章目录 前言 一.文件管理概述 二.文件的逻辑结构 1.顺序文件 2.索引文件 3.索引顺序文件 三.文件目录 1.文件控制块 2.目录结构 3.索引结点 四.文件的分配方式 1.连续分配 2.链接 ...
- 四级网络工程师笔记-操作系统(上)
四级网络工程师笔记-操作系统(上) 前言: 系列博文 操作系统原理 第一章 操作系统概论 1. 操作系统概述 2. 操作系统特征 3. 操作系统结构设计 4. -般指令和特权指令 5. 研究操作系统的 ...
- LXC linux容器简介——在操作系统层次上为进程提供的虚拟的执行环境,限制其使用的CPU和mem等资源,底层是linux内核资源管理的cgroups子系统...
1.LXC是什么? LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术. 2.LXC可以做什么? LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的 ...
- 银河麒麟桌面操作系统V10上安装使用MySQL5.7、MySQL Workbench
前言 本文介绍银河麒麟桌面操作系统V10上通过麒麟软件商店安装MySQL5.7.MySQL Workbench及其基本使用方法 一.安装MySQL5.7 点击UK图标.所有程序,找到麒麟软件商店 输入 ...
- 银河麒麟高级服务器操作系统V10上安装k8s单机集群
前言 本文介绍银河麒麟高级服务器操作系统V10上安装部署k8s单机集群及一些基础的kubectl指令 本文涉及部署脚本主要源自基于https://github.com/easzlab/kubeasz在 ...
- 银河麒麟桌面操作系统V10上安装IDEA集成开发环境并导入SpringBoot项目
前言 本文介绍银河麒麟桌面操作系统V10上安装部署IDEA集成开发环境,并导入从spring官方生成的一个springboot项目进行常规开发调试工作 一.系统信息 1.操作系统版本 右键点击任务栏, ...
- 如何在龙芯架构和国产化操作系统平台上运行javacv
前言 在上一篇中讲到,在全面国产化替换即将到来之时,聊聊如何在国产芯片龙头"龙芯"和国产操作系统平台上运行c/c++.java.nodejs.等编程语言,go/rust等静态编译型 ...
- 操作系统--文件管理知识整理(学秃liao)
操作系统--文件管理超详细整理! 文件管理 文件系统基础 概念性:什么是文件和文件系统? 一系列定义 文件的基本操作(文件的使用) 文件的逻辑结构(4种) 目录结构 文件目录功能 文件控制块和索引结点 ...
- 做一个支持图形界面的操作系统(上)
分类: OS2006-05-01 20:00 856人阅读 评论(0) 收藏 举报 原文:http://www.binghua.com/Article/Class6/Class7/200409/267 ...
- TMS FNC 组件,操作系统/浏览器上同时使用
TMS FNC Dashboard Bundle 生产适用于 Windows.跨平台和 Internet 的仪表板软件. TMS FNC 组件可以在这些框架上同时使用 TMS FNC 组件可在这些操作 ...
最新文章
- krsort函数怎么用php,krsort函数怎么用
- Java EE CDI依赖关系消歧示例
- JavaScript 表格专题
- spring自定义生命周期的几种方法
- yum配置(源配置-光驱,ftp服务器;基本用法)
- 关于Clipboard剪切板获取值为NULL问题解决方法
- 探索生产计划排程(APS)的发展历程
- c#winfrom通讯录管理系统
- mysql 登录 无密码_重置mysql的密码/无密码登录mysql
- 反应器(Reactor)模式
- 一次算法作业hhhhhh
- vue:高德地图的使用
- 面试篇1:C/C++,Linux
- ERROR [master/jinghang01:16000:becomeActiveMaster] master.HMaster: Failed to become active master
- Fiddler抓包6-get请求(url详解)
- Word文档用通配符批量替换日期格式
- 哪里有适合Mac苹果电脑系统的音频格式转换软件
- 蒸发器分段设计matlab程序_MVR蒸发器工艺设计操作规程完整
- python界面小程序
- python实现输出日历
热门文章
- python numba_python numba讲解
- 【创建包:employee,完成如下功能】1. 创建一个员工类(Employee),其中包括:1) 4个私有属性:员工姓名(name)、员工年龄(age)、员工职位(position)、工资
- JS中window.onload事件详解
- windows中LNK文件打开方式恢复(图形文件打开方式怎么都成CAD打开方式)
- 模型展示|易模定制化制作的绿植模型
- uglifyjs报错 webpack_vue 解决uglifyjs-webpack-plugin打包出现报错的问题
- Hadoop学习第二天
- 前端与English
- 计算机专业同学综合自我评估,计算机专业学生的自我评价
- Python 离散余弦变换(DCT)