• 13-1 进程,系统性能和任务计划


    进程,系统性能和任务计划

    进程概念

    • 内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
    • Process: 运行中的程序的一个副本,是被载入内存的一个指令集合
      • 进程ID(Process ID,PID)号码被用来标记各个进程
      • UID、GID、和SELinux语境决定对文件系统的存取和访问权限
      • 通常从执行进程的用户来继承
      • 存在生命周期
    • 进程创建:
      • init:第一个进程(CentOS7软连接到systemd)
      • 进程:都由其父进程创建,fork(),父子关系,CoW

    进程控制块PCB

    • 内核把进程存放在叫做任务队列(task list)的双向循环链表中 * 链表中的每一项都是类型为task_struct,称为进程控制块(Processing Control Block),PCB中包含一个具体进程的所有信息
    • PCB包含信息:
      • 进程id、用户id和组id
      • 程序计数器
      • 进程的状态(有就绪、运行、阻塞)
      • 进程切换时需要保存和恢复的CPU寄存器的值
      • 描述虚拟地址空间的信息
      • 描述控制终端的信息
      • 当前工作目录
      • 文件描述符表,包含很多指向file结构体的指针
      • 进程可以使用的资源上限(ulimit –a命令可以查看)
      • 输入输出状态:配置进程使用I/O设备

    Task struct和Task list

    task

    进程相关概念

    • Page Frame: 页框,用存储页面数据,存储Page 4k
    • 物理地址空间和虚拟地址空间
    • MMU:Memory Management Unit 负责转换线性和物理地址
    • TLB:Translation Lookaside Buffer 翻译后备缓冲器
      • 用于保存虚拟地址和物理地址映射关系的缓存
    • LRU:Least Recently Used 近期最少使用算法,释放内存
    • 查看线程:cat /proc/PID/status |grep -i threads

    MMU

    程序在访问一个内存地址指向的内存时,CPU不是直接把这个地址送到内存总线上,而是被送到MMU(Memory Management Unit),然后把这个内存地址映射到实际的物理内存地址上.程序操作的地址称为虚拟内存地址
    MMU

    进程、线程和协程

    process

    用户和内核空间

    UserSpaceAndKernelSpace

    C代码和内存布局之间的对应关系

    c

    进程的基本状态和转换

    change

    进程的基本状态:

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

    状态之间转换六种情况:

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

    LRU算法

    内存调度算法之一:

    • 假设序列为 4 3 4 2 3 1 4 2物理块有3个,则
      LRU
    • 第1轮 4调入内存 4
    • 第2轮 3调入内存 3 4
    • 第3轮 4调入内存 4 3
    • 第4轮 2调入内存 2 4 3
    • 第5轮 3调入内存 3 2 4
    • 第6轮 1调入内存 1 3 2
    • 第7轮 4调入内存 4 1 3
    • 第8轮 2调入内存 2 4 1

    IPC进程间通信

    • IPC: Inter Process Communication
      • 同一主机:pipe 管道
        • socket 套接字文件
        • signal 信号
        • shm shared memory
        • semaphore 信号量,一种计数器
      • 不同主机:socket IP和端口号
        • RPC remote procedure call
        • MQ 消息队列,如:Kafka,RabbitMQ,ActiveMQ

    进程优先级

    pre

    CentOS优先级:
    centos

    • 进程优先级:
      • 系统优先级:数字越小,优先级越高
        • 0-139:各有140个运行队列和过期队列
      • 实时优先级: 99-0 值最大优先级最高
      • nice值:-20到19,对应系统优先级100-139
    • Big O:时间复杂度,用时和规模的关系
      • O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)

    进程状态

    • Linux内核:抢占式多任务
    • 进程类型:
      • 守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
      • 前台进程:跟终端相关,通过终端启动的进程
        • 注意:两者可相互转化
    • 进程状态:
      • 运行态:running
      • 就绪态:ready
      • 睡眠态:
        • 可中断:interruptable
        • 不可中断:uninterruptable
      • 停止态:stopped,暂停于内存,但不会被调度,除非手动启动
      • 僵死态:zombie,结束进程,父进程结束前,子进程不关闭
  • 相关阅读:
    设计模式笔记——策略模式(Strategy Pattern)
    C#基础笔记——集合和LINQ
    C#基础笔记——命名规范
    C#基础笔记——语言基础
    C#基础笔记——代码整洁
    C#基础笔记——序列化(Serialize)和反序列化(NonSerialize)
    C#基础笔记——资源管理
    C#基础笔记——协变(Covariance)和逆变(Contravariance)
    C#基础笔记——委托(Delegate)和事件(Event)
    C#基础笔记——泛型(Genericity)
  • 原文地址:https://www.cnblogs.com/kjalbert/p/11733259.html
Copyright © 2020-2023  润新知