linux 内核基础知识
aaa6695798
这个作者很懒,什么都没留下…
展开
-
深入剖析linux网络接收过程
Layer 2:数据链路层(Data Link Layer) 在进入正式讨论数据包的接收之前,需要介绍一下linux中断过程。当网卡检测到一个数据包到来时,就会向8259A触发相应的中断信号线,识别为一个中断后,控制单元将会执行如下步骤:1. 确定与中断或异常关联的向量i(0≤ i ≤255)2. 读由idtr寄存器指向的IDT表中的第i项。3. 从gdtr寄存器获得GD转载 2009-08-19 09:27:00 · 516 阅读 · 0 评论 -
为什么在中断上下文中不能休眠?
1.中断处理的时候,不应该发生进程切换,因为在中断context中,唯一能打断当前中断handler的只有更高优先级的中断,它不会被进程打断(这点对于softirq,tasklet也一样,因此这些bottom half也不能休眠),如果在中断context中休眠,则没有办法唤醒它,因为所有的wake_up_xxx都是针对某个进程而言的,而在中断context中,没有进程的概念,没有一个task转载 2009-10-05 11:33:00 · 537 阅读 · 0 评论 -
vmlinuz,Initrd和system.map
Vmlinuz:编译出来的压缩了的内核文件。 initrd是linux在系统引导过程中使用的一个临时的根文件系统,用来支持两阶段的引导过程 system.map简介:内核符号映射表,顾名思义就是将内核中的符号(也就是内核中的函数)和它的地址能联系起来的一个列表。是所有符号及其对应地址的一个列表。之所以这样就使为了用户编程方便,直接使用函数符原创 2009-09-27 20:26:00 · 283 阅读 · 0 评论 -
任务内核态堆栈与用户态堆栈之间的切换
在Linux 0.12系统中,所有中断服务程序都属于内核代码。如果一个中断产生时任务正在用户代码中执行,那么该中断就会引起CPU特权级从3级到0级的变化,此时CPU就会进行用户态堆栈到内核态堆栈的切换操作。CPU会从当前任务的任务状态段TSS中取得新堆栈的段选择在Linux 0.12系统中,所有中断服务程序都属于内核代码。如果一个中断产生时任务正在用户代码中执行,那么该转载 2009-10-04 13:42:00 · 621 阅读 · 0 评论 -
linux select 的调用
Linux下select调用的过程:1.用户层应用程序调用select(),底层调用poll())2.核心层调用sys_select() ------> do_select()最终调用文件描述符fd对应的struct file类型变量的struct file_operations *f_op的poll函数。poll指向的函数返回当前可否读写的信息。1)如果当前可读写,返回读写信转载 2009-09-29 13:14:00 · 370 阅读 · 0 评论 -
Linux系统启动的标准流程
Linux系统启动的标准流程系统的启动是指从计算机加电到显示用户登陆提示的整个过程。我们将在这里对整个流程以及关系到的一些内容做讨论。过程主要可以分为两个阶段:载入内核和准备运行环境,我们分别进行讨论。本部分的讨论只基于i386硬 件架构,但大部分内容是有共通性的。载入内核(将内核载入内存,并将控制权传递给它) 计算机加电到Boot Loader开始工作,硬件含转载 2009-09-16 15:01:00 · 355 阅读 · 0 评论 -
tcp/ip协议socket创建详解
------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://sjj0412.cublog.cn/------------------------------------------ 要分析套接字就不的不提到inode。套接字可以和文件关联,当然是和特殊的文件系统关联,这样就可象转载 2009-08-28 16:29:00 · 482 阅读 · 0 评论 -
Linux中EXPORT_SYMBOL的用法(附:自己的应用)
EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。您还可以手工修改内核源代码来导出另外的函数,用于重新编译并加载新内核后的测试。Linux symbol export method:[1] If we want export the symbol in转载 2009-08-25 16:42:00 · 3464 阅读 · 0 评论 -
Linux如何在系统启动时自动加载模块
下面是以前学习Linux时写的,后来仔细研究rc.sysinit后发现,只需要修改下列地方就可以了,不必这么麻烦的:rc.sysinit中有这样的一段代码:# Load other user-defined modulesfor file in /etc/sysconfig/modules/*.modules ; do[ -x $file ] && $filedone# Load module转载 2009-08-27 11:03:00 · 259 阅读 · 0 评论 -
Linux 2.6.19.x 内核编译配置选项简介
Linux 2.6.19.x 内核编译配置选项简介作者:金步国版权声明本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下载、传播此文档,但前提是必须保证全文完整转载,包括完整的版权信息和作译者声明。其他转载 2009-08-27 09:54:00 · 367 阅读 · 0 评论 -
怎样将pf_ring集成到内核中
首先感谢作者的辛勤劳动,本人环境: redlinux2.4.20 升级到redhat 2.6.15然后编译,安装pf_ring 成功。 本人对下文有一定修改 内核源码也建议使用PF_RING自带的mkpatch.sh来下载(或者下完放到workspace目录中)首先,按照正常步骤,下载PF_RING(粗体是要输入的命令,我的PF_RING存放目录是 /ho转载 2009-08-27 09:08:00 · 1747 阅读 · 1 评论 -
基本概念
网卡寄存器图例子 远端DMA : CPU将数据先发送到网卡上的 16KRAM 中,这之间必须要有一个数据通道本地DMA: 数据从网卡的 RAM 中发出给链路,RTL8019 控制器与 RAM 之间的通道接收数据缓冲区: 网络芯片在从以太网读数据过程中,网络芯片接收数据缓冲区的起始和终止页号。形成一个接收缓冲环,每 页 256 字节 ,接收缓冲区构成一个循环 FIFO队原创 2009-08-22 12:15:00 · 269 阅读 · 0 评论 -
内存管理
内存映射的最终目的是提供访问某段物理内存的一种途径,其过程是构造访问这段物理内存的对应的页表项。如果在内河空间来映射,是在内河空间(3G以上)构造页表项,来指向相应的物理内存,例如ioremap目标就是把设备内存的物理地址填到内河页表中,推而广之,kmalloc/vmalloc等也可以算是是一种内存映射,说来其实于ioremap目标一样,只不过后者物理介质是系统内存,前者是设备内存。如果在用户空间转载 2009-10-20 14:36:00 · 405 阅读 · 0 评论