zoukankan      html  css  js  c++  java
  • Linux2.6块设备驱动程序

    一、块设备的操作的处理体系结构

    1.VFS(虚拟文件系统)

    VFS位于块设备的处理体系结构的上层,提供一个通用的文件模型。VFS和块设备的关系见Linux2.6设备管理

    系统调用的服务例程调用一个合适的VFS函数,将文件描述符和文件内的偏移量传递给它。


    2.磁盘高速缓存

    VFS函数确定所请求的数据是否已经存在磁盘高速缓存中,若存在,就没有必须访问磁盘上的数据了。


    3.映射层(块设备文件系统)

    (1)把文件拆分成大小相同的块,每一个块都有一个逻辑号

    (2)访问文件的磁盘节点,根据每一块的逻辑块号,确定这块数据的在磁盘上的位置


    4.通用块层

    (1)内核利用通用块层启动I/O操作来传送所请求的数据。

    每个I/O操作只针对一组连续的块,由一个bio结构描述

    由于所请求的数据不一定在相邻的块中,所以可能启动多次I/O操作

    (2)gendisk是一个由通用块层处理的逻辑块设备。

    通常一个gendisk对应一个硬件块设备,如硬盘、软盘、光盘。

    gendisk也可以是一个虚拟设备,建立在几个磁盘分区之上

    不管理gendisk是什么,借助于通用块层提供的服务,可以以同样的方式工作在所有的gendisk上。

    (3)向通用块层提交一个I/O请求的通用操作

    分配一个新的bio描述符,并初始化

    获取与gendisk相关的块设备驱动程序的请求队列q

    将bio插入q队列


    5.I/O调度程序层

    (1)当内核组件要读写一些磁盘数据时,创建一个块设备请求。请求中描述所请求的扇区和操作类型

    (2)通过I/O调度策略(见(4)),把物理介质上相邻的数据请求聚在一起,减少不必须的寻道时间,提高效率

    当请求传送一个新的数据块时,内核检查能否通过稍微扩展前一个处于等待状态的请求而满足要求

    (3)每个块设备驱动程序都维持着自己的请求队列,对每个队列上单独执行I/O调度,可以提高磁盘的性能。

    (4)I/O调度策略

    预期算法:是最后期限算法的演变,最后期限算法中读的优先级较高,而预期算法写的优先级更高

    最后期限算法:电梯策略可能会对某个请求忽略很长一段时间,最后期限算法保证这些请求得到满足

    完全公平队列算法CFQ:确保在触发I/O请求的所有进程中公平分配磁盘的I/O带宽,通常把同一进程的请求放插入同一队列

    Noop算法:没有排序队列,简单的FIFO后LIFO

    电梯算法:优先处理与上一个所处理的请求最近的要求


    6.块设备驱动程序

    驱动程序向磁盘控制器发送适当的命令,进行实际的数据传输。

    一个驱动程序可能处理几个块设备

    每个块设备驱动程序都维持着自己的请求队列


    7.硬件设备


    二、数据管理的基本单位

    1.扇区

    扇区是硬件设备传送数据的基本单位。

    扇区大小是512KB


    2.块

    块是VFS文件系统、映射层传送和存储数据的基本单位。文件和磁盘都被看作拆分成几个块。

    块的大小必须是2的幂,不超过一个页框,是扇区大小的整数倍

    块的大小不是唯一的,比如:512、1024、2048、4096

    同一个磁盘上的几个分区可能使用不同大小的块


    3.段

    段是块设备驱动程序传输数据的单位

    一个段是一个内存页或内存页的一部分,它包含磁盘上相邻的扇区


    4.页

    硬件高速缓存作用于磁盘数据上的页,每页正好装在一个页框中


    5.扇区、块、段、页

    扇区 512B 硬件传送数据的基本单位
    大小是2的幂
    不超过一个页框
    是扇区的整数倍
    VFS、文件系统、映射层的传送和存储数据的基本单位
    几个相邻的扇区 驱动程序处理数据的基本单位


  • 相关阅读:
    指针数组/数组指针
    hdu 5053 the Sum of Cube(上海网络赛)
    Archlinux YouCompleteMe+syntastic vim自己主动补全插件,显示缩进和状态栏美化,爽心悦目的vim
    sgu139Help Needed!推断15数码是否有解,以及推断N数码是否有解的推论
    hdu 4932 Miaomiao's Geometry(暴力)
    Theano学习笔记(一)——代数
    Tomcat全攻略
    send,recv,sendto,recvfrom
    git合并远端分支到本地分支的两种方式
    php实现记忆化递归--以斐波那契数列为例(还是以边学边做为主,注重练习)
  • 原文地址:https://www.cnblogs.com/windmissing/p/2559804.html
Copyright © 2011-2022 走看看