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

[理学]4_Linux 进程编程.ppt

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

Linux 进程编程 Linux Process programme 课程目标 进程的概念 进程的内存布局 Linux下进程的控制 创建新进程 进程间同步 僵尸进程 Exec执行进程 守护进程 进程的概念 通俗的讲,进程就是一个在运行的程序. 进程是一个具有独立功能的 程序 关于某个数据集合的一次可以并发执行的运行活动,是处于活动状态的计算机 程序 。 有一些特殊情况,多进程程序.一个程序的主进程,可能创建若干个子进程. 进程作为构成 系统 的基本细胞,不仅是 系统 内部独立运行的实体,而且是独立竞争资源的基本实体。 这里资源一般指CPU运行时间,内存,外部设备访问权 可执行文件 一般讲软件是一个包含可以执行代码的文件,或者说是一些规定格式的二进制文件. 存在计算机的文件系统里面.而进程是一个开始执行但是还没有结束的程序的实例. 存在系统的内存之中.就是可执行文件的具体实现.? 不同操作系统可执行程序的格式都不一样,如Linux下采用称为ELF的格式.而Windows采用称为PE的可执行格式.但总体上大体的结构类似.每一个程序都有一些固定段.而运行时进程操作系也是一样,大体上分为比较固定的几个段. Linux 查看进程的命令 ps 查看进程的标准状况 top 看进程的CPU占用率和内存使用情况 /proc/进程编号 这是一个虚拟目录,下面各个文件表示进程各种情息,可以用cat 查看 比如1号进程,可以用查看各种状态 cat /proc/1/status 进程内存分局 在长期计算机科学的发展当中,程序在内存分区已经形成固定的布局.无论Linux/Unix下的应用程序.还是Windows下的程序,甚至是在没有操作系统的下运行底层程序,如bootloader,以及ARM的单纯的C程序.它们都按大致固定的段来进行布局. 其它的开发语言,如Java之类也采用同样布局方式 保存时的分段 对于一个C程序而言,当一个程序还是一个可执行文件时.至少包含如下几个段 Text 段: 保存是机器代码 Data段 : 保存是已经初始化变量 BSS段(Block Storage Start).:保存是未初始化的变量 这里只保存变量所占用空间尺寸一个数值,并未在内存中开展所有数 清晰的知道不同类型的变量分布在哪一个段里,是一个C开发者必备知识之一 可执行程序段的分配原则 代码段(text segment):存放CPU执行的机器指令(machine instructions)。也就是存储你的程序代码编译后的机器代码,在内存中,这一段是只读的.所有可执行代码即C的语句和函数都会被编译到可执行段中. 初始化数据段/数据段(initialized data segment/data segment,包含静态初始化的数据,所以有初值的全局变量和static变量在data区。 未初始化数据段/bss段,,bss是英文Block Started by Symbol的简称,通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域,在程序载入时由内核清0,所有未初始化的全局变量,包括括静态或非静态的,均保存在这一个段. 因为没有初始化数据,,为了节约可执行文件空间,所以所有在BSS段里的程序只占一个标识符空间,和记录所占空间大小,其变量所占空间没有展开, 所有在BSS段里变量在装入时由操作系统统一清0 注意在可执行文件是不会有局域变量的空间的,因为他们要等于执行后在进程的空间动态在stack区创建. 分配实例 验证分配空间 在Linux下,可以用nm导出符号表来查看变量是否分配在哪一个段中 nm proc symbol.txt 运行后内存分区 当程序运行后.除了上述段会装入进程空间,还有两个新的区分配在进程空间中. 栈段(stack), 保存函数的局部变量和函数参数。是一种“后进先出”(Last In First Out,LIFO)的数据结构,这意味着最后放到栈上的数据,将会是第一个从栈上移走的数据。 对于哪些暂时存贮的信息,和不需要长时间保存的信息来说,LIFO这种数据结构非常理想。在调用函数或过程后,系统通常会清除栈上保存的局部变量、函数调用信息及其它的信息。栈另外一个重要的特征是,它的地址空间“向下减少”,即当栈上保存的数据越多,栈的地址就越低。栈(stack)的顶部在可读写的RAM区的最后。因为栈是有限度的.因此.无限递归之类调用会将栈空间用关. 堆段(heap):用于动态内存分配(dynamic memory allocation)。所有malloc的分配的内存空间都是从这一个区域分配出来.保存函数内部动态分配内存,是另外一种用来保存程序信息的数据结构,更准确的说是保存程序的动态变量。 堆是“先进先出”(First I

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档