Linux内核编程(The Linux Kernel Primer)书
来源:互联网 发布:sql语句经典例题 编辑:程序博客网 时间:2024/05/02 01:59
第二章 linux内核探索工具集。内核中常见数据类型(链表,树,查找),汇编示例,内联汇编,内核探索工具(objdump/readelf、hexdump、nm、objcopy、ar)、printk、dmesg、var/log/messages、__init、likely()/unlikely()。
第三章 进程:程序执行的基本模型。讲了程序、进程描述符、进程创建(fork()/vfolk()/clone()/do_fork())、进程终止(sys_exit()/do_exit()/sys_wait4())、调度程序的基本架构、等待队列、中断异常。
第四章 内存管理。讲了页、页面、内存管理区(三个:ZONE_DMA/ZONE_NORMAL/ZONE_HIGHMEM,原因是为了简化与体系结构无关的代码、为了统一而保留、有些总线寻址范围有限等)、slab分配器及其生命周期(解决外部碎片问题,交给伙伴系统分配管理)、linux进程内存结构(进程地址空间被划分为不同的内存区,用于保护,如只读,可执行等,进程地址空间以及与之相关的所有信息都保存在mm_struct描述符中,它出现在task_strcut中,一个内存区由vm_area_struct描述符表示)、进程映像的分布及线性地址空间、页表、缺页。
第五章 I/O。总线/桥/接口、设备(块设备请求队列和IO调度、字符、网络、时钟、终端设备、DMA)
第六章 文件系统。VFS及其相关数据结构(fs_struct结构、files_struct结构)、页缓存(address_space结构、buffer_head结构)、VFS的系统调用和文件系统层。
第七章 进程调度和内核同步。linux调度程序、内核抢占、自旋锁、信号量。
第八章 内核引导。与体系结构相关的内存初始化、原始ram盘、start_kernel()函数分析。
第九章 构建linux内核。讲了编译程序、交叉编译、链接程序、elf二进制目标文件结构(非可执行(多个节、一个节头表)、可执行(多个段、一个程序头表))。
第十章 向内核添加代码。讲了工作队列和tasklet的使用及区别。
为了让中断快速运行,分成上半部(中断处理程序,它立即执行,因为它是在所有中断禁止的情况下执行)和下半部(推后处理程序,与中断对应)有三种不同的下半部实现机制:软中断、tasklet、工作队列。
软中断:软中断是在编译期间静态分配的,最多32个,不会抢占另外一个软中断,能并发运行在多个CPU上(所以要可重入,多CPU同时操作使用自旋锁保护),目前只有两子系统直接使用软中断:网络和SCSI,执行时间:从硬件中断代码返回时及其他。
tasklet:由两类软中断实现(HI_SOFTIRQ,TASKLET_SOFTIRQ),动态增减,同一类tasklet不能并发执行,不同类型可并发执行,下半部短小时能节省开销。只在中断上下文中运行。
工作队列:由内核线程执行,即总是在进程上下文执行,可睡眠,阻塞。
由request_irq()注册的上半部中断处理函数只完成最基本的管理工作,余下部分以任务形式插入工作队列,等候处理。
上半部处理:时间敏感、硬件相关、不被其他中断中断,其他的则可放在下半部。
软中断是随着SMP出现的,tasklet基于软中断,弥补了其可重入性编程的麻烦,因此诞生。之前两个运行在中断上下文不能睡眠和阻塞等待,于是诞生了工作队列(2.4中是任务队列),它可延迟执行,能够在不同进程间切换。
构成软中断的核心元素包括:1 软中断状态寄存器(irq_stat) 2 软中断向量表(softirq_vec) 3 软中断守护(daemon)。软中断模拟实际中断处理过程,当某一软中断事件发生后,设置对应中断标记、触发中断事务、唤醒守护线程检测中断状态寄存器,发现后,通过软中断向量表调用软中断服务程序action()。硬件中断的这一过程是硬件自动完成的,这体现了软中断的模拟。可见,软中断的服务程序的执行上下文为软中断daemon。linux中软中断daemon线程函数为do_softirq()。触发软中断事务通过raise_softirq()实现,该函数就是在中断关闭的情况下设置软中断状态位,然后判断如果不在中断上下文就直接唤醒守护daemon。
- Linux内核编程(The Linux Kernel Primer)书
- Linux 内核API文档(The Linux Kernel API)
- Compiling the Linux Kernel(编译内核)
- linux kernel内核编程基础总结
- 读书笔记The Linux Kernel Primer: 2.5.4. const and volatile
- Linux内核 monolithic Kernel
- 编译Linux内核(kernel)
- linux kernel 内核定时器
- Linux kernel(内核)
- 内核移植错误:Uncompressing Linux............................... done, booting the kernel
- Linux内核简介——Introduction of the kernel
- 内核启动卡在Uncompressing Linux..... done, booting the kernel
- 编译你自己的Linux内核(Kernel)
- 配置编译内核(Linux kernel)
- 编译你自己的Linux内核(Kernel)
- 内核同步方法(Linux Kernel Development)
- Linux 内核源码(kernel source)
- The Linux Kernel API
- SSH整合
- SCIM输入启动遭遇“Failed to load x11 FrontEnd module. ”错误
- ubuntu wine rtx
- Linux环境进程间通信(五): 共享内存(上)
- Eclipse插件安装的三种方法
- Linux内核编程(The Linux Kernel Primer)书
- 行链接与行迁移
- TimesTen常见问题(持续整理中)
- Jquery+ajax后台开发日志。
- 黑马程序员:基础加强注解和泛型
- jQuery 选项卡插件
- 用jquery中插件dialog实现弹框效果
- ckeditor提交时判断是否为空
- 使用jQuery实现手风琴效果