linux内核及驱动
文章平均质量分 77
iceshirley
了解我就要接触我
展开
-
工作了,又开始了一段新的探索
毕业了,走上了工作岗位,从事了磁盘阵列方面的软件开发,涉及到了linux驱动以及内核方面的知识。以前在学校的时候觉得内核和驱动好难,看了一段时间放弃了。没想工作了又干起来这到我和这东西还真有缘,没办法,不像在学校里那样说不干就不干,只好硬着头皮慢慢摸索。到现在看了MD和raid5已经快2个月了,raid5看的基本差不多了,MD还需要进一步研究。在这个过程中我要感谢knightraincn,在我看M原创 2008-08-08 11:52:00 · 998 阅读 · 0 评论 -
MD模块之处理读写过程分析-1
md可以说是一个虚拟的设备驱动层,它属于块设备驱动,拥有块设备驱动的特点。所以,他实现了块设备操作接口 static struct block_device_operations md_fops ={ .owner = THIS_MODULE, .open = md_open, .release = md_release, .ioctl = md_i原创 2009-01-20 10:18:00 · 4370 阅读 · 1 评论 -
MD模块之处理读写过程分析-2
这一节讲述raid5模块中处理读写流程。这个过程很复杂,最关键的函数就是handle_stripe,处理一次读或写都会多次调用这个函数才能完成。当然,这个函数也是raid5模块的一个核心函数,他还负责同步,重建,以及扩展的实现。在分析之前,我们需要准备一些预备知识:一、条带:我们知道,raid5是以条带为基本单位来存取数据的。如下图所示:raid5还有其它中数据分布方式,这里只列出一种原创 2009-01-21 16:03:00 · 4244 阅读 · 1 评论 -
MD模块之处理读写过程分析-3
这节我们来分析神奇而又NB的handle_stripe,2.6.21版本的处理raid5和raid6分别用handle_stripe5和handle_stripe6这两个函数,我们这里主要说handle_stripe5,handle_stripe6和handle_stripe5其实差不多,只要你理解raid6的原理并理解了handle_stripe5,那么handle_stripe6自然便明白了。原创 2009-01-22 10:43:00 · 3529 阅读 · 4 评论 -
MD模块之处理读写过程分析-4
MD在处理读写错误时是不一样的。写数据发生错误时处理较简单,读发生错误时会比较麻烦,它会把读不出来的数据通过计算出来,然后在重新写回磁盘上。首先先看看如何处理写错误的。1、写数据时发生错误 如果写发生错误,那么回调函数raid5_end_write_request()中bio的BIO_UPTODATE位无效,调用md_error函数将相应的rdev置为Faulty,清除掉In_sy原创 2009-03-12 10:07:00 · 2557 阅读 · 1 评论 -
Linux IO调度层分析-1
Linux IO调度程序是块设备I/O子系统的主要组件,它介于通用块层和块设备驱动程序之间,所图2-1所示。当Linux内核组件要读写一些数据时,并不是请求一发出,内核便立即执行该请求,而是将其推迟执行。延迟的设定是块设备性能的关键机制!当传输一个新数据块时,内核检查能否通过扩展前一个一直处于等待状态的请求而满足新请求。 图 IO调度层所在系统中的位置 在2.6原创 2009-03-17 11:35:00 · 7958 阅读 · 0 评论 -
Linux IO调度层分析-2
Deadline算法维护5个队列,除了请求队列以外,算法还使用了四个队列。其中两个排序队列分别包含读请求和写请求,这个队列是按照起始扇区数来排序的。另外两个最后期限队列包含相同的读和写请求,只不过它们是根据其“最后期限”排序的。这两个队列的目的是为了避免请求饿死。因为电梯策略优先处理与上一个处理请求最近的请求,因而就会对摸个请求忽略很长一段时间,这时就会发生这个情况。请求的最后期限本质上就是原创 2009-03-17 11:47:00 · 4408 阅读 · 0 评论 -
Linux IO调度层分析-3
我们知道,每个块设备程序都有一个请求队列与之关联。在块设备初始化时,会分配并初始化请求队列。在这个时候,我们便可以为块设备驱动程序指定特定的IO调度算法,默认情况下是强制使用系统默认的调度算法。熟悉块设备驱动的人知道,内核是通过generic_make_request函数来不断转发bio,直到该bio被挂载到物理设备的请求队列中。generic_make_request函数会获取bio所原创 2009-03-17 11:49:00 · 5176 阅读 · 0 评论