操作系统--设备驱动的抽象--磁盘
操作系统提供多层抽象
生磁盘
信息的读写本质上是磁生电,电生磁的过程。直接操作磁盘无非就是一些out指令。
磁盘的第一层抽象:扇区--->盘块
磁盘访问时间=写入控制器时间+寻道时间+旋转时间+传输时间。
盘块:多个扇区
扇区的读写,耗费的时间主要在寻道上。
操作系统提供:抽象+效率
- 三维地址到一维地址的抽象
- 相邻盘块相邻编址,加快寻道效率。
- 每次读一个扇区-->每次读一个盘块,用空间换时间提高效率。
磁盘的第二层抽象:多个进程通过队列使用磁盘
调度算法的改进:(思维的递进)
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>



总结:

 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号