本次笔记内容:
12.12 打开文件的数据结构
12.13 文件的分配
12.14 空闲空间列表
12.15 多磁盘管理-RAID
12.16 磁盘调度

文章目录

  • 打开文件
    • 何谓“打开文件”
    • 打开文件的锁的保护机制
  • 文件分配
    • 如何为一个文件分配数据块
      • 方法一:连续分配
      • 方法二:链式分配
      • 方法三:索引分配
      • 方法三扩展:大文件多级索引块
  • 空闲空间管理
  • 多磁盘管理-RAID(Redundant Arrays of Independent Drives)
  • 磁盘调度
    • 磁盘的性能
    • 磁盘调度方法
      • 先进先出
      • 最短服务优先
      • 扫描算法(SCAN,电梯算法)
      • C-SCAN方法
      • C-LOOK
      • 其他算法

打开文件

何谓“打开文件”

打开文件描述:

  • 每个被打开的文件一个;
  • 文件状态信息;
  • 目录项、当前文件指针、文件操作设置等。

文件被打开后,放入打开文件表中。

打开文件表:

  • 一个进程一个;
  • 一个系统级的;
  • 每个卷控制块也会保存一个列表;
  • 所以如果有文件被打开将不能被卸载。

如上图,可能两个进程同时打开一个文件,用文件打开表可以管理。

打开文件的锁的保护机制

  • 一些操作系统和文件系统提供该功能;
  • 调节对文件的访问;
  • 强制和劝告:
    • 强制:根据锁保持情况和需求拒绝访问;
    • 劝告:进程可以查找锁的状态来决定怎么做。

文件分配

比如,如果要写文件,文件增大,空间如何分配?

大多数文件很小:

  • 需要对小文件提供强力的支持;
  • 块空间不能太大。

一些文件非常大:

  • 必须支持大文件(64-bit 文件偏移);
  • 大文件访问需要相当高效。

如何为一个文件分配数据块

分配方式:

  • 连续分配;
  • 链式分配;
  • 索引分配。

指标:

  • 高效:如存储利用(外部碎片);
  • 表现:如访问速度。
方法一:连续分配

如上图,文件头指针会指定起始块位置和文件长度

产生问题:如果A文件在B文件前,A增长了,则B需要后移。

对于CD-ROM来说,是一种好的分配方法。因其高效性、只读性。

方法二:链式分配

如上图,链式存储很灵活,如果增大,则只需将尾指针后移。

但是问题是,访问必须是串行访问(假设访问链中第二个数据块,必须先找到第一个)。并且,不可靠,如果丢失一个,链就断了。

方法三:索引分配

如上图,专门设置一个索引数据块,一般放在文件头里。文件大小变化时,大量的修改只需要在索引块中。

但是,如果文件本身很小,索引数据块冗余严重;如果文件本身很大,一个索引数据块不够装。

方法三扩展:大文件多级索引块

如上图,可以采用链式(线性扩展,不可靠、不推荐)或多级索引块(分层方式,推荐)对大文件数据块索引信息进行保存。

如上图,在早期Linux里,采用多级索引块方式。小文件直接放在一级索引块里,保证小文件不需要经过多级索引就可以访问。

空闲空间管理

空闲磁盘块,如何被文件系统组织?如何表示?

如上图,用位图代表空闲数据库。1代表磁盘扇区已经被使用。但是要定期扫描空间块,因为如果掉电,磁盘是否空闲的信息可能对不上。

如上图中,对于160GB的磁盘,一个数据库40MB,则内存中需要5MB的位图信息。

如上图,如果刚刚将bit[i]=1时突然掉电,则尽管误认为数据库i被写入了,但是没有丢失信息。如果先写信息,再将bit[i]赋为1,则有可能丢失信息。

如上图,有些文件系统使用链式列表或分组列表表示空闲块。

多磁盘管理-RAID(Redundant Arrays of Independent Drives)

前置知识:

  • 磁盘读取中,最慢的是磁头的横向移动;
  • 文件系统是分区的、分卷的。

在RAID提出之前,磁盘经常坏。有没有可能通过并行、冗余(多个磁盘存一个内容)提高可靠性?

因此提高RAID(冗余磁盘阵列)。

RAID从RAID0发展到了RAID5、6…数字指磁盘阵列组织方式。

RAID分为软RAID和硬RAID。软RAID是在磁盘之上进行抽象,硬RAID是在芯片层面做处理,操作系统所见到的是一个被映射出的大磁盘。

如上图,RAID0中,把一个数据分成三部分存在三个硬盘上,进行并行读取,时间变为三分之一。

如上图,RAID1中,硬盘起到一个镜像作用。两个磁盘写一个内容。

如上图,RIAD4中,既能提升效率又能保证可靠性。Disk1-4中,某一个出现故障,可以通过Parity Disk进行奇偶校验。

但是,由此,Parity Disk的开销会比其他Disk大很多。

如上图,RAID5中,每个Disk都具有校验能力。则每个Disk开销差不多。RAID5是RAID4的升级。但是RAID4、RAID5只能纠正一个磁盘出错的情况(两个及以上不行)。

如上图,RAID0和RAID1可以分层或嵌套,来获得更多特性。RAID相关的技术还有很多。

磁盘调度

在OS层面,重新组织I/O顺序,来有效减少访问的开销。

如上图,机械运动相比电路很慢,因此优化机械动作,很重要。

磁盘的性能

如上图,对于读或者写的表示,寻道时间+旋转延迟=磁盘访问时间。

如上图是访问时间的计算公式。

  • 寻道时间是性能上区别的原因;
  • 对单个磁盘,会有一个I/O请求数目;
  • 如果请求是随机的,那么会表现得很差。

磁盘调度方法

先进先出
  • 按顺序处理请求;
  • 公平对待所用进程;
  • 在有很多进程的情况下,接近随机调度的性能。

如上图,这种方法随机性很大,磁盘指针来回地条,移动距离很长,开销很大。

最短服务优先

如上图,动态情况下规划,下次访问时与现在磁头最近的位置。

但是,原处的区域可能只需得不到服务,出现“饥饿”现象。

扫描算法(SCAN,电梯算法)

如上图,移到一头,再回来。

C-SCAN方法

如上图,限制磁臂只能向一个方向移动。只能从高到低访问。

C-LOOK

到达最后一个请求处反转,而非最高点。

其他算法

如上图,还有许多算法,比如N-Step-SCAN。

如上图,FSCAN是对N-step-SCAN的简化,将N=2。

对于真实系统来讲,可能需要更复杂算法,或不需要设计算法,因为:

  • 硬盘本身在变化;
  • 已经有SSD硬盘;
  • 硬盘已经高性能、智能化,软件方面可能作用不显著。

【操作系统/OS笔记20】打开文件、文件数据块分配、空闲空间管理、多磁盘管理(RAID)、磁盘调度算法概述相关推荐

  1. 【操作系统/OS笔记08】进程的定义、组成、PCB、生命周期管理、状态变化模型、挂起模型

    本次笔记内容: 7.1 进程的定义 7.2 进程的组成 7.3 进程的特点 7.4 进程的控制结构 7.5 进程的生命期原理 7.6 进程状态变化模型 7.7 进程挂起 文章目录 进程的描述 进程(p ...

  2. 【操作系统/OS笔记17】文件系统基本概念、文件描述符、文件系统访问、文件别名、文件系统种类

    本次笔记内容: 12.1 文件系统:总体介绍 12.2 基本概念 12.3 基本概念--文件系统和文件 12.4 基本概念--文件系统的功能 12.5 基本概念--文件和块 12.6 基本概念--文件 ...

  3. AI算法工程师 | 02人工智能基础-Python基础(四)os模块_打开读取文件

    文章目录 Python基础语法 之 文件和流 os 模块 调用操作系统命令 操作文件和目录 案例-文件重命名 打开读取文件 打开文件 读取文件 补充-中文编码问题 Python基础语法 之 文件和流 ...

  4. python 使用os模块自动打开本地文件

    import os os.system('path')   #path为文件路径,本目录下可直接写文件名os 为本地模块不需再行安装 运行环境:python3.6 os.system('path')  ...

  5. 【操作系统/OS笔记19】数据块缓存

    本次笔记内容: 12.11 数据缓存 文章目录 数据缓存的目的 数据缓存的方式 基于分页的缓存机制 数据缓存的目的 如上图,从硬盘访问要比从内存访问慢很多,因此需要在内存中开辟一块缓存数据的区域.接下 ...

  6. 【操作系统/OS笔记09】线程、线程的实现、上下文切换、进程控制

    本次笔记内容: 7.8 为什么使用线程 7.9 什么是线程 7.10 线程的实现 7.11 上下文切换 7.12 进程控制--创建进程 7.13 进程控制--加载和执行进程 7.14 进程控制--等待 ...

  7. 【操作系统/OS笔记18】虚拟文件系统概念

    本次笔记内容: 12.10 虚拟文件系统 文章目录 虚拟文件系统抽象 虚拟文件系统的目的与功能 虚拟文件系统基本结构 虚拟文件系统如何保存 虚拟文件系统抽象 如上图,虚拟文件系统就是,将复杂系统抽象, ...

  8. 【操作系统/OS笔记01】课程概要、什么是操作系统

    本次笔记内容: 1.1 课程概述 1.2 什么是操作系统 1.3 为什么学习操作系统 文章目录 课程概要 纲要 实验工具 预备知识 操作系统 什么是操作系统? 操作系统包含什么 OS Kernel的特 ...

  9. 操作系统学习笔记(二十八)~文件系统+连续分配+链接分配+索引分配+空闲空间管理

    11.1 文件系统 1.下面有关文件系统的论述错误的是().D A.在存储设备上组织文件的方法和数据结构 B.操作系统中负责管理和存储文件信息的模块 C.负责文件检索.读写等操作 D.从系统角度来说, ...

最新文章

  1. TVM darknet yolov3算子优化与量化代码的配置方法
  2. 2021年大数据ELK(二十):FileBeat是如何工作的
  3. 如何在JavaScript中切片和拼接数组
  4. 如何将深度学习研究论文实现为代码的几个要点
  5. MySQL如何查看连接数和状态
  6. oledb32.dll的作用
  7. 变态最大值--nyoj题目811
  8. [转]详细介绍java中的数据结构
  9. 02.analyzer-tokenizer
  10. python大数据后期教学_大数据处理之道(十分钟学会Python)
  11. SQL游标使用方法SQL游标使用方法(转)
  12. linux内存管理_浅谈Linux内存管理
  13. mysql 非英文_非英文网站如何使用MySQL的字符集
  14. 雅可比迭代法和高斯赛德尔迭代法
  15. android ajax chrome,chrome浏览器ajax请求状态200,response为空的探索
  16. 精益生产管理专家——安岷老师
  17. 解析美团联盟,美团分销联盟,美团福利宝,外卖美天赚区别和玩法
  18. 不同证书格式Der 、Cer 、Pfx 、Pem区别
  19. 原创【歌词类】雪中吟
  20. Wifi_认证 、关联 和 四次握手(WPA/WPA2)

热门文章

  1. 浏览器乱码问题的具体解决
  2. Django 模板标签 换行导致异常的处理 linebreaksbr
  3. webpack+vue解决前端跨域问题
  4. QT学习之解决QT中QIcon图标不显示的问题
  5. 如何解决php 生成验证码图片不显示问题
  6. 关于ElementUI中MessageBox弹框的取消键盘触发事件(enter,esc)关闭弹窗(执行事件)的解决方法
  7. 使用range()以相反的顺序打印列表?
  8. 由于AsyncTask是一个单独的类,如何使OnPostExecute()的结果进入主要活动?
  9. 如何将Git用于Unity3D源代码管理?
  10. 是否有唯一的Android设备ID?