网站大量收购独家精品文档,联系QQ:2885784924

Linux内核注释第7章进程和线程.pdf

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 7 章 进程和线程.doc 第 7 章 进程和线程 操作系统的存在归根结底是为了提供一个运行程序的空间。按照 Unix 的术语,将正在 运行的程序为进程。Linux 内核和其它 Unix 变种一样,都是采用了多任务技术;它可以在 许多进程之间分配时间片从而使这些进程看起来似乎在同时运行一样。这里通常是内核对有 关资源的访问作出仲裁;在这种情况下,资源就是 CPU 时间。 进程传统上都有唯一的执行程序的上下文——这是说明在某个时刻它正在处理一项内 容的流行的方法。在给定的时刻,我们可以精确地知道代码的哪一部分正在执行。但是有时 我们希望一个进程同时处理多件事情。例如,我们可能希望 Web 浏览器获取并显示 Web 页, 同时也要监视用户是否点击停止按钮。只为监视停止按钮而运行一个全新的程序显然是不必 要的,但是对于Web 浏览器来说要对其时间进行分隔也并不总是非常方便——获取一些Web 页信息,检测停止按钮,再获取一些 Web 页信息,再重新检测停止按钮,等等。 对于这个问题的比较流行的解决方法是线程。从概念上来说,线程是同一个进程中独立 的执行上下文——更简单一点地说,它们为单一进程提供了一种同时处理多件事情的方法, 就像是进程是一个自行控制的微缩化了的多任务操作系统。同一线程组中的线程共享它们的 全局变量并有相同的堆(heap ),因此使用malloc 给线程组中的一个线程分配的内存可以被 该线程组中的其它线程读写。但是它们拥有不同的堆栈(它们的局部变量是不共享的)并可 以同时在进程代码不同的地方运行。这样,你的 Web 浏览器可以让一个线程来获取并显示 Web 页,同时另外一个线程观测停止按钮是否被点击,并且在停止按钮被点击时停止第一 个线程。 和线程等价的一种观点——这是 Linux 内核使用的观点——线程只是偶然的共享相同 的全局内存空间的进程。这意味着内核无需为线程创建一种全新的机制,否则必然会和现在 已经编写完成的进程处理代码造成重复,而且有关进程的讨论绝大多数也都可以应用到线程 上。 当然,以上的说明仅仅适用于内核空间的线程。实际中也有用户空间的线程,它执行相 同的功能,但是却是在应用层实现的。用户空间的线程和内核空间的线程相比有很多优点, 也有很多缺点,但是有关这些问题的讨论超出了本书的范围。而使人更加容易造成混淆是一 个名为 kernel_thread (2426 行)的函数,尽管该函数被赋予了这样一个名字,但是它实际 和内核空间的线程没有任何关系。 部分是由于历史的原因,部分是由于 Linux 内核并没有真正区分进程和线程这两者在概 念上的不同,在内核代码中进程和线程都使用更通用的名字“任务”来引用。根据同样的思 路,本书中所出现的 “任务”和“进程”具有相同的意义。 调度和时间片 对 CPU 访问的裁决过程被称为调度(Scheduling)。良好的调度决策要尊重用户赋予的 优先级,这可以建立一种所有进程都在同时运行的十分逼真的假象。糟糕的调度决策会使操 作系统变得沉闷缓慢。这是 Linux 调度程序必须经过高度优化的一个原因。 从概念上来说,调度程序把时间分为小片断,并根据一定的原则把这些片断分配给进程。 你可能已经猜到,时间的这些小片断称为时间片。 - 81 - 第 7 章 进程和线程.doc 实时进程 Linux 提供了三种调度算法:一种传统的 Unix 调度程序和两个由 POSIX.1b (原名为 POSIX.4 )操作系统标准所规定的“实时”调度程序。因此,本书中有时会使用实时进程(从 技术上考虑,系统使用术语“非实时进程(nonrealtime process )”来作为实时进程的对应, 虽然我更倾向于使用另外一个术语 unrealtime process )。不要过分计较“实时”这个术语, 虽然——如果从硬件的角度来看待这个问题,实时意味着你可以得到有关操作系统的某种性 能保证,例如有关中断等待时间的承诺,但是这一点在 Linux 实时调度规则中并没有提供。 相反的,Linux 的调度规则是“软件实时”,也就是说如果实时进程需要,它们就只把 CPU 分配给实时进程;否则就把 CPU 时间让出给非实时进程。 但是如果你

文档评论(0)

xina171127 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档