【操作系统学习笔记】进程与线程(三)关于调度

简介: 本文为个人学习操作系统的笔记。
本文首发于稀土掘金。该平台的作者 逐光而行 也是本人。

关于调度

什么是调度

如果只有一个CPU可用,必须选择下一个要运行的进程。在操作系统中,完成该部分工作的是调度程序,使用的算法叫调度算法

关于调度的一些背景

  • 对于网络服务器而言,多个进程经常竞争CPU。
  • “资源充足”的论据在移动设备上也不成立。
  • 进程分为计算密集型和I/O密集型两种;前者花较长时间在CPU集中使用上,后者I/O等待的频率高。

随着CPU速度增快,更多进程倾向I/O密集型(因为CPU的速度及其演进速度都比磁盘快,计算本身耗时短了)

调度时机

  • 一个进程退出时,必须决定谁来接班(若找不到,会允许系统提供的空闲进程)
  • 进程阻塞时,必须选另一个救急
  • I/O发生中断时,决定恢复被中断的进程,还是选择别的进程

调度算法目标

  • 公平--->系统策略强制执行
  • 保持系统整体的高效、持续运转(尽可能使所有部分都保持忙碌)

调度算法分类

批处理

批处理作业的三大指标

  • 吞吐量(throughout)
  • 周转时间(turnaround time)
  • CPU利用率

算法

先来先服务(队列)

最短作业优先

最短剩余时间优先

交互式

重要指标

最小响应时间,均衡性

算法(前两种算法和中断的有点像)

轮转调度

维护一张可运行进程的列表,当前进程被运行后,就移到列表末尾。

优先级调度

多级队列

最短进程优先

不过要解决一个问题:如何找出最短的进程

  • 一种方案:根据进程过去的行为进行推测。

保证调度

  • 向用户作出明确的性能保证,然后实现它。
  • 若有n个用户登录,则每个用户将获得CPU处理能力的1/n。
  • 为实现所做的保证,系统必须跟踪各个进程自创建以来使用了多少CPU时间。

彩票调度

  • 应用例子:视频流,可将不同帧速率制成彩票,进程会自动按照大致正确的比例划分CPU的使用。

公平分享调度

(取决于如何定义“公平”,比如可定义为每个用户都能用到)

实时

基本要求

一定程度上必须满足deadline

分类:硬实时和软实时

这个嵌入式系统笔记那里讲得很详细,此处不再赘述,可分别以军工系统和DVD作为理解例子。

将调度机制与调度策略分离

使调度机制位于内核,调度策略由用户进程决定。

  • 适当放权,可以为主进程控制并掌握许多子进程动向等情况提供最优解,是上述提到的算法做不到的。

经典IPC问题

  • 哲学家就餐问题(互斥访问有限资源的竞争问题)
  • 读-写者问题(数据库访问)

参考书籍

《现代操作系统》 Andrew S.Tanenbaum,Herbert Bos著,陈向群,马洪兵等译

相关文章
|
12天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
6天前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
5天前
|
消息中间件 安全 算法
深入理解操作系统:进程管理的艺术
【10月更文挑战第38天】在数字世界的心脏,操作系统扮演着至关重要的角色。它不仅是硬件与软件的桥梁,更是维持计算机运行秩序的守夜人。本文将带你走进操作系统的核心——进程管理,探索它是如何协调和优化资源的使用,确保系统的稳定与高效。我们将从进程的基本概念出发,逐步深入到进程调度、同步与通信,最后探讨进程安全的重要性。通过这篇文章,你将获得对操作系统进程管理的全新认识,为你的计算机科学之旅增添一份深刻的理解。
|
9天前
|
算法 调度 UED
深入理解操作系统:进程管理与调度策略
【10月更文挑战第34天】本文旨在探讨操作系统中至关重要的一环——进程管理及其调度策略。我们将从基础概念入手,逐步揭示进程的生命周期、状态转换以及调度算法的核心原理。文章将通过浅显易懂的语言和具体实例,引导读者理解操作系统如何高效地管理和调度进程,保证系统资源的合理分配和利用。无论你是初学者还是有一定经验的开发者,这篇文章都能为你提供新的视角和深入的理解。
30 3
|
11天前
|
Linux 调度 C语言
深入理解操作系统:进程和线程的管理
【10月更文挑战第32天】本文旨在通过浅显易懂的语言和实际代码示例,带领读者探索操作系统中进程与线程的奥秘。我们将从基础知识出发,逐步深入到它们在操作系统中的实现和管理机制,最终通过实践加深对这一核心概念的理解。无论你是编程新手还是希望复习相关知识的资深开发者,这篇文章都将为你提供有价值的见解。
|
8天前
|
Java
java小知识—进程和线程
进程 进程是程序的一次执行过程,是系统运行的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。简单来说,一个进程就是一个执行中的程序,它在计算机中一个指令接着一个指令地执行着,同时,每个进程还占有某些系统资源如CPU时间,内存空间,文件,文件,输入输出设备的使用权等等。换句话说,当程序在执行时,将会被操作系统载入内存中。 线程 线程,与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中产生多个线程。与进程不同的是同类的多个线程共享同一块内存空间和一组系统资源,所以系统在产生一个线程,或是在各个线程之间做切换工作时,负担要比
18 1
|
10天前
|
消息中间件 算法 调度
深入理解操作系统:进程管理的艺术
【10月更文挑战第33天】本文旨在揭示操作系统中进程管理的神秘面纱,带领读者从理论到实践,探索进程调度、同步以及通信的精妙之处。通过深入浅出的解释和直观的代码示例,我们将一起踏上这场技术之旅,解锁进程管理的秘密。
17 0
|
12天前
|
算法 Linux 调度
深入理解操作系统之进程调度
【10月更文挑战第31天】在操作系统的心脏跳动中,进程调度扮演着关键角色。本文将深入浅出地探讨进程调度的机制和策略,通过比喻和实例让读者轻松理解这一复杂主题。我们将一起探索不同类型的调度算法,并了解它们如何影响系统性能和用户体验。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇理解操作系统深层工作机制的大门。
22 0
|
13天前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
34 0
Vanilla OS:下一代安全 Linux 发行版
|
16天前
|
人工智能 安全 Linux