十天玩转操作系统之文件管理,一篇文章就搞定!!!


       操作系统(OS)这门学科在计算机领域有着很重要的作用,作为计算机硬件和软件的临界者,对计算机发展有着很重要的意义,随着时代的不断发展,越来越多的操作系统进入大众视野,无论是大家耳熟能详的Windows、MAC,抑或是程序员口中经常念叨的Linux。除了电脑操作系统,手机中的鸿蒙、苹果、安卓也是大家关注的热点,因此要想在计算机领域有所造诣,操作系统是必须要了解掌握的一门学科,因此在这里借助平台,跟大家分享一下我学习操作系统的经验和笔记,用十天的时间来和大家梳理和整理这门学科,让我们一起探索其中的奥秘,享受知识带给我们的快乐吧!!!

文件

文件属性

  • 文件名:同一目录下不允许有重名文件
  • 标识符:一个系统内的各文件标识符唯一
  • 类型:指明文件的类型
  • 位置:文件存放的路径、在外存中的地址
  • 大小:文件大小
  • 创建时间、上次修改时间、文件所有者信息
  • 保护信息:对文件进行保护的访问控制信息

文件逻辑结构

请添加图片描述

  • 无结构文件:一系列二进制流或字符流组成,又称“流式文件”
  • 有结构文件:一组像素的记录组成,又称“ 记录式文件”,可分为定长记录和可变长记录
  • 顺序文件:顺序存储或链式存储
    增加和删除一个记录比较困难

索引文件:
请添加图片描述索引顺序文件:
请添加图片描述多级索引顺序文件:
请添加图片描述

文件目录

  • 文件控制块FCB
    包含了文件的基本信息(文件名、文件存放的物理地址),存取控制信息,使用信息
  • 索引节点
    磁盘索引节点是唯一的,减少磁盘I/O次数

目录结构
(1)单级目录
      一张目录表,每个文件各占一个目录项,实现“按名存取”,查找速度慢
(2)两级目录
      主文件目录(存贮用户名和用户文件位置)和用户文件目录,无法进行分类
(3)多级目录结构(树形目录结构)
      用分隔符“/”连接,引入绝对位置和相对位置的概念,不便于文件共享
(4)无环图目录结构
请添加图片描述一个文件可以有多个指向,每个共享节点设置一个共享计数器

文件的物理结构

磁盘块的大小与内存块、页面的大小相同,方便互相调入调出

(1)连续分配

  • 每个文件在磁盘上占有一组连续的块
  • 物理块号=起始块号+逻辑块号
  • 支持顺序访问和直接访问
  • 连续分配的文件在顺序读/写时速度最快
  • 动态扩容困难
  • 产生难以利用的磁盘碎片(可以利用紧凑方式处理)

(2)链接分配
离散分配的方式,为文件分配离散的磁盘块

隐式链接

  • 目录中记录起始块号和结束块号,每个磁盘块保留指向下一个磁盘块的指针
  • 不支持随机访问,只能顺序访问
  • 外存利用率高,易于动态扩展

显式链接

  • 文件分配表FAT,每个磁盘块对应下一个磁盘块。
  • 支持随机访问(不需要再磁盘里读取一块找到下一块,通过常驻内存的FAT直接找到实际物理块号,直接访问磁盘)

(3)索引分配

  • 允许文件离散分配在各个磁盘块中,系统会为每个文件建立一张索引表,表中记录了逻辑块号与物理块号的对应关系
  • 索引表存放的磁盘块称为索引块
  • 文件数据存放的磁盘块称为数据块
  • 可以支持随机访问,容易实现文件拓展

如果磁盘块中的索引表过大无法完全存储:
1、链接方案
将多个索引链接起来存放,但是如果文件比较大,则需要许多块号,此时查询块号需要花费大量时间
2、多层索引
各级索引表大小不能超过一个磁盘块
3、混合索引
包含直接地址索引(指向数据块),又包含一级间接索引(指向单层索引表)、两级间接索引

根据多层索引和混合索引计算文件的最大长度;分析访问某个数据块需要的读磁盘次数

文件存储空间管理

空闲表法
请添加图片描述可采用首次适应、最佳适应、最坏适应算法来决定要为文件分配哪个区间

回收磁盘块:
1、回收区前后都没有相邻空闲区
2、回收区前后都是空闲区
3、回收区前面是空闲区
4、回收区后面是空闲区

空闲链表法
空闲盘块链:以盘块为单位
保留链头、链尾指针,根据分配从链头选取,回收修改链尾指针的原则

空闲盘区链:以盘区为单位,连续空闲盘块组成盘区
保留链头、链尾指针,根据盘块个数寻求匹配的盘区,如果没找到采取合并空闲盘区策略
回收时相邻合并,独立单独作为一个空闲盘区

位示图法
请添加图片描述比如:26号磁盘块等于1*16+10,这里的1就是字号1,10就是位号

b号盘块对应的字号i=b/n,位号j=b%n

分配:若文件需要k个块,则先顺序扫描连续k个盘块,修改为“1”
回收:根据字号、位号修改为“0”

成组链接法
Unix采用的策略,适合大型文件系统。(类似树的头插法)

文件基本操作

  • 创建文件
    1、在外存中找到文件所需的空间
    2、创建该文件对应的目录项
  • 写文件
    1、指明文件名称和要写入文件内容
    2、为该文件维护一个写位置的指针
  • 读文件
    1、指明文件名称和要读入文件块的位置
    2、为该文件维护一个读位置的指针
  • 删除文件
    1、找到文件目录项
    2、使其变成空项
    文件打开与关闭
    文件指针、文件打开计数、文件磁盘位置、访问权限

文件共享

1、基于索引节点的共享方式(硬链接)
设置一个链接计数变量count,用户目录项链接到索引结点上

2、利用符号链实现文件共享(软连接)
类似于快捷方式,删除源文件软连接失效

文件保护

  • 口令保护
    为文件设置“口令”,口令密码保护在系统内部,被破译之后不安全
  • 加密保护
    异或加密:对文件数据和加密/解密的密码(二进制位)进行异或算法
  • 访问控制
    访问控制列表:记录了各个用户对文件的访问控制(读、写、执行、添加、删除、列表清单)

文件层次结构

请添加图片描述

  • 用户接口:向上层的用户提供一些简单易用的功能接口。处理用户发出的系统调用
  • 文件目录系统:通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径来找到相应的FCB或索引结点
  • 存取控制模块:为了保证文件数据的安全,还需要验证用户是否有访问权限
  • 逻辑文件系统与文件信息缓冲区:用户指明想要访问文件记录号,这一层需要将记录号转换为对应的逻辑地址
  • 物理文件系统:将逻辑地址转化为物理地址
  • 辅助分配模块:负责文件存储空间的管理,负责分配和回收存储空间
  • 设备管理模块:直接与硬件交互,负责和硬件直接相关的一些管理工作

磁盘

磁盘结构

  • 硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。
  • 受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。
  • 盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。
  • (柱面号,盘面号,扇区号)用来表示一个磁盘块
    请添加图片描述
    下图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)
    请添加图片描述
    硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。
    请添加图片描述
    磁盘分类:
    根据磁头是否可以移动分为:固定头磁盘、移动头磁盘
    根据盘片是否可以更换分为:固定盘磁盘、可换盘磁盘

磁盘调度算法

  • 启动时间s,跨越每道磁道时间m,共n道磁道
  • 寻道时间:T=m*n+s
  • 延迟时间:T=(1/2)*(1/r)=1/(2r)
  • 传输时间:T=(1/r)*(b/N)=b/(rN)

(1)先来先服务(FCFS)
先提出需求的先访问。
(2)最短寻找时间优先(SSTF)
先访问当前离指针最近的磁道,以此类推
可能产生“饥饿”现象
(3)扫描算法(SCAN)
只有磁头移动最外侧磁道的时候才能往内移动
(4)Look算法
如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向
(5)循环扫描算法(C-SCAN)
只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回是直接快速移动至起始端而不处理任何请求
(6)C-Look方法
如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向,但是改变方向时要直接改变至最边上再开始扫描

减少延迟时间的方法

  • 交替编号:让逻辑上相邻的扇区间隔分布
  • 错位命名:让相邻盘面的扇区编号“错位”

磁盘管理

  • 磁盘初始化:低级格式化(划分扇区的过程)、将磁盘房内去(分为C盘、D盘、E盘)、进行逻辑格式化(创建文件系统)
  • 引导块:计算机启动时需要运行初始化程序(自举程序)来完成初始化,ROM存放很小的自举装入程序,完整的自举程序存放在引导块中
  • 坏块管理:对损坏的盘块进行标记,可以在FAT表上标明,或者进行扇区备用

      第九天的学习到这里就结束了,不知道小伙伴们收获如何呢?欢迎评论区交流学习,也恳请各位批评指正!!

      操作系统其实就是计算机中的一个大管家,这个大管家有着很多很厉害的角色(就像谍战片里面的大府中的老管家一样),因此学习操作系统这门课,就像是在欣赏一部谍战片,要想理解角色内涵,你就必须站在其角度去思考,思考其可能会遇到的危险以及应对策略(bug与bug的修复),这样你才能在凶险的代码江湖生存下来,成为一代英雄,留下你的印记,期待与各位在江湖的相遇,也希望大家能给作品一个三连!!


本文参考教材:王道考研——操作系统(配套PDF文件,点赞留言后私信我发你)
教材配套讲解视频:b站链接


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柠笙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值