上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 21 下一页
摘要: Linux Kernel中所應用的數據結構及演算法Basic Data Structures and Algorithms in the Linux kernelLinks are to thesource code on github.Linked list,doubly linked list,lock-free linked list.B+ Treeswith comments telling you what you can't find in the textbooks.A relatively simple B+Tree implementation. I have wri 阅读全文
posted @ 2014-04-10 14:25 jeremyatchina 阅读(397) 评论(0) 推荐(0) 编辑
摘要: 一個自訂struct型態的變數,若想要轉換為unsigned,直接使用cast,gcc(version 4.4.3)編譯會回報錯誤。例如:struct _test { unsigned hour : 5; unsigned minute : 6;};struct _test var = {5, 6}printf("var = %x\n", (unsigned)var);error: aggregate value used where an integer was expected解決方法是,改為printf("var = %x\n", *(unsign 阅读全文
posted @ 2014-01-01 21:13 jeremyatchina 阅读(3652) 评论(0) 推荐(0) 编辑
摘要: suse11:~# cat tmp.lst4096 44096 44096 24096 48192 18192 48192 48192 48192 48192 48192 48192 48192 48192 48192 48192 48192 48192 48192 42048 42048 44096 4suse11:~# cat tmp.lst|awk'BEGIN{i=1;a=0}{sum[i]=$1;i=i+1}{while(i>0)( a=a+sum[i-1])( i--) }END{print a}'147456suse11:~# cat tmp.lst|awk& 阅读全文
posted @ 2014-01-01 19:53 jeremyatchina 阅读(255) 评论(0) 推荐(0) 编辑
摘要: EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的。2.6就必须用EXPORT_SYMBOL() 来导出来(因为2.6默认不到处所有的符号)。1、EXPORT_SYMBOL的作用是什么?EXPORT_SYMBOL标签内定义的函数或者符号对全部内核代码公开,不用修改内核代码就可以在您的内核模块中直接调用,即使用EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用。这里要和System.map做一下对比:System.map 中的是连接时的函数地址。连接完 阅读全文
posted @ 2014-01-01 10:08 jeremyatchina 阅读(1299) 评论(0) 推荐(0) 编辑
摘要: Kprobes是一种运行时动态调试内核的机制, 你可以用它设置断点并收集调试信息, 甚至改变内核行为.Kprobes分三种, 普通kprobes以及基于普通kprobes的jprobes和kretprobes. kprobes可以注入某个地址, jprobes用来注入某个函数入口, 而kretprobes则用来注入某个函数返回.实现原理Kprobes的实现主要利用了处理器的异常和单步执行特性. 以普通kprobes举例, 注册时它会复制一份被注入的指令, 并加入断点(例如x86的int 3), 当CPU执行到被注入的指令时就会陷入到Kprobes中, 此时Kprobes先运行钩子函数”pre_ 阅读全文
posted @ 2013-12-29 16:22 jeremyatchina 阅读(518) 评论(0) 推荐(0) 编辑
摘要: 使用printk打印变量等方法,是调试内核的有效方法之一,但是这种方法必须重新构建并用新内核启动,调试效率比较低。以内核模块的方式使用kprobes、jprobes,就可以在任意地址插入侦测器,执行包括printk在内的各种调试工作,而无须重新构建内核,也无须重启。一、首先内核必须支持kprobes、jprobes:#make menuconfigGeneral setup --->[*] Kprobes使内核支持kprobes。二、kprobes的使用方法:1、分配一个kprobe结构体供kprobes运行时使用。2、在kprobe结构体的addr成员中设置要插入侦测器的函数地址,可以 阅读全文
posted @ 2013-12-29 16:14 jeremyatchina 阅读(668) 评论(0) 推荐(0) 编辑
摘要: 缺頁異常被觸發通常有兩種情況——1.程序設計的不當導致訪問了非法的地址2.訪問的地址是合法的,但是該地址還未分配物理頁框下面解釋一下第二種情況,這是虛擬內存管理的一個特性。盡管每個進程獨立擁有3GB的可訪問地址空間,但是這些資源都是內核開出的空頭支票,也就是說進程手握着和自己相關的一個個虛擬內存區域(vma),但是這些虛擬內存區域並不會在創建的時候就和物理頁框掛鉤,由於程序的局部性原理,程序在一定時間內所訪問的內存往往是有限的,因此內核只會在進程確確實實需要訪問物理內存時才會將相應的虛擬內存區域與物理內存進行關聯(为相應的地址分配頁表項,並將頁表項映射到物理內存),也就是說這種缺頁異常是正常的 阅读全文
posted @ 2013-12-23 13:34 jeremyatchina 阅读(1338) 评论(0) 推荐(0) 编辑
摘要: 这两天找工作,做面试题的时候,碰到这样的题:指定了一个地址,比如说0x0012ff7c这样一个地址,要求是给这个指定的地址赋一个确定的值,比如说100,当时就是一个郁闷啊,在汇编里这样用过,在c中还真没用过。今天在网上查了查,自己也在turbo c上运行了一下,正好做个总结,方法如下:char * test;test = (char *)0x0012ff7c;*test = value;//自己赋值就好了这里需要注意的是第二行中的(char *)是一定需要的,而且要和上面的指针定义的类型相对应,比如:int * test;test = (int *)0x0012ff7c;*test = val 阅读全文
posted @ 2013-12-20 10:47 jeremyatchina 阅读(5083) 评论(0) 推荐(2) 编辑
摘要: Linux 的 time 指令Linux 有個很有意思的 time 指令,可以用來查看另一個指令的執行時間,例如執行 time helloworld 會顯示 helloworld 這支程式的執行時間。time 指令的返回值包含「實際時間 (real time)」、「用戶態 CPU 時間 (user CPU time)」及「核心態 CPU 時間 (system CPU time)」。其中,real time 表示後面所接的指令或程式從開始執行到結束終止所需要的時間。簡單講,當一個程式開始執行瞬間看一下手錶記下時間,當程式結束終止瞬間再看一次手錶,兩次的時間差就是 real time。user C 阅读全文
posted @ 2013-12-09 15:06 jeremyatchina 阅读(847) 评论(0) 推荐(0) 编辑
摘要: Hi there,I've upgraded a number of test systems to the latest Saucy beta. I've seen quite a few cases of processes being killed by lowmemorykiller with the following entries being logged:[ 291.565121] lowmemorykiller: send sigkill to 4476 (python), adj 0, size 8864[23515.006794] lowmemorykil 阅读全文
posted @ 2013-12-09 12:01 jeremyatchina 阅读(714) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 21 下一页