linux块设备分析与使用(转的)
linux块设备分析与使用
linux块设备分析与使用
creator
sz111@126.com
本篇文章力求简单明了的解释Linux的块设备驱动,让大家对它少些畏惧,快速的开发一个块设备。分析完这篇之后,下一步就是分析MMC卡的驱动,争取分析之后可以达到优化读卡速度的目的。Linux的块设备看似比较复杂,其实梳理一下并不难,有如下两点:
1.对请求的响应。request。(如果使用请求队列)
2.制造请求。make_request.(不使用请求队列)
request是采用一定的算法组合了请求以提高性能,这个时候算法组合就是系统默认的make_request函数,函数名为__mak_request,而如果不采用请求组合的时候,就可以自定义make_request函数。因为内核中这个函数是个函数指针,可以改变的。有些时候不需要组合的方式,如SD卡和RAMDISK。
以上两个方式都不能由驱动自己调用,只有当内核认为是时候让驱动处理对设备的读写等操作,它才会调用这个函数。
基本上块设备就是对以上两种方式选择一个,然后对其进行处理。所有的块设备驱动都是围绕这个部分展开。期间有很多数据结构需要我们特别注意。
我们先使用请求队列对请求进行响应,等于是采用默认的make_request函数,采用Linux默认的队列优先级算法。对这个方法进行分析展开。
原型为void request(request_queue_t *queue)
主要依靠这个函数对请求进行响应,并且所有的请求最终都被驱动处理。这个函数是被内核来调用。每个设备都有一个请求队列。Request函数会在设备的请求队列生成的时候和队列绑定在一起。通过函数
request_queue_t *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock)
生成一个请求队列。其中rfn函数就是我们用户自己的request函数。生成的这个队列会放到gendisk结构里面,gendisk是来表示一个独立的磁盘设备或分区。下面我们对request函数实例进行分析。
static void sbull_request(request_queue_t *q)
{
struct request *req;
while((req = elv_next_request(q)) != NULL){
sbull_transfer(dev,req->sector,req->current_nr_sectors,
re
相关文档:
像使用Windows时那么直观。其实在Linux下安装和卸载软件也非常简单,同样也有安装向
导或解压安装的方式,不相同的只不过是除了二进制形式的软件分发外,还有许许多多以
源代码形式分发的软件包,下面就来详细地讲一讲这些软件的安装与卸载: 一、二进制分发软件包的安装与卸载
Linux软件的二进制 ......
比如要把/etc/apache/bin目录添加到PATH中
1.#PATH=$PATH:/etc/apache/bin
使用这种方法,每当登出PATH就会恢复
2.#vi /etc/profile
在适当位置添加PATH=$PATH:/etc/apache/bin
这种方法最好,除非你强制手动修改PATH的值,否则将不会被改变
3.#vi ~/.bash_profile
修改PATH行,把/etc/apach ......
线程处于分离状态后,当线程退出后,则有操作系统来负责系统的回收。
创建分离状态线程的方法有:
1、在线程函数中调用, pthread_detach(pthread_self());
2、线程属性的设置函数
摘自:Unix 环境高级编程
int makethread(void *(*fn),void *arg)
{
int err;
&n ......
先把中断处理流程给出来
1.进入中断处理程序--->2.保存关键上下文---->3.开中断(sti指令)--->4.进入中断处理程序的handler--->5.关中断(cli指令)---->6.写EOI寄存器(表示中断处理完成)---->7.开中断。
硬中断:
对应于上图的1、2、3步骤,在这几个步骤中,所有中断是被屏蔽的,如果在这个时候睡 ......
随着Linux应用的日益广泛,有大量的网络服务器使用Linux操作系统。为了全面衡量网络运行状况,就需要对网络状态做更细致、更精确的测量。 SNMP协议的制订为互联网测量提供了有力支持。MRTG(MultiRouter Traffic Grapher, MRTG)就是基于SNMP的典型网络流量统计分析工具。它耗用的系统资源很小,因此有很多外挂的程序也依附在 ......