- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 进程与存储管理示例 6.1 Linux进程和存储管理简介 Linux系统的核心部分:“静”的文件系统和“动”的进程控制系统。 文件系统主要用来存放、管理那些暂时不被处理机执行的程序和数据,它为程序和数据文件分配空间,控制文件存取和为用户检索信息。 进程控制系统为将要执行的程序和数据文件分配内存空间,并负责进程调度、控制并发进程的执行速度和分配必要的资源,以及负责进程通信和内存管理等。 Linux的进程控制系统与文件系统之间通过数据结构和函数调用来互相作用。 Linux中的主要进程 在一个已安装好Linux系统的操作系统中,启动电源意味着系统引导程序开始系统自举,引导在外存硬盘中的操作系统核心进入内存。 0#进程:idle进程 启动Linux系统、设置和初始化各种数据结构与表格、建立控制Linux系统内核运行的控制进程。0#进程除了负责创建1#进程,还负责处理机分配及进程交换。是唯一一个只在系统态下运行的进程。 1#进程:init进程 建立控制终端进程与Shell进程(用户交互进程)运行。是所有用户进程的祖先。可在系统态和用户态下运行。 进程运行所处状态 Linux操作系统的0#进程在核心态下运行,而1#进程以及由1#进程衍生的其他进程都可在用户态和核心态两种执行模式下执行。 在不同的执行模式下执行时,同一进程使用不同的堆栈和不同的管理数据结构。在两种不同模式下执行的程序不能互相访问各自的堆栈,它们之间的参数传递往往需要借助通用寄存器等硬件。 两态之间的主要区别是,用户态下的进程能存取它们自己的指令与数据,但不能存取核心指令和数据。然而,核心态下的进程能存取核心和用户地址。另外,某些机器指令是特权指令,在用户态下执行会引起错误,只能在核心态下执行。 进程控制逻辑模块 系统在逻辑上由四个模块组成。即与文件系统的接口部分,进程本身的控制部分,包括进程的创建、进程调度和进程的撤消等,第三部分是进程间控制部分,包括进程间的互斥、同步和通信等,第四部分是存储管理部分。 引起进程调度的4种情况: (1) 当前执行进程申请内存等系统资源未得到满足,从而自己调用sleep 过程,放弃处理机进入睡眠状态。 (2) 为了与其他并发进程保持同步,调用了wait或stop过程等,从而主动放弃了处理机而进入睡眠状态。 (3) 当系统发现系统中某进程的优先级已高于当前执行进程的优先级时,系统设置一个名叫need_resched的调度标志。但是,系统并不在need_resched标志刚被设置时就开始调度。它要等待到系统在核心态下的程序执行完毕,由核心态转入用户态时,也就是在中断陷入总控处理程序结束之前的瞬间,检查need_resched标志并进行调度。 (4) 当前进程调用exit,自我终止时。 6.2 Linux进程结构 6.2.1 进程的概念 (1) 一个进程是对一个程序的执行。 (2) 一个进程的存在意味着存在一个task-struct结构,它包含着相应的进程控制信息。 (3) 一个进程可以生成或消灭进程。 (4) 一个进程是获得和释放各种系统资源的基本单位。 task_strut进程控制块(PCB):P149 6.2.2 进程的虚拟地址结构 在80x86平台中,每个进程拥有一个4GB的虚拟空间,其中0 – 3GB的空间供用户使用,用户进程可以对其直接访问,3 – 4GB的地址空间称为核心地址空间。 Linux将用户进程的所有地址空间信息保存在一个名为mm_struct的数据结构中,该信息保存在进程描述符中。 Linux的进程由逻辑段组成,一个进程的虚拟地址空间被分成若干个虚拟区域来存放逻辑段。区是进程虚拟空间上的一段连续区域,它是被共享、保护以及进行内存分配和地址变换的独立实体。正文、数据和栈分别存放于各自的区中。虚拟区域命名vm area,简写为VMA。 为管理每个进程中的区,系统为每个进程设置一个vm_area_struct结构(详见P150)。 为把区表和进程联系起来,当进程中的某个逻辑段在区表中分得表项并填写了相关栏目之后,将该表项的内存地址返回到进程的task_struct结构中。 区与段页式管理类似,但段页式管理虚拟地址空间是二维的,而Linux的分区虚拟地址空间仍是一维的。 6.2.3 进程上下文 Linux 的进程上下文是由正文段,也就是CPU 执行指令的集合、核心数据结构、和有关寄存器的内容与数据段组成。 1. 进程上下文的基本结构 进程上下文的各个部分按照一定的规则分布在进程虚拟空间的不同位置上。对于不同的机器和硬件结构,进程上下文的分布规则不同。例如,在80x86上,其虚拟地址空间划分为进程空间和系统空间两大部分。其寻址范围为 2
文档评论(0)