- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LinuxIO数据通道分享课案
;IO数据通道处理层次;块设备:
块设备是支持以固定长度的块为单位读/写数据的存储设备的总称。块设备包括支持随机访问(如数码相机存储卡,RAM盘)和寻到的硬件设备(如磁盘、软盘、CDROM、内存区域等),也可以是逻辑设备,如MD设备,Device mapper。;块设备处理请求函数:
请求处理是块设备驱动的核心,实际的工作都是在这个函数执行,是块设备驱动提供给上层的借口,块设备将通过这个函数获得I/O 请求。;struct request {
struct list_head queuelist;
struct request_queue *q;
unsigned int cmd_flags;//请求的类型
sector_t __sector; //请求开始扇区
unsigned int __data_len; 请求的数据长度
struct bio *bio; 请求的第一个bio
struct bio *biotail;请求的最后一个bio
……………….
};
;struct bio_vec {
struct page *bv_page;
unsigned int bv_len;
unsigned int bv_offset;
};
;;分配,初始化请求队列,绑定请求队列和请求函数的两种方式:
一.无请求队列:
适合于完全可以随机访问的设备数码相机存储卡,RAM盘等(现在我们的SSD适合),这种方式不会经过 IO Schedule Layer。;分配请求队列、绑定请求队列和请求函数:
blk_init_queue(make_request,queue_lock) ——分配请求队列且绑定请求队列和请求函数。
;IO 调度层;IO 调度层;中断和中断处理;中断处理:中断处理程序要求快速、高效,而又想中断处理程序处理的工作量多,所以把中断处理分成中断上半部和下半部。
;注册中断处理函数原型:
int request_irq(unsigned int irq,irq_handler_t handler,
unsigned long flags, const char *devname, void *dev_id)
释放中断处理函数原型:void free_irq(unsigned int irq, void *dev_id)
;三、工作队列:
;
软中断的实现:
软中断是在编译期间静态分配的,它由softirq_action 的结构表示:
struct softirq_action
{
void (*action)(struct softirq_action *);
};
;中断和中断处理;;工作队列:
工作队列是另一种将工作推后执行的形式,它可以把推后执行的工作交给一个内核线程来执行,也就是用这种机制实现中断下半部的是在进程上下文中执行的,工作队列可以重新调度甚至睡眠。
;表示线程的数据结构:
struct workqueue_struct {
struct cpu_workqueue_struct *cpu_wq;
struct list_head list;
const char *name;
int singlethread;
int freezeable; /* Freeze threads during suspend */
int rt;
#ifdef CONFIG_LOCKDEP
struct lockdep_map lockdep_map;
#endif
};
;使用工作队列:
一、创建推后执行的工作:
1、静态创建:DECLARE_WORK(name,void (*func) (void *),void *data);
2、动态创建:INIT_WORK(struct work_struct *work, oid (*func) (void *),void *data);
;三、对工作进行调度:
把给定工作的处理函数提交给缺省的events工作者线程:
schedule_work();
调用此函数work马上会被调度,当所在处理器上的工作队列线程被 唤醒时就会被执行;
;中断和中断处理;下半部机制的选择:首先,如果需要一个可以休眠、可以调度的实体来执行推后完成的工作,选择工作队列;否则用tasklet,还有如果专注性能的提高,可以使用软中断。
;中断和中断处理实际实现:
对于普通读写和trim命令中断处理只有上半部:
Mvumi_isr_handler?mvumi_receive_ob_list_entry ?g_complete_cmd ?raid0_end_io ?host_cmd_
您可能关注的文档
- 农村生活污水汇集与人工湿地处理.pptx
- 农药基础知识培训资料.ppt
- led课设报告.docx
- 农药剂型讲座之一.ppt
- 农产品基础知识(模块二).ppt
- LED封装工艺.ppt
- 农药水乳剂机理及配方研究课件.pptx
- 农民的好帮手——农具.pptx
- LED驱动芯片型号集.doc
- LED路灯设计方案.doc
- 2023-2024学年广东省深圳市龙岗区高二(上)期末物理试卷(含答案).pdf
- 2023-2024学年贵州省贵阳市普通中学高一(下)期末物理试卷(含答案).pdf
- 21.《大自然的声音》课件(共45张PPT).pptx
- 2023年江西省吉安市吉安县小升初数学试卷(含答案).pdf
- 2024-2025学年广东省清远市九校联考高一(上)期中物理试卷(含答案).pdf
- 广东省珠海市六校联考2024-2025学年高二上学期11月期中考试语文试题.pdf
- 2024-2025学年语文六年级上册第4单元-单元素养测试(含答案).pdf
- 2024-2025学年重庆八中高三(上)月考物理试卷(10月份)(含答案).pdf
- 安徽省安庆市潜山市北片学校联考2024-2025学年七年级上学期期中生物学试题(含答案).pdf
- 贵州省部分校2024-2025学年九年级上学期期中联考数学试题(含答案).pdf
文档评论(0)