进程_nmyvzp4418v0zzb4

    854
    最后修改于

    调度单位 进程 / 线程#

    image.png
    进程由 PCB,程序段,数据段组成
    进程控制:创建、终止、阻塞 / 唤醒
    进程通信

    • 共享内存,如全局变量,环境变量
    • 消息传递,操作系统提供的进程通信机制
    • 管道通信,Linux 中管道是单向的

    多线程
    调度方面,在适配多线程的操作系统中,是基本调度单位。资源方面,分配给进程,而不是线程
    多个线程共享同一个地址空间,不同进程不共享地址空间。线程总体开销较小
    线程具有 执行、就绪、阻塞三种状态,由 TCB 表示
    实现上分为内核级线程(操作系统支持的线程),用户级线程(如 Goroutine)
    多线程模型
    image.png
    CPU 三层调度
    高级调度(作业),从外存中取出作业,建立起相应的 PCB,获得进一步调度的机会(多道批处理中配备,但是其他系统通常没有)
    中级调度(内存),将暂时不能运行的进程调度到外存中,暂时保存。
    低级调度(进程),CPU 分配给对应进程,进程不同状态的切换
    关系:作业调度创建进程,送入就绪队列,进程调度从中取出执行,中级调度将不能执行的挂起进程放入外存。

    调度性能指标#

    CPU利用率=CPU有效工作时间CPU有效工作时间+CPU空闲等待时间CPU 利用率 = \frac{CPU 有效工作时间}{CPU 有效工作时间+CPU 空闲等待时间}
    系统吞吐量=完成作业量CPU工作时间系统吞吐量 = \frac{完成作业量}{CPU工作时间}
    周转时间=作业完成时间作业提交时间周转时间 = 作业完成时间 - 作业提交时间
    带权周转时间=作业周转时间实际运行时间带权周转时间 = \frac{作业周转时间}{实际运行时间}
    响应时间=首次响应时间用户提交请求时间响应时间 = 首次响应时间 - 用户提交请求时间
    等待时间等待时间
    调度实现
    三部分:排队器、分派器、上下文切换器
    调度时机
    不可调度的情况:中断处理中,位于内核临界区,其他完全屏蔽中断的原子操作中
    需要调度的情况:发生引起调度的条件且当前进程无法继续执行(非剥夺),中断处理结束或自陷结束前,被置上请求调度标志(剥夺式调度)
    调度方式:非抢占调度,抢占调度(有利于吞吐率、响应时间)
    如果没有可调度进程就调度闲逛进程(ilde)
    用户级线程调度,由用户线程库决定,内核级线程调度由内核调度,给一个时间片,结束后强制挂起。
    进程切换过程
    挂起进程,保存 CPU 上下文(寄存器)
    更新 PCB
    将 PCB 移入队列
    选择另外进程,更新 PCB
    切换 CPU 上下文,开始执行新进程
    上下文切换时需要大量 CPU 耗时


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