操作系统Lesson12 - 交互式和实施系统调度

news/2024/12/12 14:05:18/

文章目录

  • 交互系统中的调度
  • 轮询调度
  • 优先级调度
    • 静态分配
    • 动态分配
    • 彩票调度
    • 多级反馈队列MLFQ
    • 公平分享调度
  • 实时调度
  • 线程调度


先来先服务
用于非抢占式调度算法。

基于时间片 -> 抢占式 -> 绝对非抢占

磁盘任务放到内存 -> 作业调度
内存任务放到CPU -> 进程调度

缺陷:某任务耗时非常长,整个任务队列的任务的周转时间非常长,整个系统的体验很差。


短作业优先(SJF)
评估作业的时间,短的优先。

缺陷:你怎么知道哪个作业运行多少时间?

周转时间任务结束时间 - 任务进入队列的时间


最短剩余时间优先(SRTN)
现实中,不会那么多任务一起到达,如果B执行了99%,来了个A任务,作业时间比B短,那就又跑过去执行B了。所以动态优化,优先调度剩余时间最短的任务。


交互系统中的调度

响应时间:被CPU揪出来的时间 - 进入就绪队列的时间

轮询调度

轮询算法(RR):每个进程分配一个时间片,轮着来。

关键:时间片的长度不能太长,会让其他进程等待过长;时间片也不能太短,导致每个任务执行的太少了,还花费大量时间在调度上。

运行态转换成就绪态只有两种情况:
1.时间片到了 -> 回到就绪态队列
2.高优先级的进程来了(基于抢占式OS

在这里插入图片描述

OS系统初始化会初始化一个中断向量表,里面记录着异常、中断的处理函数首地址,里面就有定时器中断(CPU提供的)

Q:定时器中断发生了,是否代表时间片到了?
A:不是,定时器可能是1ms一次,而时间片是100ms,当累加到100时,时间片到了,去执行调度算法。

Q:定时器中断为什么设置那么小?
A:因为一些中断可能比较微小(比如超时服务,5ms),那么时间片太大了,不足以描述中断,那么时钟中断就来帮忙。

所以说时钟中断有两个作用:
1.累加到时间片长度,启动调度程序;
2.处理中断。

在这里插入图片描述


优先级调度

静态分配

轮询调度的每个进程的优先级是相同的;
优化分配方式就引入了优先级;
优先级高的先执行。


动态分配

如果这个进程运行快,那么就优先让他运行。
所以在动态调整中I/O密集型优先级高一点,CPU密集型优先级低一些。

Q:你怎么知道是I/O密集型还是CPU密集型?
A:系统通过查看时间片是否用完来判断:如果时间片到了你还没工作完,一直占用CPU,那就是CPU密集型;如果你主动放弃了CPU,那你就是I/O密集型。
-然而这么做有一个缺点:如果有一个黑客程序,在即将用完时间片时主动放弃CPU,那么就会被系统判定为I/O密集型而保持/提高优先级,此时他就会一直抢占CPU,其他进程饿死了。

在这里插入图片描述


彩票调度

ABCD四个进程,100张彩票,优先级高的彩票拿的多,比如A40,其他都20,系统随机摇号码,那么即可保证A运行的多,而且其他进程也不会饿死。
弥补了动态分配的缺陷。


多级反馈队列MLFQ

1、若A优先级>B优先级,运行A
2、若A优先级 == B优先级,RR(轮询)
3、刚进入系统时,放在最高优先级
(原)4、工作用完了整个时间片,降级;如果主动放弃CPU,优先级不变
(新)4、每层分配一个时间配额,达到自动降级
5、经过一段时间,将系统所有任务重新加入最高优先级

越下层时间片越长

在这里插入图片描述


公平分享调度

在多用户系统下,如果用户任务多,分配反而少,所以需要一个调度算法来保证公平,也就是大家都一样,无论多少任务,分到的时间片都一样。


实时调度

关注时间

软实时:如果你的截止时间不满足,依然会调。
硬实时:如果你的截止时间不满足,坚决不调。


线程调度

1、用户级线程中有一个程序,负责调度用户线程,而非内核在调度
2、用户级线程没有在内核中注册,由用户自己写的调度程序调度,而这个调度程序被内核捕获

用户进程抢到了时间片后,只回执行进程内的线程任务,在切换时间片之前不会被其他进程任务打断;
而在内核中,线程被调度程序塞到各种队列中去,CPU不管你是哪个进程的线程,只要在就绪队列中,抓来就要,可能交替运行。

在这里插入图片描述


http://www.ppmy.cn/news/1554515.html

相关文章

Edge SCDN的独特优势有哪些?

强大的边缘计算能力 Edge SCDN(边缘安全加速)是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术,智能调度使用户就近获取所需内容,为用户提供稳定快速的访问…

Github 2024-12-01 开源项目月报 Top20

根据Github Trendings的统计,本月(2024-12-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目9Go项目2HTML项目1Shell项目1Jupyter Notebook项目1屏幕截图转代码应用 创建周期:114 天开发语言:TypeScript, Py…

k8s下的dns说明

k8s下有一个核心组件是coredns => kubectl get all -n kube-system -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ... pod/coredns-86966648-crrt5 1/1 Runni…

成像报告撰写格式

成像报告撰写格式 实验人员: 实验时间: 实验地点: 实验目的: 1实验仪器 1.1相机 包括制造商,型号,面阵还是线阵,彩色还是黑白,图像尺寸,光学接口等。 1.2镜头 包…

多线程与线程互斥

目录 引言 一、多线程设计 多线程模拟抢票 二、互斥锁 互斥量的接口 修改抢票代码 锁的原理 锁的封装:RAII 引言 随着信息技术的飞速发展,计算机软件正变得越来越复杂,对性能和响应速度的要求也日益提高。在这样的背景下,…

基于python django的药材数据可视化系统的设计与实现,可对各类药材数据做一个统计分析可视化

研究背景 随着中医药文化的不断传承与发展,传统中药材的市场需求逐渐增加。然而,随着药材种类繁多、来源复杂、品质参差不齐,如何高效地管理、分析与展示中药材的相关数据,成为现代中药产业面临的重要课题。传统的药材数据管理方…

三一集团Java开发面试题及参考答案

Java 中有几种常见的线程池? 在 Java 中,常见的线程池有以下几种: 首先是 FixedThreadPool(固定线程数线程池)。它的特点是创建一个固定大小的线程池,线程数量在初始化的时候就已经确定。例如,通过 Executors.newFixedThreadPool (int nThreads) 来创建,其中 nThreads …

Xilinx IOserdes 原语使用 ---- 回环实验

Xilinx IOserdes 原语使用 ---- 回环实验 下面RTL 代码,仅供参考,参考手册 :xilinx UG471 首先需要调节 bitslip 对齐,可以自己自定义序列接收检测,方可传输数据。 注意: bitslip 必须在clkdiv 的一个周期…