浅谈进程基本概念

2019-07-14 10:03发布

进程概念(PCB[task_struct])

基本概念:程序执行的一个实例,正在运行的程序
基于内核:但当分配系统资源(CPU时间、内存)的实体
基于PCB(Linux下称为task_struct):task_struct是一种数据结构,他被装载到RAM里并包含进程信息(信息如下)
1. 标示符:区别和其他进程的唯一标识符号
2. 状态:任务状态、退出代码、退出信号
3. 优先级:相对其他进程的优先级
4. 程序计数器:程序中即将被执行的下一条指令
5. 内存指针:包括程序代码和进程相关的数据指针,还有和其他进程共享内存的指针
6. 上下文数据:进程执行时处理器的寄存器中的数据
7. I/O状态信息:包括I/O显示的请求、分配给I/O的设备、被进程使用的文件列表
8. 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号

进程标识,进程间关系

  • 进程标识:进程ID,简称PID,是大多数操作系统内核用于唯一标识进程的数值
    1. PID的数值是非负整数
    2. 每个进程都有唯一的一个PID
    3. PID可以简单地表示为主进程表中的一个索引
    4. 当某一进程终止后,其PID可以作为另一个进程的PID
    5. 调度进程的PID固定为0,他按一定原则把处理机分配给进程使用
    6. 初始化进程的PID固定为1,他是Linux系统中其他进程的祖先,是进程的最终控制者
    7. 每个进程都有六个重要的ID:进程ID,父进程ID,有效用户ID,有效组ID,实际用户ID,实际组ID
    获取各类ID的函数 #include #include void getpid(void)//返回值:进程ID void getppid(void)//返回值:父进程ID void getpid(void)//返回值:进程ID void getuid(void)//返回值:实际用户进程ID void geteuid(void)//返回值:有效用户进程ID void getgid(void)//返回值:实际组进程ID void getegid(void)//返回值:有效组进程ID

进程状态

进程在运行中的几种运行状态
  • 创建状态:进程在创建是需要需要申请一个新的PCB,并将控制和管理进程的信息放在PCB里面,从而完成资源分配。如果创建工作无法完成(比如资源无法满足)就无法被调度运行。
  • 就绪状态:进程已经准备好了,已经分配到所需资源,只要分配到PCB上就能立即运行。(此状态允许父进程终止子进程)
  • 执行状态:处于就绪状态的进程被调度后就进入到执行状态
  • 阻塞状态:正在执行的程序由于受到某些事件(IO请求/申请缓存区失败)的影响而暂时无法运行,进程受到阻塞。在满足条件时进程进入就绪状态等待被调度。(此状态允许父进程终止子进程)
  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行
这里写图片描述
Linux下的进程状态(R、S、D、T、Z、X)
  • R(可执行)状态:并比意味着进程一定在运行中,它表明要么在运行中,要么在运行队列里面
  • S(睡眠)状态:意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠)
  • D(不可中断睡眠)状态:在这个状态的进程通常会等待IO结束
  • T(暂停)状态:可以发送信号SIGSTOP给进程从而来停止进程,这个进程可以通过SIGCONT信号让进程继续运行
  • Z(僵尸)状态:该进程在其父进程没有读取到子进程退出返回的代码时就退出了,该进程就进入了僵尸状态。僵尸状态会以终止的状态保持在进程表中,并一直等待父进程读取退出状态码
  • X(死亡/退出)状态:这个状态只是一个返回状态,在任务列表中看不到这个状态

进程优先级

  • CPU资源分配的先后顺序,就是进程的优先权
  • 优先权高的进程先执行,配置优先权对多任务的Linux环境很有用,可以提高系统的性能
  • 还可以把某个进程指定到某个CPU上,可以提高系统整体的性能