zoukankan      html  css  js  c++  java
  • Linux0.12文件系统高速缓冲区的管理

    1.高速缓冲区

    位置:内核代码和主内存之间

    作用:解决I/O操作与CPU处理之间的速度不匹配

    大小:被划分成与磁盘数据块大小相等的缓冲块

    管理方式:hash表(设备号^逻辑块号) + 双向链表(所有的buffer_head)


    2.高速缓冲的划分:



    3.管理方式:注意,并不是一个散列队列组成双向链表,而是所有的缓冲块,顺序是最近最少使用(LRU)


    4.bread() ----- 从设备上读取数据块

    (1)获取缓冲区getblk()

    (2)判断缓冲区数据是否有效,

    若有效,则返回缓冲区指针。(有效:数据已从设备读入到缓冲区,因为程序是异步执行的)

    (3)向块设备驱动程序申请,同时让进程进入睡眠ll_rw_block()(详见驱动设备)

    (4)睡眠中,直到块设备驱动程序把指定的数据放入高速缓冲区后

    (5)判断缓冲区数据是否有效

    若有效,则返回缓冲区指针

    若无效,则释放缓冲区,返回空指针


    5.getblk() ----- 获取空闲缓冲块

    (1)搜索hash表,判断指针设备号和逻辑块号的缓冲区是 否存在(见管理方式)

    若存在:go to step 12(已经得到了所需要的缓冲块)

    (2)搜索空闲队列

    若未找到空闲块,go to step 1

    (3)等待空闲块解锁

    (4)若空闲块又被占用,go to step 1

    (5)若该块已被修改过,则

    将数据写入设备

    进入睡眠等待数据写完

    (6)若块又被占用,go to step 1

    (7)若该块被加入高速缓冲区,go to step 1(被别的设备抢先占用)

    (8)(走到这里说明已经可以占有这个缓冲块了)修改缓冲块标志

    (9)从hash表和双向表中移出

    (10)占用该块,修改块号和设备号

    (11)根据(10)重新插入hash表,插入双向表的末尾(LRU)

    (12)返回缓冲块头指针

  • 相关阅读:
    http-server -S 开启 https 服务
    material-ui react的ui框架 有时间可以看看 chia用的前台ui
    关于vue.js:iview-Bug-5114在iview的Poptip气泡提示内调用DatePicker出现遮挡或同时关闭窗口等冲突问题[转]
    coding 的pages 静态要六分钱一个月,我也是醉了。
    jeesite 有时间看看
    选择单词后 按 ctrl + space 单词发音
    什么是CI/CD
    PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用
    浅析requestAnimationFrame
    webpack性能优化
  • 原文地址:https://www.cnblogs.com/windmissing/p/2559837.html
Copyright © 2011-2022 走看看