2022-05-12 linux文件系统分析思路

摘要:

以架构师的要求, 肢解linux文件系统的设计, 并进一步采取自己的文件系统

文件系统:

  1. 文件系统基本概念
    1. 什么是文件系统
      1. 文件系统的标准POXIS接口有哪些
        1. open/read/write/close
        2. 如何做出一个抽象的文件系统以支持多种不同的文件系统的实现
        3. VFS与具体的文件系统的实现的交互接口是什么
      2. 文件系统所处理事情的范围的边界是什么
        1. unix哲学里一切皆是文件
          1. 保持了操作逻辑统一
            1. 打开, 读写, 关闭
            2. 最上层的接口统一, 可便于移植
          2. 必须虚拟化出一个抽象的文件系统来兼容各个具体的文件系统
            1. 统一的接口那么就必须是抽象的, 将实现剥离
            2. 由具体的文件系统或者设备驱动做具体的操作
              1. 例如socket后边的vfs是和磁盘文件系统完全不同
        2. 只要包含一定的数据序列, 都是文件
          1. 本地磁盘文件
          2. socket网络通道
          3. io设备, 也被抽象成了文件
      3. 文件系统与数据库系统的区别有哪些
        1. 数据库增加了事务支持
          1. 事务是什么? 有哪些特性? ACID
          2. 如何实现事务?
            1. 锁可以分为哪几类
              1. 表锁,行锁, 页锁
              2. 乐观锁, 悲观锁, 读写锁
            2. 隔离性会存在哪些不同的问题?
              1. 幻读
              2. 脏读
              3. 不可重复读
        2. 数据库为了优化写/读绕开了文件系统亲自处理磁盘分页管理
        3. 内存型数据库redis如何使用文件系统的
          1. 如何将内存中的数据刷入linux页缓存 flush
          2. 如何将页缓存数据刷入磁盘 sync
        4. 关系型数据库如何使用文件系统的
          1. postgres的数据文件是如何组织的
          2. postgres的数据文件的格式是什么样的
          3. postgres的数据文件如何管理页缓存
          4. postgres的数据文件如何实现B+树
            1. 常规的b树实现方式是怎样的
              1. b树如何做到重平衡的
              2. b树的查询复杂度是多少
              3. b树的写最多需要读几次数据页
            2. b树与b+树有哪些区别
    2. 文件系统在linux内核中处于哪种层次
      1. linux内核可以分为哪些大的模块
        1. 内存管理
        2. 进程管理
        3. 设备管理
        4. 文件系统
      2. linux的vfs有哪些抽象出的概念
        1. super, inode, dentry, file
        2. 页缓存层
          1. 常规io: 磁盘->(DMA)内核页缓存->(cpu数据拷贝)用户空间
          2. mmap:  磁盘->(DMA)内核页缓存->(cpu地址映射)用户空间
        3. 通用块bio层
      3. 文件系统处于内核, 如何与用户空间的进程交互
        1. 内核与用户空间的区别是什么?
          1. 内存地址空间不同, 用户进程的地址空间都是虚拟的,存在隔离
          2. 指令执行权限不同, 内核具有cpu的所有权限
        2. 用户空间的进程如何与内核交互
          1. 系统调用
            1. 不同的体系结构如何实现系统调用
              1. x86
                1. 软中断int
            2. 用户进程使用了系统调用之后发生了什么
              1. 内存地址空间的切换
              2. 代码段的执行权限的切换
          2. 有哪些用户态库大量使用了系统调用
            1. glibc
              1. malloc申请大内存时使用了内核的mmap
                1. 使用匿名内存映射, 将进程虚拟地址空间映射到页缓存
              2. malloc申请小内存时候使用brk堆空间
            2. poxis线程
              1. 内核没有线程的概念, 只有task
              2. poxis使用了内核提供的clone创造了一个新的task, 但是和父task共享堆地址空间, 设置一些特殊的标识, 模拟出线程的概念
              3. poxis中的锁的概念, 是在用户态实现的
                1. 原子锁
                2. 读写锁
                3. 互斥锁
    3. 文件系统模块与linux内核的其他模块如何交互的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值