内核的同步和互斥实例学习
#include <linux/module.h> #include <linux/init.h> #include <linux/kernel.h> #include <linux/mutex.h> #include <linux/semaphore.h> #include <linux/sched.h> static DEFINE_MUTEX(mut1); struct semaphore sem1,sem2; int test1(void *p) { down(&sem2); mutex_lock(&mut1); printk("get out test1\n"); mutex_unlock(&mut1); up(&sem1); return 0; } int test2(void *p) { down(&sem1); mutex_lock(&mut1); printk("get out test2\n"); mutex_unlock(&mut1); up(&sem2); return 0; } static int __init mutex_init_test() { init_MUTEX(&sem1); init_MUTEX_LOCKED(&sem2); printk("get out \n"); kernel_thread(test1, test1, CLONE_KERNEL); kernel_thread(test2, test2, CLONE_KERNEL); return 0; } static void __exit mutex_exit_test() { printk("get out \n"); return; } module_init(mutex_init_test); module_exit(mutex_exit_test); MODULE_AUTHOR("Helight.Xu"); MODULE_LICENSE("Dual BDS/GPL"); 看完本文有收获?请分享给更多人 关注「黑光技术」,关注大数据+微服务
April 21, 2009
为佛家的“色即是空,空即是色”正意
“色即是空,空即是色”这句佛经名言,包含着很深的哲学思想,一般人包括文人 们喜欢以此开玩笑,认为色就是指女人,空就是虚无或乌有.说和尚看破红尘,把女人 看做是虚无或乌有,便出家做和尚了.其实色并非女色,空也非虚无乌有.要认识此言 的真正含义,还得从佛教的基本教义说起. 佛教的教义,主要是所谓的"四谛",即 苦、集、灭、道。苦、集二谛阐明人生的本质及形成原因;灭、道二谛指明人生解 脱的归宿和解脱之路。
April 7, 2009
截获Linux系统调用
#include <linux/kernel.h> #include <linux/module.h> #include <linux/moduleparam.h> #include <linux/unistd.h> #include <linux/init.h> #include <asm/ptrace.h> #define NRB 2 typedef asmlinkage int (*__routine)(struct pt_regs); __routine old, new; unsigned long *sys_call_table = 0; static int counts = 0; unsigned long* find_sys_call_table(void) { struct { unsigned short limit; unsigned int base; } __attribute__ ( ( packed ) ) idtr; struct { unsigned short offset_low; unsigned short segment_select; unsigned char reserved, flags; unsigned short offset_high; } __attribute__ ( ( packed ) ) * idt; unsigned long system_call = 0; // x80中断处理程序system_call 地址 char *call_hex = "\xff\x14\x85"; // call 指令 char *code_ptr = NULL; char *p = NULL; unsigned long sct = 0x0; int i = 0; __asm__ ( "sidt %0": "=m" ( idtr ) ); idt = ( void * ) ( idtr.base + 8 * 0x80 ); system_call = ( idt->offset_high << 16 ) | idt->offset_low; code_ptr = (char *)system_call; for(i = 0;i < ( 100 - 2 ); i++) { if(code_ptr[i] == call_hex[0] && code_ptr[i+1] == call_hex[1] && code_ptr[i+2] == call_hex[2] ) { p = &code_ptr[i] + 3; break; } } if ( p ){ sct = *(unsigned long*)p; } return (unsigned long*)sct; } asmlinkage int audit_sys_call(struct pt_regs regs) { int ret = 0; counts++; printk("audit_sys_call!\n"); printk("call %ld sys_call! times: %d\n", regs.ax, counts); ret = ((__routine)old)(regs); return ret; } int mysys_init ( void ) { if (( sys_call_table = find_sys_call_table())) { printk( "sys_call_table = %p\n", sys_call_table ); old = (__routine)sys_call_table[NRB]; new = &audit_sys_call; sys_call_table[NRB] = (unsigned long)new; } return 0; } void mysys_exit ( void ) { printk("keep back the sys_call_table \n"); sys_call_table[NRB] = (unsigned long)old; } module_init(mysys_init); module_exit(mysys_exit); MODULE_LICENSE("GPL2.0"); MODULE_AUTHOR("Helight.Xu"); 看完本文有收获?请分享给更多人 关注「黑光技术」,关注大数据+微服务
March 31, 2009
使用valgrind检测内存泄露
Valgrind是x86架构Linux上的多重用途代码剖析和内存调试工具。但它的主要功能还是对内存的调试,默认工具也是启动 memcheck。用户可以在它的环境中运行程序来监视内存的使用情况,比如C语言中的malloc和free或者C++中的new和delete。
February 27, 2009
又是一个岁终年末的随想
依我个人的观点看,往往岁终年末是一年之中比较乱乱的时候。人们的心情 开始慌乱,急躁。毕竟要过年了。好像是劳累的一年了,也应该休一下了。对待工 作生活是不是开始怠慢了呢?呵呵!! 也是阿,又是一年的岁终年末了。
December 25, 2008
Linux内核中的P,V操作之P
最近作辅导讲到了P,V操作,我就在内核中看了一下Linux中的P,V操作的实现。很真是,理解比本科学习的时候深多了。操作系统中的P操作在Linux内核中对应的是down函数,V操作对用up函数。
November 29, 2008
Linux内核中的P,V操作之V
最近作辅导讲到了P,V操作,我就在内核中看了一下Linux中的P,V操作的实现。很真是,理解比本科学习的时候深多了。操作系统中的P操作在Linux内核中对应的是down函数,V操作对用up函数。
November 29, 2008