操作系统(IO和文件管理)

Operating System (IO and file system)

Posted by wykxwyc on March 16, 2019

计算机有两个主要任务:IO和计算处理。在许多情况下,主要任务是IO操作,而计算处理只是附带的。例如,当浏览网页或编辑文件时,大家的兴趣是读取或输入信息,而不是计算答案。

目录

IO系统

IO硬件

IO的硬件分为3个部分:轮询,中断,DMA

  • 轮询
    cpu不断查询的过程,浪费时间,效率低下

  • 中断
    采用中断驱动的I/O循环如下:

int-loop.png

  • 直接内存访问(DMA)
    在开始DMA传输时,主机箱内存中写入DMA命令块。该命令包括传输的源地址指针、传输的目的指针、传输的自己数。cpu在将该命令块的地址写入到DMA控制器中后,就继续其他工作。DMA控制器则继续下去直接操作内存总线而无需主CPU的帮助,就可以将地址放到总线上以开始传输。

DMA.png

IO应用接口
  • 块与字符设备
    块设备接口规定了访问磁盘驱动器和其他基于块设备所需的各个方面。通常设备应能理解read()和write()命令,如果是随机访问设备,也应有seek()命令以描述下次传输那个快。应用程序通常通过文件系统接口访问设备。应用程序不必关注这些设备的底层差别而只需要read(),wirte(),seek()的接口就可以。

  • 网络设备
    网络IO的性能和访问特点和磁盘IO相比有很大差别。许多操作系统提供的接口是网络socket接口,如UNIX和Windows NT。

  • 时钟和定时器
    三个基本函数:
    1.获取当前时间
    2.获取已经逝去的时间
    3.设置定时器,在时间T时触发操作X

磁盘的使用

cpu使用磁盘:

  1. cpu发出一个读命令
  2. 磁盘将数据送往内存
  3. 读完后向cpu发出中断
磁盘结构
  • 盘面(Platter):一个磁盘有多个盘面;
  • 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道;
  • 扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主* 要有 512 bytes 与 4 K 两种大小;
  • 磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写);
  • 制动手臂(Actuator arm):用于在磁道之间移动磁头;
  • 主轴(Spindle):使整个盘面转动。

IDE

磁盘调度算法

读写一个磁盘块的时间的影响因素有:

  • 旋转时间(主轴转动盘面,使得磁头移动到适当的扇区上)
  • 寻道时间(制动手臂移动,使得磁头移动到适当的磁道上)
  • 实际的数据传输时间

其中,寻道时间最长,因此磁盘调度的主要目标是使磁盘的平均寻道时间最短。

1.先来先服务

FCFS, First Come First Served

按照磁盘请求的顺序进行调度。

优点是公平和简单。缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。

FCFS

2.最短寻道时间优先

SSTF, Shortest Seek Time First

优先调度与当前磁头所在磁道距离最近的磁道。

虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两端的磁道请求更容易出现饥饿现象。

SSTF

3.电梯算法

也称为 SCAN 算法

电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。

电梯算法(扫描算法)和电梯的运行过程类似,总是按一个方向来进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。

因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了 SSTF 的饥饿问题。

SCAN

4.C-SCAN调度

C-SCAN Circular SCAN 与SCAN一样,C-SCAN将磁头从磁盘一段移到磁盘的另一端,随着移动不断地处理请求。不过当磁头移到另一端时,它会马上返回到磁盘开始,返回时并不处理请求。

C-SCAN

5.LOOK调度
SCAN和C-SCAN使磁头在整个磁盘宽度内进行移动。事实上,这两个算法都不是这么现实的。通常磁头只移动到一个方向上最远的请求为止。接着,它马上回头,而不是继续到磁盘的尽头。这种形式的SCAN和C-SCAN称为LOOK和C-LOOK调度。因为他们在朝一个方向移动会看是否有请求。

LOOK

文件

为什么引入文件?
引入文件,对磁盘使用的第三层抽象
让普通用户使用raw disk: 许多人连扇区都不知道是什么?要求他们根据盘块号来访问磁盘…

因此需要在盘块上引入更高一层次的抽象概念! 文件

文件: 建立字符流到盘块集合的映射关系

文件的分配方法

绝大多数情况下,一个磁盘可以存储许多文件。主要问题是如何为这些文件分配空间,以便有效地使用磁盘空间和快速访问文件。 常用的主要磁盘空间分配方法有三个:连续,链接和索引。

  • 连续分配

连续分配要求每个文件在磁盘上占有一组连续的块。磁盘地址为磁盘定义了一个线性序列,在访问块b后访问块b+1不需要移动磁头。当需要磁头移动时,只需要移动一个磁道。因此,用于访问连续分配文件所需要的寻道数最小,所需要的寻道时间也最小。

在文件修改后,比如增加了它的内容,整个文件需要挪到其他更大的磁盘上,这是十分不方便的,也很浪费时间。

这种方法比较适合于直接读写而不适合于动态增长。

  • 链接分配

链接分配解决了连续分配的所有问题。采用链接分配,每个文件时磁盘块的链表。磁盘分布在磁盘的任何地方。目录包括文件第一块的指针和最后一块的指针。

链接分配的缺点: 它只能有效地用于文件的顺序访问。要找到文件的第i块,必须从文件的开始起,跟着指针找到第i块。浪费时间,因此不能有效地支持文件的直接访问。
另一个缺点是,指针需要空间,每个文件需要比原来更多的空间。

  • 索引分配

链接分配不能有效支持直接访问,因为块指针和块一起分布在整个磁盘,且必须按顺序读取。
索引分配通过把所有指针放在一起,通过索引块解决了这个问题。

index-allocation.png

实际系统是多级索引
小文件值是直接索引
中等大小用一阶间接索引
更大的可以用多级索引

index-actual.png

目录与文件系统

目录的作用:

  • 搜索文件
  • 创建文件
  • 删除文件
  • 遍历目录
  • 重命名文件
  • 跟踪文件系统

1.单层结构目录 所有文件都包含在同一目录中,其特点是便于理解和支持。

single-struct.png

2.双层结构目录 单层结构目录通常会在不同用户之间引起文件名的混淆。标准解决办法是为每个用户创建独立目录。

double-struct.png

3.树状结构目录

tree-struct.png

4.无环图结构目录

none-loop-struct.png

5.通用图目录

universal-graph-struct.png

文件系统的安装

如同文件使用前必须要打开,文件系统在被系统上的进程使用之前必须安装。具体地说,目录结构可以建立在多个卷上,这些卷必须被安装以使他们在文件系统命名空间中可用。

安装步骤相对简单。操作系统需要知道设备名称和文件系统的安装位置(称为安装点)。通常,安装点为空目录。例如,在UNIX中,包括用户主目录的文件系统可安装在/home。这样,在访问文件系统中的目录结构时,只要在目录名前加上/home,如/home/jane即可。将文件安装在/usr可使路径名/usr/jane指向同一目录。