前言虚拟文件系统作为内核的子系统为用户空间程序和真正的多个文件系统直接提供了一个接口。简单来说。系统调用先和 VFS 交互,然后 VFS 提供的通用接口在被各个文件系统来实现。 通用文件系统接口虚拟文件系统,一个胶水层,位于内核的底层和用户层之间。它提供了各种抽象数据结构来表示文件和inode,而真实文件系统的实现必须填充这些结构,使得应用程序无需考虑底层文件系统,总是可以使用同样的接口访问和操作文件。在 VFS 和 内核 看来,底层的文件系统都是相同的,他们都支持文件、目录、Inode等概念。 ...
linux 分区和文件系统结构
前言本篇文章总结一下磁盘分区以及文件系统的结构,以及文件的 inode 、文件描述符(file descriptor)的用法和概念。 磁盘分区关于磁盘的物理结构不做太多描述,主要讲述分区的细节,以及第一个扇区上的引导。 磁盘物理结构: 磁头(Head):代表有多少层盘面 磁道(Track) 柱面(Cylinder):每一个盘面上有多少圈磁道 扇区(Sector):一圈磁道上有很多扇区,每个扇区有512字节,第一个扇区称为引导扇区。 fdisk 可以看到每一块盘上述结构的数量。fdisk 看到 ...
内核的同步以及锁机制
1.前言为什么要考虑内核同步 在单一CPU 的情况下,中断或者内核代码明确调度时,多个执行线程并发访问共享数据。目前多处理器以及抢占式内核的存在,更需要注意保护共享资源。 造成并发的原因 Interrupts— An interrupt can occur asynchronously at almost any time, interrupting the currently executing code. Softirqs and tasklets— The kernel can r ...
内核中链表(Linked List)的实现
前言内核中链表是比较简单的数据结构,通过两个指针元素实现双向链表。链表相比其他数据结构的优点是不占用连续的内存,可以动态的插入和删除节点。 比较简单的链表链表中前后指针元素和数据元素在同一个结构体中。通过指针可以直接找到数据。 单向链表struct list_element { void *data; struct list_element *next;} 双向链表struct list_element { void *data; str ...
Hexo + Github 的个人博客搭建
前言本篇介绍如何使用 hexo 和 github page 来搭建个人博客, hexo 是一个博客框架,支持 markdown,有丰富的插件和主题。github page 是 github 的一个项目,给开发者提供一个免费的没有空间限制的私人页面。 配置 github1.创建 github 账号 https://github.com/ 2.创建一个新项目 new reposity项目必须要遵守格式:账户名.github.io, 不然接下来会有很多麻烦。并且需要勾选Initialize thi ...
Snapper 快照管理工具
简介Snapper是一个用来创建和维护快照的命令行工具,提供了基本的快照工具:创建、删除快照;对比快照之间的变化,以及撤销快照之间的操作。 关于快照 快照是对卷在某一点上进行拷贝,提供了一种恢复文件系统到之前状态的一种方法。关于快照的实现,有两种的方法 写时复制Copy On Write (COW) 即在数据第一次写入到某个存储位置时,首先将原有的内容读取出来,写到另一位置处(为快照保留的存储空间,此文中我们称为快照空间),然后再将数据写入到存储设备中。而下次针对这一位置的写操作将不再执行写 ...