zoukankan      html  css  js  c++  java
  • 进程与内存、进程状态

    进程的概念

      进程与程序不同,进程是运行中的程序,而程序是保存在硬盘上的可执行代码。

      程序转为进程的三个步骤:

      1. 内核将程序读入内存,为程序分配内存
      2. 内核为进程分配PID(进程标识符)和其他所需资源
      3. 内核为该进程保存PID以及其他状态信息,并把进程放入运行队列等待执行。当程序转化为进程后就可以被操作系统的调度程序调度执行了

      Linux下可通过ps、pstree查看当前系统中的进程。

    进程标识

      每个进程都是由每个进程ID(PID)唯一标识的,PID 存储在 PCB 中, PCB 是进程控制块,是进程最重要的组成部分。每个进程除了进程ID外还有其他标识,需要由相应函数获得。这些函数在头文件unistd.h中。

    进程与内存

      Linux一个进程由三部分组成,进程在内存中包含三个方面:

      1. 代码段。它存放程序中的代码,并可以被机器中运行同一程序的数个进程共享
      2. 堆栈段。它存放的是子程序(函数)的返回地址、子程序(函数)的参数、局部变量
      3. 数据段。它存放了全局变量,常量,以及动态数据分配的空间(比如malloc申请的空间)

          

      系统中同时运行多个相同的程序,它们的堆栈段和数据段不能是同一个,而代码段是同一个。

    进程的状态

      Linux进程的状态包含九个方面:

      1. 用户状态。进程在用户状态下进行的状态
      2. 内核状态。进程在内核状态下进行的状态
      3. 内存中就绪。进程没有执行,但是处于就绪状态,只要内核调度它,就可以执行。
      4. 内存中休眠。进程正处在休眠并在内存之中。并且没有被交换到swap设备(虚拟内存) 
      5. 就绪且换出。进程处于就绪状态,但是还必须要经过两个步骤(1.换入内存2.内核调度)才可以执行。
      6. 睡眠且换出。进程处于睡眠状态,且内存还没换入。
      7. 被抢先。进程在从内核状态返回用户状态的时候,内存抢先于它,做了上下文切换,调度了另一个进程,原进程就处于被抢先状态。
      8. 创建状态。进程刚被创建,但既不是就绪状态,也不是休眠状态,这个状态是除了进程0外的最初状态。
      9. 僵死状态。进程调用exit结束,进程不再存在,但是在进程表上还有记录,该记录可由父进程收集。

      举例说明Linux的进程转换:

      1. 进程被父进程通过系统调用 fork 创建,此时进程处于创建状态;
      2. 当fork为进程配置好内核数据结构和私有数据结构后,子进程处于就绪状态;(可能的就绪位置:1.内存  2.swap设备)
      3. 当在内存就绪时,进程可被内核调度程序调度到cpu中执行
      4. 内核调度该进程的时候,进程进入内核状态。随后由内核状态返回用户状态而执行程序。在用户状态持续一段时间后,又会被内核调度程序调度而进入内核状态,由此转入就绪状态。有时进程在用户状态时,也会因为系统调用而进入内核状态,服务完毕,又从内核状态返回用户状态。
      5. 内核状态返回向用户状态返回时可能被抢占,这是由于有优先级更高的进程需要使用cpu而不能等到下一次调度时间,从而造成抢占
      6. 进程调用exit进入僵死状态,最后结束
    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    《DSP using MATLAB》示例Example4.14
    《DSP using MATLAB》示例Example4.13
    《DSP using MATLAB》示例Example4.12
    《DSP using MATLAB》示例Example4.11
    《DSP using MATLAB》示例Example4.10
    《DSP using MATLAB》示例Example4.9
    (转)【D3D11游戏编程】学习笔记七:3D渲染管线
    (转)【D3D11游戏编程】学习笔记八:绘图基础-旋转的彩色立方体
    (转)【D3D11游戏编程】学习笔记六:定时器的实现
    (转)【D3D11游戏编程】学习笔记四:准备工作
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/7603263.html
Copyright © 2011-2022 走看看