由于io设备错误

更新时间:2023-03-22 23:27:21 阅读: 评论:0

中小学校长-员工kpi绩效考核表

由于io设备错误
2023年3月23日发(作者:男士黄金项链)

IO设备是如何与操作系统交互的

I/O设备指的是管理和控制计算机的所有输⼊/输出设备,其中,输⼊/输出(I/O)指的是⼀切操作、程序或设备与计算机之间发⽣的数据传输过

程,所以I/O设备也可以理解为与计算机进⾏数据传输的硬件。最常见的I/O设备有打印机、硬盘、键盘和⿏标。了解完概念,我们来看I/O设

备是如何集成进计算机系统中的,采⽤的⼀般机制是什么,⼜是如何完善机制使其变得⾼效的。

系统架构

先看⼀个典型系统的架构,如下图,CPU通过某种内存总线或互连电缆连接到系统内存。显卡或者其他⾼性能I/O设备通过常规的I/O总线连

接到系统,在许多现代系统中会是PCI或它的衍⽣形式。最后,更下⾯是外围总线,⽐如SCSI、SATA或者USB,它们将最慢的设备连接到系

统,包括磁盘、⿏标及其他类似设备。

I/O设备典型系统架构

采⽤这种分层架构的好处是可以让要求⾼性能的设备(⽐如显卡)离CPU更近⼀些,低性能的设备离CPU远⼀些。因为在⼯程上⾼性能总线造

价⾮常⾼,为了降低成本,越快的总线则越短。另外,将磁盘和其他低速设备连到外围总线的好处还有很多,其中较为突出的好处就是你可以在狗和猪相配婚姻如何 外

围总线上连接⼤量的设备。

上述设备接⼝通常包含3个寄存器:

1、状态寄存器,可以读取并查看设备的当前状态;

2、命令寄存器,⽤于通知设备执⾏某个具体任务;

3、数据寄存器,将数据传给设备或从设备接收数据。

通过读写这些寄存器,操作系统可以控制设备的⾏为。

现在我们再来看操作系统是如何与这些设备进⾏交互的。

标准协议

标准协议是操作系统与I/O设备交互的⼀般机制,包含了4个步骤:

1、操作系统通过反复读取状态寄存器,等待设备进⼊可以接收命令的就绪状态。我们称之为轮询设备(基本上,就是问它正在做什么);

2、操作系统下发数据到数据寄存器。例如,你可以想象如果这是⼀个磁盘,需要多次写⼊操作,将⼀个磁盘块(⽐如4KB)传递给设备。如果

主CPU参与数据移动,我们就称之为编程的I/O;

3、操作系统将命令写⼊命令寄存器;这样设备就知道数据已经准备好了,它应该开始执⾏命令;

4、操作系统再次通过不断轮询设备,等待并判断设备是否执⾏完成命令(有可能得到⼀个指⽰成功或失败的错误码)。

这个协议的优点是⾜够简单并且有效,但⽐较明显的缺点是轮询过程⽐较低效,在等待设备执⾏完成命令时浪费⼤量CPU时间,如果此时操作系

统可以切换执⾏下⼀个就绪进程,就可以⼤⼤提⾼CPU的利⽤率。

接下来针对标准协议的缺点做进⼀步的完善,使其数据交互变得更加⾼效。

⼀、利⽤中断减少CPU开销

引⼊中断,CPU就不再需要不断地轮询设备,⽽是向设备发出⼀个请求,然后就可以让对应进程睡眠,切换执⾏其他任务。当设备完成了⾃⾝操

作,会抛出⼀个硬件中断,引发CPU跳转执⾏操作系统预先定义好的中断处理程序。中断处理程序是⼀⼩段操作系统代码,它会结束之前的请求

(⽐如从设备读取到了数据或者错误码)并且唤醒等待I/O的进程继续执⾏。中断允许计算形容春天的诗句 与I/O重叠,这是提⾼CPU利⽤率的关键。下⾯的

时间线展⽰了这⼀点。

其中,进程1在CPU上运⾏⼀段时间(对应CPU那⼀⾏上重复的1),然后发出⼀个读取数据的I/O请求给磁盘。如果没有中断,那么操作

系统就会简单⾃旋,不断轮询设备状态,直到设备完成I/O操作(对应其中的p)。当设备完成请求的操作后,进程1⼜可以继续运⾏。

如果我们利⽤中断并允许重叠,操作系统就可以在等待磁盘操作时做其他事情:

在烈日图片 这个例⼦中,在磁盘处理进程1的请求时,操作系统在CPU上运⾏进程2。磁盘处理完成后,触发⼀个中断,然后操作系统唤醒进程1继续

运⾏。这样,在这段时间,⽆论CPU还是磁盘都可以有效地利⽤。

但使⽤中断并⾮总是最佳⽅案。假如有⼀个⾮常⾼性能的设备,它处理请求很快:通常在CPU第⼀次轮询时就可以返回结果。此时如果使⽤中

断,反⽽会使系统变慢:切换到其他进程,处理中断,再切换回之前的进程代价不⼩。因此,如果设备⾮常快,那么最好的办法反⽽是轮询。如果

设备⽐较慢,那么采⽤允许发⽣重叠的中断更好。如果设备的速度未知,或者时快时慢,可以考虑使⽤混合策略,先尝试轮询⼀⼩段时间,如果设

备没有完成操作,此时再使⽤中断。这种两阶段的办法可以实现两种⽅法的好处。

另⼀个最好不要使⽤中断的场景是⽹络。⽹络端收到⼤量数据包,如果每⼀个包都发⽣⼀次中断,那么有可能导致操作系统发⽣活锁,即不断处理

中断⽽⽆法处理⽤户层的请求。例如,假设⼀个Web服务器因为“点杠效应”⽽突然承受很重的负载。这种情况下,偶尔使⽤轮询的⽅式可以更

好地控制系统的⾏为,并允许Web服务器先服务⼀些⽤户请求,再回去检查⽹卡设备是否有更多数据包到达。

另⼀个基于中断的优化就是合并。设备在抛出中断之前往往会等待⼀⼩段时间,在此期间,其他请求可能很快完成,因此多次中断可以合并为⼀次

中断抛出,从⽽降低处理中断的代价。当然,等待太长会增加请求的延双鱼女处女男 迟,这是系统中常见的折中。

⼆、利⽤爱国题目 DMA进⾏更⾼效的数据传送

标准协议还有⼀点需要我们注意。具体来说,如果使⽤编程的I/O将⼀⼤块数据传给设备,CPU⼜会因为琐碎的任务⽽变得负载很重,浪费了时

间和算⼒,本来更好是⽤于运⾏其他进程。下⾯的时间线展⽰了这个问题:

进程1在运⾏过程中需要向磁盘写⼀些数据,所以它开始进⾏I/O操作,将数据从内存拷贝到磁盘(其中标⽰c的过程)。拷贝结束后,磁盘上

的I/O操作开始执⾏,此时CPU才可以处理其他请求。

那么如何才能分离这项⼯作,从⽽提⾼CPU的利⽤率?

解决⽅案就是使新生儿怎么上户口 ⽤DMA。DMA引擎是系统中的⼀个特殊设备,它可以协调完成内存和设备间的数据传递,不需要CPU介⼊。

DMA⼯作过程如下。为了能够将数据传送给设备,操作系统会通过编程告诉DMA引擎数据在内存的位置,要拷贝的⼤⼩以及要拷贝到哪个设

备。在此之后,操作系统就可以处理其他请求了。当DMA的任务完成后,DMA控制器会抛出⼀个中断来告诉操作系统⾃⼰已经完成数据传

输。修改后的时间线如下:

从时间线中可以看到,数据的拷贝⼯作都是由DMA控制器来完成的。因为CPU在此时是空闲的,所以操作系统可以让它做⼀些其他事情,⽐

如此处调度进程2到CPU来运⾏。因此进程2在进程1再次运⾏之前可以使⽤更多的CPU。

注:此⽂主要引⽤⾃《操作系统导论》持久化篇章,略有改动

本文发布于:2023-03-22 23:27:19,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/1679498841347915.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:由于io设备错误.doc

本文 PDF 下载地址:由于io设备错误.pdf

下一篇:返回列表
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图