JavaDriver JavaDriver
首页
  • 基础
  • 并发
  • JVM
  • 设计模式
  • 计算机网络
  • 操作系统
  • 数据结构
  • 算法
  • MYSQL
  • REDIS
  • Netty
  • Kafka
系统设计
非技术
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YoungAnn

西二旗Java老司机一枚 致力于社会主义添砖Java
首页
  • 基础
  • 并发
  • JVM
  • 设计模式
  • 计算机网络
  • 操作系统
  • 数据结构
  • 算法
  • MYSQL
  • REDIS
  • Netty
  • Kafka
系统设计
非技术
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机网络

  • 操作系统

    • 进程间有哪些通信方式?
    • 简述自旋锁与互斥锁的使用场景
    • 进程和线程之间有什么区别?
    • 简述几个常用的 Linux 命令以及他们的功能
    • 进程有多少种状态?
    • 简述 select, poll, epoll 的使用场景以及区别
    • Linux 下如何排查 CPU 以及 内存占用过多?
    • 进程通信中的管道实现原理是什么?
    • Linux 下如何查看 CPU 荷载,正在运行的进程,某个端口对应的进程?
    • 如何调试服务器内存占用过高的问题?
    • Linux 如何查看实时的滚动日志?
    • 简述 Linux 零拷贝的原理
    • 为什么进程切换慢,线程切换快?
    • 简述创建进程的流程
    • 简述 Linux 虚拟内存的页面置换算法
    • 简述 Linux 进程调度的算法
      • 什么时候会由用户态陷入内核态?
      • Linux 下如何查看端口被哪个进程占用?
      • Linux 中虚拟内存和物理内存有什么区别?有什么优点?
      • 简述 traceroute 命令的原理
      • 简述IO模型
    • 数据结构

    • 算法

    • 剑指Offer题解

    • 计算机基础
    • 操作系统
    YoungAnn
    2022-09-21
    目录

    简述 Linux 进程调度的算法

    # 分时和调度

    因为通常机器中 CPU 核心数量少(从几个到几十个)、进程&线程数量很多(从几十到几百甚至更多),你可以类比为发动机少,而机器多,因此进程们在操作系统中只能排着队一个个执行。每个进程在执行时都会获得操作系统分配的一个时间片段,如果超出这个时间,就会轮到下一个进程(线程)执行。再强调一下,现代操作系统都是直接调度线程,不会调度进程。

    # 分配时间片段

    如下图所示,进程 1 需要 2 个时间片段,进程 2 只有 1 个时间片段,进程 3 需要 3 个时间片段。因此当进程 1 执行到一半时,会先挂起,然后进程 2 开始执行;进程 2 一次可以执行完,然后进程 3 开始执行,不过进程 3 一次执行不完,在执行了 1 个时间片段后,进程 1 开始执行;就这样如此周而复始。这个就是分时技术。

    Lark20201104-145535.png

    下面这张图更加直观一些,进程 P1 先执行一个时间片段,然后进程 P2 开始执行一个时间片段, 然后进程 P3,然后进程 P4……

    Lark20201104-145538.png

    注意,上面的两张图是以进程为单位演示,如果换成线程,操作系统依旧是这么处理。

    编辑 (opens new window)
    上次更新: 2023/02/17, 17:03:51
    简述 Linux 虚拟内存的页面置换算法
    什么时候会由用户态陷入内核态?

    ← 简述 Linux 虚拟内存的页面置换算法 什么时候会由用户态陷入内核态?→

    最近更新
    01
    电商-商品系统设计
    12-17
    02
    关于如何写OKR
    12-09
    03
    对事不对人 vs 对人不对事
    12-09
    更多文章>
    Theme by Vdoing | Copyright © 2022-2023 YoungAnnn | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式