操作系统(7)处理机调度
前言
操作系统中的处理机调度是一个核心概念,它涉及如何从就绪队列中选择进程并将处理机分配给它以运行,从而实现进程的并发执行。
一、调度的层次
高级调度(作业调度):
- 调度对象:作业(包含程序、数据以及作业说明书)。
- 功能:从外存上处于后备队列的作业中挑选一个或多个作业,给它们分配内存等必要资源,并建立相应的进程(建立PCB),以使它们获得竞争处理机的权利。
- 特点:高级调度是辅存(外存)与内存之间的调度。每个作业只调入一次,调出一次。作业调入时会建立相应的PCB,作业调出时才撤销PCB。高级调度主要是指调入的问题,因为只有调入的时机需要操作系统来确定,但调出的时机必然是作业运行结束才调出。
中级调度(内存调度):
- 目的:提高内存利用率和系统吞吐量。
- 功能:决定将哪个处于挂起状态的进程重新调入内存。挂起态是指暂时被调到外存中等待的进程状态。
- 特点:中级调度发生的频率比高级调度高,因为进程可能会被多次调出、调入内存。此外,中级调度引入了虚拟存储技术,可将暂时不能运行的进程调至外存等待,等它重新具备了运行条件且内存又稍有空闲时,再重新调入内存。
低级调度(进程调度):
- 调度对象:进程。
- 功能:从就绪队列中按照某种方法和策略选取一个进程,将处理机分配给它。低级调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。
- 机制:低级调度包含三个基本机制,即排队器(系统中的所有就绪进程都应按照一定的方式进行排序)、分派器(取出选中进程,进行上下文切换,后分配处理机资源)和上下文切换(对处理机进行切换时,需要进行两对上下文切换)。
二、调度的时机与方式
调度时机:
- 进程状态发生变化时(如从就绪态到运行态、从运行态到阻塞态或从运行态到结束态)会触发调度。
- 硬件时钟提供周期性中断时,也可以触发调度。
调度方式:
- 非抢占式调度:挑选一个进程,然后让该进程运行直到被阻塞或退出,才会调用另外一个进程。这种调度方式下,进程不会因为时钟中断而被抢占。
- 抢占式调度:挑选一个进程,然后让该进程只运行某段时间(称为时间片)。如果在该时段结束时,该进程仍然在运行时,则会把它挂起,接着调度程序从就绪队列挑选另外一个进程。这种调度方式需要时钟中断来将CPU控制返回给调度程序进行调度。
三、调度算法及其评价指标
调度算法:
- 先来先服务(FCFS):按照进程进入就绪队列的先后顺序进行调度。这种算法对长作业有利,但可能导致短作业长时间等待。
- 最短作业优先(SJF):选择估计运行时间最短的进程进行调度。这种算法有助于提高系统吞吐量,但对长作业不利。SJF可以分为抢占式和非抢占式两种。
- 高响应比优先(HRRN):权衡了短作业和长作业。每次进行进程调度时,先计算响应比优先级,然后把响应比优先级最高的进程投入运行。响应比优先级的计算公式为:响应比=(等待时间+要求服务时间)/要求服务时间。
- 时间片轮转(Round Robin, RR):每个进程被分配一个时间段(称为时间片),允许该进程在该时间段中运行。如果时间片用完,进程还在运行,则将其从CPU释放出来,并把CPU分配给另外一个进程。时间片轮转算法是最古老、最简单、最公平且使用最广的算法之一。
- 优先级调度:根据进程的优先级进行调度。优先级可以是静态的(在创建进程时确定,并在执行过程中不会改变),也可以是动态的(根据进程的动态变化调整优先级)。
评价指标:
- CPU利用率:CPU忙碌时间占总时间的比例。
- 系统吞吐量:单位时间内完成的作业数量。
- 周转时间:从作业被提交给系统开始到作业完成为止的这段时间间隔。
- 等待时间:进程或作业处于等待处理机状态的时间之和。
- 响应时间:用户提交请求到首次产生响应所需要的时间。
四、实时调度与死锁
实时调度:
实时系统中需要及时反馈,因此前面的算法可能不能满足实时系统对调度的要求。实时调度算法需要满足实时任务的时间约束,常见的实时调度算法有最早截止时间优先(EDF)和最低松弛度优先(LLF)等。死锁:
死锁是指两个或多个进程因争夺资源而无限期地阻塞、相互等待的一种状态。产生死锁的原因包括竞争资源、进程间推进顺序非法等。预防死锁的方法包括摒弃“请求和保持条件”、摒弃“不可剥夺条件”和摒弃“环路等待条件”等。
总结
综上所述,操作系统中的处理机调度是一个复杂而关键的过程,它涉及多个层次、多种时机与方式以及多种算法和评价指标。在实际应用中,需要根据系统的具体需求和特点选择合适的调度策略和算法。
结语
生活在阴沟里
仍然有仰望星空的权利
!!!

相关文章:
操作系统(7)处理机调度
前言 操作系统中的处理机调度是一个核心概念,它涉及如何从就绪队列中选择进程并将处理机分配给它以运行,从而实现进程的并发执行。 一、调度的层次 高级调度(作业调度): 调度对象:作业(包含程序…...
folly之侵入式链表
侵入式链表 侵入式链表(Intrusive Linked List)是一种数据结构,它的节点不是通过包含链表节点的对象来实现的(像非侵入式链表那样),而是通过在节点对象中直接包含指向其他节点的指针来实现的。这意味着链表节点对象本身需要被修改以包含指向链表其他部分的指针。 直接上…...
GPT-5 训练遇阻:预期目标难达成与交付延期的深度剖析
# GPT-5 训练遇阻:预期目标难达成与交付延期的深度剖析 近期,GPT-5 的训练进展引发了广泛关注与诸多讨论,令人遗憾的是,其训练并未达到预期目标,且难以在规定时间内交付。这一状况不仅让期待它的人们大感意外…...
C缺陷与陷阱 — 3 深入理解表达式
目录 1 表达式的运算次序 1.1 自增或自减操作符 1.2 函数参数 1.3 函数指针 1.4 函数调用 1.5 嵌套赋值语句 2 函数调用不作为函数参数 3 赋值语句的谨慎使用 1 表达式的运算次序 除了少数操作符(函数调用操作符 ( )、&&、| |、? : 和 ,ÿ…...
Linux常用指令-----中
Linux常用指令----上 Linux常用指令----下 Linux系列 文章目录 Linux系列前言一、man指令(重要)二、cp指令(重要)三、echo指令四、cat指令五、mv指令六、which指令七、alias指令总结 前言 接下来我们介绍的指令是承接上篇&#…...
k8s 部署方式kustomization和helm的区别
Kustomize 和 Helm 是 Kubernetes 中两种流行的配置管理工具,它们都用于管理 Kubernetes 资源,但它们的设计理念、功能和适用场景有所不同。以下是两者的详细对比: 1. 基本概念 Kustomize 功能:原生于 Kubernetes 的工具&#x…...
Alogrithm:骑士走棋盘
1. 说明 骑士旅游(Knights tour)在十八世纪初倍受数学家与拼图迷的注意,它什么时候被提出已不可考,骑士的走法为西洋棋的走法,骑士可以由任一个位置出发,它要如何走完所有的位置? 2. 解法 骑士旅…...
Oracle 与 达梦 数据库 对比
当尝试安装了达梦数据库后,发现达梦真的和Oracle数据库太像了,甚至很多语法都相同。 比如:Oracle登录数据库采用sqlplus,达梦采用disql。 比如查看数据视图:达梦和Oracle都有 v$instance、v$database、dba_users等&a…...
[COLM 2024] V-STaR: Training Verifiers for Self-Taught Reasoners
本文是对 STaR 的改进方法,COLM 是 Conference On Language Models,大模型领域新出的会议,在国际上很知名,不过目前还没有被列入 ccf list(新会议一般不会列入);作者来自高校、微软研究院和 Goo…...
【Python】使用Selenium的find_element模块获取网页上的大段文字和表格的方法(建议收藏!)
发现了一个使用Selenium的find_element模块,快速获取文字和表格的方法,很实在,以后爬网的时候,就不用beautifulSoup 和 pandas的read_html 混起来用了! 文字部分:实现网络节点下,某个节点下的其…...
蓝桥杯刷题——day4
蓝桥杯刷题——day4 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 小蓝和朋友们在玩一个报数游戏。由于今年是2024 年,他们决定要从小到大轮流报出是20或24倍数的正整数。前10个被报出的数是:20,24,40,48,60,72,80,96,100,120。请问第2…...
内网是如何访问到互联网(H3C源NAT)
H3C设备NAPT配置 直接打开29篇的拓扑,之前都配置好了 「模拟器、工具合集」复制整段内容 链接:https://docs.qq.com/sheet/DV0xxTmFDRFVoY1dQ?tab7ulgil 现在是出口路由器可以直接访问61.128.1.1,下面的终端访问不了,需要做NAPT源…...
源码分析之Openlayers中的Zoom缩放控件
概述 放大或缩小是地图中最基本的功能,本文主要介绍分析 Openlayers 中Zoom缩放控件的源码实现。 源码分析 Zoom控件继承Control类,关于Control类,可以参考这篇文章源码分析之Openlayers中的控件篇Control基类介绍 如果直接实例化Zoom类&…...
k8s的ConfigMap是什么, 为什么设计ConfigMap, 如何使用ConfigMap
ConfigMap简介, 为什么设计ConfigMap 在k8s中, ConfigMap是一种API对象, 用于将非机密的配置数据存储到键值对中。 Configmap作用是, 把配置数据从应用代码中分隔开, 让镜像和配置文件解耦,实现了镜像的可移植性。 举例: 我有一个Squid(正向代理)的Pod…...
fiddler设置抓取https,还抓取不到https如何解决?
一、清楚 C:\Users\Admin\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件(首次安装fiddler请忽略) 二、清除电脑上的根证书,WINR快捷键,输入:certmgr.msc, 然后回车,查找所有fiddler证书…...
Python高性能web框架-FastApi教程:(1)创建一个简单的FastApi
(1)创建一个简单的FastApi 1. 导入必要的库 from fastapi import FastAPI import uvicornFastAPI 是一个用于构建现代、快速(高性能)的Web API的Python框架。uvicorn 是一个ASGI服务器,用于运行异步的Python Web应用…...
Django基础之模板
一.前言 前面我们讲了视图,我们今天来讲一下模板,模板其实也就是视图中render返回的html进行的渲染,然后展示到浏览器页面上去,那我们今天就来和大家来说一下模板的基本用法 二.寻找html模板 这个也就是我们前面说了的找html&a…...
RabbitMQ Work Queues (工作队列模式) 使用案例
Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 🌱🌱个人主页:奋斗的明志 🌱🌱所属专栏:RabbitMQ 📚本系列文章为个人学…...
C#高级:Winform桌面开发中TreeView的基础例子
一、方案一:免递归使用树 namespace WinFormsApp1 {public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary>/// 自定义树实体/// </summary>public class WinFormTree{/// <summary>/// 标签名称/// </summ…...
大模型的文件有哪些?
在大模型仓库(如Hugging Face)中,例如:https://modelscope.cn/models/ZhipuAI/glm-4-9b-chat/files,通常会发现以下几类文件: 模型权重文件:存储训练好的模型参数,是模型推理和微调…...
别再乱用电容了!从稳压芯片电路入手,搞懂电解电容和贴片电容到底该怎么搭配
电解电容与贴片电容的黄金组合:稳压电路设计实战解析 在电子电路设计中,稳压芯片的输入输出端常见一大一小两个电容并联的经典配置,这种设计看似简单却蕴含着深刻的电路原理。对于刚入行的硬件工程师或电子爱好者来说,理解这种组…...
告别拥塞:手把手优化Dragonfly网络性能,UGAL-LVC_H算法详解与配置
告别拥塞:手把手优化Dragonfly网络性能,UGAL-LVC_H算法详解与配置 在数据中心网络架构中,Dragonfly拓扑以其高度可扩展性和低直径特性脱颖而出,成为超大规模计算环境的理想选择。然而,当面对对抗性流量模式时ÿ…...
CentOS 7上搞定Dell iDRAC Service Module安装报错(附usbutils依赖解决)
CentOS 7上解决Dell iDRAC Service Module安装依赖问题的实战指南 当你在CentOS 7系统上尝试安装Dell iDRAC Service Module时,可能会遇到各种依赖问题导致安装失败。本文将深入剖析最常见的usbutils依赖报错及其解决方案,同时提供一系列实用技巧帮助你顺…...
用PyTorch手把手实现PGD对抗训练:从FGM的‘一步到位’到‘小步快跑’的实战代码详解
用PyTorch手把手实现PGD对抗训练:从FGM的‘一步到位’到‘小步快跑’的实战代码详解 对抗训练已成为提升模型鲁棒性的核心技术之一。不同于FGM(Fast Gradient Method)的"一步到位"策略,PGD(Projected Gradie…...
一文分清黑客、骇客、白客、红客,各自职责一目了然
黑客 起源 “黑客”一词是英文Hacker的音译。这个词早在莎士比亚时代就已存在了,但是人们第一次真正理解它时,却是在计算机问世之后。根据《牛津英语词典》解释,“hack”一词最早的意思是劈砍,而这个词意很容易使人联想到计算机…...
APT32F110 RISC-V开发板printf重定向与串口花式表白项目实战
1. 项目概述:从“Hello World”到“花式表白”的嵌入式浪漫作为一名在嵌入式领域摸爬滚打了十多年的老工程师,我调试过无数块开发板,写过数不清的“Hello World”。但当我拿到爱普特APT32F110这块基于国产RISC-V内核的开发板时,我…...
构建全志Tina Linux Docker编译镜像:从环境配置到CI/CD实践
1. 项目概述:为什么我们需要一个专属的Docker编译镜像?如果你和我一样,长期在嵌入式Linux开发领域摸爬滚打,那么“环境搭建”这四个字,大概率是你开发周期里最耗时、也最令人头疼的环节之一。尤其是当我们面对像全志Ti…...
Windows到Linux数据传输实战:WinSCP、SCP、Samba与rsync全解析
1. 项目概述:跨越操作系统的数据搬运在混合开发或运维环境中,从Windows向Linux服务器传输数据,是每个开发者、运维工程师甚至数据分析师都绕不开的日常操作。这看似简单的“复制粘贴”,背后却涉及网络协议、权限管理、文件系统差异…...
Linux中环境变量配置的步骤详解
简介我们大家在平时使用Linux的时候,经常需要配置一些环境变量,这时候一般都是网上随便搜搜就有人介绍经验的。不过问题在于他们的方法各不相同,有人说配置在/etc/profile里,有人说配置在/etc/environment,有人说配置在…...
如何用开源自动化工具告别抢票焦虑:大麦自动抢票系统完全指南
如何用开源自动化工具告别抢票焦虑:大麦自动抢票系统完全指南 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为心仪演唱会门票秒空…...
