linux 进程管理和内存分配

  进程正在运行中的程序

  内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等

  Process:运行中的程序的一个副本,是被载入内存的一个指令集合
    进程 ID(Process ID,PID)号码被用来标记各个进程
    通常从执行进程的用户来继承,存在生命周期

  task struct 任务结构表:Linux 内核存储进程信息的数据结构格式

  task list 任务列表:多个任务的 task struct 组成的链表

  进程创建:
    都由其父进程创建,父好关系,CoW(写时复制,不发生改变时父子都指向同一文件;发生改变时,则复制)
    init:第一个进程(centos6:init,centos7:systemd)
    守护进程:随着计算机的开启、关闭而随之开启、关闭。

2、进程,线程和协程:

  

linux 进程管理和内存分配

  注:一个进程里至少有一个线程;线程之间由操作系统进行调度,包括进程中使用的资源也由操作系统进行调度;协程相当于线程中的语句块,由线程控制。

3、Page Frame:页框,用存储页面数据,存储 Page,每个进程要使用的分配空间
  虚拟内存(线性内存):进程运行的时候以为自己拥有了全部的内存空间
  物理地址空间和线性地址空间:
    MMU:负责转换线性和物理地址(虚拟内存和物理内存)
    TLB:翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
    LRU:近期最少使用算法,释放内存

4、用户空间和内核空间:

  

linux 进程管理和内存分配

5、进程之间基本状态和转换:

  

linux 进程管理和内存分配

  创建状态:进程在创建时需要申请一个空白 PCB(进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。
  就绪状态:进程已准备好,已分配到所需资源,只要分配到 CPU 就能够立即运行。
  执行状态:进程处于就绪状态被调度后,进程进入执行状态。
  阻塞状态:正在执行的进程由于某些事件(I/O 请求,申请缓存区失败)而暂时无法运行,进程受到阻塞,在满足请求时进入就绪状态等待系统调用。
  终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行。

  状态之间转换六种情况:
  运行 → 就绪:1,主要是进程占用 CPU 的时间过长,而系统分配给该进程占用 CPU 的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出 CPU,该进程便由执行状态转变为就绪状态。
  就绪 → 运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配 CPU。
  运行 → 阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态如发生了 I/O 请求。
  阻塞 → 就绪:进程所等待的事件已经发生,就进入就绪队列。
  以下两种状态是不可能发生的:
  阻塞 → 运行:即使给阻塞进程分配 CPU,也无法执行,操作系统在进行调度时,不会从阻塞队列进行挑选,而是从就绪队列中选取。
  就绪 → 阻塞:就绪态根本就没有执行,谈不上进入阻塞态。

6、IPC 进程间通信:
  同一主机:
    pipe 管道,一个写入管道文件,一个读(单向)
    socket 套接字文件,进程间交换数据(双工工作方式)
    signal 信号
    shm shared memory,共享内存
    semaphore 信号量,一种计数器,分配资源
  不同主机:
    socket ip 和端口号
    RPC 远程过程调用
    MQ 消息队列,如:Kafka , RabbitMQ,ActiveMQ

7、进程优先级

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjpzd.html