linux进程管理

linux进程管理

概念

  • 资源分配的基本单位;
  • 调度的基本单位
  • 当程序在系统中运行时,形成一个进程
  • 组成:
    • text:代码
    • 用户数据段:进程处理的数据
    • 系统数据段:包括PCB
  • 进程状态
    • TASK_RUNNING
    • TASK_INTERRUPTIBLE
    • TASK_UNINTERRUPTIBLE
    • TASK_STOPPED
    • TASK_TRACED:被跟踪,一般调式时用到
    • EXIT_ZOMBIE:进程结束前的状态
  • EXIT_DEAD

task_struct

  • PCB的数据结构,进程存在的唯一标识
  • 进程创建时,就会建立一个task_struct,在专门存储task_struct的地方存放着。有最多进程数限制
  • 主要组成:
    • 进程标识号,pid;
    • 进程的虚拟内存信息:struct mm_struct* mm
    • 进程打开的文件:struct files_struct *files
    • 进程映像所在的文件系统:struct files_struct *files
  • 内核2.8后用thread_info替代了task_struct的位置,该结构内部有一个指向task_struct的指针

进程创建

  • 通过fork()创建
  • 子进程继承了父进程的资源(只读)
  • 写时拷贝
  • 子进程通过exec()执行真正的任务
  • 注意:
    • 父进程执行fork()返回的是子进程的pid
    • 子进程执行fork()返回的是0

linux内核线程

  • linux中线程也有自己的task_struct结果
  • 但其共享进程的资源
  • 内核线程:在内核态下创建,独立执行的一个内核函数

linux的进程调度

  • 抢占式,无论是内核态还是用户态都可以抢占

  • 分时技术:根据进程优先级去分配时间片

  • 时间片轮转:对于优先级相同的进程,使用时间片轮转的方法

  • linux有两种进程:普通进程(100149)和实时进程(099)

    • 实时进程优先级更高:有FIFO和RR两种策略
    • 普通进程只有时间片轮转算法