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

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

关于调度

什么是调度

如果只有一个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著,陈向群,马洪兵等译

相关文章
|
存储 Linux API
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
|
7月前
|
Java 测试技术 API
【JUC】(1)带你重新认识进程与线程!!让你深层次了解线程运行的睡眠与打断!!
JUC是什么?你可以说它就是研究Java方面的并发过程。本篇是JUC专栏的第一章!带你了解并行与并发、线程与程序、线程的启动与休眠、打断和等待!全是干货!快快快!
1037 2
|
7月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
365 1
|
7月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
347 1
|
并行计算 Linux
Linux内核中的线程和进程实现详解
了解进程和线程如何工作,可以帮助我们更好地编写程序,充分利用多核CPU,实现并行计算,提高系统的响应速度和计算效能。记住,适当平衡进程和线程的使用,既要拥有独立空间的'兄弟',也需要在'家庭'中分享和并行的成员。对于这个世界,现在,你应该有一个全新的认识。
420 67
|
11月前
|
调度 开发工具 Android开发
【HarmonyOS Next】鸿蒙应用进程和线程详解
进程的定义: 进程是系统进行资源分配的基本单位,是操作系统结构的基础。 在鸿蒙系统中,一个应用下会有三类进程:
406 0
|
SQL 监控 网络协议
YashanDB进程线程体系
YashanDB进程线程体系
|
数据采集 Java 数据处理
Python实用技巧:轻松驾驭多线程与多进程,加速任务执行
在Python编程中,多线程和多进程是提升程序效率的关键工具。多线程适用于I/O密集型任务,如文件读写、网络请求;多进程则适合CPU密集型任务,如科学计算、图像处理。本文详细介绍这两种并发编程方式的基本用法及应用场景,并通过实例代码展示如何使用threading、multiprocessing模块及线程池、进程池来优化程序性能。结合实际案例,帮助读者掌握并发编程技巧,提高程序执行速度和资源利用率。
730 0
|
10月前
|
Java API 微服务
为什么虚拟线程将改变Java并发编程?
为什么虚拟线程将改变Java并发编程?
435 83
|
7月前
|
Java
如何在Java中进行多线程编程
Java多线程编程常用方式包括:继承Thread类、实现Runnable接口、Callable接口(可返回结果)及使用线程池。推荐线程池以提升性能,避免频繁创建线程。结合同步与通信机制,可有效管理并发任务。
288 6

热门文章

最新文章

推荐镜像

更多