Linux之进程基本概念

目录

1.进程的基本概念

        进程特性

        Linux系统包括进程类型

2.Linux下进程结构

        进程状态(state)

        进程标识符(pid)

3. 进程的创建、执行和终止

        进程的创建和执行

        进程的终止

4.进程的内存结构

1.进程的基本概念

        进程是指一个具有独立功能的程序在某个数据集合上的一次动态执行过程,是进行资源分配和调度的基本单元。

        进程特性

        (1)并发性:是指系统中多个进程可以同时并发执行,相互之间不受干扰。
        (2)动态性:是指进程都有完整的生命同期,而且在进程的生命周期內,进程的状态是不断变化的,另外进程具有动态的地址空间(包括代码、数据和进程控制块等)。
        (3)交互性:是指进程在执行过程中可能会与其他进程发生直找和问接的交互操作,如进程同步和进程互斥等,需要为此添加一定的进程处理机制。
        (4)独立性:是指进程是一个相对完整的资源分配和调度的基木单位,各个进程的地址空间是相互独立的,只有采用某些特定的通信机制才能实现进程之间的通信。
        (5)异步性:是指每个进程都按照各自独立的、不可预知的速度向前执行。
        进程和程序是有本质区别的:程序是静态的一段代码,是一些保存在非易失性存储器的指令
的有序集合,没有任何执行的概念;而进程是一个动态的概念,它是程序执行的过程,包括动态创建、调度和消亡的整个过程,它是程序执行和资源管理的最小单位。

        Linux系统包括进程类型

        (1)交互式进程:这类进程经常与用户进行交互,因此要花很多时间等待用户的交互操作(键盘和鼠标操作等)。当接收到用户的交互操作之后,这类进程应该很快被运行,而且响应时间的变化也应该要小,否则用户觉得系统反应迟钝或者不太稳定。典型的交互式进程有 shell 命令进程、文本编辑器和图形应用程序运行等.
        (2)批处理进程:这类进程不必与用户进行交互,因此经常在后台运行。因为这类进程通育常不必很快响应,因此往往受到调度器的怠慢。典型的批处理进程是编译器的编译操作、数据库搜索引擎等。
        (3)实时进程:这类进程通常对调度响应时间有很高的要求,一般不会被低优先级的进程阻塞。它们不仅要求很短的响应时间,而且更重要的是响应时间的变化应该很小。典型的实施程序
有视频和音频应用程序、实时数据采集系统程序等。

2.Linux下进程结构

        进程状态(state)

        1)运行态(TASK_RUNNING):R

        指正在被CPU运行或者就绪的状态。这样的进程被成为runnning进程。

        2)睡眠态(等待态):

        可中断睡眠态(TASK_INTERRUPTIBLE)S:处于等待状态中的进程,一旦被该进程等待的资源被释放,那么该进程就会进入运行状态。

        不可中断睡眠态(TASK_UNINTERRUPTIBLE)D:该状态的进程只能用wake_up()函数唤醒。

        3)暂停态(TASK_STOPPED):T

        当进程收到信号SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU时就会进入暂停状态。可向其发送SIGCONT信号让进程转换到可运行状态。

        4)死亡态:进程结束 X

        5)僵尸态:Z 当进程已经终止运行,但还占用系统资源,要避免僵尸态的产生

        进程标识符(pid)

        linux内核通过唯一的进程标识符PID来识别每个进程。

        进程转换关系图:

 

      在Linux中获得当前进程的进程号(PID)和父进程号(PPID)的系统调用函数分别是getpid()getppid()  

3. 进程的创建、执行和终止

        进程的创建和执行

        许多操作系统提供的是产生进程的机制,也就是首先在新的地址空间里创建进程、读入可执
行文件,最后再开始执行。Linux 中进程的创建很特别,它把上达步骤分解到两个单独的函数中执行:fork()和exec函数族。首先,fork()通过复制当前进程创建一个子进程,子进程与父进程的区别仅仅在于不同的 PID、PPID 和某些资源及统计量。exec函数族负责读取可执行文件并将其载入地址空间开始运行。
        要注意的是,Linux 中的fork()使用的是写时复制页的技术,也就是内核在创建进程时,其资源并没有被复制过来,资源的赋值只有在需要写入数据时才发生,在此之前只是以只读的方式共享数据。写时复制技术可以使 Linux 拥有快速执行的能力,因此这个优化是非常重要的。

        进程的终止

         进程终结也需要做很多繁琐的收尾工作,系统必须保证进程占用的资源回收,并通知父进程。Linux 首先把终止的进程设置为僵尸状态时,进程无法投入运行,它的存在只为父进程提供信息,申请死亡。父进程得到信息后,开始调用wait函数族,最终杀死子进程,子进程占用的所有资源被全部释放。

4.进程的内存结构

        Linux操作系统采用虚拟内存管理技术,使得每个进程都有各自互不干扰的进程地址空间。该地址空间是大小为4GB的线性虚拟空间,用户看到和接触到的是虚拟地址,无法看到实际的物理内存地址。利用这种虚拟地址不但能起到保护操作系统的效果( 用户不能直接访问物理内存),更重要的是,用户程序可以使用比实际物理内存更大的地址空间。

         用户空间包括:

        (1)只读段:包含程序代码(.init 和.text)和只读数据(.rodata)。
        (2)数据段:存放全局变量和静态变量。其中可读可写数据段(.data)存放已初始化的全局变量和静态变量,BSS 数据段(.bss)存放未初始化的全局变量和静态变量。
        (3)栈:由系统自动分配释放,存放两数的参数值、局部变量的值、返回地址等。
        (4)堆栈:存放动态分配的数据,一般由程序员动态分配和释放,若程序员不释放,程序结束时可能由操作系统回收。
        (5)共享库的内存映射区域:这是 Linux 动态链接器和其他共享库代码的映射区域。

进程的虚拟内存地址空间:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值