- 博客(7)
- 收藏
- 关注
原创 C++学习笔记1-const引用
<br /> const引用可以用不同类型的对象初始化(只要能从一种类型转换到另一种类型即可),也可以是不可寻址的值,如文字常量,例如:<br />double dval = 3.14159; //仅对于const引用才是合法的 const int &ir = 1024; const int &ir2 = dval; const double &dr = dval + 1.0;<br /> 同样的初始化对于非const引用是不合法的,将导致编译错误。原因如下。<br /> 引用
2011-04-27 21:57:00 295
原创 内核通知链 学习笔记
<br />最近在看《深入理解Linux网络内幕》一书,学习了一下书中讲到的内核通知链方面的知识,写了一个读书笔记和一点代码来加深理解,希望能够对大家有一点帮助。 1.通知链表简介<br /> 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。<br /> 通知链表是一个函数链表,链
2011-04-27 21:35:00 230
原创 中断程序为什么不能发生进程切换
<br />在Linux内核中,中断处理程序运行期间是不能发生进程切换的,因此,也就不能够使用睡眠。因为中断的内核控制路径在恢复时需要的所有数据都存放在被中断进程的内核栈中,如果发生了进程切换,那么在恢复时就找不到之前的那个进程,因为也就不能够获得那个进程的内核栈中的数据,使得中断能够正确的退出。
2011-03-11 15:38:00 2495
原创 对LDD3前七章的一个小节
最近又重读了LDD3(Linux Device Driver, 3rd Edition) , 对LDD的前面一部分, 即如何写一个字符设备进行了一个小结. 希望能够对初学者有用.对于下面这一段代码, 演示了如何创建一个字符设备, 涉及到如下知识点:1. 如何创建字符设备, 2. 使用信号量进行互斥, 3. 创建等待队列, 4. 设计一个定时器分别包括了LDD3中第二, 三, 五, 六, 七章中的小部分内容.#include#include#include#include#include#include#in
2011-03-11 15:36:00 226
原创 创建字符设备的三种方法
将创建字符设备的三种方法记录一下,以便以后参考.1. 使用早期的register_chardev()方法#include#include#include#includeint init_module(void);void cleanup_module(void);static int device_open(struct inode*, struct file*);static int device_release(struct inode*, struct file*);static ssize_t de
2011-03-11 15:35:00 547
原创 Linux内核定时器
以前写的Linux内核定时器的代码,如下:#include#include#include#include#include#include#includeMODULE_LICENSE("GPL");static DECLARE_WAIT_QUEUE_HEAD(wq);static int flag = 0;struct timer_list my_timer;void timer_test(unsigned long data){ printk("this is a test/n");
2011-03-11 15:33:00 262
原创 关于自旋锁的理解
<br />Spin_lock()<br />//<br />Spin_unlock()<br />自旋锁的作用就是对于一个临界资源将其进行锁定,使得同时不能有两个及以上的进程对该临界资源进行访问。<br />在smp上面,调用了spin_lock()之后,如果该锁现在没有被锁定,则锁定该锁并进入临界区,此时如果另一个CPU也要用到当前锁,则会自旋,但是在自旋的时候,它会调用preemp_enable(),使得其进程是可抢占的,因此可以被更高优先权的进程所抢占。<br />如果是在单CPU上面,则只是执行禁
2011-03-11 15:13:00 508
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人