zoukankan      html  css  js  c++  java
  • linux 文件在磁盘上的表示

    基本构成


    分区就是把磁盘像比萨饼一样切成大小一样的扇形, 当然分区大小不一样扇形的大小也就不一样
    上下一串盘片中,相同半径的磁道所组成的一个圆柱型的环壁,就称为柱面
    在柱面组中, 比较重要的两个结构是:i节点集合和数据块集合

    i节点和数据块


    数据块集合是由大小固定的数据块组成, 在很多系统中数据块的大小为4K
    以4K为例, 如果一个文件的大小是12K,那么它会占用3个数据块
    读取三个数据块就可以知道文件的内容, 可是我们要如何知道这三个数据块的位置?
    如果三个数据块不是连在一起而是东一块西一块又该如何?
    i节点的作用就是记录文件的数据块数量和数据块在磁盘上的位置的
    不仅如此,i节点还包含文件的其它属性信息,文件属性struct stat的内容便是来自于i节点

    读取文件内容

    每个i节点都有一个号码, 操作系统用不同的号码来识别不同的文件
    文件读取: 当我们打开一个文件读取时, 系统找到文件名对应的i节点, 然后通过i节点找到数据块, 再把文件内容拼凑出来
    文件夹读取: 就是读取一系列目录项(dirent), 每个目录项由两部分组成: a.文件或文件夹的名称 b.该文件名对应的i节点

    链接

    引用计数: 当有很多指针都需要访问同一块内存的数据时, 我们记下来当前在访问的指针总数, 来一个就把总数加1, 当有指针调用free操作时, 我们不释放这块内存, 只是把刚刚记下的总数减一, 直到最后一个指针调用free时才真正把内存释放掉
    硬链接: 引用计数在磁盘文件上同样适应, 那个总数保存i节点中. 对一个已存在的文件执行link操作, 生成一个新的文件, 新旧文件都指向同一个i节点, 删除新旧文件中的一个只是把i节点中的链接总数减一, 并不会删除数据块.

    软链接: 与硬链接相对. 像windows系统中的快捷方式, 不会增加链接总数, 依赖于原先的旧文件

    如果i节点中硬链接总数减为0时, 就会释放对应的数据块, 但数据块内容不会被立即擦除, 这些数据块原先被i节点保护不会被系统随意征用, 现在可以被系统重新分配给其它程序使用, 在未重新分配给其它程序写入内容之前, 我们还是可以通过技术恢复数据块内容的.

    文件的复制和删除

    复制: 在不跨分区的情况下, 文件复制只是多了一个别名, 然后对应的i节点链接总数加1.
    删除: 对应的i节点链接总数减1, 如果是最后一个链接就释放数据块.

  • 相关阅读:
    Python之路【第十九篇】:前端CSS
    大数据之路【第十五篇】:数据挖掘--推荐算法
    大数据之路【第十四篇】:数据挖掘--推荐算法(Mahout工具)
    Python之路【第十八篇】:前端HTML
    大数据之路【第十三篇】:数据挖掘---中文分词
    大数据之路【第十二篇】:数据挖掘--NLP文本相似度
    Python之路【第十七篇】:Python并发编程|协程
    Python之路【第十六篇】:Python并发编程|进程、线程
    大数据之路【第十篇】:kafka消息系统
    Python之路【第十五篇】开发FTP多线程程序
  • 原文地址:https://www.cnblogs.com/cfans1993/p/5627130.html
Copyright © 2011-2022 走看看