磁盘调度算法

电梯调度算法---SCAN算法

荒凉一梦 提交于 2020-03-23 06:21:37
请珍惜小编劳动成果,该文章为小编原创。转载请注明出处。 扫描(SCAN)调度算法:总是从磁臂当前位置開始,沿磁臂的移动方向去选择离当前磁臂近期的那个柱面的訪问者。 假设沿磁臂的方向无请求訪问时,就改变磁臂的移动方向。採用这样的调度算法。须要为訪问者设置两个队列。依据磁头的移动方向,能訪问到的訪问者由近及远排队。背离磁头移动方向的訪问者也由近及远排为还有一队。先按磁头移动方向队列调度訪问者訪问磁盘,当该方向没有訪问者时,再改变方向,选择还有一个訪问者队列訪问磁盘。 java代码实现: import java.util.Scanner; public class SCAN { int visitAdd[]; int visitSub[]; int index=0; //存放下标,已排序序列中找到比它大的最小值的下标 public void scan(int data[],int begin,int direction){ int temp=0; //从小到大排序 for(int i=0;i<data.length;i++){ for(int j=i;j<data.length;j++){ if(data[i]>data[j]){ temp=data[i]; data[i]=data[j]; data[j]=temp; } } } for(int i=0;i<data.length;i+

操作系统中常见算法汇总

不问归期 提交于 2020-03-08 16:07:54
一、常见作业调度(高级调度)算法 1、先来先服务调度算法(FCFS):就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。 2、短作业优先调度算法(SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。 3、最高响应比优先算法(HRN):FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。 基本概念: 作业周转时间(Ti)=完成时间(Tei)-提交时间(Tsi) 作业平均周转时间(T)=周转时间/作业个数 作业带权周转时间(Wi)=周转时间/运行时间 响应比=(等待时间+运行时间)/运行时间 4.基于优先数调度算法(HPF):每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。 5.均衡调度算法,即多级队列调度算法。 二、常见进程调度(低级调度)算法 1、先进先出算法(FIFO):按照进程进入就绪队列的先后次序来选择。即每当进入进程调度

操作系统常用调度算法

蓝咒 提交于 2020-03-08 16:06:56
转发自:http://blog.chinaunix.net/uid-25132162-id-361291.html 一、常见的批处理作业调度算法 1. 先来先服务调度算法(FCFS) :就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。 2. 短作业优先调度算法 (SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。 3. 最高响应比优先算法(HRN): FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。 4. 基于优先数调度算法(HPF): 每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。 5. 均衡调度算法,即 多级队列调度算法 基本概念: 作业周转时间(Ti)=完成时间(Tei)-提交时间(Tsi) 作业平均周转时间(T)=周转时间/作业个数 作业带权周转时间(Wi)=周转时间/运行时间 响应比=(等待时间+运行时间)/运行时间 二、进程调度算法

Linux磁盘IO调度算法

让人想犯罪 __ 提交于 2020-03-04 19:02:19
A、CFQ(完全公平排队I/O调度程序) 最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器是最好的选择。 CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择。 CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级的进程的读写不能自动地继承高的I/O优先级。 对于很多IO压力较大的场景就并不是很适应,尤其是IO压力集中在某些进程上的场景。因为这种场景我们需要更多的满足某个或者某几个进程的IO响应速度,而不是让所有的进程公平的使用IO,比如数据库应用。 CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中。 CFQ工作原理: CFQ为每个进程/线程,单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,每个队列按照上述规则进行merge和sort。 各队列之间的调度使用时间片来调度,以此来保证每个进程都能被很好的分配到I/O带宽,I/O调度器每次执行一个进程的4次请求。可以调queued和quantum来优化。 B、NOOP(电梯式调度程序) 在Linux 2.4或更早的版本的调度程序,那时只有这一种I/O调度算法,I/O请求被分配到队列,调度由硬件进行,只有当CPU时钟频率比较有限时进行。 Noop对所有的I/O请求都用FIFO队列形式处理

操作系统知识点

无人久伴 提交于 2020-02-08 23:45:52
操作系统是什么 管理计算机硬件与软件资源的程序,是计算机系统的内核与基石 本质上是运行在计算机上的软件程序 为用户提供一个与系统交互的操作界面 分为内核与外壳,其中内核是能操作硬件的程序,而外壳则是围绕着内核的应用程序 进程调度算法 根据系统资源分配资源所规定的资源分配算法 先来先服务调度算法 FCFS调度算法每次从就绪队列中选择最先进入该队列的进程,将处理机分配给它,使之投入运行,直到完成或因某种原因而阻塞时才释放处理机。 不可剥夺算法。对长作业有利,对短作业不利。有利于CPU繁忙型作业,不利于I/O繁忙型作业 时间片轮转调度法 适用于分时系统 系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。 时间片的大小对系统性能影响很大。如果时间片过短,则处理机在进程间过于频繁切换,处理机的开销增大;若过长,则退化为先来先服务算法 短进程优先调度算法 从就绪队列中选择一个估计运行时间最短的进程,将处理机分配给它,使之立即执行,直到完成或发生某事件而阻塞时,才释放处理机。 非抢占策略。但是长作业不利,不能保证紧迫性作业(进程)被及时处理

《Linux内核设计与实现》 Chapter4 读书笔记

浪尽此生 提交于 2020-01-09 05:02:22
《Linux内核设计与实现》 Chapter4 读书笔记 调度程序负责决定将 哪个进程投入运行,何时运行以及运行多长时间 ,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统。 一、多任务 多任务操作系统就是能同时 并发地交互执行 多个进程的操作系统。 多任务系统可以划分为两类: 非抢占式多任务 进程会一直执行直到自己主动停止运行 抢占式多任务 Linux/Unix使用的是抢占式的方式;强制的挂起进程的动作就叫做抢占。 像所有unix的变体和许多其他现代操作系统一样,Linux提供了抢占式的多任务模式。 进程的时间片:进程在被抢占之前能够运行的时间是预先设置好的。 二、Linux 的进程调度 O(1)调度器虽然在拥有数以十计(不是数以百计)的多处理器的环境下尚能表现出近乎完美的性能和可扩展性,但是时间证明该调度算法对于调度那些响应时间敏感的程序却有一些先天不足,这些程序我们称其为交互进程一它无疑包括了所有需要用户交互的程序。 因此: O(1)调度程序虽然对于大服务器的工作负载很理想,但是在有很多交互程序要运行的桌面系统上则表现不佳,因为其缺少交互进程,自2.6内核系统开发初期,开发人员为了提高对交互程序的调度性能引入了新的进程调度算法,其中最为著名的是“反转楼梯最后期限调度算法,该算法吸取了队列理论,将公平调度的概念引入了Linux调度程序。并且最终在2.6

处理机调度

丶灬走出姿态 提交于 2020-01-01 13:45:35
1 处理机的二级调度 宏观上:作业调度 微观上:进程调度 2 作业调度 2.1作业调度的功能 作业调度的主要任务是完成作业从后备状态到执行状态和从执行状态到完成状态的转变。 作业调度功能: 1.记录已进入系统的各作业的情况(JCB,Job Control Block); 2.按一定的调度算法,从后备作业中选择一个或几个作业进入系统内存; 3.为被选中的作业创建进程,并且为其申请系统资源; 4.作业结束后作善后处理工作。 2.2 作业控制块(JCB,Job Control Block) 每个作业进入系统时由系统为其建立一个作业控制块JCB(Job Control Block),它是存放作业控制和管理信息的数据结构,主要信息见下图。 2.3 调度性能的衡量 作业调度算法规定了从后备作业中选择作业进入系统内存的原则,这些原则的性能如何,就是本节所讨论的问题。 一、确定调度算法时应考虑的因素 1.应与系统的整体设计目标一致 2.考虑系统中各种资源的负载均匀 3.保证作业的执行 4.对一些专用资源的使用特性的考虑 二、调度性能的衡量 通常采用平均周转时间和带权平均周转时间 作业的周转时间: ti = tci-tsi ti:作业周转时间 tci:作业完成时间 tsi: 作业提交时间 2.4 先来先服务调度算法和短作业优先调度算法 先来先服务调度算法:

操作系统原理之磁盘调度

僤鯓⒐⒋嵵緔 提交于 2020-01-01 07:49:07
首先介绍主要的的四种磁头调度算法 (一)先来先服务算法(FCFS) 1、算法思想:按访问请求到达的先后次序服务。 2、优点:简单,公平。 3、缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。 4、例子: 假设磁盘访问序列:98,183,37,122,14,124,65,67。读写头起始位置:53。求:磁头服务序列和磁头移动总距离(道数)。 由题意和先来先服务算法的思想,得到 下图所示的磁头移动轨迹。由此: 磁头服务序列为:98,183,37,122,14,124,65,67 磁头移动总距离=(98-53)+(183-98)+|37-183|+(122-37)+|14-122|+(124-14)+|65-124|+(67-65)=640(磁道) (二)最短寻道时间优先算法(SSTF) 1、算法思想:优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先。 2、优点:改善了磁盘平均服务时间。 3、缺点:造成某些访问请求长期等待得不到服务。 4、例子:对上例的磁盘访问序列,可得磁头移动的轨迹 如下图。请同学自己给出磁头服务序列并计算磁头移动总距离。 (三) 扫描算法(电梯算法)(SCAN) 1、算法思想:当设备无访问请求时,磁头不动;当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务

磁盘性能和调度

笑着哭i 提交于 2019-11-28 13:54:24
  磁盘是计算机系统中最重要的存储设备,其中含有绝大部分文件。对文件的操作直接涉及到磁盘的访问,磁盘IO的速度效率和可靠性将直接影响系统的性能。因此,好的磁盘调度算法、优越的冗余技术,都是提高磁盘系统性能的切入点。 磁盘调度算法 1.先来先服务:按照进程访问磁盘的先后顺序进行调度。   优点:公平、简单   缺点:效率低,平均寻道时间较长 2.最短寻道时间优先:要求访问磁道与当前磁头的磁道距离最近。   优点:相比于先来先服务,明显减少平均寻道长度   缺点:磁头可能在一个小的范围内一直寻到,造成远处请求不满足而饥饿 3.扫描算法:又称电梯调度算法,像电梯一样上下连续来回寻道   优点:避免了“饥饿”现象   缺点:对于刚刚经过的磁道又来了新的请求,再次访问要最多等2个磁道长度 4.循环扫描算法:磁头单向移动,其余和扫描算法一样   优点:解决了可能的错过型请求的双倍延迟   缺点:浪费一个磁头的移动次数,什么都没做 5.NStepSCAN算法:磁盘请求分成N个队列,队列间用先来先服务处理,队列内用扫描算法处理   优点:避免新请求带来的粘着问题   缺点:N值很大时,接近于扫描算法;N=1时,就是先来先服务 6.FSCAN算法:磁盘请求只分成两个队列,一个是当前请求队列,一个是未来请求队列,当前队列按照扫描算法处理,当前队列处理完就处理另一个,此时另一个为当前队列

Linux IO Scheduler

走远了吗. 提交于 2019-11-27 05:06:06
  一直都对linux的io调度算法不理解,这段时间一直都在看这方面的内容,下面是总结和整理的网络上面的内容。生产上如何建议自己压一下。以实际为准。   每个块设备或者块设备的分区,都对应有自身的请求队列 (request_queue), 而每个请求队列都可以选择一个 I/O 调度器来协调所递交的 request 。 I/O 调度器的基本目的是将请求按照它们对应在块设备上的扇区号进行排列,以减少磁头的移动,提高效率。每个设备的请求 队列里的请求将按顺序被响应。实际上,除了这个队列,每个调度器自身都维护有不同数量的队列,用来对递交上来的 request 进行处理,而排在队列最前面的 request 将适时被移动到请求队列 中等待响应。    IO调度器在内核栈中所处位置如下:      下图是一个以write为例的 Linux 磁盘IO子系统的架构:   下面是详细的Linux 存储栈流程图:    IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯. (elevator)而相应的算法也就被叫做电梯算法.而Linux中IO调度的电梯算法有好几种,一个叫做as(Anticipatory),一个叫做 cfq(Complete Fairness Queueing),一个叫做deadline