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

news2025/1/12 1:43:28

文章目录

  • 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.coloradmin.cn/o/1137510.html

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

相关文章

Go 语言代码断行规则详解

一、Go代码断行概念 代码断行,或称为代码换行,是编程中一个很常见但却经常被忽视的细节。它涉及到如何在代码行结束时添加换行符,使代码展示为多行结构。代码断行不仅影响代码的可读性和美观性,还可能与编程语言的语法、编译器行…

Framework -- 系统架构

一、前言 framework的学习,需要掌握到什么程度? App 的启动流程:整体的过程,具体到某些类在整个流程中所起的作用;组件的设计模式,核心设计思想;需要知晓目前已知的问题,以及解决方…

定档11月2日,YashanDB 2023年度发布会完整议程公布

数据库作为支撑核心业务的关键技术,对数字经济的发展有着重要的支撑作用,随着云计算、AI等技术的迅猛发展和数据量的爆发式增长,推动着数据库技术的加速创新。 为了应对用户日益复杂的数据管理需求,赋能行业国产化建设和数字化转型…

python 线程池/AIO(异步非阻塞)调用接口示例

分别测试了 多线程、线程池、aio 等模式 线程受CPU调度限制,大请求量下 AIO 效率最高,详见代码 注释中有详细说明,main 方法中是程序入口 """ python 各种方式发起 http 请求对比 参考: https://plainenglish.io…

“第五十一天”

无符号整数: 计算机硬件在进行无符号整数的加法时,从最低位开始,按位相加,并往更高位进位。 当进行减法时,被减数不变,减数全部按位取反,末位加一(将一个正数变负,或者…

关键词搜索淘宝商品数据接口(标题|主图|SKU|价格|优惠价|掌柜昵称|店铺链接|店铺所在地)

关键词搜索淘宝商品数据接口是可以通过API的方式来进行调用。这些接口可以获取到商品列表的标题、SKU ID、价格、优惠价、收藏数、月销售量等数据。 通过这些接口,可以实现关键词搜索淘宝商品列表的功能,也可以获取到商品详情页的数据信息,适…

微信自动通过好友请求是怎么设置的?

微信是一款必不可少的社交工具,尤其对于需要使用微信进行业务沟通和促进成交的人来说。 业务繁忙时可能每天有几十上百个微信好友申请,这时候如果手动“通过验证”不仅会工作质量和效率,有可能由于通过不及时而导致客户流失。 方式一 自动通…

leetCode 76. 最小覆盖子串 + 滑动窗口

76. 最小覆盖子串 - 力扣(LeetCode) 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 注意: 对于 t 中重复字符,我们寻…

D71X-16Q手柄蝶阀型号解析

D71X-16Q型号字母含义解析 D71X-16Q是德特森阀门常用的手柄蝶阀型号字母分别代表的意思是: D——代表阀门类型《蝶阀》 7——代表连接方式《对夹》 1——代表结构形式《中线》 X——代表阀座材质《橡胶》 -代表分隔键 16——代表公称压力《1.6MPA》 Q——代表阀体材料《…

FPGA设计时序约束七、设置时钟不确定约束

一、背景 在之前的时序分析中,通常是假定时钟是稳定理想的,即设置主时钟周期后按照周期精确的进行边沿跳动。在实际中,时钟是非理想存在较多不确定的影响,存在时延和波形的变化,要准确分析时序也需将其考虑进来&#x…

2023深耕kotlin,谈谈前景

为什么学习kotlin? Kotlin 早就已经是 Google 官方推荐的开发语言了,而且 Android 新的 Compose 框架只支持 Kotlin ,在 Google 那里,Android开发中 Java 其实已经被淘汰了。Java 和 Kotlin 虽然都属于高级语言,但是 …

利用nicegui开发ai工具示例

from fastapi import FastAPI import uvicorn from nicegui import uiclass PipRequirement:def __init__(self):ui.label("依赖安装与依赖展示")class BasicSettings:def __init__(self):self.project_select ui.select(["test"], label"项目选择&q…

驱动获取设备树节点信息

mycdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/of.h>struct device_node *dnode; //解析得到的设备树节点对象指针 struct property *pr; unsigned int lenth; static int __init mycdev_init(void) {//解析设备树节点信息d…

Hafnium安全分区管理器和示例参考软件栈

安全之安全(security)博客目录导读 目录 一、安全分区管理器 1、术语 2、对旧平台的支持 二、示例参考软件栈 一、安全分区管理器 安全分区管理器的三种实现在TF-A代码库并存&#xff1a; 1.基于FF-A规范的S-EL2 SPMC&#xff08;SPM Core&#xff09;&#xff0c;使能安全…

C++ 模板和泛型编程详解

C中的模板和泛型编程是非常重要的概念。模板是一种将数据类型作为参数的通用程序设计方法。它们允许开发人员编写可以处理各种数据类型的代码&#xff0c;而无需为每种数据类型编写不同的代码。下面介绍了一些关于C中模板和泛型编程的重要知识点 模板的定义 模板是一种通用程序…

论坛议程 | COSCon'23 开源治理(G)

众多开源爱好者翘首期盼的开源盛会&#xff1a;第八届中国开源年会&#xff08;COSCon23&#xff09;将于 10月28-29日在四川成都市高新区菁蓉汇举办。本次大会的主题是&#xff1a;“开源&#xff1a;川流不息、山海相映”&#xff01;各位新老朋友们&#xff0c;欢迎到成都&a…

第十五章:L2JMobius学习 – 刷新NPC和对话

首先&#xff0c;我们介绍一下城镇里面的传送师NPC的刷新和对话。 传送师对应的类是L2TeleporterInstance&#xff0c;它继承L2FolkInstance&#xff0c;再继承L2NpcInstance。 我们要处理的是“单击/双击”传送师的业务逻辑&#xff0c;对应的是Action数据包。这个数据包具有…

Linux系统上安装FTP服务

文章背景 最近为了调试Linux系统FTP传输工具&#xff0c;刚好有Linux虚拟机环境&#xff0c;于是就搭建了vsftpd服务。 使用环境 Linux系统&#xff1a;BigCloud Enterprise Linux 7.8 (Core) 安装 1. 查询是否安装vsftpd [rootlocalhost ~]# rpm -qa | grep vsftpd 2. 安…

【CHI】Transaction structure

我们在前文【CHI】CHI协议&#xff0c;transaction事务汇总已经总结了事务类型&#xff0c;这篇开始讲述事务可以完成的方式。它显示了参与事务的各种组件可以使用的所有允许的选项。 注&#xff1a; 除了PCrdReturn 和PrefetchTgt之外&#xff0c;其他的事务在开始的时候都可…

APP分发-CDN加速原理

摘要 CDN的全称是(Content Delivery Network)&#xff0c;即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层&#xff0c;将网站的内容发布到最接近用户的网络”边缘“的节点&#xff0c;使用户可以就近取得所需的内容&#xff0c;提高用户访问网站的…