操作系统内核

分为强内核和微内核

  • 微内核
    • 非基本的服务和应用程序在微内核之上,在用户模式下执行

进程制约

  • 直接制约
  • 间接制约

线程

  • 进程是资源分配的单位
  • 线程是调度的单位

单线程结构进程

  • 一个进程只有一个执行序列(系统栈+用户栈)
  • 进程通信、切换开销大
  • 限制了进程并发的粒度
  • 降低了并行计算的效率

多线程结构进程

  • 一个进程有多个执行序列
  • 进程是资源分配、保护的独立单位
    • 用来容纳进程映像的虚拟地址空间
    • 对进程、文件和设备的存取保护机制
  • 线程是一条执行路径,是调度的基本单位,共享进程的主存和资源
    • 线程执行状态
    • 上下文
    • 寄存器
    • 对战
    • 局部变量
    • 线程控制块
    • 运行、就绪、睡眠,无挂起
    • 操作:孵化,封锁,活化,剥夺,指派,结束
  • 线程可以不被操作系统感知
  • 优点
    • 快速切换
    • 减少管理开销
    • 通信易于实现
  • 应用
    • 前台后台工作
    • CS应用模式
    • 加快执行
    • 用户接口设计
  • 实现
    • 内核级多线程 Kernel-Level Threads
    • 由操作系统进行线程管理
    • 操作系统提供接口 API
    • 多处理器环境中,一个进程中的多个线程能够并行执行
    • 一个线程阻塞,同一进程中的另一个线程可以执行
    • 内核也可以用多线程实现
    • 线程调度和管理在内核实现,开销比较大
    • 用户级多线程 User-Level Threads
    • 由用户空间程序库实现
    • 调度工作由应用程序完成,内核没有意识到线程的存在
    • 线程切换不需要内核模式,进一步降低切换代价
    • 可以自定义、裁剪调度算法
    • 运行在任何操作系统,无需内核支持
    • 不能利用多处理器优点,仅有一个ULT执行
    • 一个线程的阻塞引起整个进程的阻塞
    • Jacketing技术
    • 阻塞时调用改成非阻塞
    • 当陷入系统调用,执行Jacketing
    • 由其检查资源使用,决定是否执行进程切换或转移线程控制权
  • 混合策略
    • 在用户空间执行线程创建
    • 单应用的多个ULT可以映射成一些 KLT
    • 通过调整 KLT 数目,可以达到较好的并行效果
    • 特点
      • 组合了 ULT KLT 的线程设施
      • 线程的创建、调度、同步都在用户空间完成
      • 多个线程被映射到少数内核级多线程上
      • 通过有效调节内核级线程数目,达到整体最佳结果
      • 结合了两者的优点、减少缺点
    • 状态
      • KLT 三态,系统调度负责
      • 可运行态
      • 运行态
      • 阻塞态
      • ULT 三态,用户调度负责
      • 可运行态
      • 活跃态(如果绑定的 KLT 未运行,并不实际运行)
        • 活跃态 ULT 代表绑定 KLT 的三态
      • 睡眠态
      • 非阻塞系统调用需要 Jacketing 参与