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

嵌入式操作系统chap5进程.pptVIP

  1. 1、本文档共122页,可阅读全部内容。
  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文档。上传文档
查看更多
Task_struct结构的描述: 进程标识 进程状态(State) 进程调度信息和策略 标识号(Identifiers) 进程通信有关的信息(IPC) 进程链接信息(Links) 时间和定时器信息(Times and Timers) 文件系统信息(Files System) 处理器相关的上下文信息 在内核源代码中的定义如下: /usr/src/linux/fs/proc/array.c static const char *task_state_array[] = { ??????? R (running),????????? /*? 0 */ ??????? S (sleeping),???????? /*? 1 */ ??????? D (disk sleep),?????? /*? 2 */ ??????? T (stopped),????????? /*? 4 */ ??????? T (tracing stop),???? /*? 8 */ ??????? Z (zombie),?????????? /* 16 */ ??????? X (dead)????????????? /* 32 */ }; ?内核 2.6.26 中的新状态定义 #define TASK_KILLABLE #define TASK_STOPPED #define TASK_TRACED (1)分析不可被中断的睡眠进程: 终端1) [root@localhost state]# vi testu.c #include unistd.h void main() {? if (!vfork()) sleep(100);}? [root@localhost state]# gcc testu.c -o testu ./testu 终端2) [root@localhost state]# ps aux|grep testu root 24773 0.0 0.0 1336 224 pts/2 D 15:34 0:00 ./testu root 24840 0.0 0.2 4816 640 pts/3 S 15:36 0:00 grep testu (2)分析进程的可中断睡眠态与运行态 : 此时切换到终端1看pisqrt进程状态,此时为R状态: root????? 3792 99.9? 0.0? 1516? 268 pts/2??? R??? 02:40?? 0:01 ./pisqrt????? root????? 3801? 0.0? 0.0? 3700? 672 pts/1??? S??? 02:40?? 0:00 grep pisqrt root????? 3791? 1.0? 0.0? 1728? 564 pts/2??? S??? 02:40?? 0:00 strace ./pisqr 之后pisqrt进程进入S状态,因为执行了sleep(10)函数,10秒之后pisqrt再次进入R状态,最终退出。 为了有效的管理系统中的每个进程,需要采用一种高效的数据结构把系统内全部进程组织起来。在需要进程的信息时,可以从该结构中查找到相关进程。Linux的所有进程组成一个双向链表。task_struct中的struct task_struct *next_task, *prev_task; 每个进程只有一个父进程,但可以有0个、1个、2个或多个子进程。 fork函数是分裂创建进程的,这也就是fork(分叉)命名的原因吧。如何理解这个“分裂”呢, 四、Linux进程相关的系统调用 只有execle和execve使用了char *envp[]传递环境变量,其它的4个函数都没有这个参数,这并不意味着它们不传递环境变量,这4个函数将把默认的环境变量不做任何修改地传给被执行的应用程序。而execle和execve会用指定的环境变量去替代默认值。 还有2个以p结尾的函数execlp和execvp,它们和execl与execv的差别很小,除execlp和 execvp之外的4个函数都要求,它们的第1个参数path必须是一个完整的路径,如“/bin/ls”;而execlp和execvp的第1个参数 file可以仅为文件名,如 ls,这两个函数可以自动到环境变量PATH制定的目录里去寻找。 以上函数的本质都是调用在/kernel/process.c文件中实现的系统调用sys_execve来执行一个可执行文件。 系统调用execve的入口sys_execve() 。 waitpid(等待子进程中断或结束) 表头文件? ? ? #includesys/types.h

文档评论(0)

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

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

1亿VIP精品文档

相关文档