数据读写SD卡下半部分析

接上一篇文章 read 系统调用剖析 

在上一文中,作者已经将Read 整个调用过程从Linux 系统调用(SCI,system call interface)至IO调度的整个流程已经讲解的非常清晰明了,在此对作者表示致敬!

那这里我接着以Android SD卡为例子,分析IO调度后数据的处理流向!  本文代码基于linux kernel 3.0.4.

1. mmcqd 

mmcqd 是kernel在/kernel/drivers/mmc/card/queue.c  的mmc_init_queue拉起的一个内核线程,主要作用是把上层IO的request一个个向具体driver发送。

mq->thread = kthread_run(mmc_queue_thread, mq, "mmcqd/%d%s",
                host->index, subname ? subname : "");

可以看到 mmc_queue_thread 才是实际做事情的,所以我们先来看看他的庐山真面目。

static int mmc_queue_thread(void *d)
{
        struct mmc_queue *mq = d;
        struct request_queue *q = mq->queue;

        current->flags |= PF_MEMALLOC;

        down(&mq->thread_sem);
        do {
                struct request *req = NULL;

                spin_lock_irq(q->queue_lock);
                set_current_state(TASK_INTERRUPTIBLE);
                req = blk_fetch_request(q);
                mq->req = req;
                spin_unlock_irq(q->que
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值