进程管理分析和总结.docxVIP

  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文档。上传文档
查看更多
进程 进程是多任务系统的基本概念。通常把进程定义为程序执行的一个实例。在 linux 源代码中,常把进程称为任务或者线程。 进程、轻量级进程和线程 进程的定义通常是:程序执行时的一个实例。从内核的观点来看,进程的目的就是担当分配资源(CPU 时间、内存)的实体。 当进程被创建时,它几乎与父进程相同。它接受父进程地址空间的一个(逻辑)拷贝。并从进程创建系统调用的下一条指令开始执行与父进程相同的代码。尽管父子进程可以共享程序代码页,但是它们各自有独立的数据拷贝(栈和堆),因此子进程对一个内存单元的修改对父进程是不可见的。反之亦然。 不过这是早期 unix 使用的简单模式。现代 unix 系统没有如此使用。它们支持多线程应用程序。在这样的系统中,一个进程由几个用户线程组成,每个线程代表进程的一个执行流。大部分多线程应用程序都是用 pthread 线程库的标准库函数集编写的。 早期 linux 内核没有提供多线程应用的支持。在内核看来,多线程应用程序仅仅是一个普通进程。多线程应用程序多个执行流的创建、处理、调度都是在用户态进行的(通常使用 posix 兼容的 pthread 库)。 现在,linux 使用轻量级进程对多线程应用程序提供更好的支持。两个轻量级进程基本上可以共享一些资源:地址空间、打开的文件等。只要其中一个修改共享资源,另一个就立即查看这种修改。当然,两个进程间可能需要同步。 实现多线程应用程序的一个简单方式就是把轻量级进程与每个线程关联起来。这样,线程之间就可以通过简单地共享同一内存地址空间、同一打开文件集等来访问相同的应用程序结构。同时,每个线程都可以由内核独立调度,以便一个睡眠的同时,另一个仍然是可运行的。POSIX 兼容的 pthread 库使用 linux 轻量级进程有 3 个例子:LinuxThreads、Native Posix Thread Library(NPTL) 和 IBM 的下一代 Posix 线程包 NGPT(Next Generation Posix Threading Package)。 POSIX 兼容的多线程应用程序由支持“线程组”的内核来处理是最好不过的。在 Linux 中,一个线程组基本上就是实现了多线程应用的一组轻量级进程, 对于象 getpid,kill 和_exit 这样的系统调用,它象一个组织,起整体的作用。 进程描述符 为了管理进程,内核必须对每个进程所做的事情进行清楚的描述。例如,内核必须知道进程的优先级,是否在运行还是被阻塞,给它分配了什么样的地址空间,允许它访问哪个文件等等。这是进程描述符的作用。进程描述叫 struct task_struct,同时被定义成 task_t。 Task_struct 有以下重要成员: State-进程状态。 Thread_info-进程的基本信息。mm-指向内存区描述符的指针。Tty-与进程相关的 tty Fs-当前目录 Files-指向文件描述符的指针。Signal:进程信号描述符的指针。 进程状态 进程的 state 字段描述了进程当前所处的状态。它由一组标志组成,每个标志描述一种可能的进程状态。当前版本的 linux 版本中,这些状态是互斥的。以下是可能的状态: /** * 进程要么在 CPU 上执行,要么准备执行。 */ #define TASK_RUNNING 0 /** * 可中断的等待状态。 */ #define TASK_INTERRUPTIBLE1 /** 不可中断的等待状态。 这种情况很少,但是有时也有用:比如进程打开一个设备文件,其相应的驱动程序在探测硬件设备时,就是这种状态。 在探测完成前,设备驱动程序如果被中断,那么硬件设备的状态可能会处于不可预知状态。 */ #define TASK_UNINTERRUPTIBLE 2 /** 暂停状态。当收到 SIGSTOP,SIGTSTP,SIGTTIN或者 SIGTTOU 信号后, 会进入此状态。 */ #define TASK_STOPPED 4 /** 被跟踪状态。当进程被另外一个进程监控时,任何信号都可以把这个置 于该 */ #define TASK_TRACED 8 /** 僵死状态。进程的执行被终止,但是,父进程还没有调用完 wait4 和waitpid 来返回有关 死亡进程的信息。在此时,内核不能释放相关数据结构,因为父进程可能还需要它。 */ #define EXIT_ZOMBIE 16 /** 在父进程调用 wait4 后,删除前,为避免其他进程在同一进程上也执行 wait4 调用 * 将其状态由 EXIT_ZOMBIE 转为 EXIT_DEAD,即僵死撤销状态。 */ #define EXIT_DEAD 32 State 状态可以通过一个简单的赋值

文档评论(0)

tianya189 + 关注
官方认证
文档贡献者

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

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档