- 博客(8)
- 资源 (3)
- 收藏
- 关注
转载 container_of 理解
问题:如何通过结构中的某个变量获取结构本身的指针???关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the t
2013-07-27 09:45:11 781
原创 中断处理
查看设备状态有两种方式,一种是轮询,一种是中断,可是轮询代价太大,如果是简单的系统,处理的时间单一,比如只有一个按键操作,那么可以轮询,如果是操作系统的,则是对响应来说是灾难性的。中断的引入是由I/O操作的不确定性以及与CPU之间的速度矛盾。设备通过某种硬件信号来异步地唤起CPU的注意,说明中断的到来,是否处理。这些硬件的信号就是中断。每个中断设备都被分配一个相关的标识符,被称为中断请求(IR
2013-07-18 07:47:10 1154
原创 工作队列
工作队列是内核中用于进行延后工作的一种方式。延后工作在很多地方使用到,比如1.1个错误中断发生后,触发网络适配器重新启动;2.同步磁盘缓冲区的文件系统任务;3.给磁盘发送一个命令,并跟踪存储协议状态机。等等工作队列辅助库向用户提供了两个接口结构:workqueue_struct和work_struct,使用工作队列的步骤如下1.创建一个工作队列(或一个workqueue_str
2013-07-16 15:48:41 1100
原创 内核并发处理
随着硬件的发展,SMP(对称多处理器)已经很普遍,如果内核的调度机制是可抢占的,那么SMP和内核抢占是多线程执行的两种场景。当多个线程同时访问内核的数据结构时,我们就需要对其做串行化处理。自旋锁和互斥体访问共享资源的代码区称为临界区。自旋锁(spinlock)和互斥体(mutex, mutual exclusion)是保护内核临界区的两种基本机制。自旋锁可以确定在同时只有一个线程进入临
2013-07-15 16:54:43 1272
原创 内核定时器
内核中的许多部分的工作都高度依赖与时间信息。Linux内核利用硬件提供的不同的定时器以支持忙等待和睡眠等待等时间相关的服务。所谓忙等待,就是cpu不停的运转。但是睡眠等待,进程将放弃cpu。所以,只有在睡眠等待不可行的情况下,才考虑使用忙等待。内核也提供了相关的api,使可以在一段时间之后调用某函数运行。在内核中存在这一些重要的与定时器相关的变量。HZ和Jiffies系统定时器能以可编程的
2013-07-14 07:09:57 1026
原创 基于epoll的聊天室程序
epoll相对于poll和select这两个多路复用的I/O模型更加的高效。epoll的函数很简单,麻烦的地方在于水平出发和边沿触发。 用张图来说明下 ET(边沿)只是在状态反转时触发,比如从不可读到可读。而LT(水平)就是如果可读,就会一直触发。所以在使用ET的时候要做一些额外的处理,比如可读的,一直把缓冲区读完,进入不可读状态,
2013-07-13 20:44:31 3956
原创 内核启动过程
以x86体系结构的计算机为例 第一步是BIOS从启动设备中导入主引导记录(MBR),接下来MBR中的代码查看分区表并从活动分区读取GRUB,LILO或SYSLINUX等引导装入程序(Bootloader),之后引导装入程序会加载压缩后的内核映像并将控制权传递给内核。内核获得控制权后,会将自身解压并投入运行。x86的cpu有两种操作模式:实模式和保护模式。在实模式下,用
2013-07-11 15:33:52 1047
原创 QTabWidget+QToolBar实现浏览器标签页
直接上代码/********************************************************************* author 周翔* e-mail 604487178@qq.com* blog http://blog.csdn.net/zhx6044*************************************************
2013-07-11 10:00:14 7305 5
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人