// file: arch/x86/kernel/traps.c void __init trap_init(void) { int i; #ifdef CONFIG_EISA void __iomem *p = early_ioremap(0x0FFFD9, 4); if (readl(p) == 'E' + ('I'<<8) + ('S'<<16) + ('A'<<24)) EISA_bus = 1; early_iounmap(p, 4); #endif ...
pte_offset_kernel(dir,addr):线性地址 addr 在页中间目录 dir 中有一个对应的项,该宏就产生这个对应项,即页表的线性地址。另外,该宏只在主内核页表上使用 pte_offset_map(dir, addr):接收指向一个页中间目录项的指针 dir 和线性地址 addr 作为参数,它产生与线性地址 addr 相对应的页表项的线性地址。如果页...
It takes an external reference and produces another external reference. get一般是如下的实现: assert(obj->refcount > 0) ; increment(obj->refcount); or, in Linux-kernel C: BUG_ON(atomic_read(&obj->refcnt)) ; atomic_inc(&obj->refcnt); 注意:get必须在对象已经被至少一处引用时才能使用。一般...
调用schedule,切换到另一个进程,从do_exit函数不会返回到调用它的函数 Reference: Chapter 1 to chapter 3, Linux kernel development.3rd.Edition 欢迎关注微信公众号:大数据从业者
而最新的linux kernel源代码可能比这个还要更多。面对这么多的代码,在本地使用源代码阅读软件, 比如source insight, vscode, vim建立索引都是一项巨大的工程,当查找函数定义,调用关系的时候更是痛不欲生。 其实这个时候我们可以借助于互联网资源,sourceforge上有个lxr项目,全称是linux cross reference, ...
预读可以有效的减少磁盘的寻道次数和应用程序的I/O等待时间,是改进磁盘读I/O性能的重要优化手段之一。本文作者是中国科学技术大学自动化系的博士生,他在1998年开始学习Linux,为了优化服务器的性能,他开始尝试改进Linux kernel,并最终重写了内核的文件预读部分,这些改进被收录到Linux Kernel 2.6.23及其后续版本中。
linux interrupt framework虽然支持中断共享,但是它并不会协助解决识别问题,它只会遍历该IRQ number上注册的irqaction的callback函数,这样,虽然只是一个外设产生的中断,linux kernel还是把所有共享的那些中断handler都逐个调用执行。为了让系统的performance不受影响,irqaction的callback函数必须在函数的最开始进行判断,是否是...
本文是我几个月前在研究linuxkernel Cgroups时整理的。文中大部分的理论知识是从网上各种贴子solo的,源码分析部分,我是基于kernel 4.4.19的代码进行解读分析的,各个内核版本之间应该几乎没啥差别。了解内核中Cgroups的知识,对理解docker底层原理还是有帮助的。 ##介绍 Cgroups是control groups的缩写,是Linux内核提供的一...
linux interrupt framework虽然支持中断共享,但是它并不会协助解决识别问题,它只会遍历该IRQ number上注册的irqaction的callback函数,这样,虽然只是一个外设产生的中断,linux kernel还是把所有共享的那些中断handler都逐个调用执行。为了让系统的performance不受影响,irqaction的callback函数必须在函数的最开始进行判断,是否是...
下载Linux内核源代码的官方地址为http://www.kernel.org/,如图1-4所示。 图1-4 Linux内核官方下载界面 当下载内核代码后,很有必要知道内核源代码的整体分布情况。通常其内核代码保存在“/usr/src/linux”目录下,该目录下的每一个子目录都代表了一个特定的内核功能性子集,接下来将针对2.6.23版本进行简单描述。