C/C++
文章平均质量分 50
小小小小小小小小熊
497403165@qq.com,欢迎交流
展开
-
当panic或者die被执行时,或者发生未定义指令时,如何被回调到
Panic是Linux kernel提供的一种复位机制,内核开发者在开发过程中,可以在异常流程中主动调用。 另外,还有一部分模块或者子系统,希望系统在panic时,能主动通知一下本模块,以便做一些复位前的准备动作,相应的kernel也提供了该机制,就是让大家注册回调。每次panic在执行过程中,会遍历注册的回调函数并回调之。实现机制:1、在panic.c代码中,有一个链表的定义,ATOMIC_NOTIFIER_HEAD(panic_notifier_list);EXP...原创 2021-11-01 17:06:47 · 409 阅读 · 0 评论 -
kernel hung_task死锁检测机制原理实现
1、实现原理分析Linux的进程存在多种状态,可在include/linux/sched.h中查看。/* Used in tsk->state: */#define TASK_RUNNING 0x0000#define TASK_INTERRUPTIBLE 0x0001#define TASK_UNINTERRUPTIBLE 0x0002#define __TASK_STOPPED 0x0004#define __TASK_TRACED 0x0008/* Used原创 2021-10-23 16:25:15 · 688 阅读 · 0 评论 -
volatile
volatile的本意是“易变的” ,因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用valatile,则编原创 2017-05-06 14:28:01 · 404 阅读 · 0 评论 -
cache与buffer的差别
简单说,Buffer的核心作用是用来缓冲,缓和冲击。比如你每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写这两件事嘛。用个buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就很小,写入效率高了,日子过得爽了。极大缓和了冲击。Cache的核心作用是加快取用的速度。比如你一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加转载 2017-05-06 14:52:29 · 756 阅读 · 0 评论 -
linux中likely与unlikely
看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核(我看的是2.6.22.6版本,2.6的版本应该都有)中定义的两个宏。位于/include/linux/compiler.h中,具体定义如下:#define likely(x) __builtin_e转载 2015-03-11 21:49:42 · 518 阅读 · 0 评论 -
typedef和define的区别
在使用C语言或者C++开发中,我们离不开typedef和define的使用,typedef相当于我们重新定义了一种类型,而define则只是简单的替换,这里我们简单归总一下二者的差别。首先,我们可以用其他类型说明符对宏类型名进行扩展,但是对typedef的类型名不能扩展,比如#define demo char我们可以定义unsigned demo c;完全没问题,但是对于type原创 2014-05-14 21:21:12 · 790 阅读 · 0 评论 -
C语言中volatile关键字的作用
原文:http://blog.csdn.net/tigerjibo/article/details/7427366一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高转载 2014-05-11 15:12:35 · 537 阅读 · 0 评论 -
C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看:1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。2>静态局部变量具有局部作用域转载 2014-05-11 15:15:16 · 680 阅读 · 0 评论 -
编程中宏的使用
编写代码中,宏的使用无处不在,总结一下大概以下几种:1、定义一些常量,或者一些基地址,方便在版本更换时,只需要适配宏,而不需要修改代码 #define GIC_CPU_BASE_ADDR (0xA0000000+0x1000) #define PAI 3.14 需要注意的是,宏中如果有运算符的话,一定要加上括号; 2、头文件的定义原创 2014-04-19 19:56:15 · 2142 阅读 · 0 评论 -
C语言中static的使用
在开发过程中,我们经常会需要定义一些static类型的变量或者函数,我们接下来来具体聊一下static;1、修饰变量 当static来修饰一个变量时,就注定了这个变量的可见范围和生命周期; (1)当修饰全局变量时 static int flag1 = 0; int flag2 = 0;原创 2014-04-30 00:16:49 · 2235 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a;转载 2014-04-13 23:18:11 · 514 阅读 · 0 评论 -
指针和const限定符搭配
指针和const搭配不同,对所操作的对象原创 2014-04-13 20:56:44 · 609 阅读 · 0 评论