进程相关概念

原创 2015年11月19日 19:18:17

1、进程与程序

1、概念

程序(program)是包含了一系列信息的文件,而进程(process)是程序的一个实例。就像类与对象一样。程序中包含的信息描述了如何在运行时创建一个进程,内容有:
  1. 二进制格式标识:每个程序文件都有用来描述可执行文件格式的原信息,内核用这些信息来解释文件中的其他信息;
  2. 机器语言指令:对程序算法进行编码;
  3. 程序入口地址:标识程序开始执行时的起始指令位置;
  4. 数据:初始变量和字面常量等;
  5. 符号表及重定位表:描述程序中函数和变量的位置和名称;
  6. 共享库和动态链接信息;
  7. 其他信息:用来描述如何创建进程;
一个程序可以用来创建多个进程,就像可以对一个类可以实例化多个对象一样。而进程是由内核定义的抽象的实体,由用户内存空间和一系列内核数据结构组成。其中,用户内存空间包含了程序代码及代码使用的变量,而内核数据结构用来维护进程的状态信息。记录在内核数据结构中的信息包含许多与进程相关的标志号、虚拟内存表、打开文件的描述符表、信号传递及处理的有关信息、进程资源使用及限制、当前工作目录和大量的其他信息。

2、进程号

每个进程都有一个正数表示的进程号(PID),用来唯一标识进程。进程号可以作为各种系统调用的参数和返回值。如kill()和getpid()等。
系统调用getpid()返回调用进程的进程号,定义在<unistd.h>库中,原型如下:
pid_t getpid(void);
返回类型是pid_t,用来存储进程号。
每个进程都有一个创建自己的父进程,所有进程的始祖是init进程,因此,所有的进程构成了一棵以init进程为根的进程树。系统调用getppid()可以返回父进程的进程号。init进程号是1,调用getppid()也返回1。

2、进程内存


上图展示了进程内存的分布,可以看出内存是分为一段一段的,每一段称为“段(segment)”。一个进程内存有多个段:
  1. 文本段:包含程序机器语言指令,也叫代码段。文本段只能读不能写,这是为了防止错误指针修改代码内容。一个程序可以被用来创建多个进程,因此可以将文本段设为共享;
  2. 初始化数据段:包含显示初始化的全局变量和静态变量。当程序加载到内存时,从可执行文件中读取这些变量的值;
  3. 未初始化代码段:包含了未进行初始化的全局变量和静态变量。与初始化代码段分开的原因是,程序存储时不需要为未初始化的变量分配空间;
  4. 栈:由栈帧组成,系统会为每一个函数分配一个栈帧,用来存储局部变量、传递参数与返回结果等;
  5. 堆:是可在运行时动态进行内存分配的一块区域。
上图中标识argv和environ的地方用来存储命令行参数和环境变量。

3、虚拟内存

虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都使用了虚拟内存。
虚拟内存的使用使得进程的虚拟地址空间和RAM物理地址空间隔离开,优点如下:
  1. 进程与进程、进程与内核相互隔离,所以一个进程不能修改另一个进程或内核的内存;
  2. 内存中可以容纳更多的进程,提高了CPU的使用率;
  3. 两个或更多的进程可以共享内存;
  4. 便于实现内存保护机制;
  5. 程序的编写与编译无需关注程序在RAM中的物理地址;
  6. 程序中可以很小的一部分驻留在内存中,这样加载和运行速度变快。同时,一个程序需要的内存也可以超过实际大小。

4、命令行参数

C语言中都有个main函数作为程序的入口,main函数有两个参数,int型的argc和char ** 型的argv,第一个用来存储命令行参数的个数,第二个用来存储命令行参数,每个参数是以null结尾的字符串。其中,第一个参数,即argv[0],通常是程序的名称。argv中的指针链表以NULL指针结尾。
下图展示了一个命令行参数的例子:

注意,命令行参数的局限之一就是只能被main函数使用。

5、环境列表

每一个进程都有与其相关的称之为环境列表的字符串数组,简称环境。每个字符串都以名称=值(name=value)的形式定义,可存储任何信息。我们将列表中的名称称为环境变量。
进程创建时,会继承父进程的环境副本,之后的操作互不影响彼此的环境。
下图是环境列表的数据结构,可以看到,环境列表和命令行参数很像:

在C语言中,可以使用全局变量char **environ来访问环境列表。如下面的程序打印环境变量:
#include <stdio.h>
extern char **environ;
int main(int argc,char *argv[])
{
	char **ep;
	for(ep=environ;*ep!=NULL;ep++)
		puts(*ep);
	return 0;
}
结果如下:


版权声明:

相关文章推荐

linux设备驱动归纳总结(四):1.进程管理的相关概念

转自:http://blog.chinaunix.net/uid-25014876-id-62725.html linux设备驱动归纳总结(四):1.进程管理的相关概念 xxxxxxxxxxx...

线程,进程,线程同步,线程异步,相关概念学习——》总结

新年刚开工,有小伙伴准备面试,问我线程方面的东西,自己对于概念的东西也是很少去理解和总结,不觉中,学习软件这行已近三年,做Android开发已经一年了。懂的却是十分浅的东西,既然已经过去的时光,就不必...

linux进程相关概念

1.基本概念 进程定义:进程是一个具有独立功能的程序的一次运行活动。 进程特点:动态型、并发性、独立性、异步性 进程三态: 进程ID(PID):标识进程的唯一数字 父进程ID:PPID 启动进程的...

进程及其相关概念

进程、轻量级进程和线程 一、进程 1.在Linux源代码中,常把进程称为任务(task)或线程(thread); 从内核观点看进程目的就是担当分配系统资源(CPU时间、内存等)的实...

《linux内核设计与实现》第三章读书笔记--进程相关概念

博主在看cpu和内存调优的时候遇到一些底层的内核概念不甚了解,所以阅读了《linux内核设计与实现》一书,并对内核相关概念做个简练的总结,以便大家在对系统调优时有更好地理解。内容包括进程与线程概念、进...

Android IPC机制之IPC概念、Android 多进程和相关基础知识

1.IPC 的基本概念1.1 IPC的使用场景IPC 即 Inter-Process Communication 进程间通信,IPC用于多进程,而Android的多进程情况一般有:1.一个应用需要在多...

Linux设备驱动二 (2)进程相关的概念

一、什么是进程 简单的说,进程就是正在运行的程序,一个程序可以同时有多个进程。学过C语言都知道,程序运行时并不是只有代码,还包含其他的资源,如打开的文件,信号,全局变量等等。我在《操作系统原理...

多线程与多进程的相关概念

关于并发的很多书中都会提到进程、轻量级线程与线程这几个概念,有时候会对这些概念有些模糊,现在总结一下。 进程 《深入理解Linux内核》 进程,通常定义是程序执行时的一个实例。用简单的 “hello...

linux设备驱动归纳总结(四):2.进程调度的相关概念

转自:http://blog.chinaunix.net/uid-25014876-id-65555.html linux设备驱动归纳总结(四):2.进程调度的相关概念 xxxxxxxxxxx...

Linux C创建守护进程(daemon)及终端相关概念

引言         所谓守护进程(daemon),是不具备控制终端的,常常是在系统引导装入时启动,仅在系统关闭时才终止,输出的报告信息一般在日志文件。       ...
  • Jammg
  • Jammg
  • 2016-04-06 12:13
  • 723
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)