第7章 Linux编程环境之进程控的制与进程间通信.ppt

第7章 Linux编程环境之进程控的制与进程间通信.ppt

  1. 1、本文档共111页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 Linux编程环境之进程控的制与进程间通信

第7章 进程控制与进程间通信 7.1 进程控制 进程与程序 程序 指令和数据的集合 存放在磁盘上的一个普通文件里 文件的i节点中标为可执行,内容符合系统要求 进程 包括指令段、用户数据段和系统数据段的执行环境 进程和程序的关系 程序用于初始化进程的指令段和用户数据段,初始化后,进程和初始化它的程序之间无联系 进程运行时磁盘上的程序文件不可修改/删除 同时运行的多个进程可由同一程序初始化得到,进程之间没什么联系。内核通过安排它们共享指令段以节省内存,但这种安排对用户来说是透明的 进程的组成部分(1) 四部分:指令段,数据段,堆栈段和系统数据 指令段(Text) 程序的CPU指令代码,包括:主程序和子程序编译后的CPU指令代码,以及调用的库函数代码 指令段的大小固定不变,只读 用户数据段 全局变量,静态(static)变量,字符串常数 允许数据段增长和缩小,实现内存的动态分配 系统调用sbrk()允许编程调整数据段的大小 内存管理库函数,如:malloc(),free() 进程的组成部分(2) 用户堆栈段 程序执行所需要的堆栈空间,实现函数的调用 用于保存子程序返回地址 在函数和被调函数之间传递参数 函数体内部定义的变量(静态变量除外) main函数得到的命令行参数以及环境参数 存放在堆栈的最底部 main函数运行之前,这些部分就已经被系统初始化 堆栈段的动态增长与增长限制 系统数据段 上述三部分在进程私有的独立的逻辑地址空间内 系统数据段是内核内的数据,每个进程对应一套 包括页表和进程控制块PCB 进程逻辑地址空间的布局 进程的系统数据 在UNIX内核中,含有进程的属性,包括: 页表 进程状态,优先级信息 核心堆栈 当前目录(记录了当前目录的i-节点),根目录 打开的文件描述符表 umask值 进程PID,PPID 进程主的实际UID/GID,有效UID/GID 进程组组号 user结构和proc结构 进程PCB被分为user结构和proc结构两部分 user结构(约5000字节),sys/user.h 进程运行时才需要的数据在user结构 核心态堆栈占用了较多空间 proc结构(约300字节),sys/proc.h 进程不运行时也需要的管理信息存于proc结构 用户程序不能直接存取和修改进程的系统数据 系统调用可用来访问或修改这些属性 chdir, umask,open, close setpgrp, getpid, getppid 进程的基本状态 基本状态 进程创建之后,主要有运行状态和睡眠状态(也叫阻塞状态,等待状态,挂起状态,等等) 内核总是在分时处理运行状态的进程,而不顾那些处于睡眠状态的进程 睡眠状态的进程,在条件满足后转化为运行状态 进程在睡眠时,不占用CPU时间 注意:在编程时,程序不要处于忙等待状态 进程的调度 调度优先级 内核将可运行进程按优先级调度,高优先级进程优先 进程的优先级总在不停地发生变化 处于睡眠状态的进程一旦被叫醒后,被赋以高优先级,以保证人机会话操作和其它外设的响应速度 用户程序用nice()系统调用有限地调整进程的优先级 time:进程执行的时间 进程执行时间包括 睡眠时间,CPU时间(用户时间和系统时间) 外部命令/usr/bin/time B-shell和C-shell都有个内部命令time /usr/bin/time find /usr -name *.c -print Real 6.06 User 0.36 System 2.13 C-shell: time find /usr -name *.h -print 0.4u 6.2s 0:10 61% 4+28k 0+0io 0pf+0w 与CPU时间有关的命令vmstat $ vmstat 10 procs memory swap io system cpu r b w swpd free buff cache si so bi bo in cs us sy id 0 0 0 0 55916 6128 38156 0 0 439 118 146 180 8 15 76 0 0 0 0 55252 6160 38160 0 0 0 32 112 54 26 1 73 系统调用times() 系统调用times() 当前进程CPU时间,已结束子进程占用过的CPU时间 clock_t times(struct tms *buf); struct tms { cloc

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档