- 博客(10)
- 收藏
- 关注
原创 为什么在Linux中断服务程序中不能睡眠
最近本人在实现TILE CPU架构上的中断子系统,抽出一点时间来仔细研究了下Linux上的中断设计。对内核有所了解的人都知道,在Linux中断ISR中不能睡眠,但是为什么不能睡眠呢?其中一个比较流行的答案就是:中断没有进程上下文,如果睡眠之后,进程调度子系统没法来唤醒它。仔细想想,这个答案其实不然。在X86的实现上,中断发生时会借用当前被中断进程的Kernel stack,所以实际上中断是借宿
2013-12-02 11:38:54 3240 2
原创 深入alloc_pages
内核所有的内存分配都是通过alloc_pages来实现的。alloc_pages-> __alloc_pages_nodemask-> get_page_from_freelist (__alloc_pages_slowpath)如果get_page_from_freelist失败,则调用__alloc_pages_slowpath更深程度的回收内存再分配。
2012-11-30 15:37:11 1481
原创 Linux内核调试Ftrace
Ftrace能帮助系统开发者了解Linux 内核运行的细节,它能帮助分析系统延时和性能问题。 Ftrace顾名思义是function trace,但除此之外,它还能支持其他类型的tracer,例如进程上下文切换,统计一个高优先级的进程从唤醒到实际执行的时间,中断被屏蔽的时间等等。Ftrace用debug文件系统来存储它的配置文件和输出文件。如果debug文件系统配置进了kernel,目录“/s
2012-09-25 10:59:21 841
原创 Linux进程和线程
Linux内核只有进程,没有线程的概念。非要说区别,那就是线程没有自己的单独的地址空间(mm_struct),线程和其父进程共享地址空间。pthread调用fork(..|CLONE_VM|...)来创建新的进程,子进程与父进程共享VM空间。注意,这里实际上是共享mm_struct结构,子进程甚至没有创建自己的mm_struct结构。如果没有指定CLONE_VM属性参数,子进程会创建自己的VM
2012-09-19 16:14:06 652
原创 Linux内核tracepoints
内核中的每个tracepoint提供一个钩子来调用probe函数。一个tracepoint可以打开或关闭。打开时,probe函数关联到tracepoint;关闭时,probe函数不关联到tracepoint。tracepoint关闭时对kernel产生的影响很小,只是增加了极少的时间开销(一个分支条件判断),极小的空间开销(一条函数调用语句和几个数据结构)。当一个tracepoint打开时,用户提
2012-09-17 17:00:57 3920
原创 Linux虚拟文件系统(VFS)
Linux VFS是一个介于应用程序和实体文件系统之间的内核抽象层。对用户层,它负责处理所有文件系统相关的系统调用;对内核,它为各种实体文件系统(EXT2/3,XFS,FAT等)提供统一的接口,将实体文件系统的各种信息表示在VFS层。VFS的主要设计思想是用一个统一文件模型(common file modle)来表示各种实体文件系统,每种实体文件系统需要将它的物理组织结构转化为VFS的comm
2012-09-15 18:05:51 786
原创 Linux 文件符号连接和硬连接
文件系统有两种类型的连接:硬连接和软连接,软连接也叫符号连接。硬连接,严格来说其实不算连接。一个普通的文件或者目录拥有一个硬连接,文件系统通过这个硬连接来找到这个文件。为一个已经存在的文件p1创建一个硬连接p2的操作为:bash#ln p1 p2这样,文件名p1对应的文件inode,就多了另一个文件名p2指向它。注意,p1和p2是对等的,这里没有创建新的文件inode。
2012-09-15 16:29:41 534
原创 打Patch和制作Patch
1. 制作Patch文件diff -dur source.ori/ source/ > source.patch2. 打Patchpatch -p1 其中参数p1指忽略第一级目录。根据patch文件所在的目录,也可以指定p0,p2等。
2012-09-07 18:11:33 401
原创 High Resolution Timer内核高精度时钟
关键数据结构:struct clock_event_device表示一个时钟源,其最重要的两个域是set_next_event()和event_handler()。set_next_event()用来设置下一次时钟中断的触发时间,通常需要操作Timer的硬件寄存器,以及使能Timer中断。event_handler()是Timer中断产生之后,将要执行的函数。static DEFINE_PER
2012-09-06 14:41:19 1402
原创 Kernel NOHZ 模式
2.6.17之前,Linux kernel为每个CPU核设置一个周期性的时钟中断。Kernel依赖这个时钟中断来处理一些周期性的事件,例如计算进程时间片、公平调度和处理到期的定时器事件。最早的kernel设置时钟中断的周期为100HZ,也就是每秒钟产生100个时钟中断。随着CPU性能的提高,新的kernel可以设置为250HZ和1000HZ。时钟中断频率越高,调度的时间片越小,系统的实时响应能力越
2012-09-06 14:38:04 6970
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人