Linux的进程的基本概念

1、什么是程序,什么是进程,二者有什么区别?

程序只是一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体。而进程则不同,它是程序在某个数据集上的执行。进程是一个动态的实体,它有自己的生命周期。
进程是具有一定独立功能的程序关于一个数据集合的一次运行活动。通俗来说就是程序跑起来了,系统中就多了一个进程

2、如何查看系统中有哪些进程?

2.1、使用ps指令查看:在实际工作中,配合grep来查找程序中是否存在进程。
在这里插入图片描述
2.2、top指令,类似于window的任务管理器

3、什么是进程标识符?

每个进程都有一个非负整数表示的唯一ID,叫做pid,类似身份证如:
Pid=0:称为交换进程(swapper)
作用——进程调度
Pid=1:init进程
作用——系统初始化

编程调用getpid函数获取自身的进程标识符,getppid获取父进程的进程表示符

4、什么是父进程,什么是子进程。

进程A创建进程B,那么A叫做父进程,B叫做子进程,父子进程是相对的概念,理解为人类中的父子关系。

5、C程序的存储空间是如何分配?

可执行程序包括BSS段、数据段、代码段。

在类UNIX系统下可使用size命令查看可执行文件的段大小信息。如size a.out:

~/Desktop/MyC$ size a.out
text data bss dec hex filename
1672 600 8 2280 8e8 a.out

5.1、数据段存放已初始化的全局变量和静态变量,数据段属于静态内存分配。
5.2、BSS段(Block Started by Symbol)存放未初始化的全局变量和静态变量。
BSS段的数据是可读写的,链接器从可执行文件中得到BSS段的大小,然后申请得到这块内存空间,这块内存空间紧跟在数据段的后面。由此可知BSS段并不占用可执行文件的大小。在使用BSS段之前BSS段会自动初始化为0。所以,未初始的全局变量和静态变量在程序执行之前已经是0了。BSS段属于静态内存分配。

包含数据段和BSS段的整个区段通常称为数据区。

5.3、代码段:用来存放程序的代码内存空间。它的大小在程序运行前就已经确定了,并且该区域只能读不能写。在代码段中,也有可能包含了一些只读的常数变量,例如字符串常量等。

代码段和数据段在编译时已经分配了空间,而BSS段则在程序被调入内存后才分配的。因此BSS段(未进行初始化的数据)的内容并不存放在磁盘上的程序文件中。需要存放在程序文件中的只有代码段和数据段(存放已初始化的全局变量和静态变量)的内容。
程序编译后生成的目标文件至少含有这三个段,这三个段的大致结构图如下所示:

在这里插入图片描述
在这里插入图片描述

可执行程序在运行时会多出两个区域:栈区和堆区。
5.4、栈区:由操作系统自动分配和释放 ,存放函数的参数值,局部变量的值等。每当一个函数被调用时,该函数的返回类型和一些调用的信息也会被存放到栈中。然后这个被调用的函数再为它的自动变量和临时变量在栈上分配空间。每调用一个函数一个新的栈就会被使用。栈区是从高地址位向低地址位增长的,是一块连续的内存区域,最大容量是由系统预先定义好的,申请的栈空间超过这个界限时会提示溢出,用户能从栈中获取的空间较小。

小知识:
自动变量:什么是自动变量呢?自动变量就是指在函数内部定义使用的变量。只能在函数内部使用它。自动变量是局部变量,即它的作用区域是在定义它的函数内部。由于自动变量在定义它的函数的外部是不可见的,所以允许我们在这个函数外部或者其他的函数内部定义同名的变量。计算机在执行这个函数的时候,创建这个变量并为它分配内存,当函数执行完毕返回后,自动变量就会被销毁。为自动变量分配内存就是压栈,而函数返回时就退栈。
临时变量是指在未在程序开头部分声明的,待使用它时才声明类型的变量。常见的如函数中定义的变量,循环语句、条件语句中声明定义的变量。这些变量可与主程序中的变量同名,在其作用域里,主程序中的同名变量一般无法调用。并且这种变量有效存在时间是从变量声明开始到相应程序段(循环结构或函数体)结束。

5.5、堆区:用于动态分配内存,位于BSS和栈中间的地址区域。由程序员亲自用malloc()申请分配和用free()释放。堆是从低地址位向高地址位增长,采用链式存储结构。频繁的 malloc/free造成内存空间的不连续,产生碎片。当申请堆空间时库函数是按照一定的算法搜索可用的足够大的空间。因此堆的效率比栈要低的多。

最后提示一下:内存泄漏是指内存分配出去以后,你再也访问不到了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值