I/O软件层次结构(用户层软件,设备独立性软件,设备驱动程序,中断处理程序,硬件)

文章目录

  • 1.用户层软件
  • 2.设备独立性软件
    • 1.主要实现的功能
    • 2.逻辑设备表(LUT)
  • 3.设备驱动程序
  • 4.中断处理程序
    • 2.中断处理程序的处理流程
  • 4.硬件

1.用户层软件

用户层软件实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作
用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务

Windows操作系统向外提供的一系列系统调用,但是由于系统调用的格式严格,使用麻烦,因此在用户层上封装了一系列更方便的库函数接口供用户使用( Windows API)

2.设备独立性软件

设备独立性软件,又称设备无关性软件
与设备的硬件特性无关的功能几乎都在这一层实现。
在这里插入图片描述

1.主要实现的功能

①向上层提供统一的调用接口(如read/write系统调用)
②设备的保护。
原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。
③差错处理
设备独立性软件需要对一些设备的错误进行处理
④设备的分配与回收
⑤数据缓冲区管理
可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异。
⑥建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序
用户或用户层软件发出I/O操作相关系统调用的系统调用时,需要指明此次要操作的I/O设备的逻辑设备名(eg:去学校打印店打印时,需要选择打印机1/打印机2/打印机3,其实这些都是逻辑设备名
设备独立性软件需要通过“逻辑设备表(LUT,Logical UnitTable)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序

2.逻辑设备表(LUT)

在这里插入图片描述

操作系统系统可以采用两种方式管理逻辑设备表(LUT) :
第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。
第二种方式,为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。

3.设备驱动程序

主要负责对硬件设备的具体控制,将上层发出的一系列命令(read/write)转化成特定设备“能听得懂”的一系列操作。
包括设置设备寄存器;检查设备状态等
不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道。
因此厂家需要根据设备的硬件特性设计并提供相应的驱动程序。

注:驱动程序一般会以一个独立进程的方式存在。

4.中断处理程序

当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。

2.中断处理程序的处理流程

在这里插入图片描述

4.硬件

执行I/O操作,有机械部件、电子部件组成。详情见博主的: IO控制器
设备驱动程序和中断处理程序是直接和硬件打交道的

理解并记住I/O软件各个层次之间的顺序,要能够推理判断某个处理应该是在哪个层次完成的(最常考的是设备独立性软件、设备驱动程序这两层。
只需理解一个特点即可:
直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;
没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu gcc版本降级 Reset gcc version from 11.3 to 11.2 on Ubuntu 22.04

aptitude 需要自己安装 sudo apt-get install aptitude # 安装# aptitude的一些常用的操作: sudo aptitude update # 更新软件源 sudo aptitude search 软件名称 # 查看软件 sudo aptitude install 软件名称 …

【Qt】绘图与绘图设备

文章目录 绘图设备QPainter绘图实例案例1案例2-高级设置案例3:利用画家画资源图片 点击按钮移动图片 QtPaintDevice实例Pixmap绘图设备QImage 绘图设备QPicture 绘图设备 QPainter绘图 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制。整个绘图系…

Apifox创建团队 项目 接口 邀请成员步骤演示

我们打开Apifox 找到 个人空间 然后 点击新建团队 然后这里 我们输入名字 点击确定 我们的团队就出来了 然后 我们点击新建项目 然后肯定是 http 项目名称输入一下 然后 语言 我们中国肯定是中文的 然后点击确定 建好之后 我们就会进入自己的项目啦 然后 我们可以新建个接…

ThinkPHP8学习笔记

ThinkPHP8官方文档地址:ThinkPHP官方手册 一、composer换源 1、查看 composer 配置的命令composer config -g -l 2、禁用默认源镜像命令composer config -g secure-http false 3、修改为阿里云镜像源composer config -g repo.packagist composer https://mirror…

C51--单片机中断

51单片机是单线程模式,需要用到硬件中断。 一、中断系统 中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。 当中央处理器CPU正在处理某件事的时候,外界发生了紧急事件请求,要求CPU暂停当前工作,转而去处理这个紧急…

程序员们平时都喜欢逛什么论坛呢?

网站不在多,好用就行;技术不求精,好摸鱼就行。是时候祭出我收藏夹里的这15个网站了! 求职必备:牛客网 https://www.nowcoder.com/ 年少不知牛客好,等到要面试的时候才发现是神器。 你可以在牛客上搜索到一…

C#WPFPrism框架导航应用实例

本文实例演示C#WPFPrism框架导航应用实例。 一、导航实现步骤 首先创建WPF项目,修改App相关文件内容,以便使用prism。 承接上一个模块化的实例,在这个基础上更改增加导航功能。 1.1首先在ModuleA中添加ViewModels文件夹,添加ViewAViewModel.cs类 如果想上下文自动查找…

ArcGIS中批量mxd高版本转低版本

我们经常在给别人发ArcGIS的工程文件mxd,结果到别人那发现mxd工程文件打不开,原因是我们的arcgis版本高于别人,此时工程文件又很多,一个个转存成低版本又嫌麻烦,于是我们做了个批量mxd高版本转低版本的小工具&#xff…

论文解读:Large Language Models as Analogical Reasoners

一、动机 大模型在各种类型的NLP任务上均展现出惊艳的表现。基于CoT propmt能够更好地激发大模型解决复杂推理问题的能力,例如解决数学解题,可以让模型生成reasoning path。现有的经典的CoT方法有few-shot cot、zero-shot cot等。然后现有的cot面临两个…

Transformer模型 | 用于目标检测的视觉Transformers训练策略

基于视觉的Transformer在预测准确的3D边界盒方面在自动驾驶感知模块中显示出巨大的应用,因为它具有强大的建模视觉特征之间远程依赖关系的能力。然而,最初为语言模型设计的变形金刚主要关注的是性能准确性,而不是推理时间预算。对于像自动驾驶这样的安全关键系统,车载计算机…

C++内存管理:其七、标准库中的allocator

首先明确一点&#xff0c;绝大多数情况下&#xff0c;是标准库中的容器使用allocator。因为容器需要频繁的申请和释放内存。 一、容器使用allocator 典型的例子&#xff1a; vector<int , allocator<int>> a;但是为什么我们通常的定义vector变量的方法是&#x…

Hadoop3.0大数据处理学习1(Haddop介绍、部署、Hive部署)

Hadoop3.0快速入门 学习步骤&#xff1a; 三大组件的基本理论和实际操作Hadoop3的使用&#xff0c;实际开发流程结合具体问题&#xff0c;提供排查思路 开发技术栈&#xff1a; Linux基础操作、Sehll脚本基础JavaSE、Idea操作MySQL Hadoop简介 Hadoop是一个适合海量数据存…

Vue响应式原理和本质 | 实现一个完善的响应式系统

文章目录 前言响应式响应式的本质基本实现和工作原理完善的响应式 前言 本篇文章代码思路来自Vue3.0源码, 部分理解来源于霍春阳 《Vue.js设计与实现》这本书的理解, 感兴趣的小伙伴可以自行购买阅读。可以非常明确的感受到作者对 Vue 的深刻理解以及用心, 富含非常全面的 Vue …

Linux进程终止

文章目录 进程退出场景进程退出码strerrorerrno浅谈进程异常exit && _exit 进程退出场景 代码运行完毕&#xff0c;结果正确代码运行完毕&#xff0c;结果不正确代码异常 进程退出码 我们写的C/C的代码&#xff0c;main函数每次都需要返回0&#xff0c;而这个return…

C++:类的默认成员函数------拷贝构造函数赋值运算符重载

目录 一、前言 二、拷贝构造函数 &#x1f4a6;拷贝构造函数概念 &#x1f4a6;拷贝构造函数特性 &#x1f34e; 解释特性2&#xff1a;拷贝构造函数的参数只有一个且必须使用引用传参&#xff0c;使用传值方式会引发无穷递归调用 &#x1f350;解释特性3&#xff1a;…

Spring注解RequestBody与RequestParam详解

要注意的问题&#xff1a; RequestBody 前端的请求方法要使用post方式来进行提交&#xff1b;一个请求只能有一个RequestBody&#xff0c;也就是说&#xff0c;当一个方法中有两个参数的时候&#xff0c;最多只能有一个参数加RequestBody注解用来接受request body中的参数&am…

Qt之自定义QStringListModel设置背景色和前景色

一.效果 二.实现 QStringListModel里只实现了Qt::EditRole和Qt::DisplayRole,不能直接设置背景色和前景色,所以我们要继承QStringListModel,重写其中的data和setData方法,使其支持Qt::ForegroundRole和Qt::BackgroundRole。 QHStringListModel.h #ifndef QHSTRINGLISTMO…

Java集成支付宝支付流程

在这篇博客中&#xff0c;我们将详细介绍如何在Java应用中集成支付宝支付。我们将从支付宝支付的基本概念开始&#xff0c;然后讲解如何在Java中使用支付宝的SDK进行支付操作&#xff0c;最后我们将通过一个具体的例子来演示整个过程。 1. 支付宝支付简介 支付宝是中国最大的…

P1966 [NOIP2013 提高组] 火柴排队

洛谷的一道原题&#xff0c;方法有很多&#xff0c;树状数组以及排序&#xff0c;对刚学树状数组的人来说用排序会比较好理解。 本题最重要的结论就是&#xff0c;要保证两个数组中相同位置的差最小&#xff0c;但是不一定两个数组中数值相同&#xff0c;所以只需要保证相同位…

ChatGPT/GPT4科研技术与AI绘图及论文高效写作

2023年我们进入了AI2.0时代。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车&#xff0c;就有可能被淘汰在这个数字化时代&#xff0c;如何能高效地处理文本、文献查阅、PPT…