进程基础知识

进程基础知识

     刚开始接触编程的程序员往往不能清楚的说明程序和进程的区别。简单来说,进程是操作系统中正在运行的任务,而程序是指存储在磁盘上包含有可执行机器代码和指令的文件。程序员也常将源代码成为程序。

     进程是运行中的程序。LINUX是支持多个进程同时运行的操作系统。每个进程都运行在各自的虚拟地址空间中,因此某个进程崩溃不会影响其他进程的运行。进程间的通信(IPC)要通过系统内核(系统调用)来实现。

1.1 进程分类

1.1.1 交互进程

    交互进程是由Shell启动的进程,其既可以在前台运行,也可以运行在后台。交互进程在执行过程中,要求与用户进行交互操作。简单来说,就是用户需要给出某些参数或信息进程才能继续运行。

1.1.2 批处理进程

    一个进程序列。该进程负责按顺序启动其他的进程。

1.1.3 守护进程

    守护进程是执行特定功能或者执行系统相关任务的后台进程。守护进程只是一个特殊的进程,不是内核的组成部分。许多守护进程在系统启动时启动,知道系统关闭时停止运行。而某些守护进程只是在需要的时候才启动。

1.2 虚拟内存

      在安装LINUX系统时,除了建立必要的ext3分区外,还需要建立一个交换分区,该分区实际上被用作内存的扩展。系统将暂时不会用到的数据写到交换分区中,在需要的时候再将磁盘中的内容读回内存。这样就可以有效解决内存空间不足的问题。这一内存扩展机制被称为虚拟内存。 

     虚拟内存的其他用途:巨大的寻址空间,共享虚拟内存,进程保护。

     共享虚拟内存:虚拟内存机制保证了每个进程都运行在自己的虚拟地址空间中,但是在某些情况下,不同进程之间还需要进行数据共享。虚拟内存还提供了共享内存功能。共享内存是进程间通信IPC的一种方法。通过共享内存,可以实现进程间的数据交换。

     进程保护:进程运行在自己的虚拟地址空间,这样保证了进程在运行时的稳定性。

     LINUX下查看虚拟内存的使用,使用vmstat命令。

 

1.3 进程内存

     所有的进程运行在自己的虚拟地址空间中,而每个进程都有自己的内存地址。

1.3.1 进程内存结构

    每个进程都运行在自己私有的内存空间中(即虚拟地址空间)。对于一个进程而言,都会涉及三种不同的数据段,分别是代码段、数据段和堆栈段。

1.3.1.1 代码段

    用于保存可执行文件的操作指令和程序定义的常量。

1.3.1.2 数据段

    其位置紧接着代码段,分为初始化数据段和未初始化数据段。初始化数据段用于存放已经初始化的全局变量和程序的静态变量,而未初始化数据段用于保存未初始化的全局变量。

1.3.1.3 堆栈段

    堆栈段用于存放进程中动态分配的内存地址。C语言中使用malloc函数,在C++和JAVA中使用new函数分配的内存空间,在堆上分配。栈用于保存程序中创建的临时变量。函数调用时,传递的参数也将保存在栈中。

猜你喜欢

转载自blog.csdn.net/u013276277/article/details/78769488