操作系统--设备驱动的抽象--磁盘

操作系统提供多层抽象

生磁盘

信息的读写本质上是磁生电,电生磁的过程。直接操作磁盘无非就是一些out指令。

磁盘的第一层抽象扇区--->盘块

磁盘访问时间=写入控制器时间+寻道时间+旋转时间+传输时间。

盘块:多个扇区

扇区的读写,耗费的时间主要在寻道上。

操作系统提供:抽象+效率

  1. 三维地址到一维地址的抽象
  2. 相邻盘块相邻编址,加快寻道效率
  3. 每次读一个扇区-->每次读一个盘块,用空间换时间提高效率

 

磁盘的第二层抽象:多个进程通过队列使用磁盘
调度算法的改进:(思维的递进)

  FIFO:先来先服务。缺陷:由于磁盘扇区编址特定性,而访问磁盘扇区有随机性,磁头在长途奔袭,寻道反复,效率低。

      最短寻道算法:先服务离当前磁头最近的盘块。缺陷:中间磁道号被服务的概率要高于边缘磁道,不够公平。

  电梯算法:一次扫描,从高盘块号到低盘块,扫描一次后立刻回位,边缘和中间的盘块被扫描绝对公平;

生磁盘的使用:进程访问磁盘,给出盘块号,操作系统首先换算成扇区号,然后将该进程的访问做成一个磁盘请求,将该请求加入电梯队列,进程睡眠,磁盘中断处理请求,做真正的out工作,然后唤醒进程。

 

熟磁盘

磁盘的第三层抽象:伟大的文件视图

  从文件字符流映射到盘块,操作系统封装了这种映射。 

  1.数组映射:

FCB file control block中 ,保存了inode。

顺序存储之下,FCB 中存放每一个文件的文件名,起始盘块和块数等。

每一个文件处理时找到对应文件FCB,知道起始盘块号,知道每个盘块包含的字节数,顺序存储,文件第n个字符就可以换算出对应的盘块。

数组映射比较适合读写,不适合动态增长。

  2.链式映射:

FCB 存放第一个盘块号,通过链式索引。

链式存储类似链表,适合动态增长,顺序访问较慢。

  3.索引结构:

链式和顺序的结合;

在实际中使用的是多级索引结构,操作系统维护了一些数据结构。inode (index inode)。

 

文件使用磁盘:最重要的结构,index node (inode)inode 就指明了文件的盘块所在  ,多级索引,完成从文件字符流到盘块的映射。根据文件名字得到fd,根据fd得到inode。

 

 

磁盘的第四层抽象文件系统,抽象整个磁盘,抽象成一棵目录树

给一个路径名,得到一个FCB就是第四层抽象的关键。

目录:文件的集合。

给一个路径名,找到该文件,一个匹配的过程。一个目录项可以保存该目录下的所有文件FCB,直接分级查找,但是这样做会有一定的缺陷,匹配的时候只是匹陪文件名子符串,真的有必要读入FCB整个结构吗?

改进:将所有的FCB结构保存至一个数组中,形成FCB数组,每一个目录项只保存

<文件名字符串,位于数组中的index>

 

 

 

总结:

 

 

posted @ 2022-11-21 09:51  stu--wy  阅读(107)  评论(0)    收藏  举报