Linux进程管理

  1. 什么是进程
    • 进程是在处理器中执行的实例,内核调度各类资源来满足进程的需求。
    • 运行在Linux操作系统的进程都被task_struct这个结构体管理,task_struct也被称为进程描述符。
  2. 进程的生命周期
    • 一个进程创建一个线程,创建进程的进程使用名为fork()的系统调用,fork()被调用的时候,会为新创建的子进程获得一个进程描述符,并且设置新的进程ID。
    • 由于共享同样的地址空间,写入新进程的数据会引发页错误的异常。此时,内核给子进程分配新的物理页。这个延迟的操作叫做Copy On Write。
    • 当程序执行完成,子进程使用exit()系统调用终止。exit()会释放进程的大部分数据结构,并且把这个终止的消息通知给父进程。这时候,子进程被称为zombie process(僵尸进程)。
  3. 线程
    • 线程是单个进程中生成的执行单元。多个线程在同一个进程中并发运行。共享内存,地址空间,打开文件等。
    • 从性能的角度看,创建线程比创建进程更加低消耗。
  4. 进程优先级和nice级别
    • 进程优先级由动态优先级和静态优先级决定,它是决定进程在CPU中执行顺序的数字。优先级越高的进程被处理器执行的机会越大。
    • Linux支持的nice级别从19(最低优先级)到-20(最高优先级),默认只是0。只有root身份的用户才能把进程的nice级别调整为负数(让其具备较高优先级)。
  5. 切换上下文
    • 在进程执行过程中,进程的信息存放在处理器的寄存器和缓存中。这部分执行中进程存放在寄存器中的数据就叫做context。进程切换就叫做上下文切换(context switching)。
  6. 中断处理
    • 中断处理是最高优先级别的任务之一。中断通常由I/O设备产生。
    • Linux中有两类中断,硬中断是由设备产生的需要做出响应的中断,软中断用于任务处理。
  7. 进程状态
    • TASK_RUNNING:进程在CPU执行或者在运行队列中等待运行
    • TASK_STOPPED:进程处于挂起状态
    • TASK_INTERRUPTIBLE:进程挂起并且等待一个特定条件
    • TASK_UNINTERRUPTIBLE:常表示进程等待磁盘I/O操作
    • TASK_ZOMBIE:进程等待父进程收到通知并释放所有的数据结构
    • 僵尸进程:进程收到信号终止时,通常有一些时间来完成所有的任务,这个进程叫做僵尸
  8. 进程内存段
    进程内存区域包含:
    • 文本:存储可执行代码的区域
    • 数据:数据段由如下三个区域构成
    • Data:存储初始化数据,比如静态变量
    • BSS:存储初始化0数据,数据初始化为0
    • Heap(堆):根据需要使用malloc()分配动态内存。堆向高地址空间增长。

    • 该区域存储局部变量、函数参数和函数的返回地址。栈向低地址空间增长。
  9. Linux的CPU调度
    • Linux内核使用O(1)而不是O(n)来实现CPU调度。O(1)就是静态算法,意味着处理器选择和调用进程开始执行的时间是一个常数。
posted on 2018-03-08 16:10  magicianyin  阅读(155)  评论(0编辑  收藏  举报