操作系统(七)| 设备管理-- 端口 驱动程序 基本I/O控制 磁盘I/O

文章目录

  • 1 设备管理概述
    • 1.1 系统总线结构
    • 1.2 设备控制器通用结构
    • 1.3 I/O设备的模型
  • 2 I/O端口
    • 2.1 寻址方式
  • 3 驱动程序
  • 4 基本I/O控制方式
    • 4.1 程序直接控制
    • 4.2 中断I/O方式
    • 4.3 DMA方式
    • 4.4 I/O通道控制方式
  • 5 I/O管理中的重要思想
    • 5.1 设备独立性
    • 5.2 SPOOLing技术
    • 5.3 I/O软件的多层模型
  • 6 磁盘I/O
    • 6.1 磁盘调度算法
      • 6.1.1 先来先服务 FCFS
      • 6.1.2 最短寻道时间优先 SSTF
      • 6.1.3 扫描算法 电梯调度算法 SCAN
      • 6.1.3 循环扫描 C-SCAN
      • 6.1.4 N-Step-SCAN
      • 6.1.5 FSCAN
    • 6.2 其他磁盘I/O性能的改善

1 设备管理概述

1.1 系统总线结构

系统总线上传输的信息有——数据 地址 其他控制状态定时信号

系统总线其实有几类

如下图 CPU总线 存储器总线 和I/O总线

在这里插入图片描述

其中北桥芯片组把处理器和存储器分成了两个总线

南桥芯片连接在I/O总线上

I/O总线上连着众多的I/O设备

当然I/O总线和I/O设备之间通过设备管理器进行连接控制

那么设备管理器的结构是怎样的呢?

1.2 设备控制器通用结构

在这里插入图片描述

控制不同的外设需要不同的设备控制器,将系统总线和设备侧的接口连在一起

1.3 I/O设备的模型

对于外部设备而言,他们的设备如下

在这里插入图片描述

2 I/O端口

I/O设备中非常重要的一部分就是外设寄存器(也叫做I/O端口,下文我们都叫做I/O端口了)(存储着设备状态,数据等)

控制需要了解外设寄存器值,读取数据也是从相应的寄存器值读取

I/O端口通常包括:控制寄存器、状态寄存器和数据寄存器三大类

所以这里就牵扯出一个问题,CPU下达指令读或写某个I/O端口(寄存器),需要知道那个寄存器在哪里,也就是说寄存器的地址是什么,这就涉及到I/O端口的编址以及寻址

2.1 寻址方式

统一编址方式(内存映射方式)

与主存空间统一编址,主存单元和I/O端口在同一个地址空间

独立编址方式(特殊I/O指令方式)

单独编号,不和主存单元一起编,使成为一个独立的I/O地址空间,例如Intel处理器

3 驱动程序

控制外设进行输入输出的底层I/O软件是驱动程序,由设备生产商制作,包括 设备控制器中有哪些用户可以访问的寄存器、控制状态寄存器的每一位的含义,通信协议等等

驱动程序通过访问 I/O端口控制外设进行I/O

​ 比如 读取控制命令送到控制寄存器来启动外设工作

​ 读取状态寄存器了解外设和设备控制器的状态

​ 访问数据缓冲寄存器进行数据的输入和输出

实现这种访问操作是通过I/O操作完成的,他是一种特权指令

4 基本I/O控制方式

有如下四种

4.1 程序直接控制

​ 程序查询I/O方式

原理 由CPU负责直接控制I/O操作,不涉及中断或DMA(Direct Memory Access)。

方法

计算机从外部设备读取数据到存储器,每次读一个字的数据。对读入的每个字, CPU 需要对外设状态进行循环检查,直到确定该字已经在I/0 控制器的数据寄存器中

优点 简单、易于实现。

缺点

在程序直接控制方式中,由于CPU 的高速性和I/0设备的低速性,致使CPU 的绝大部分时间都处于等待I/0 设备完成数据I/0 的循环测试中,造成了CPU 资源的极大浪费。在该方式中, CPU 之所以要不断地测试I/0 设备的状态,就是因为在CPU 中未采用中断机构,使I/0 设备无法向CPU报告它已完成了一个字符的输入操作。

4.2 中断I/O方式

​ 中断I/O方式

原理 设备在完成操作后发出中断信号,通知CPU进行数据传输。

方法

中断驱动方式的思想是,允许I/0 设备主动打断CPU 的运行并请求服务,从而“解放"CPU, 使得其向I/0 控制器发送读命令后可以继续做其他有用的工作。

优点: 提高CPU利用率,减少了对CPU的占用。

缺点

中断方式在一些情况下可以提高CPU利用率,但在一些情况下,字符式设备,其中断频率太高,来回切换的话也会耗费处理机较多时间

核心是因为什么?

是因为上面两种方式都需要经过CPU处理?

什么叫经过CPU处理

是外设输入数据流大概是这样的: 【外围设备->I/O控制器的数据寄存器->CPU寄存器->存储器】,这就叫经过CPU,或者说传输数据的过程需要CPU的干预

于是引出了下面的DMA(直接在I/O设备和内存之间建立数据通路)

4.3 DMA方式

磁盘等高速外设设备所用的方式

原理

​ 基本思想 在高速外设和主存间直接传送数据

​ 由专门硬件**(即DMA控制器)**控制总线进行传输,注意这里不是CPU了

方式

  1. 基本单位是数据块(前面是一个字)。
  2. 所传送的数据,是从设备直接送入内存的,或者相反。
  3. 仅在传送一个或多个数据块的开始和结束时,才需CPU 干预,整块数据的传送是在DMA控制器的控制下完成的。

优点 大大减轻了CPU的负担,提高了数据传输速率。

**缺点 需要额外的硬件支持,复杂度较高。

如何进一步提高资源利用率呢?当然是请更牛逼的通道,将苦逼的CPU尽可能的从累活中解放出来。

4.4 I/O通道控制方式

原理 使用专门的I/O通道控制器,它独立于CPU和主存储器,负责管理多个设备的I/O操作

方式

I/0 通道是指专门负责输入/输出的处理机。I/O通道方式是DMA方式的发展,它可以进一步 减少CPU的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关控制和管理为单位的干预。同时,又可以实现CPU、通道和I/0 设备三者的并行操作,从而更有效地提高整个系统的资源利用率。

优点: 高度并行化的数据传输,减少了对CPU的占用。

缺点: 需要更复杂的硬件支持,成本较高。

5 I/O管理中的重要思想

5.1 设备独立性

该思想旨在使应用程序与具体的I/O设备解耦,从而提高系统的灵活性、可移植性和可维护性。

5.2 SPOOLing技术

​ 即外围设备同时联机操作,又称作假脱机操作

什么是脱机I/O

​ 脱机I/O 目的是为了解决CPU和I/O速度不匹配的问题,输入由一台抵挡计算机做中介

什么是假脱机

​ 即模拟实现上面的脱机i/O

实现方法

​ OS利用两个进程分别模拟脱机I/O时外围机的功能

​ 其中一个进程负责将输入设备的数据传送到磁盘,另一个进程负责将数据从磁盘送到输出设备

组成

​ 1 输入输出井

​ 2 预输入进程和缓输出进程

5.3 I/O软件的多层模型

在这里插入图片描述

1 用户进程层——执行I/O系统调用,对I/O数据进行格式化

2 独立于设备的软件——实现设备的命名,分配,数据的缓冲,设备的保护,提高下层的统一接口

3 设备驱动程序,与设备有关的代码,向设备控制器发送命令,检测设备的执行状态

4 中断处理程序,负责I/O完成时,唤醒设备驱动程序的进程,进行中断处理

5 硬件层 实现物联I/O操作

6 磁盘I/O

磁盘一般分为固定结构和移动头磁盘两大类

固定头磁盘——每个盘面的每条磁道都有一个读写磁头,固定头磁盘各个磁头可并行读写,成本高

移动头磁道——每个盘面只有一个读写磁头

6.1 磁盘调度算法

目标 使得磁盘平均寻道时间最短

6.1.1 先来先服务 FCFS

按请求访问磁盘的先后次序进行调度

6.1.2 最短寻道时间优先 SSTF

选择处理与当前磁头距离最近的磁道请求,以减少寻道时间

6.1.3 扫描算法 电梯调度算法 SCAN

要求磁头臂仅沿一个方向移动,并在途中满足所有未完成的请求,直到最后一个磁道,再反方向

6.1.3 循环扫描 C-SCAN

要求磁头臂仅沿一个方向移动,并在途中满足所有未完成的请求,直到最后一个磁道,不反方向直接回到最后一个磁道,开始扫描

SSFT、SCAN、C-SCAN都存在“饿死现象”

即当一个或多个进程反复请求某个磁道I/O,垄断了整个磁盘,其他磁道得不到访问

6.1.4 N-Step-SCAN

将磁盘请求队列分成若干个长度为N的子队列

每一次SCAN处理一个子队列

6.1.5 FSCAN

使用2个子队列

当扫描开始时,所有请求都在一个子队列,另一个子队列为空,扫描过程中,所有新到的请求加入另一个子队列中,使得新请求服务延迟老请求处理完后

6.2 其他磁盘I/O性能的改善

高速缓存

合理分配磁盘空间

把有可能顺序访问的放到一块

提前读,延迟写,周期性的成簇写回

例题

尝试给出一种能够满足下列要求的I/O设备管理设计方案:

1 应用程序在访问设备时候,不需要关心设备的物理特性

2 应用程序申请使用某类设备时,不需要指定具体的物理设备

3 应用程序可以通过文件系统访问设备

设计方案:

为满足上述要求,可以设计一个综合管理系统,其设计思路如下:

1 采用分层的I/O软件模型 多层处理,如用户层,设备驱动程序等待。进行设备抽象,将不同类型的设备进行抽象,屏蔽设备的具体物理特性。通过设备抽象,应用程序可以以统一的方式访问各种设备,而无需关心设备的底层实现。

2 设备分组:将相同类型的设备进行分组,并为每个设备组分配一个唯一的标识符。应用程序在申请使用某类设备时,只需指定设备组的标识符,而无需指定具体的物理设备。

3 权限控制:设计合适的权限控制机制,确保应用程序只能访问其被授权的设备组和设备文件,以保护系统的安全性和数据的机密性。

数据结构

1 用类和结构定义抽象层,包括设备的通用属性,操作方法,事件等

2 用哈希表或映射存储设备组的标识符和相应的设备类型

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

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

相关文章

c语言 结构数组

为什么要使用结构数组&#xff1f; 例如有一种情况&#xff0c;我们需要存储5名学生的数据。我们可以使用下面给出的结构来存储它。 示例 #include<stdio.h> struct student { char name[20]; int id; float marks; }; void main() {struct student s1,s2,…

前端Date对象的使用锦集

Date 对象用于处理日期与时间。 创造对象 var d new Date(); var d new Date(milliseconds); // 参数为毫秒 var d new Date(dateString); var d new Date(year, month, day, hours, minutes, seconds, milliseconds);方法 getDate() 获取当前日期对象是几日(1-31) cons…

C++标准模板(STL)- 类型支持 (类型修改,添加 const 或/与 volatile 限定符到给定类型,std::add_cv)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

SAP的四种计量单位

在SAP中物料创建后&#xff0c;一旦发生业务&#xff0c;其基本计量单位便很难修改。由于单位无法满足业务要求&#xff0c;往往会要求新建一个物料替代旧物料。这时候除了要将旧物料上所有的未清业务删除外&#xff0c;还需要替换工艺与BOM中的旧物料。特别是当出现旧物料存在…

Linux学习笔记-Ubuntu下使用Crontab设置定时任务

文章目录 一、概述二、基于crontab的设置2.1 基本命令说明2.2 使用-e指令编辑命令2.2.1 进入编辑模式2.2.2 指令信息格式2.2.4 开启日志1) 修改rsyslog配置文件2) 重启rsyslog3) 查看日志 2.2.3 设置后之后重启服务 三、示例3.1 每隔一分钟往文件中日期3.2 使用-l查看任务列表3…

越南服务器租用:企业在越南办工厂的趋势与当地(ERP/OA等)系统部署的重要性

近年来&#xff0c;越南逐渐成为全球企业布局的热门目的地之一。许多企业纷纷选择在越南设立工厂&#xff0c;以利用其低廉的劳动力成本和优越的地理位置。随着企业在越南的扩张&#xff0c;对于当地部署ERP系统或OA系统等的需求也日益增长。在这种情况下&#xff0c;租用越南服…

上海亚商投顾:北证50指数持续大涨 短剧概念股再爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整&#xff0c;深成指跌超1.4%&#xff0c;创业板指跌超1.7%。北证50指数大涨超8%&#xff0c;…

ROS设置DHCP option121

配置时&#xff0c;了解格式很关键&#xff0c;16进制填写格式如下&#xff1a; 将要访问的IPV&#xff14;地址&#xff1a;192.168.100.0/24 192.168.30.254 转换为&#xff1a;掩码 目标网段 网关 0x18c0a864c0a81efe&#xff0c;0不用填写 ROS配置如下图&#xff1a; 抓…

02_使用API_String

StringBuilder StringBuilder 代表可变字符串对象&#xff0c;相对于是一个容器&#xff0c;它里面装的字符串是可以改变的&#xff0c;就是用来操作字符串的好处&#xff1a;StringBuilder 比 String 更适合做字符串的修改操作&#xff0c;效率会更高&#xff0c;代码也会更简…

MacOS “xxxxx“,已损坏,无法打开,你应该将它移到废纸篓

在这里插入图片描述 解决方案 应用程序 - 实用工具中打开终端&#xff0c;输入命令&#xff0c; sudo xattr -r -d com.apple.quarantine 然后将程序拖放至命令窗口&#xff0c;如下图&#xff1a;

22. Spring源码篇之推断构造方法

简介 很多时候我们的构造器都不止一个&#xff0c;那么spring怎么选择的呢&#xff0c;签名介绍了推断构造方法的扩展点&#xff0c;可以使用Autowired注解去选择使用哪个构造器&#xff0c;但是即使这样也有可能有多个Autowired且required为false的构造器&#xff0c;那么还是…

QLineEdit响应editingFinished实现只响应一次

QLineEdit中editingFinished槽函数会在按下enter时响应两次&#xff0c;分别是按下enter和失去焦点的时候&#xff0c;为了能让 QLineEdit只响应其中一次&#xff0c;需定义一个全局变量m_bFlagEnter保存是否enter是否按下&#xff0c;按下后&#xff0c;则在失去焦点的时候做对…

Unity发布IOS后,使用xcode打包报错:MapFileParser.sh:Permissiondenied

1.错误提示 使用xcode打包错误提示&#xff1a;/Users/mymac/Desktop/myproject/MapFileParser.sh: Permission denied 2.解决方案 打开控制台输入&#xff1a;chmod ax /Users/mymac/Desktop/myproject/MapFileParser.sh。按回车键执行&#xff0c;然后重新使用xcode发布程序…

【开源】基于JAVA的在线课程教学系统

项目编号&#xff1a; S 014 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S014&#xff0c;文末获取源码。} 项目编号&#xff1a;S014&#xff0c;文末获取源码。 目录 一、摘要1.1 系统介绍1.2 项目录屏 二、研究内容2.1 课程类型管理模块2.2 课程管理模块2…

机器学习之数据清洗和预处理

目录 Box_Cox Box_Cox Box-Cox变换是一种用于数据预处理和清洗的方法&#xff0c;旨在使数据更符合统计模型的假设&#xff0c;特别是对于线性回归模型。这种变换通过调整数据的尺度和形状&#xff0c;使其更加正态分布。 Box-Cox变换的定义是: y ( λ ) { y λ − 1 λ , i…

【深度学习】卷积神经网络(CNN)

一、引子————边界检测 我们来看一个最简单的例子&#xff1a;“边界检测&#xff08;edge detection&#xff09;”&#xff0c;假设我们有这样的一张图片&#xff0c;大小88&#xff1a; 图片中的数字代表该位置的像素值&#xff0c;我们知道&#xff0c;像素值越大&#…

QQ怎么备份聊天记录?3个方法教你快速备份!

QQ聊天记录作为用户和亲人、好友以及同事之间沟通的凭证&#xff0c;可以帮助我们回忆起过去的交流内容。如果我们不小心误删了QQ聊天记录或者更换了新手机&#xff0c;那么这时候就需要备份聊天记录。qq怎么备份聊天记录呢&#xff1f;本文将介绍3个简单方法&#xff0c;帮助您…

MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况

目录 一、索引 1.1、简单介绍 1.2、索引的分类 1.2.1、主键索引 1.2.2、单值索引&#xff08;单列索引、普通索引&#xff09; 1.2.3、唯一索引 1.2.4、复合索引 1.2.5、复合索引经典问题 1.3、索引原理 1.3.1、主键自动排序 1.3.2、索引的底层原理 1.3.3、B 树和 B…

创作4周年

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言机…

哈希表-set、map

当需要判断一个元素是否在集合中时&#xff0c;就使用哈希法 散列表&#xff08;Hash table&#xff0c;也叫哈希表&#xff09;&#xff0c;是根据键&#xff08;Key&#xff09;而直接访问在内存存储位置的数据结构。 哈希表中关键码就是数组的索引下标&#xff0c;然后通过…