`
骑猪逛街666
  • 浏览: 141713 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

IO调度算法学习

阅读更多
阅读原文请点击:http://click.aliyun.com/m/23327/
摘要: 转载自 http://scoke.blog.51cto.com/769125/490546 IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯.

转载自 http://scoke.blog.51cto.com/769125/490546
IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯. (elevator)而相应的算法也就被叫做电梯算法.而Linux中IO调度的电梯算法有好几种,一个叫做as(Anticipatory),一个叫做 cfq(Complete Fairness Queueing),一个叫做deadline,还有一个叫做noop(No Operation).具体使用哪种算法我们可以在启动的时候通过内核参数elevator来指定.

一)I/O调度的4种算法

1)CFQ(完全公平排队I/O调度程序)

特点:
在最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器也是最好的选择.
CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中.
CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择.
CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级的进程的读写不能自动地继承高的I/O优先级.

工作原理:
CFQ为每个进程/线程,单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,各队列之间的调度使用时间片来调度,
以此来保证每个进程都能被很好的分配到I/O带宽.I/O调度器每次执行一个进程的4次请求.

2)NOOP(电梯式调度程序)

特点:
在Linux2.4或更早的版本的调度程序,那时只有这一种I/O调度算法.
NOOP实现了一个简单的FIFO队列,它像电梯的工作主法一样对I/O请求进行组织,当有一个新的请求到来时,它将请求合并到最近的请求之后,以此来保证请求同一介质.
NOOP倾向饿死读而利于写.
NOOP对于闪存设备,RAM,嵌入式系统是最好的选择.

电梯算法饿死读请求的解释:
因为写请求比读请求更容易.
写请求通过文件系统cache,不需要等一次写完成,就可以开始下一次写操作,写请求通过合并,堆积到I/O队列中.
读请求需要等到它前面所有的读操作完成,才能进行下一次读操作.在读操作之间有几毫秒时间,而写请求在这之间就到来,饿死了后面的读请求.

3)Deadline(截止时间调度程序)
阅读原文请点击:http://click.aliyun.com/m/23327/
分享到:
评论

相关推荐

    IO调度算法共4页.pdf.zip

    **IO调度算法** 在计算机系统中,输入/输出(Input/Output, 简称I/O)操作是数据传输的关键部分,特别是在多任务环境中。I/O调度算法是操作系统内核的重要组成部分,它负责管理磁盘读写操作的顺序,以优化系统性能...

    磁盘调度算法实验报告(20210919121020).pdf

    磁盘调度算法实验的主要目的是通过学习EOS实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机;观察EOS实现的FCFS、SSTF和SCAN磁盘调度算法,了解常用的磁盘调度算法;编写CSCAN和N-Step-SCAN磁盘调度算法,...

    Linux.Kernel.IO.Scheduler.pdf

    在讨论的文件中,“Linux.Kernel.IO.Scheduler.pdf”详细介绍了Linux内核中IO调度层的相关知识点,包括请求队列、调度器操作、I/O调度器的工作原理、调度算法、请求队列的管理和处理,以及与块设备驱动的交互等。...

    实验二 磁盘调度_操作系统磁盘调度算法_

    此外,你还会学习到如何分析和评估磁盘调度算法的性能,这对提升你的系统设计能力大有裨益。 在学习过程中,不仅要关注理论知识,还要注重实践,通过实际操作加深理解。这将帮助你在未来面对实际的系统优化问题时,...

    cpu调度算法.pdf

    CPU调度算法是操作系统核心功能之一,用于决定如何在多任务环境下分配处理器资源。本文将深入探讨两种常见的CPU调度算法:优先数调度和循环轮转调度,...然而,这个简单的模型提供了学习和理解调度算法基础的良好起点。

    操作系统磁盘IO调度原码

    操作系统磁盘I/O调度是计算机系统中至关重要的一个环节,它负责管理硬盘驱动器的数据读写操作,确保多个进程...通过VC6.0这样的开发环境,我们可以直观地学习和测试这些调度算法,从而更好地理解其工作原理和优缺点。

    操作系统的磁盘调度算法

    通过这个Java项目,学习者不仅能掌握基本的磁盘调度算法,还能锻炼编程能力,提升对操作系统底层机制的理解。同时,这个模拟工具也可以作为教学辅助材料,帮助学生直观地理解复杂的磁盘调度过程。

    linux IO优化

    Linux系统中的IO调度算法是操作系统内核的重要组成部分,负责管理和调度磁盘I/O请求,以提高系统的整体性能。根据不同的应用场景,Linux提供了多种I/O调度算法供用户选择。 #### 二、I/O调度算法类型 Linux系统...

    操作系统驱动调度实验报告

    电梯调度算法是一种高效的磁盘驱动调度算法,其基本思路是模拟电梯的工作原理,按照磁头移动的方向顺序处理磁盘访问请求。 1. **初始化**: - 初始化磁头位置和其他相关变量。 2. **接受请求**: - 接收用户的磁盘...

    Factory IO 电梯模型

    6. **优化调度**:在复杂场景中,多部电梯的调度算法是一个重要的考虑因素,如何有效地分配电梯服务不同楼层的呼叫,以减少乘客等待时间,是系统优化的目标。 通过Elevator.factoryio文件,用户可以在Factory IO...

    操作系统课程设计报告--电梯调度

    - **模拟电梯调度算法**:通过对电梯调度算法的模拟,探索其在磁盘驱动调度中的应用,进而实现对磁盘请求的有效管理。 - **编程实践**:通过具体的编程实践,加深对相关理论知识的理解,并锻炼解决实际问题的能力。 ...

    AOPS节点中基于业务分级的均衡调度算法

    随着人工智能和机器学习技术的发展,未来的均衡调度算法可能会集成自适应学习机制,通过历史数据分析和实时监控来不断优化调度策略。此外,算法在考虑业务分级时也会更加细致,以适应更为复杂多变的业务场景。 综上...

    操作系统,课程设计,磁盘调度

    操作系统是计算机系统的核心组成部分,它负责管理系统的硬件资源,其中包括磁盘这样的存储设备。在操作系统课程设计中,磁盘调度是一...通过对各种调度算法的深入学习和实践,你将能更好地理解操作系统的复杂性和魅力。

    hadoop面试题

    * core-site.xml:fs.defaultFSNameNode URI、io.file.buffer.size 等 * hdfs-site.xml:dfs.namenode.name.dir、dfs.namenode.hosts、dfs.blocksize 等 * yarn-site.xml:yarn.resourcemanager.address、yarn....

    osio-iosched:ios调度器

    通过阅读和分析源代码,开发者可以学习到如何定制和优化I/O调度算法,以及如何在iOS环境中集成这样的低级组件。 该项目可能包含以下部分: 1. I/O调度算法实现:这部分代码将定义如何决定哪些I/O请求应该优先处理,...

    面向多机器人协同控制的智能调度系统的设计与实现.pdf

    5. **智能调度策略**:智能调度系统利用机器学习和深度学习算法,对生产过程中的任务分配、路径规划进行优化,确保资源的有效配置和生产效率的最大化。 6. **实时追踪**:在生产环境中,实时追踪是至关重要的,它...

    Linux操作系统课程指导:Ch4进程调度.pptx

    Linux调度算法的设计目标是公平性,CFS通过虚拟运行时间(vruntime)的概念,以红黑树结构存储进程,选择vruntime最小的进程执行。时间片的长度动态调整,NICE值仅作为权重影响时间片分配,而非直接决定时间片长度。...

    cpuscheduling.github.io

    `cpuscheduling.github.io`是一个专门用于展示和理解CPU调度算法的在线平台。它提供了一个交互式的环境,使用户能够直观地比较不同调度算法的效果,包括一种混合了循环调度算法和优先级调度算法的新算法。这个工具...

    java编写整合操作系统五个算法

    常见的作业调度算法有先来先服务(FCFS)、短作业优先(SJF)、优先级调度等。在Java中,可以通过创建线程池和调度器来模拟作业调度过程,比如使用`java.util.concurrent.ScheduledExecutorService`来实现定时或延迟...

Global site tag (gtag.js) - Google Analytics