调度--操作系统的欺骗

操作系统之进程调度 世界上很多问题都是跟资源分配和任务调度有关,而学会了操作系统的进程调度算法,我觉得也会给你在做事的时候带来一些启发吧。 在现代的操作系统中,有很多进程在内存中。有的正在运行,有的正等待某个事件的发生(比如等待用户敲击键盘)。那么操作系统作为一个大佬,就必须管理这些进程,让它们按照规则来,不能乱了套。进程调度的类型按照每个阶段的执行时间的相对比例来分,进程的调度类型包括一下三类: (1)长程调度: 阅读详情

假设有一个CPU体系

假设一、这个体系不存在Branch指令(分支或跳转的指令)
假设二、这个体系不响应任何异常和中断

那么根据这个体系编译得到的指令序列安排在内存中后,一定能得到执行的机会,因为CPU一直按照各条指令的宽度递增取指令的地址, 读取下一条指令执行

一.CPU指令和指令执行

1.顺序执行:

x86体系中MOV, ADD等都是顺序执行的指令

定义:顺序执行是指CPU下一次取指令的地址在逻辑上是按当前正在执行的指令宽度递增的

2.改变顺序执行(分支或跳转):

x86体系中JMP、LOOP、CALL、RET等都是使执行顺序改变的指令

定义:分支或跳转执行是指CPU下一次取指令的地址在逻辑上是根据当前指令的执行结果变化的
定义:根据指令结果而产生的分支或跳转我们称为软分支或软跳转。

任何现有的CPU体系,所有的指令都可以归为上述两类。
任何软件或程序包括操作系统都是上述两类指令的组合

二.程序指令序列空间IRAS(Instructs RunTime Address Space)程序使用到的地址空间RAS(RunTime Address Space)

定义:程序运行时指令序列所占有的内存地址我们称之为IRAS
定义:程序运行时指令序列所占有的内存地址和指令序列中的指令执行时访问到的内存地址的总和我们称之为RAS

IRAS是RAS的子集

程序例子:文章开头的假设二存在时,内存中存在一段程序,并且这段程序永远不会退出(死循环).
程序结果:假设CPU的取指令操作正好在这段程序的IRAS中,那CPU任何访问内存的操作(包括取指和取数据)都不会离开这段程序的RAS,因为所有的分支和跳转指令所到的内存地址都存在于这段程序的RAS中.

三.两段地址空间不重叠的程序

如果内存中存在两段程序task1和task2,他们的RAS不会重叠,并且条件符合上述二的程序例子
假设此时CPU的取指令操作正好在task1中的指令序列中,则task2将永远得不到CPU执行

在不改变task1和task2的程序代码的前提下如何让CPU运行时既可执行task1又可执行task2呢?
换句话说,假设此时CPU的取指令操作正好在task1的IRAS中,如何使CPU可以切到task2的IRAS中执行一小段,然后又可以切换回task1的IRAS中执行一小段,这样交替的执行呢?

四.硬分支或硬跳转

把最开头的假设二重新定义
新的假设二:可以响应外部的中断或CPU内部执行指令产生的异常,当中断和异常产生时,CPU在内部保存当前被中断的指令地址,并跳转到内存某个固定的地址处执行指令.

比方说,假设此时CPU的取指令操作正好在task1中的指令序列中,如果产生了中断或异常,CPU把当前正在task1中执行的指令的地址保存起来,并且从内存的另外一个固定地址执行指令.

定义:因为硬件的中断或异常而产生的分支或跳转我们称为硬分支或硬跳转
区分软跳转和硬跳转:软跳转是因为指令执行的结果导致的跳转,硬跳转是硬件中断或异常产生时的跳转

我们可以在硬跳转的固定的地址上安排一段程序,它保存当前CPU的所有寄存器的值和被中断的指令地址到内存的某处,又可以把内存某处的内容还原到CPU的寄存器并且把CPU取下一条指令的地址还原.

上述三,如果我们在内存中保存了task1和task2的执行时CPU所有的状态,当中断或异常发生时我们就可以让CPU取指的地址在task1和task2来回切换.这样就解决了上述三提出的问题.

定义:因为硬件的中断或异常产生的任务切换我们称为硬调度或被动调度

五.地址空间重叠的程序
上述四中我们已经在内存中安排了硬跳转所执行的代码
我们在内存的另外一处安排一段指令序列, 它保存进入这段指令序列之前的一条软跳转指令对应的内存地址的下一个地址,并且像上述四那样切换任务,这样如果我们在task1和task2的死循环中都调用了这段指令序列,那我们也可以实现task1和task2的来回切换.因为我们在task1和task2中都调用了这段代码,所以task1和task2的RAS重叠了.

定义:因为程序调用重叠的代码产生的任务切换我们称为软调度或主动调度

六.多任务操作系统的调度
在上述四和五中我们实现的额外的代码属于操作系统代码,所谓的多任务操作系统调度就是通过这两种方式的让CPU的取指地址不停的来回切换.这就是操作系统对你的任务的欺骗.

七.分时多任务调度
如果硬件上有一个定时器,每隔一段时间中断一下CPU,根据上述四,任务就按照固定的时间间隔来回切换了.

【操作系统】 Operation System 第八章:CPU调度 8.1 背景 CPU调度 8.1.1 上下文切换: ->切换CPU的当前任务,从一个进程/线程转换到另一个进程/线程; ->但是切换之前要保护现场,保存当前进程/线程在PCB/TCP中的执行上下文(也就是CPU的状态); ->切换任务,当然要读取下一个进程/线程的上下文。 8.1.2 CPU调度: ->从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程; -... 阅读详情

相关推荐

嵌入式操作系统(2):调度

一、调度原则 何时调度:进程状态变化的时候 目标: 减少响应时间(及时处理用户的输出并且尽快将输出提供给用户 减少平均响应时间的波动(在交互系统中,可虞可预测性比高差异低平均更重要 增加吞吐量–两个方面(1、减少开销(操作系统开销,上下文切换)2、系统资源的高效利用(CPU,I/O设备) 减少等待时间 评价调度算法指标: CPU利用率:CPU处于忙碌状态所占时间的百分比 吞吐量:在单位时间内完成的进程数量(相当于操作系统的带宽) 周转时间:一个进程从初始化到结束,包括所有等待时间所花费的时

qq_41668705的博客 3191

chromebook刷机_如何为不支持Chrome操作系统的网站欺骗Chromebook用户代理

chromebook刷机Not all browsers handle websites the same, and if they don’t support your operating system or browser, you could be denied access. Luckily, you can spoof the user agent on Chrome OS to mak...

cum43546的博客 365

操作系统(八)CPU调度 短剩余时间 吞吐量 轮循 实时调度 多处理器调度 (清华 向勇 陈渝版)

前篇在此 僵尸进程 线程进程挂起 操作系统(八)CPU调度 短剩余时间 吞 调度原则 调度算法 实时调度 多处理器调度 优先级反转 算法背景 上下文切换:切换CPU的当前任务,从一个进程/线程到另一个,保存当前在PCB/TCB中的执行上下文,读取下一个的上下文 CPU调度:从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个线程/进程 优先级反转:如果任务之间由于有了共享资源出现了竞争或死锁,会引起OS不安

凝视深渊 3196

操作系统的各种调度算法和自己碰到的一些疑问

今天回顾计算机操作系统的时间调度算法,做题目,时间片轮转调度算法,我一开始以为,时间片轮转调度的开始,是优先级最高的那一个作业,后来发现这其实是错的。 正确的认识应该是,除了最高优先级算法之外,所有算法的开始都是首先进入系统的那一个作业。 注意,如果题目表示很多个作业同时进入系统,则按题目所给的顺序轮转调度,而不考虑优先级 这里引用一下smlie4lee同学的博客链接http://blog.

dunyu1997的博客 697

【操作系统】程序执行过程

本章主要介绍程序执行过程中操作系统、CPU都干了什么 运行前 程序在运行前,只是在硬盘上待着,此时就是一堆二进制代码而已,没有任何作用。 程序只有进入了内存才能运行,但是要进入内存,则需要服从操作系统的调度。 一个程序在运行的时候可能需要很大的空间,比如3G,但是操作系统不可能为每个程序都分配那么大,因为同时加载入内存的程序可能很多。 所以操作系统想了个办法,它和CPU一起“欺骗”了程序...

qq_36693592的博客 4971

CF鼠标宏防封指南:手把手教你调校罗技G HUB压枪脚本的延迟与随机数

本文详细解析了如何通过罗技G HUB的Lua脚本功能调校鼠标宏,实现拟真操作体验。重点介绍了随机数应用、动态后坐力补偿和智能操作序列等高级技术,帮助玩家在不违反游戏规则的前提下提升操作精度。

weixin_26841957的博客 334

实时调度

在实时系统中,可能存在着两类不同性质的实时任务,即硬实时(HRT)任务和软实时(SRT)任务,它们都联系着一个截止时间。为保证系统能正常工作,实时调度必须能满足实时任务对截止时间的要求。为此,实现实时调度应具备一定的条件。 实现实时调度的基本条件 1. 提供必要的信息  (1) 就绪时间。  (2) 开始截止时间和完成截止时间。   (3) 处理时间。  (4) 资源要求。  (5)...

amf12345的博客 1589

ChatGPT Plus完整开通指南:从账号注册到稳定使用全流程

自然语言处理(NLP)技术通过深度学习模型实现对人类语言的理解与生成,其核心原理是基于Transformer架构的大规模预训练。GPT-4作为当前最先进的生成式AI模型,在代码编写、文档分析等场景展现出显著的技术价值。在实际应用中,稳定的网络环境和合规的支付方式是确保AI助手持续服务的关键因素。针对ChatGPT Plus的开通,需要系统性地解决账号验证、虚拟信用卡支付等工程实践问题,才能实现工作流的高效整合。

weixin_34239592的博客 427

计算机专业面试知识点整理(计网与操作系统)

自己整理的一些计算机专业的考研复试常见问题,部分资料来源于网络,侵权即删,仅供分享哦~~

chococolate's coding space 8718

Optisystem软件与Matlab软件的联合数据读取

目录 Matlab软件程序编写 Optisystem软件的连接与设置 数据读取结果 Matlab软件程序编写 利用Matlab软件按照下图编写程序,保存为getdata.m文件。 OutputPort1 =InputPort1; fileID=fopen('OSAdata.txt','wt'); fprintf(fileID,'%f\n',OutputPort1.Sampled.Signal); fclose(fileID); Optisystem软件的连接与设置 (以基于线性插值法

Vivian_Chen_的博客 4853

我爬取了某非法网贷后台系统数据,终于知道什么叫做利滚利滚利滚利了

我爬取了非法贷款的后台网站!

weixin_44042821的博客 2880

进程调度演变过程之O(1)与O(n)调度器 - 进程与线程(十五)

1 调度器概述 任务调度器是操作系统中一个很重要的功能部件,主要功能是把系统中的task调度到各个CPU上去执行,满足如下的性能需求: 调度器必须是公平的:(对于分时的进程,每个任务都应该有机会执行,不能饿死,保证每个进程得到合理的CPU时间) 快速的进程响应时间:(对于交互式进程,需要和用户进行交流,因此对调度延迟比较敏感) 高系统的吞吐量:(对于批处理进程进程,属于那种在后台的默默奉献的,因此它更注重吞吐量的需求) 功耗要小:(对于移动式终端,功耗的需求其实一直以来都没有特别被调度器重视,当然在lin

生活需要深度 1209

MCU中GPIO口的驱动方式

MCU中GPIO口的驱动方式 导读: MCU芯片中GPIO口的驱动方式大的可分为输出和输入两类,小的分可以分为8种。 一、四种输入方式 ①上拉输入: 上拉输入抗干扰能力强,特别适合接地信号的输入(比如低电平有效的按键信号输入)。其工作原理如图1所示。 I/O 端口与TTL 施密特触发器之前接入了一个30K~50K 欧姆的上拉电阻,当I/O 端口悬空时,此时MCU 也能读到稳定的高电平状态,...

优快云Frewen的博客 3372

操作系统(8)—— CPU调度(调度原则、调度算法、实时调度、多处理器调度与优先级反转)

一、背景知识 1. 上下文切换: 切换CPU的当前任务,从一个进程/线程转换到另一个进程/线程; 但是切换之前要保护现场,保存当前进程/线程在PCB/TCP中的执行上下文(也就是CPU的状态); 切换任务,当然要读取下一个进程/线程的上下文。 2. CPU调度: 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程; 需要调度程序(挑选进程/线程的内核函数); 需要考虑的问题是...

weixin_45926367的博客 3172

用简单仿真链路产生 WiFi CSI(不依赖专用工具箱,matlab实现)

这篇文章详细介绍了使用MATLAB仿真生成WiFi信道状态信息(CSI)的过程。内容包括:准备工作(定义OFDM和MIMO参数)、基本参数设置(天线数、FFT点数等)、构造训练OFDM符号、多径瑞利信道建模、逐天线时分发射接收处理、CSI信道估计方法,以及幅值和相位的可视化。通过BPSK调制和瑞利衰落信道仿真,实现了简单的CSI生成流程,为初学者理解CSI产生机理提供了直观指导。文章强调这仅是基础仿真,更深入的研究需要实际数据采集。文末还提供了WiFi指纹定位的相关参考资料。

静水流深,沧笙踏歌 1205

STM32嵌入式开发实战:如何用miniLZO压缩算法节省70%存储空间(附完整工程)

本文详细介绍了如何在STM32嵌入式开发中使用miniLZO无损压缩算法实现高达70%的存储空间节省。通过对比分析不同轻量级算法,重点讲解miniLZO的内存优化配置、分块压缩策略和完整工程实现,帮助开发者有效解决嵌入式系统中的存储瓶颈问题。

ss78901的博客 881

【操作系统】Operation System-第8章-调度

上下文切换补充:调度策略➢ 确定如何从就绪队列中选择下一个执行进程调度策略要解决的问题➢ 挑选就绪队列中的哪一个进程?➢ 通过什么样的准则来选择?调度算法➢ 在调度程序中实现的调度策略比较调度算法的准则➢ 哪一个策略/算法较好?CPU使用率➢ CPU处于忙状态所占时间的百分比吞吐量➢ 在单位时间内完成的进程数量周转时间➢ 一个进程从初始化到结束,包括所有等待时间所花费的总时间等待时间➢ 进程在就绪队列中的总时间响应时间➢ 从一个请求被提交到产生第一次相应所花费的总时间人们通常都需要 ”更快“ 的服务什么是更

How many ten years in the life time? 1261

SAP ABAP CDS View 里的日期函数

摘要:本文系统介绍了ABAP CDS日期函数在企业级应用中的关键作用,包括账龄计算、合同续期等业务场景。重点解析了DATS_IS_VALID、DATS_DAYS_BETWEEN等核心函数的语义和使用边界,特别强调on_error四种异常处理策略的选择逻辑。针对系统日期获取,对比了经典CDS的参数注入和View Entity会话变量两种方式。文章还提供了完整可运行的示例代码(包含CDS视图和ABAP程序),帮助开发者快速验证不同版本下的函数行为差异,确保在实际项目中正确应用这些日期处理函数。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 379

【操作系统/OS笔记10】进程/线程的调度原则、调度算法、实时调度、多处理器调度、优先级反转

调度原则、评价指标、六种基础调度算法,实时调度简述,多处理器调度简述,优先级反转现象及解决办法。

记录学习痕迹的公众号:Piper蛋窝 1662

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

操作系统 (八) - CPU调度

目录 1. 背景,CPU调度 在进程/线程生命周期的什么时候进行调度? 内核运行调度程序的条件(满足其一即可) CPU调度方式,是否抢占(内核态、用户态) 2 调度原则 2.1 调度策略 2.2 程序执行模型 2.3 比较调度算法的准则 2.4 吞吐量 vs 延迟 2.5 公平的目标 3 调度算法 3.1先来先服务 3.2 短进程优先 3.3最高响应比优先 3.4轮循 3.5多级反馈队列 3.6公平共享调度 3.7不同调度模型的评价准则 4 实时调度 4...

Y_M的博客 1209

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

《操作系统导论》 知识总结 第八章 调度:多级反馈队列

**多级反馈队列**(Multi-level Feedback Queue,**MLFQ**)需要解决两方面的问题。 - 首先它要**优化周转时间**,这可以通过优先执行较短的工作来实现。然而,操作系统常常不知道工作要运行多久,而这又是SJF等算法所必需的。 - 其次,MLFQ希望**给用户提供较好的交互体验**,因此需要**降低响应时间**。然而,轮转调度虽然降低了响应时间,周转时间却很差。 所以这里的问题是:通常我们对进程一无所知,应该如何构建调度程序来实现这些目标?调度程序如何在运行过程中学习

jzb的博客 2546

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

操作系统的调度策略

调度程序:挑选就绪进程的内核函数: 调度策略(依据什么原则挑选进程/线程? ) 调度时机(什么时候进行调度?)调度时机 在进程/线程的生命周期中的什么时候进行调度? (1)进程从运行状态切换到等待状态 (2) 进程被终结了非抢占系统: 当前进程主动放弃CPU时可抢占系统:(1)中断请求被服务例程响应完成时(2)当前进程被抢占a. 进程时间片用完b. 进程从等待切换到就绪调度策略: 确

TH_NUM的博客 3765

操作系统处理器调度

1 背景 1.1 上下文切换: 切换CPU的当前任务, 从一个进程/线程到另一个 保存当前进程/线程在PCB/TCB中的执行上下文(CPU状态) 读取下一个进程/线程的上下文 1.2 CPU调度: 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程 调度程序: 挑选进程/线程的内核函数(通过一些调度策略) 什么时候进行调度? 1.3 内核运行调度程序的条件(满足一条即可): 一个进程从运行状态切换到等待状态 一个进程被终结了 1.4 抢占式调度 大部分时候应用程序在运行的

Michael__Wu的博客 815

操作系统实验 进程调度

实验一 华为云上openEuler操作系统环境 1. 实验要求 进程相关编程实验 a) 观察进程调度 b) 观察进程调度中的全局变量改变 c) 在子进程中调用system函数 d) 在子进程中调用exec族函数 在此实验中完成: (1)熟悉操作命令、编辑、编译、运行程序。完成操作系统原理课程教材P103作业 3.7 (采用图3-32所示的程序)的运行验证,多运行程序几次观察结果;去除wait后再观察结果并进行理论分析。 (2)扩展图3-32的程序,添加一个全局变量并在父进程和子进程中对这个变量做不同操作,输

hushrush的博客 2114

操作系统笔记——第8章 调度

1、背景 1.1 上下文切换 切换cpu的当前任务,从一个进程/线程到另一个 保存当前的进程/线程在PCB/TCP中的执行状态 读取下一个进程/线程的上下文 1.2 CPU调度 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程 调度程序:挑选线程/线程的内核函数(通过一些调度策略) 什么时候进行调度 从一个状态切换到另一个状态(尤其是和运行有关的状态变化)会触发调度 ...

MaoziYa的博客 687
上一篇: 五. MMU 之 IPvirtual
下一篇: 为什么中断处理函数内不能休眠
LastEditor
博客等级 码龄18年 2粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值