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