linux内核
文章平均质量分 51
渴望成长的菜鸟
路漫漫其修远兮,吾将上下而求索
展开
-
《Linux设备驱动开发》第11章 内核内存管理
今天难得偷得半日闲,用xmind总结了一下Linux内核内存管理,废话少说,直接上干货。原创 2022-08-13 18:59:55 · 269 阅读 · 0 评论 -
Linux源代码阅读:request_irq()
本文尝试阅读Linux kernel 5.0 + ARM64上中断申请过程的源代码,但并非逐字逐句地解析,只是梳理一些关键点(在工作中经常可能会用到的知识点)。为了提升Linux的实时性,kernel引入了中断线程化概念。其实就是将中断的下半部放在内核线程(FIFO,也称实时进程)中执行,这样可以减少中断对高优先级进程的饥饿感。因为传统的中断上半部执行完成后,需要通过tasklet,或者softirq来执行中断下半部,这些都属于中断上下文,会被内核优先处理,这样就会导致进程产生饥饿,即使是优先级比较高的原创 2022-05-13 09:44:57 · 2471 阅读 · 0 评论 -
《深入理解Linux内核》第二十章 程序执行(一)引言
一、程序和进程之间的关系 程序是一个存储在硬盘上的可执行文件,而进程是一个程序运行所需信息的集合,包括页表,打开的文件,CPU寄存器集等等,也就是所谓的execution context。但是程序却包含execution context初始化时所需信息。二、可执行文件 可执行文件一般保存在硬盘上,它包含程序执行所需要的一系列函数(处理器指令)和这些函数所需要的数据。其中有些函数是编程人员自己实现的,但有一些公共函数是以Library形式提供的,在源程序编译时,可以选择将这...原创 2021-02-15 15:29:19 · 129 阅读 · 0 评论 -
《深入理解Linux内核》第三章 进程(一)
一、进程、线程和轻量级进程1、进程 一个进程在操作系统中通常指处于执行状态程序的一个实例,你也可以理解为用来描述程序已经执行到什么阶段所用数据结构的集合。 进程有些属性与人类相似:一个进程一旦被创建,他的生命周期或长或短,他可以选择性创建一个或者多个子进程,也可以不创建任何子进程,但最终都会死亡。与人类有一点不同的是,进程没有性别之分,每个进程只有一个父进程。 从内核的角度来看,进程是用于管理系统资源如何分配的一个实体。 当一个进程被...原创 2021-01-31 17:06:54 · 156 阅读 · 0 评论 -
《深入理解Linux内核》第四章 中断和异常(五)
今天让我们来看下另一个中断下半部常用的机制----work queue一、特性1、先激活,在某个时间点再执行函数2、有专用的内核线程work thread二、与可延迟函数区别1、可延迟函数处于中断上下文,不能调用导致睡眠的函数,而work queue处于进程上下文,可以睡眠,允许调用导致睡眠的函数三、数据结构1、work_structstruct work_struct { unsigned long pending; struct list_head entry;原创 2020-12-03 11:30:50 · 621 阅读 · 0 评论 -
《深入理解Linux内核》第四章 中断和异常(四)
上篇讲完了softirq,今天让我们来看一个softirq应用实例-------tasklet二、tasklet1、优点1、简单易用,在设备驱动中比较常见2、同softirq一样,tasklet执行期间,中断处于使能2、特点1、动态分配2、同一种tasklet不能同时在多个CPU上运行,但是不同的tasklet,可以同时在多个CPU上运行3、tasklet种类1、HI_SOFTIRQ,对应0号softirq2、TASKLET_SOFTIRQ,对应5号softirq原创 2020-11-26 17:13:42 · 198 阅读 · 0 评论 -
《深入理解Linux内核》第四章中断和异常(三)
上两篇分析了I/O中断处理过程,接下来我们来分析softirq和tasklet一、softirq中断处理一般分为三部分:第一是critical,第二是Noncritical,第三是Noncritical deferrable,softirq就经常用于Noncritical deferrable阶段1、优点:1、softirq执行期间,中断处于使能2、将其从中断处理函数中去除,可以减小kernel对中断反应时间,这对中断反应时间要求高的中断请求很重要2、特点:1、静态分配2、必原创 2020-11-25 17:38:20 · 268 阅读 · 0 评论 -
《深入理解Linux内核》第四章中断和异常(二)
上次我们说到_ _do_irq()函数,那我们先看下它长什么样子/* * do_IRQ handles all normal device IRQ's (the special * SMP cross-CPU interrupts have their own specific * handlers). */fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs){ irq_desc_t *desc =原创 2020-11-13 10:21:17 · 360 阅读 · 0 评论 -
《深入理解Linux内核》第四章中断和异常(一)
最近鼓足勇气拿起吃灰多年的linux红宝书《深入理解Linux内核》,希望可以提升和巩固Linux内核理论知识。在此记录自己对书本内容和源代码理解,望各位大虾批评指正。一、中断描述符(4.2.3. Interrupt Descriptor Table)目的:关联中断或者异常向量和对应中断或异常处理程序地址大小:64bit(8个byte)寄存器:idtr格式:其中40---43bit用来识别中断描述符类型。二、硬件上对中断或者异常处理过程(4.2.4. Hardware Han原创 2020-11-12 14:42:15 · 527 阅读 · 0 评论 -
linux crash分析案例之进程同步
声明:本文是真实案例分析,而非crash分析工具使用说明,不熟悉相关工具的同学,请参考官方文档1、问题现场:Unable to handle kernel NULL pointer dereference at virtual address 00000001Mem abort info: Exception class = DABT (current EL), IL = 32 bits SET = 0, FnV = 0 EA = 0, S1PTW = 0Data abort inf...原创 2020-10-17 17:58:32 · 5396 阅读 · 6 评论 -
x86函数调用栈分析
声明:原创作品转载请注明出处参考文档:《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000本文将以一个C代码片段来刨析x86函数调用栈变化过程,进而理解高级语言是如何在计算机上运行的。C代码片段如下:int g(int x){ return x+30;}int f(int x)...原创 2020-05-04 13:52:47 · 317 阅读 · 0 评论