Linux内核学习笔记之定时器和时间管理
内核中的时间概念 系统定时器以某种频率自行触发(经常被称为击中(hitting)或射中(popping))时钟中断,该频率可以通过编程预定,称作节拍率(tick rate)。 当时钟中断发生时,内核就通过一种特殊的中断处理程序对其进行处理。两次时钟中断的间隔时间称为节拍(tick),它等于节拍率分之一(1/(tick rate))秒。 内核通过控制时钟中断维护实际时间,另外内核也为用户...
内核中的时间概念 系统定时器以某种频率自行触发(经常被称为击中(hitting)或射中(popping))时钟中断,该频率可以通过编程预定,称作节拍率(tick rate)。 当时钟中断发生时,内核就通过一种特殊的中断处理程序对其进行处理。两次时钟中断的间隔时间称为节拍(tick),它等于节拍率分之一(1/(tick rate))秒。 内核通过控制时钟中断维护实际时间,另外内核也为用户...
设备的分类 设备可以分为两类: 块设备:能够随机访问固定大小数据片(chunks)的硬件设备。如硬盘。 字符设备:按照字符流有序访问的硬件设备。如键盘、串口。 比如键盘,系统只能以有序的流方式读取键盘输入h-e-l-l-o,如果随机访问e-l-o-h-o,则这些输入的字符就没有意义了。 剖析一个块设备 块设备中最小的可寻址单元是扇区(sector)。扇区大小一般是 2 ...
虚拟文件系统(VFS)作为内核子系统,为用户空间程序提供了文件和文件系统相关的接口。系统中所有文件系统不但依赖 VFS 共存,而且也依靠 VFS 系统协同工作。 通过虚拟文件系统,程序可以利用标准的 Uinx 系统调用(open()、read() 和 write() 等)对不同的文件系统,甚至不同介质上的文件系统进行读写操作 上图中 VFS 执行的动作:使用 cp(1)命令从 ext...
页 内核把物理页作为内存管理的基本单位。尽管 CPU 最小可以按字(甚至字节)寻址内存。主要原因是MMU(内存管理单元)只支持按页管理页表。 大多数 32 位体系结构支持 4KB 的页,而 64 位体系结构一般会支持 8KB 的页。 struct page 结构表示系统中的每个物理页: // <linux/mm_types.h> struct page { uns...
相比于轮询,中断是让硬件在需要的时候再向内核发出信号 中文版里把 software interrupt 和 softirq 都翻译成软中断,造成了混淆。我把software interrupt 统一翻译为软件中断 中断 硬件中断 硬件设备生成中断的时候并不考虑与处理器的时钟同步(异步中断),换句话说就是中断随时可以产生。 从物理学的角度看,中断是一种电信号,由硬件设备生成,...
在现代操作系统中,内核提供了用户进程与内核进行交互的一组接口。这些接口让应用程序受限地访问硬件设备。应用程序发出各种请求而内核负责满足这些请求(或者无法满足时返回一个错误)。实际上提供这些接口主要是为了保证系统稳定可靠,避免应用程序恣意妄行。 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层: 它为用户空间提供了统一的硬件的抽象接口。 系统调用保证了系统的稳定...
链表 内核提供的标准链表可用于将任何类型的数据结构彼此链接起来。很明确,它不是类型安全的。 加入链表的数据结构必须包含一个类型为 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...