自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 为什么在Linux中断服务程序中不能睡眠

最近本人在实现TILE CPU架构上的中断子系统,抽出一点时间来仔细研究了下Linux上的中断设计。对内核有所了解的人都知道,在Linux中断ISR中不能睡眠,但是为什么不能睡眠呢?其中一个比较流行的答案就是:中断没有进程上下文,如果睡眠之后,进程调度子系统没法来唤醒它。仔细想想,这个答案其实不然。在X86的实现上,中断发生时会借用当前被中断进程的Kernel stack,所以实际上中断是借宿

2013-12-02 11:38:54 3193 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 1450

原创 Linux内核调试Ftrace

Ftrace能帮助系统开发者了解Linux 内核运行的细节,它能帮助分析系统延时和性能问题。 Ftrace顾名思义是function trace,但除此之外,它还能支持其他类型的tracer,例如进程上下文切换,统计一个高优先级的进程从唤醒到实际执行的时间,中断被屏蔽的时间等等。Ftrace用debug文件系统来存储它的配置文件和输出文件。如果debug文件系统配置进了kernel,目录“/s

2012-09-25 10:59:21 791

原创 Linux进程和线程

Linux内核只有进程,没有线程的概念。非要说区别,那就是线程没有自己的单独的地址空间(mm_struct),线程和其父进程共享地址空间。pthread调用fork(..|CLONE_VM|...)来创建新的进程,子进程与父进程共享VM空间。注意,这里实际上是共享mm_struct结构,子进程甚至没有创建自己的mm_struct结构。如果没有指定CLONE_VM属性参数,子进程会创建自己的VM

2012-09-19 16:14:06 621

原创 Linux内核tracepoints

内核中的每个tracepoint提供一个钩子来调用probe函数。一个tracepoint可以打开或关闭。打开时,probe函数关联到tracepoint;关闭时,probe函数不关联到tracepoint。tracepoint关闭时对kernel产生的影响很小,只是增加了极少的时间开销(一个分支条件判断),极小的空间开销(一条函数调用语句和几个数据结构)。当一个tracepoint打开时,用户提

2012-09-17 17:00:57 3890

原创 Linux虚拟文件系统(VFS)

Linux VFS是一个介于应用程序和实体文件系统之间的内核抽象层。对用户层,它负责处理所有文件系统相关的系统调用;对内核,它为各种实体文件系统(EXT2/3,XFS,FAT等)提供统一的接口,将实体文件系统的各种信息表示在VFS层。VFS的主要设计思想是用一个统一文件模型(common file modle)来表示各种实体文件系统,每种实体文件系统需要将它的物理组织结构转化为VFS的comm

2012-09-15 18:05:51 760

原创 Linux 文件符号连接和硬连接

文件系统有两种类型的连接:硬连接和软连接,软连接也叫符号连接。硬连接,严格来说其实不算连接。一个普通的文件或者目录拥有一个硬连接,文件系统通过这个硬连接来找到这个文件。为一个已经存在的文件p1创建一个硬连接p2的操作为:bash#ln p1 p2这样,文件名p1对应的文件inode,就多了另一个文件名p2指向它。注意,p1和p2是对等的,这里没有创建新的文件inode。

2012-09-15 16:29:41 508

原创 打Patch和制作Patch

1. 制作Patch文件diff -dur source.ori/ source/ > source.patch2. 打Patchpatch -p1 其中参数p1指忽略第一级目录。根据patch文件所在的目录,也可以指定p0,p2等。

2012-09-07 18:11:33 360

原创 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 1354

原创 Kernel NOHZ 模式

2.6.17之前,Linux kernel为每个CPU核设置一个周期性的时钟中断。Kernel依赖这个时钟中断来处理一些周期性的事件,例如计算进程时间片、公平调度和处理到期的定时器事件。最早的kernel设置时钟中断的周期为100HZ,也就是每秒钟产生100个时钟中断。随着CPU性能的提高,新的kernel可以设置为250HZ和1000HZ。时钟中断频率越高,调度的时间片越小,系统的实时响应能力越

2012-09-06 14:38:04 6564

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除