Kernel Locking 中文版.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Kernel Locking 中文版

Kernel Locking 中文版 Unreliable Guide To Locking Rusty Russell ? ?? ?rusty@.au 翻译: ? ?? ?albcamus albcamus@163.com Copyright ? 2003 Rusty Russell This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA For more details see the file COPYING in the source distribution of Linux. 第1章. 介绍 欢迎进入Rusty优秀的《Unreliable Guide to Kernel Locking》细节。本文档描述了Linux 2.6内核的锁系统。 随着Linux内核引入了超线程与 抢占 ,每一个Hacking内核的人都应该了解并发性与为SMP加锁的基础知识。第2章. 并发带来的问题 (如果你已知道并发是什么,请略过本章). 在一个普通的程序里,你可以这样为一个计数器增加计数: ? ? ? ? very_important_count++; 下面是你期望的结果: 事情还可能这样发生: Table 2-2. 可能的结果 2.1. 竞态条件与临界区 这种情况,结果依赖于多个任务的相对执行顺序,叫做竞态条件。包含并发问题的代码,叫做临界区。尤其是Linux开始支持SMP机器以来,竞态条件和临界区就成为内核设计与实现的主要问题。 抢占具有相同的影响,即使只有一个CPU也是这样的:抢占了正在临界区中执行的任务,我们就重现了上面描述的情况。在这种情况下,抢占了其他代码的线程必须在它的临界区独自运行(排斥其它线程)。 解决的方法是:认识到何时会发生同时访问,使用锁来保证在任意时刻只有一个实例能够进入临界区。在Linux内核中有很多友好的原语(primitives)来帮助你做到这点──也有不友好的原语,但我将当作它们并不存在。第3章. 在Linux内核中加锁 我多么希望能给你一句忠告:不要与比你更不理性的人同眠;而如果是关于锁的忠告,我会这样给出:保持简单。 不要试图引入新类型的锁。 真是够奇怪的,最后一条竟然恰恰与我的忠告相反──因为这时你已经与不理性的人同眠了,你需要考虑弄只看门狗。(译者案:Watchdog是一种以NMI方式检查CPU死锁的机制) 3.1. 两种主要类型的锁:自旋锁与信号量 内核中主要有两种类型的锁。最基本的类型是自旋锁(include/asm/spinlock.h),它只允许一个持有者;如果你获取自旋锁时不成功,你将一直在自旋中尝试获得它,直到成功。自旋锁又小又快,可以在任何地方使用。 第二种类型是信号量(include/asm/spinlock.h),它可以在任何时刻被多个持有者同时持有(允许的持有者的数量是在信号量初试化时规定的),但是在通常情况下信号量只允许一个持有者(这时它也叫互斥锁,mutex)。如果你获取信号量时不成功,任务就会把自身放到一个队列中睡眠,一直到信号量被释放时才被唤醒。这意味着在你等待的时候,CPU将做其他的事情。但是,很多情况是不允许睡眠的(参考

文档评论(0)

cj80011 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档