进程管理

    1526
    最后修改于

    调度单位 进程 / 线程#

    进程状态
    image.png
    进程由 PCB,程序段,数据段组成
    进程控制:创建、终止、阻塞 / 唤醒
    进程通信:
    共享内存,如全局变量,环境变量
    消息传递,操作系统提供的进程通信机制
    管道通信,Linux 中管道是单向的。
    多线程
    调度方面,在适配多线程的操作系统中,是基本调度单位
    资源方面,分配给进程,而不是线程
    多个线程共享同一个地址空间,不同线程不共享地址空间
    开销较小
    线程具有 执行、就绪、阻塞三种状态,由 TCB 表示
    实现上分为内核级线程(操作系统支持的线程),用户级线程(如 Go routine)多线程模型
    image.png

    CPU 调度逻辑#

    三层调度:高级调度(作业),从外存中取出作业,建立起相应的 PCB,获得进一步调度的机会(多道批处理中配备,但是其他系统通常没有)中级调度(内存),将暂时不能运行的进程调度到外存中,暂时保存。低级调度(进程),CPU 分配给对应进程,进程不同状态的切换
    关系:作业调度创建进程,送入就绪队列,进程调度从中取出执行,中级调度将不能执行的挂起进程放入外存。
    调度性能指标:
    CPU利用率=CPU有效工作时间CPU有效工作时间+CPU空闲等待时间CPU 利用率 = \frac{CPU 有效工作时间}{CPU 有效工作时间+CPU 空闲等待时间}
    系统吞吐量=完成作业量CPU工作时间系统吞吐量 = \frac{完成作业量}{CPU工作时间}
    周转时间=作业完成时间作业提交时间周转时间 = 作业完成时间 - 作业提交时间
    带权周转时间=作业周转时间实际运行时间带权周转时间 = \frac{作业周转时间}{实际运行时间}
    响应时间=首次响应时间用户提交请求时间响应时间 = 首次响应时间 - 用户提交请求时间
    等待时间
    调度实现:排队器、分派器、上下文切换器
    调度时机、切换过程
    不可调度的情况:中断处理中,位于内核临界区,其他完全屏蔽中断的原子操作中
    需要调度的情况:发生引起调度的条件且当前进程无法继续执行(非剥夺),中断处理结束或自陷结束前,被置上请求调度标志(剥夺式调度)
    调度方式:非抢占调度,抢占调度(有利于吞吐率、响应时间)
    如果没有可调度进程就调度闲逛进程(ilde)
    用户级线程调度,由用户线程库决定,内核级线程调度由内核调度,给一个时间片,结束后强制挂起。

    调度算法#

    FCFS
    SJF
    优先级调度:抢占式优先级,静态优先级、动态优先级
    高响应比优先调度响应比Rp=等待时间+要求服务时间要求服务时间响应比R_p=\frac{等待时间+要求服务时间}{要求服务时间}
    时间片转轮调度
    多级队列调度
    多级反馈队列调度

    进程切换过程#

    上下文切换:
    挂起进程,保存 CPU 上下文(寄存器)
    更新 PCB
    将 PCB 移入队列
    选择另外进程,更新 PCB
    切换 CPU 上下文,开始执行新进程

    上下文切换时需要大量 CPU 耗时

    同步与互斥#

    临界区
    同步,A 必须等到 B 做完某操作才可以执行
    互斥,A 访问 C 时,B 必须等待 A 结束访问

    实现
    软件实现:单标志,双标志先检查,双标志后检查,peterson
    硬件实现,中断屏蔽,硬件指令 TestAndSet,Swap
    互斥锁
    信号量 PV
    条件变量
    管程

    生产 - 消费
    读者 - 写者
    哲学家吃饭
    吸烟者问题

    死锁#

    原因:资源竞争、同步互斥不当
    条件:互斥、不剥夺、请求并保持、循环等待
    死锁预防:
    互斥条件:不可破坏
    不剥夺条件:抢占资源(如 CPU,内存),但是不适用于打印机这类资源
    请求并保持条件:运行前一次申请所有资源,不满足就不运行,导致饥饿,资源浪费
    循环等待条件:顺序资源分配,给资源编号,必须按顺序请求资源,同类资源一次申请完。这种情况编号必须稳定,在资源新增时会被限制,资源浪费
    死锁避免:
    动态申请,单分配前计算安全性,防止进入不安全状态。如果不会进入不安全状态就分配。
    系统按照某种进程推进顺序,分配所需资源,直到满足每个进程最大需求,每个进程都可完成。此时称为一个安全序列,如果无法找到一个安全序列,则是不安全状态。
    银行家算法
    可用资源向量 Avaliable
    进程已分配资源向量 Allocation
    进程最大需求资源向量 Max

    检测与解除
    资源分配图
    image.png
    死锁定理:在分配图中,找出既不阻塞,又不孤点的进程 P,消除分配边和请求边。视为释放了资源,依次做,如果能够消除所有边就称为可完全简化。否则则是出现死锁。
    解除:资源剥夺,进程撤销,进程回退(需要还原点)。

    • 🥳0
    • 👍0
    • 💩0
    • 🤩0