linux内核md源代码解读 七 阵列同步一 :先容阵列同步
这里有必要解释一下同步线程的意思,这里的同步是指广义的sync,包括狭义的同步和重建,因为同步和重建实际上做的是同一件事情就是把数据从一个地方拷贝到另一个地方。sync是包括syncing和recovery,所以不要一看到同步线程就以为是做同步操作。 正是这些标志指定同步线程下一步该怎么做,而我们一看到这些标志的时候心里必须要明白此时线程在做什么或者应该做什么。 7804行,这个if分支用于启动重建操作。 7809行,这个分支用于启动同步操作。 7812行,既不同步也不重建那就没有什么可以做的。 7816 if (mddev->pers->sync_request) { 7817 if (spares) { ... 7823 } 7824 mddev->sync_thread = md_register_thread(md_do_sync, 7825 mddev, 7826 "resync"); 7827 if (!mddev->sync_thread) { ... 7837 } else 7838 md_wakeup_thread(mddev->sync_thread); 7839 sysfs_notify_dirent_safe(mddev->sysfs_action); 7840 md_new_event(mddev); 7841 } ... 7850 mddev_unlock(mddev); 7851 } 7816行,对于没有同步线程的阵列来说,就没什么事情了。7824行,启动同步线程。7838行,唤醒同步线程。7839行,更新同步状态。这时主线程调用md_check_recovery函数就已经结束了,启动的同步线程来做同步的具体事宜。那么为什么主线程自己不做同步而另起一个线程做同步呢?不妨想想现在事情都放在主线程里做有什么负面影响?当主线程在同步的时候是不是就不能很及时响应正常数据流了。而且同步和数据流本来就是两件差异很大的事情。本小节只是介绍到同步入口,同步过程在下一小节开始阅读。 出处:http://blog.csdn.net/liumangxiong (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |