Linux内核学习笔记之内核数据结构
链表 内核提供的标准链表可用于将任何类型的数据结构彼此链接起来。很明确,它不是类型安全的。 加入链表的数据结构必须包含一个类型为 list_head 的成员,其中包含了正向和反向指针。 list.h: struct list_head { struct list_head *next, *prev; }; 上图是一个首尾相连的环形双向链表。这是 Linux 标准链表。 ...
链表 内核提供的标准链表可用于将任何类型的数据结构彼此链接起来。很明确,它不是类型安全的。 加入链表的数据结构必须包含一个类型为 list_head 的成员,其中包含了正向和反向指针。 list.h: struct list_head { struct list_head *next, *prev; }; 上图是一个首尾相连的环形双向链表。这是 Linux 标准链表。 ...
本文介绍了一种将基于页的 eeprom 数据备份至 flash 内的方案 flash 划分 flash 使用和 eeprom 相同的页大小,为 64Bytes。一个 sector 为 4096Bytes,包含了 4096/64 = 64 个页。 对于 32KB 的 eeprom,共有 512 页需要备份,对应 flash 至少需要 512/64 = 8 个 sector,为了实现 fl...
特性 断电恢复能力 - 在嵌入式系统上,随时可能断电。 如果断电损坏了任何持久性数据结构,这可能会导致设备变得不可恢复。嵌入式文件系统必须设计为从任何写入操作期间的断电中恢复。 磨损均衡 - 写入闪存具有破坏性。如果文件系统反复写入同一个块,最终该块将磨损。 不考虑磨损的文件系统很容易烧毁用于存储频繁更新的元数据的块,并导致设备过早死亡。 有限 RAM/ROM - 嵌入式设备...
鼠标模式 在新版本中,开启鼠标模式的方法为: 按Ctrl+B,输入 :set -g mouse on ,回车。 命令 # 开启新session tmux # 开启新session并命名 tmux new -s my_session # 显示所有session tmux ls # 使用session编号接入 tmux attach -t 0 # 使用session名称接入 tm...
进程生命周期 僵尸进程 进程正常结束需要两步: 程序终止:程序必须由另一个进程或一个用户杀死(通常是通过发送 SIGTERM 或 SIGKILL 信号来完成,这等价于正常地终止进程); 父进程确认:进程的父进程在子进程终止时必须调用或已经调用 wait4 (读做 wait for)系统调用。这相当于向内核证实父进程已经确认子进程的终结。该系统调用使得内核可以释放为子进程保...
本文是对《深入 Linux 内核架构(原书:Professional Linux Kernel Architecture)》一书的学习笔记 内核范型 微内核 只有最基本的功能直接由中央内核(即微内核)实现。所有其他的功能都委托给一些独立进程,这些进程通过明确定义的通信接口与中心内核通信。例如,独立进程可能负责实现各种文件系统、内存管理等。 宏内核 内核的全部代码,包括所...
图论(Graph Theory)是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连接两点的线表示相应两个事物间具有这种关系。 基本概念 点和边 图由顶点和边构成,边用于连接两个点 顶点:通常用 V(vertex) 表示顶点集合 度(Degree):所有...
二叉树 定义 二叉树(英语:Binary tree)是每个结点最多只有两个分支(子树)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。 性质 二叉树中,第 $i$ 层最多有 $2^i-1$ 个结点。 如果二叉树的深度为 $K$,那么此二叉树最多有 $2^K-1$ 个结点。 二叉树中,终端结点数(叶子结点数)为 $n_0$,度为 2...
定义 贪心算法,又名贪婪法,是寻找最优解问题的常用方法(其实得到的往往是近似最优解),这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应用贪心原则,选取当前状态下最好/最优的选择(局部最有利的选择),并以此希望最后堆叠出的结果也是最好/最优的解。 基本步骤 步骤 1:从某个初始解出发; 步骤 2:采用迭代的过程,当可以向目标前进一步时,就根据局部最优策略,得到一部分解,...
定义 动态规划(Dynamic programming)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。 动态规划常常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。 若要解一个给定问题,我们需要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。 通常许多子问题非常相似,为此动态规划法试图...