现代操作系统Chapter7.pptVIP

  1. 1、本文档共53页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Contents Linux内核结构 Linux的进程管理 Linux的进程调度 Linux的内存管理 7.1 Linux内核结构 7.2 Linux的进程管理 一般来说,Linux中的进程都具备以下四要素: 有一段程序供其执行。 有起码的“私有财产”,这就是系统专用的系统堆栈空间。 有“户口”,这就是在内核中的一个task_struct数据结构(在操作系统教科书中常称为PCB)。 有独立的存储空间,意味着拥有专有的用户空间。 task与process Linux系统中的“进程” (process) 和“任务” (task)是同一个意思,在内核代码中也常混用这两个名词。 7.2.1 进程描述符及任务结构 在内核中,进程描述符是一个名为task_struct的结构体,用于保存进程的属性和其他信息,它在include/linux/sched.h中定义。 内核用双向循环链表task_list存放所有进程描述符;同时借助全局变量current保存当前运行进程的task_struct。 进程描述符 进程描述符必须保存的信息类型有: 进程的属性 进程间的关系 进程的内存空间 文件管理 信号量管理 进程的可信度 资源限制 与调度相关的域 7.2.2 进程状态 task_struct结构中的state域描述了进程的当前状态。系统中的每个进程都必然处于几种进程状态之一。其具体定义见sched.h。 进程状态 TASK_RUNNING 可执行状态,表示这个进程可以被调度执行而成为当前进程。 当进程处于这样的可执行状态时,内核就将该进程的task_struct结构通过其队列头run_list挂入一个“运行队列”。 TASK_INTERRUPTIBLE 进程睡眠,可因“信号到来”而被唤醒 TASK_UNINTERRUPTIBLE 进程深度睡眠,不受信号干扰 TASK_STOPPED 挂起状态,主要用于调试目的 TASK_ZOMBIE 进程已经结束,但资源未释放,进程结构还在(进程已经“去世”但“户口”尚未注销) 进程状态转换 7.2.3 进程创建 Linux将进程的创建与目标程序的执行分成两步: 第一步:从已经存在的“父进程”复制出一个“子进程”。复制出来的子进程有自己的task_struct和系统空间堆栈,但与父进程共享其它所有的资源。 Linux为此提供了两个系统调用:fork( )和clone( )。 第二步:读取可执行文件并将其载入地址空间开始运行。 Linux为此提供了一个函数族:exec( )。 fork( )与clone( )的区别 fork( )是全部复制,父进程所有的资源全都通过数据结构的复制“遗传”给子进程。 clone( )则可以将资源有选择地复制给子进程,而没有复制的数据结构则通过指针的复制让子进程共享。在极端的情况下,一个进程可以clone( )出一个线程。 fork( )是无参数的, clone( )是带有参数的。 写时拷贝 (copy_on_write) 传统的fork( )系统调用直接把所有的资源复制给新创建的进程。 ——缺点:效率低下 Linux的fork( )使用写时拷贝来实现。 写时拷贝是一种可以推迟甚至免除拷贝数据的技术。 新创建进程时,内核并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝;只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。 写时拷贝 写时拷贝技术使地址空间上的页的拷贝被推迟到实际发生写入的时候,在页根本不会被写入的情况下(如fork( )后立即调用exec( )),它们就无需复制了。 一般情况下,进程创建后都会马上运行一个可执行的文件,这种优化可以避免拷贝大量根本就不会被使用的数据。 7.3 Linux的进程调度 调度程序是内核的组成部分,它负责选择下一个要运行的进程。 调度程序的基本工作:在一组处于可运行状态的进程中选择一个来执行。 Linux提供抢占式的多任务模式。 7.3.1 调度策略 (policy) 调度策略决定调度程序在何时让什么进程运行。 (1) I/O消耗型和处理器消耗型进程 I/O消耗型进程:进程的大部分时间用来提交I/O请求或是等待I/O请求。 这样的进程经常处于可运行状态,但通常每次运行时间很短。 处理器消耗型进程:它把时间大多用在执行代码上。 对于处理器消耗型进程,调度策略是尽量降低它们的运行频率。 调度策略 调度策略通常要在两个矛盾中寻找平衡: 进程响应时间短 系统吞吐量高 Linux为了保证交互式应用,更倾向于优先调度I/O消耗型进程。 调度策略定义 在include/linux/sched.h中有如下定义: (2) 进程优先级 基于优先级的调度:调度程序总是选择时间片未用尽而且优先级最高

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档