操作系统导论——第36章 I/O设备

1. 系统架构

之所以使用分层,这是由于成本和效率之间的平衡

2. 标准设备

接口:向系统其他部分展现的硬件接口

内部结构:设备相关特定实现,几个芯片,CPU和通用内存等

3. 标准协议

While (STATUS == BYSY)
    ;

a、轮询设备,反复读取寄存器,判断设备是否就绪

b、操作系统下发数据到数据寄存器,比如将磁盘块(4KB)传递给设备,如果在这过程有CPU参与数据移动,我们称为编程的I/O(programmed I/O)

c、操作系统将命令写入命令寄存器,设备知道数据已经准备好了,它应该开始执行命令

d、操作系统再次通过不断轮询设备,等待并判断设备是否执行完命令

4. 利用中断减少CPU开销

标准协议中轮询会占用CPU时间,为了提高CPU利用率,可以使用中断来减少CPU开销。

CPU不再需要不断轮询设备,而是向设备发出一个请求,然后就可以让对应进程睡眠,切换执行其他任务。当设备完成了自身操作,会抛出一个硬件中断,引发CPU跳转执行操作系统预先定义好的中断服务程序(Interrupt Service Routine,ISR)或者更为简单的中断处理程序(interrupt handler)。

中断处理程序是一小段操作系统代码,它会结束之前的请求并且唤醒等待I/O的进程继续执行。

需要注意的是,使用中断并非总是最佳方案,假如一个非常高性能的设备,它处理请求很快,通常在CPU第一次轮询时就可以返回结果,此时如果使用中断,反而使系统变慢:切换到其他进程,处理中断,再切换回之前的进程代价不小。

如果设备的速度未知,或者时慢时快,可以考虑使用混合策略,先尝试轮询一小段时间,如果设备没有完成操作,再使用中断。

另外一个最好不要使用中断的场景是网络,网络端收到大量数据包,如果每一个包都发生一次中断,那么有可能导致操作系统发生活锁(即不断处理中断而无法处理用户层的请求)

另一个基于中断的优化是合并,设备在抛出中断之前往往会等待一小段时间,在此期间,其他请求如果很快完成,多次中断可以合并为一个中断,从而降低处理中断的代价。

5. 利用DMA进行更高效的数据传输

DMA引擎是系统中的一个特殊设备,它可以协调完成内存和设备间的数据传递,不需要CPU介入。

DMA的工作过程如下:为了能够将数据传递给设备,操作系统会通过编程告诉DMA引擎数据所在内存位置,要拷贝的大小以及要拷贝到哪个设备,在此之后,操作系统可以去处理其他请求了,当DMA到任务完成后,DMA控制器会抛出一个中断来告诉操作系统自己已经完成数据传输。

6. 设备交互的方法

与设备通信的方法有

  • 用明确的I/O指令,比如x86上的io和out指令,但是这些指令是特权指令,操作系统是唯一可以直接与设备交互的实体
  • 内存映射I/O(memory-mapped I/O)。通过这种方式,硬件将设备寄存器作为内存地址提供。当需要访问设备寄存器时,操作系统装载或者存入到该内存地址,然后硬件会将装载或者存入转移到设备上,而不是物理内存,内存映射到好处是不需要引入新的指令来完成设备交互

7. 纳入操作系统:设备驱动程序

在操作系统最底层,一部分软件清楚地知道设备如何工作,我们将这部分软件称为设备驱动程序,所有设备交互的细节都封装在其中。

Linux文件系统栈

通过抽象隐藏底层细节,这种封装也有不足的地方,例如如果有一个设备可以提供很多特殊的功能,但是为了兼容大多数操作系统它不得不提供一个通用的接口,这样就使用自身特殊功能无法使用。

驱动程序在整个内核代码中占比很大,Linux中约占70%

8. 案例研究:简单的IDE磁盘驱动程序

IDE硬盘暴露给操作系统的接口比较简单,包括4种类型的寄存器,即控制、命令块、状态和错误

以下是与设备交互的简单协议:

  • 等待驱动就绪
  • 向命令寄存器写入参数
  • 开启I/O
  • 数据传输(针对写要求)
  • 中断处理
  • 错误处理

协议通过4个主要函数实现

  • ide_rw(),它将一个请求加入队列(如果前面还有请求没有完成)或者直接将请求发送到磁盘(通过ide_start_request()),调用进程进入睡眠状态,等待请求处理完成
  • ide_start_request(),它会将请求发送到磁盘,此时x86点in或out指令会被调用,以读取或者写入设备寄存器。
  • ide_wait_ready,在发起请求之前,开始请求函数会使用第三个函数ide_wait_ready来确保驱动处于就绪状态
  • ide_intr,当中断发生时被调用,它从设备中读取数据,并且在结束后唤醒等待的进程,如果此时在队列中还有别的未处理的请求,则调用ide_start_request接着处理下一个I/O请求

9. 小结

中断和DMA用于提高设备效率

访问设备寄存器的两种方式:I/O指令和内存映射I/O

设备驱动程序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/210506.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第三节:提供者、消费者、Eureka

一、 提供者 消费者(就是个说法、定义,以防别人叭叭时听不懂) 服务提供者:业务中被其他微服务调用的服务。(提供接口给其他服务调用)服务消费者:业务中调用其他微服务的服务。(调用…

Windows系统下Elasticsearch-7.15.2安装

一、环境 此次笔记使用的运行环境以及软件版本 系统:WIN10 JDK版本:1.8 Elasticsearch版本:7.15.2 elasticsearch-head版本:最新 IK分词器版本:7.15.2 Kibana版本:7.15.2 二、Elasticsearch基本知识 2.1 介绍…

腾讯云优惠券领取入口及使用指南

腾讯云作为国内领先的云计算服务商,提供了丰富的云产品和服务。为了帮助用户更好地享受腾讯云的服务,腾讯云推出了各种优惠券,包括新用户优惠、老用户优惠等。本文将为大家介绍腾讯云优惠券的领取入口和使用指南。 一、腾讯云优惠券领取入口 …

Certum SSL证书

为了确保在线交易的安全性,以及保护敏感信息免受网络威胁,使用SSL(Secure Socket Layer)证书成为了必要选择。其中,波兰认证机构Certum提供的SSL证书以其高度的安全性和可信赖性,得到了全球用户的广泛认可。…

蓝桥杯物联网竞赛_STM32L071_6_RTC显示

作用: RTC在STM32微控制器中通常由一个独立的低功耗晶振和相关的寄存器组成。它可以独立于主处理器运行,即使在系统电源关闭的情况下(需要备用纽扣电池),也能继续计时和记录日期。注意:RTC是芯片内部的功能,并没有和G…

网络运维与网络安全 学习笔记2023.12.2

网络运维与网络安全 学习笔记 第三十三天 今日目标 Linux系统综述、部署本地Linux、配置Linux网络 SSH远程控制、远程文档管理、选购ECS云主机 Linux系统综述 Linux是一种操作系统 Linux之父,Linus Torwalds 1991年10月,发布0.02版(第一…

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的

通过增加虚拟内存来提高内存使用 本文解决的实际问题: 当我们物理内存小的时候,会出现OOM,然后服务自动死掉的情况。因为物理内存大小是固定的,有没有其他好的办法来解决呢?这里我们可以适当调整Linux的虚拟内存来协作…

FreeRTOS第2天:

1. 二值信号量简介(386.11) 什么是信号量? 信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代码段不被并 发调用。信号量这个名字,我们可以把它拆…

Android BT HCI分析简介

对于蓝牙开发者来说,通过HCI log可以帮助我们更好地分析问题,理解蓝牙协议,就好像网络开发一定要会使用Wireshark分析网络协议一样。 本篇主要介绍HCI log的作用、如何抓取一份HCI log,并结合一个实际的例子来说明如何分析HCI log…

eclipse中设置自动补齐代码

eclipse中设置自动补齐代码 01 在window里找到preference 02 在preference里搜索content assist 03 在Java的content assist设置 设置为.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 04 apply and close即可

mysql在linux环境下安装(rpm)以及初始化后的登录配置

注:该安装步骤转载于CSDN,下方配置为原创 按照图片安装并初始化完成MySQL等操作后进行; 安装对于rpm包集合 1-查看安装情况(有4个路径) whereis mysql 2-查看服务状态 systemctl status mysql 3-初始化数据库 mysqld --initial…

mybatis源码(五)springboot pagehelper实现查询分页

1、背景 springboot的pagehelper插件能够实现对mybatis查询的分页管理,而且在使用时只需要提前声明即可,不需要修改已有的查询语句。使用如下: 之前对这个功能一直很感兴趣,但是一直没完整看过,今天准备详细梳理下。按…

施人玫瑰手留余香和影像组学、医学人工智能未来漫谈

今天收到进阶班学员的留言: 提示:本文有硬核软文嫌疑,请慎重阅读。“ 我用您给我们讲的CLEAR,与一个审稿人进行了battle。有理有据。评估下来,我感觉我们的文章还是挺符合CLEAR的。” 我从来不排斥在商言商&#xff0…

初识数据结构及复杂度

1、数据结构 数据结构数据结构(描述和组织数据),Java会把一些数据结构封装起来,在java中数据结构叫做集合。 数据结构:(data structer)是计算机存储、组织数据的方式,指相互之间存在…

使用 mtcnn 和 facenet 进行人脸识别

一、前言 人脸识别目前有比较多的应用了,比如门禁系统,手机的人脸解锁等等,今天,我们也来实现一个简单的人脸识别。 二、思维导图 三、详细步骤 3.1 准备 3.1.1 facenet 权重文件下载 下载地址:https://drive.goo…

用户反馈组件实现(Vue3+ElementPlus)含图片拖拽上传

用户反馈组件实现&#xff08;Vue3ElementPlus&#xff09;含图片拖拽上传 1. 页面效果1.1 正常展示1.2 鼠标悬浮1.3 表单 2. 代码部分1.2 html、ts1.2 less部分 3. 编码过程遇到的问题 1. 页面效果 1.1 正常展示 1.2 鼠标悬浮 1.3 表单 2. 代码部分 1.2 html、ts <templ…

虚拟机备份数据自动化验证原理

备份数据成功备份下来了&#xff0c;但是备份数据是否可用可靠&#xff1f;对于这个问题&#xff0c;最好最可靠的方法是将备份数据实际恢复出来验证。 但是这样的方法&#xff0c;不仅费时费力&#xff0c;而且需要随着备份数据的定期产生&#xff0c;还应当定期做备份数据验…

在国内Facebook广告怎么解决充值渠道问题?

怎么解决Facebook预充值跑广告营销的付款方式问题呢&#xff1f; Facebook跑广告是很多做出口营销的公司或团队喜欢的平台之一&#xff0c;那就避免不了需要支付给Facebook平台广告费用了&#xff0c;那到底用什么方式去充值到FB号上去解决呢&#xff1f;FB预充值有什么咔可以…

产业迭代 共谋新生 喜尔康智家总冠名2023中国建材与家居行业焕新发展大会

2023年家居市场迎来了全新的变化&#xff0c;行业不断向绿色化、智能化方向发展&#xff0c;特别是在商务部等13部门发布《关于促进家居消费若干措施的通知》后&#xff0c;更加注重推动大家居市场产业升级迭代和高质量发展。在这个过程中&#xff0c;绿色化、智能化转型成为家…