操作系统原理:文件系统、磁盘调度

article/2025/10/14 22:04:33

目录

一、相关概念       

二、文件的分配

三、空闲空间列表

四、多磁盘管理-RAID

五、磁盘调度


一、相关概念       

       文件系统是一种用于持久性存储的系统抽象。硬盘属于持久性存储介质的一种。管理文件系统例如硬盘,需要管理文件块,哪一块属于哪一个文件;需要管理空闲空间和分配策略;为文件提供相应的保护,文件数据的存储需要可靠性持久性。文件的属性包含名称、文件类型(后缀)、位置、大小、读写权,创建者、创建时间,最近修改时间等 ; 文件头 保存了文件的控制信息。

       文件描述符是操作系统为每个进程维护维护的一个打开文件表的索引。需要元数据来对文件进行有效的管理,元数据包括文件指针来记录最后一次读写位置,文件打开计数(文件是共享资源,允许多个进程打开同一个文件),文件磁盘位置(缓存数据的访问信息),访问权限等。在操作系统更上层的应用程序不需要关心文件在磁盘中的哪一个位置,只管对缓存区Buffer的读写就行。具体的逻辑内存和外存之间的映射关系由操作系统完成。内存的读写单位是页或者字节,而外存磁盘的读写是扇区。

     当用户需要读取文件数据时,操作系统会获取用户需要访问的字节空间,进一步地操作系统会根据用户需要访问字节所在的扇区给取出来。

     别名,及一个文件由多个名字。软连接生成出的文件,其内容是另一个文件的路径名(指针),通过访问这路径名可以间接的访问对应的文件,又称快捷方式。硬链接生成出的文件其文件项指向同一个文件的内容。对于硬链接,有种特殊的数据结构记录了文件被引用的计数。删除硬链接对应的文件,只是把计数减1,直到减为0文件才会彻底删除。如果删除软连接对应的文件,文件没了,链接也就悬空了。有点像C++里的智能指针和弱指针。别名的应用潜在的风险就是循环引用,可能在遍历路径时造成异常,所以需要考虑检索文件算法的健壮性。

    文件系统分为磁盘文件系统,数据库文件系统(例如WinFs),日志文件系统(例如 Journaling file system,用于可恢复文件数据),网络/分布式文件系统(例如NFS、GFS等,利用网络访问其他系统的文件),特殊/虚拟文件系统

    虚拟文件系统是对所有文件系统的抽象,管理所有文件和文件系统关联的数据结构,给上层提供统一的接口,实现对各种文件系统高效的读/写/查/打开/关闭等功能。

    

对于基本的文件系统数据结构包含:卷控制块(超级块)用来记录文件系统的特征信息,例如块大小,块数量,空余块,指针等;文件控制块用来记录文件的特征信息,例如拥有者,文件大小,数据库位置等; 目录节点,每个目录项一个,包含了目录项的数据结构和指向的文件控制块、父节点项目列表等。

 

二、文件的分配

       文件的分配分成3种,连续分配方式、链式分配方式、索引分配方式。对于不同大小文件应考虑空间高效和时间高效采用适合数据块分配方式。通常的表现指标是访问时间和空间利用率。

       连续分配策略就是找到一块满足文件大小的数据块进行分配。和页内存的连续分配策略类似。如果频繁进行文件的修改/删除可能会有无法利用的空闲块。当然这种组织方式是简单的,通常方法就最佳分配,最先适配等。

       链式分配策略,像链表一样的数据结构。优点就是很少的碎片,但是串行访问可能会比较花时间。访问第三个数据块,先要访问第二个数据块,访问第二个数据库,首先应访问第一个数据库才行。还有一个缺点就是,链表的指针(链接)信息,可能会因为突然断点导致文件数据来不及写入到硬盘中导致中间修改数据块的链接信息丢失,断了“链”就会造成之后的文件数据无法关联起来。

       多级索引分配策略,像树一样的数据结构,每个非叶子节点都是索引,通过索引块可以找到数据库的位置。这种方式可以高效地利用碎片,增删也方便。缺点就是存储小文件也需要为索引块分配空间,不能直接访问。

三、空闲空间列表

       文件系统需要把空闲空间组织起来。可以用‘0’ 和 ‘1’ 表示数据块是否为空闲。所以可以用位图来管理文件系统的所有数据块列表的空闲情况。访问文件系统时,数据块空闲列表需要装入到内存中,因此还需要考虑可能因为断电造成内存和硬盘数据信息不一致情况的问题。

四、多磁盘管理-RAID

       早期磁盘容易坏,数据容易丢失。为了保持高健壮性,通常用多个便宜的硬盘并行写数据,这样一个硬盘损坏也不至于数据丢失,同时也可以提高磁盘的访问效率。

       RAID-0:把数据均匀地放在独立的硬盘里,对硬盘并行的写操作和读操作。对于操作系统来说,访问数据,可以并行地将不同硬盘的数据写入内存中。

       RAID-1:如果其中有一个硬盘损坏,那么其他硬盘可以替代损坏的硬盘的工作,提高可靠性。多硬盘起到了镜像作用。

       RAID-4:多硬盘中,用一个硬盘用来完成数据纠错功能,称为Parity Disk。此方法考虑到了RAID-0 和RAID-1的高效和高可靠的特点。缺点是Parity Disk 的读写非常频繁。

       RAID-5:多硬盘中,选其中用几个或多个硬盘用来完成数据纠错功能。让多个硬盘分摊原先Parity Disk的读写负担。

五、磁盘调度

          在磁盘调度管理中都是先进行是移臂调度,然后进行旋转调度。 磁头通过移动来找到扇区具体位置,磁盘通过旋转来寻道找到数据的位置。一个磁盘有多个盘片,每个盘片有一到两个的磁头来读取数据。“旋转”和“移动”都是机械操作,与电子读取的效率相比慢了好几个数量级。

    那么有什么调度策略来减少读取磁盘的开销呢?当有一系列寻道请求时,如果采用先来先服务策略,访问数据如果在不同扇区,而扇区在磁盘的物理位置距离过长,那么磁头读取数据时可能会来回“跳动”。造成很大的开销。

     最短寻道时间,在系列寻道请求中,找到扇区位置与当前磁头所在扇区的位置的距离最短的请求,先执行。这个可能会造成离磁头的远的寻道请求长时间无法执行,造成饥饿现象。

     Scan,又称电梯算法,磁头先往磁盘内环移动接收相应的寻道请求,再往磁盘外环接收相应的寻道请求,像电梯一样。那么所有请求都可以公平地得到访问。

    C-Scan,单方向寻道法,磁头从磁盘内环当作起始位置。往磁盘外环移动接收相应的寻道请求,到了外环后迅速回到起始位置。

    C-Look, 单方向寻道法,磁头从磁盘内环当作起始位置。往磁盘外环移动接收相应的寻道请求,到了最外环的寻道请求后迅速回到起始位置。

    N-step-Scan.将寻道请求队列分成N个子队列,每处理子队列请求都采用Scan算法。

    F-Scan。是N-step-Scan的特例,只分成两个子队列,每处理子队列请求都采用Scan算法。

以上是基本的寻道策略,然而现实情况可能根据磁盘的特点指定出特有的策略,有些硬盘的寻道甚至都不需要程序来完成,硬件帮你做了。


http://chatgpt.dhexx.cn/article/Ej7AnZrL.shtml

相关文章

Linux的操作系统原理详解

Linux的操作系统原理详解 ///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿/// 1.操作系统基本概念 操作系统是一个基本程序的集合,在这个集合中,最重要的程序称为内核(Kernel&a…

操作系统原理

操作系统原理 第一章第二章第三章第四章第五章第六章总结 第一章 计算机系统组成部分: 硬件 应用程序 操作系统 用户操作系统的作用: 1.操作系统是管理计算机硬件的程序,为应用程序提供基础并充当计算机用户和计算机硬件的中介。 2.操作系统…

操作系统基本原理

操作系统的类型与结构 操作系统是计算机系统中最基本的系统软件,它既管理计算机系统的软、硬件资源,又控制程序的执行。操作系统的基本类型有:批处理操作系统、分时操作系统和实时操作系统。从资源管理的角度看,操作系统主要是对处…

操作系统原理(概述)

1.操作系统的工作: (1)程序的执行:负责启动每个程序,以及结束程序的工作。 (2)完成与硬件有关的工作:实现代码中包含存储器的物理地址、对设备接口寄存器和设备接口缓冲区的读写等…

Unity UGUi之Panel

Unity UGUI之Panel制作滑块 新建一个Panel和一个Image,image放在Panel下做子物体。 给Panel添加 Scroll Rect 和 Mask 组件, Mask组件是用来隐藏image超出Panel的区域。 然后将image拖拽到Scroll Rect组件下的Content属性上。 Horizontal是水平滑动,…

winform 设置panel边框

var panel1 new Panel(); var old panel1.Margin; panel1.Margin new Padding(old.Left, -50, old.Right, old.Bottom);

EasyUI中Panel面板的简单使用

场景 效果 属性 名称类型描述默认值idstring面板(panel)的 id 属性。nulltitlestring显示在面板(panel)头部的标题文字。nulliconClsstring在面板(panel)里显示一个 16x16 图标的 CSS class。nullwidthnu…

[C# WinForm设计]Panel布局及TabControl增加关闭按钮和Treeview导航 源码

前段时间因工作需要做一个类似进销存的系统,这里要用到基于C/S架构的WinForm界面,为了给我一样的菜鸟多一个参考,现将过程及关键界面的实现代码贴在后面,供参考!老鸟飘过~~ 一、实现效果 演示 namespace TabTest {part…

C#Winform中如何将窗体显示在panel中

在窗体中我们有时候做美观就需要将一个窗体显示在panel或SplitContainer里的panel中如何实现呢? 代码: public void Showform(Form form) //定义方法 { //清除panel里面的其他窗体 this.splitContainer1.Panel2:要显示的panel this.splitCont…

从零开始学习CANoe(四)—— 设计panel

相关文章 从零开始学习CANoe(一)—— 新建工程从零开始学习CANoe(二)—— CANdb 创建 dbc文件从零开始学习CANoe(三)—— 系统变量的创建和使用从零开始学习CANoe(四)—— 设计pane…

winform无边框在panel上拖动窗口位置,改变窗口大小

将窗体的FormBorderStyles属性设置为None 窗体上放一个新的panel,设置Dock属性为Fill 创建变量 private bool isMouseDown false;//表示鼠标当前是否处于按下状态,初始值为否 MouseDirection direction MouseDirection.None;//表示拖动的方向&#x…

C# Winform Panel 内控件大小不随Panel大小改变设置

(1)将Anchor属性设置为:None (2)将AutoSize属性设置为:False 不过还存在一个问题点,就是Button的位置还是会随着Panel大小变化而改变。

Panel控件

今天小编来给大家介绍一下panel控件; 首先来看一下panel控件是什么? 是什么: Panel 控件提供了一种用于组织控件的分组机制。Panel 控件可被递归嵌套在 Form 控件(Panel 控件最外面的容器)中。面板呈现它本身包含的控件。 面板上…

UI的Panel面板

1.Panel panel控件又叫面板,该面板实际就是一个容器,在其上可放置其他UI控件 当移动该面板时,放在其中的UI控件会随着移动,这样更加合理与方便地移动与处理一组控件 当面板被创建时,会默认包含一个Image(Script) Sour…

Unity Panel 控件

Panel 容器组件又叫面板组件,实际上就是一个容器,在其中可以放置其他的UI元素。 注意,在Unity中,子物体的位置是相对于父物体的,而非绝对位置 在Panel的参数区中,除了空间位置这个常用参数外,我…

Linux系统之部署Linux管理面板1Panel

Linux系统之部署Linux管理面板1Panel 一、1Panel介绍1.1Panel简介2.1Panel特点 二、本地环境规划1.本此实践目的2.本地环境规划 三、检查本地环境1.检查操作系统版本2.检查系统内核版本 四、部署1Panel1.创建安装目录2.一键部署1Panel3.检查1Panel服务运行状态4.检查1Panel监听…

javasocket编程(javasocket通信)

Java网络编程-JavaSocket编程是什么呢? Socket传输模式 Sockets有两种主要的操作方式:面向连接的和无连接的。面向连接的sockets操作就像一部电话,他们必须建立一个连接和一人呼叫。所有的事情在到达时的顺序与它们出发时的顺序时…

(Android)JavaSocket编程,文件上传到服务器,客户端Android,服务器端J2SE

SD卡中有encrypt.png文件 在E盘可以看到,从模拟器SD卡中发送来的文件 服务器端代码,我这里是使用CMD命令演示的。服务端等待客户端连接,然后接收客户端的数据。包括文件名,大小,和文件数据。 import java.io.Buffered…

Java Socket实现文件传输

阿里云双11服务器优惠(年度最佳优惠): A:1核2GB 1M 服务器年69元 B:1核2GB 1M 服务器三年180元 C:2核4GB 1~10M 服务器三年567元(强烈推荐) D:4核8GB 1~10M 服务器三年10…

Java Tcp(Socket、ServerSocket)

TCP所提供服务的主要特点: 面向连接的传输;端到端的通信;高可靠性,确保传输数据的正确性,不出现丢失或乱序;全双工方式传输;采用字节流方式,即以字节为单位传输字节序列&#xff1b…