操作系统:IO管理概述

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:OS从基础到进阶

🏆🏆本文完整PDF源文件请翻阅至文章底部下载。🏆🏆


  • 1 I/O设备的基本概念与分类
    • 1.1 总览
    • 1.2 什么是IO设备
    • 1.3 IO设备的分类
      • 1.3.1 按使用特性
      • 1.3.2 按传输速率
      • 1.3.3 按信息交换的单位
    • 1.4 总结
  • 2 I/O控制器
    • 2.1 什么是IO控制器?
    • 2.2 IO控制器的功能
    • 2.3 IO控制器的组成
      • 2.3.1 CPU与控制器的接口
      • 2.3.2 IO逻辑
      • 2.3.3 控制器与设备机器设备的接口
      • 2.3.4 总体示意图
      • 注意
      • 编址方式
    • 2.4 总结
  • 3 I/O控制方式
    • 3.1 总览
    • 3.2 程序直接控制方式
      • 3.2.1 什么是程序直接控制方式?
      • 3.2.2 完成一次读写操作的流程
      • 3.2.3 CPU干预的频率
      • 3.2.4 数据传送的单位?
      • 3.2.5 数据的流向?
      • 3.2.6 优缺点
    • 3.3 中断驱动方式
      • 3.3.1 什么是中断驱动方式
      • 3.3.2 注意
      • 3.3.3 完成一次读写操作的流程
      • 3.3.4 CPU干预的频率
      • 3.3.5 数据传送的单位
      • 3.3.6 数据的流向
      • 3.3.7 主要优缺点
    • 3.4 DMA控制器方式
      • 3.4.1 DMA控制器的基本组成
      • 3.4.2 DMA方式的工作流程
      • 3.4.3 完成一次读/写操作的流程
      • 3.4.4 CPU干预的频率
      • 3.4.5 数据传送的单位
      • 3.4.6 数据的流向
      • 3.4.7 主要优缺点
      • 3.4.8 注意
    • 3.5 通道控制方式
      • 3.5.1 基本工作流程
      • 3.5.2 通道程序的基本组成
      • 3.5.3 完成一次读/写操作的流程
      • 3.5.4 CPU干预的频率
      • 3.5.5 数据传送的单位
      • 3.5.6 数据的流向
      • 3.5.7 优缺点
    • 3.6 总结
  • 4 I/O软件基本层次结构
    • 4.1 基本架构
    • 4.2 用户层软件
      • 4.2.1 主要的功能
      • 4.2.2 例子
    • 4.3 设备独立性软件
      • 4.3.1 解释
      • 4.3.2 主要的功能
    • 4.4 设备驱动程序
      • 4.4.1 什么是驱动程序?
      • 4.4.2 为什么要有驱动程序?
      • 4.4.3 驱动程序的功能
      • 4.4.4 注意
    • 4.5 中断处理程序
      • 4.5.1 解释
      • 4.5.2 处理流程
    • 4.6 总结
  • 5 输入输出应用接口与设备驱动接口
    • 5.1 总览
    • 5.2 输入输出应用程序接口
      • 5.2.1 为什么要有应用程序接口?
      • 5.2.2 字符设备接口
      • 5.2.3 块设备接口
      • 5.2.4 网络设备接口
    • 5.3 阻塞与非阻塞I/O
      • 5.3.1 阻塞I/O
      • 5.3.2 非阻塞I/O
    • 5.4 设备驱动程序接口
      • 5.4.1 解释
  • 6 总结


1 I/O设备的基本概念与分类

1.1 总览

image1

1.2 什么是IO设备

image2
注意:
UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用文件操作相同的方式对外部设备进行操作

1.3 IO设备的分类

1.3.1 按使用特性

image3

1.3.2 按传输速率

image4

1.3.3 按信息交换的单位

image5

1.4 总结

image6

2 I/O控制器

2.1 什么是IO控制器?

image1

2.2 IO控制器的功能

image2

2.3 IO控制器的组成

2.3.1 CPU与控制器的接口

(1)该部分实现的功能
用于实现CPU与控制器之间的通信。CPU通过控制线发出命令;通过地址线指明要操作的设备;通过数据线来取出(输 入)数据,或放入(输出)数据
(2)基本组成
①数据寄存器
当设备输入时,存放设备输入的数据(比如键盘键入的字符);当CPU对设备输出时,存放CPU输入的数据。是双向的。

②控制寄存器
CPU发出的IO指令中可能包含一些其他的参数,放在控制寄存器中。是单向的。

③状态寄存器
存放各设备的状态,比如1表示空闲,0表示忙碌,CPU从其中读取。是单向的。

2.3.2 IO逻辑

(1)该部分实现的功能
负责接收和识别CPU 的各种命令(如地址译码),并负责对设备发出命令

2.3.3 控制器与设备机器设备的接口

(1)该部分实现的功能
用于实现控制器与设备之间的通信
(2)基本组成
①与各设备连接的接口
各接口都要实现传输
Ⅰ 数据信息(传送输入/ 输出数据)
Ⅱ 状态信息(设备向控制器反馈自己的状态)
Ⅲ 控制信息(控制器向设备发出控制信息)。

2.3.4 总体示意图

image3

注意

image4

编址方式

(1)内存映像编址
①解释
内存映射 I/O。控制器中的寄 存器与内存地址统一编址
image5
②优点
简化了指令。可以采用对内存进行操作的指令来对控制器进行操作

(2)寄存器独立编址
①解释
寄存器独立编制。 控制器中的寄存器使用单独的地址
image6
②缺点
需要设置专门的指令来实现对控制器的操作,不仅要指明寄存器的地址,还要指明控制器的编号

2.4 总结

image7

3 I/O控制方式

3.1 总览

image1

3.2 程序直接控制方式

3.2.1 什么是程序直接控制方式?

已键盘向CPU键入数据为例:

(1)CPU向控制器发出读指令。 于是设备启动,并且状态寄存器设为 1(未就绪)
(2)CPU轮询检查控制器的状态 (其实就是在不断地执行程序的循环,若 状态位一直是 1,说明设备还没准备好要输入的数据, 于是CPU会不断地轮询,知道状态为为0(设备已经完成输入)
(3)输入设备准备好数据后将数据传给控制器,并报告自身状态(已就绪)
(4)控制器将输入的数据放到数据寄存器中, 并将状态改为0 (已就绪)
(5)CPU发现设备已就绪,即可将数据寄存器中的内容读入CPU的寄存器中,再把CPU寄存器中的内容放入内存
(6)若还要继续读入数据,则CPU 继续发出读指令

3.2.2 完成一次读写操作的流程

image2

3.2.3 CPU干预的频率

image3

3.2.4 数据传送的单位?

每次读写一个字

3.2.5 数据的流向?

image4

3.2.6 优缺点

image5

3.3 中断驱动方式

3.3.1 什么是中断驱动方式

image6

3.3.2 注意

image7

3.3.3 完成一次读写操作的流程

image8

3.3.4 CPU干预的频率

image9

3.3.5 数据传送的单位

每次读/写一个字

3.3.6 数据的流向

与程序直接控制方式类似
image10

3.3.7 主要优缺点

image11

3.4 DMA控制器方式

3.4.1 DMA控制器的基本组成

image12
DR、MAR、DC、CR都是操作系统中的寄存器:
image13

3.4.2 DMA方式的工作流程

以键盘键入数据为例:
CPU将数据存放在内存中的地址存入MAR,DMA负责读取键盘键入的字符,将其存放在DR中,待键入结束后,再将DR中的数据存入MAR中显示的内存地址,并发出中断请求,使CPU进行处理。

3.4.3 完成一次读/写操作的流程

image14

3.4.4 CPU干预的频率

仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。

3.4.5 数据传送的单位

image15

3.4.6 数据的流向

不再经过CPU

image16

3.4.7 主要优缺点

image17

3.4.8 注意

(1)DMA读取数据的过程中,是一次读入一个字,再将读取的字存入DR中,但对于CPU来说,好像是一次读入了一块的数据。
(2)每次读写的只可以是连续的块,如果想读写离散的块,就必须发送多次中断。

3.5 通道控制方式

3.5.1 基本工作流程

(1)CPU向通道发出I/O指令。指明通道程序(可以理解为CPU下派的任务清单)在内存中的位置,并指明要操作的是哪个I/O设备。之后CPU就切换到其他进程执行了。
(2)通道执行内存中的通道程序,它其中指明了要读入/写出多少数据,读/写的数据应放在内存的什么位置等信息
(3)通道执行完规定的任务后,向CPU发出中断信号,之后 CPU对中断进行处理

3.5.2 通道程序的基本组成

image18
在通道程序中,CPU可以指派一堆任务,同时读/写的数据也不必是连续的,只要指定了内存中的位置就可以。这是对DMA控制方式的改进。

3.5.3 完成一次读/写操作的流程

image19

3.5.4 CPU干预的频率

image20

3.5.5 数据传送的单位

每次读/写一组数据块

3.5.6 数据的流向

数据是在通道的控制下进行的。
image21

3.5.7 优缺点

image22

3.6 总结

image23

4 I/O软件基本层次结构

4.1 基本架构

image1

4.2 用户层软件

4.2.1 主要的功能

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

4.2.2 例子

例如C语言中的"printf(“Hello\n”)",printf就是方便用户使用的库函数,而它会被翻译成write系统调用。
对于一些需要参数的系统调用,用户在使用库函数时显然也应该填入相应的参数。

4.3 设备独立性软件

4.3.1 解释

image2
这一层会向用户层提供系统调用的接口,所以有时候也被成为系统调用层。

4.3.2 主要的功能

(1)向上层(用户层)提供统一的调用接口
比如read、write系统调用

(2)设备的保护
原理类似于文件保护。设备被看做是一种特殊的文件(UNIX系统中),不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。

(3)差错处理
设备可能会出错,因此设备独立性软件需要对一些设备的错误进行处理

(4)设备的分配与回收
设备属于一种临界资源,对临界资源的分配和回收是相当重要的。

(5)数据缓冲区管理
通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异

(6)建立逻辑设备名到物理设备名的映射关系
①解释
image3
②逻辑设备表的基本结构
image4
③管理逻辑设备表的方法

image5根据设备类型选择调用相应的驱动程序

驱动程序的说明见下第四大点

4.4 设备驱动程序

4.4.1 什么是驱动程序?

简单来说,就是驱动计算机里软件的程序

4.4.2 为什么要有驱动程序?

不同设备的内部结构也不同,其内部硬件特性也不同。而这些特性、结构只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作,程序才可以正常运行。

4.4.3 驱动程序的功能

image6

4.4.4 注意

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

4.5 中断处理程序

4.5.1 解释

image7

4.5.2 处理流程

image8

4.6 总结

image9

5 输入输出应用接口与设备驱动接口

5.1 总览

image1

5.2 输入输出应用程序接口

5.2.1 为什么要有应用程序接口?

不同类型设备的I/O操作的细节是不同的,因此无法使用一个统一的接口对所有的设备进行调用。
我们之前已经学习过I/O软件的层次结构,设备独立软件层的任务之一就是给用户层提供标准的接口。

5.2.2 字符设备接口

比如:键盘
image2

5.2.3 块设备接口

image3

5.2.4 网络设备接口

(1)解释
image4
(2)主机之间通信过程描述
①主机1、主机2中的一个进程使用socket系统调用,创建一个网络套接字(可以理解为在内核区申请一片空间)。套接字会绑定主机的一个端口(bind系统调用)。

②发送方主机1中使用write系统调用向内存中写入一些数据。并将数据移入网卡进行发送,这个过程需要 “设备无关性软件” 调用 “网络控制器驱动程序”

③主机1在发送之前显然已经知道主机2的socket套接字绑定的端口(可以通过一些协议实现)。结合IP地址及端口,主机1的数据就可以精确发送到主机2中。

④主机2收到数据后通过网卡将其存在内存中,这个过程需要“中断处理程序”调用“网络控制器驱动程序”。进程使用read系统调用进行读取。

(3)示意图
image5

5.3 阻塞与非阻塞I/O

5.3.1 阻塞I/O

应用程序发出I/O系统调用,进程需转为阻塞态等待。比如说:C语言中的scanf函数,只要键盘没有输入字符,那么程序就不会往下继续执行,也就是被阻塞了。

5.3.2 非阻塞I/O

应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待。比如说:在块设备接口往磁盘写数据的过程中,只要块设备将数据复制到内核中去了,那么就可以交给内核执行,而自己就可以进行其他的工作。

5.4 设备驱动程序接口

5.4.1 解释

不同厂商生产的I/O设备的结构不同,其驱动程序也不同。可能相同的系统调用但是其参数又不一致。这样,设备独立层软件在享受驱动程序提供的服务时就会出现问题。
操作系统规定好设备驱动程序的接口标准,各厂商必须按要求开发设备驱动程序。

6 总结

本文PDF文件下载链接:提取码:ikun

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

yolov8涨点技巧,添加SwinTransformer注意力机制,提升目标检测效果

目录 摘要 SwinTransformer原理 代码实现 YOLOv8详细添加步骤 ymal文件内容 one_swinTrans three_swinTrans 启动命令 完整代码分享 摘要 Swin Transformer通过引入创新的分层注意力机制展现了其架构的独特性,该机制通过将注意力区域划分为块并在这些块内执…

NutUI + taro +vue 开发遇到的问题 使用popup组件 内部元素滚动遇到的的问题

1 popup 弹出内容时 弹出的框内元素数据很长需要滚动时 本地可以正常滚动 打包成小程序后无法滚动 如这样的免责条款内容 代码如下 解决办法 1 把2处的单位换成百分比 弹框能滚动但是 是popup 里面所有的元素都一起滚动 导致标题都滚走了 2 scroll-y 改成: :scrol…

Spring Task的应用

介绍 Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 定位: 定时任务框架 作用: 定时自动执行某段Java代码 应用场景: 引用卡每月还款提醒、银行贷款每月还款提醒、火车票售票系统处理未支…

Vulnhub内网渗透Masashi-1靶场通关

完整内容见我的博客xzajyjs.cn 靶场下载地址。 下载下来后是 .vmdk 格式,vm直接导入。 M1请使用UTM进行搭建,教程见此。该靶场可能出现网络问题,解决方案见此 信息搜集 arp-scan -l # 主机发现,目标位192.168.168.14 nmap -sV …

单片机SWJ 调试端口(SW-DP和JTAG)、SWD下载电路

单片机下载接口是指用于将编写好的程序代码下载到单片机芯片中的接口。常见的单片机下载接口包括以下几种: 1. **串口下载接口**:通过串口(如UART或RS-232接口)与计算机或下载器相连,将程序代码通过串口传输到单片机内…

为高频大功率设计的双面水冷厚膜电阻方案

EAK双面水冷厚膜电阻是一种具有良好散热性能的电阻器,常用于需要高效散热的电子设备中。其包括第一绝缘介质层、厚膜电阻层、第二绝缘介质层以及用于液体流通的金属腔体,第一绝缘介质层设置于金属腔体的上表面;第一绝缘介质层表面设有厚膜电阻…

行政区划代码 powerquery

https://www.mca.gov.cn/n156/n186/index.html 选中删除其他列 if [末尾4位] "0000" then [单位名称] else if [末尾4位] <> "0000" and Text.End([末尾4位],2) "00" then [单位名称] else null if [结尾字符] "0000" then …

Docker部署ROS程序

【先上干货】 1、docker安装 curl -fsSL https://test.docker.com -o test-docker.shsudo sh test-docker.sh# ubuntu系统可以直接通过apt安装 sudo apt-get install -y docker.io 2、给docker一个root权限 sudo usermod -aG docker $USER3、启动docker服务 # service 命令…

spring boot学习第十三篇:使用spring security控制权限

该文章同时也讲到了如何使用swagger。 1、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instanc…

【深度学习】SDXL-Lightning 体验,gradio教程,SDXL-Lightning 论文

文章目录 资源SDXL-Lightning 论文 资源 SDXL-Lightning论文&#xff1a;https://arxiv.org/abs/2402.13929 gradio教程&#xff1a;https://blog.csdn.net/qq_21201267/article/details/131989242 SDXL-Lightning &#xff1a;https://huggingface.co/ByteDance/SDXL-Light…

蓝桥杯_定时器的基本原理与应用

一 什么是定时器 定时器/计数器是一种能够对内部时钟信号或外部输入信号进行计数&#xff0c;当计数值达到设定要求时&#xff0c;向cpu提出中断处理请求&#xff0c;从而实现&#xff0c;定时或者计数功能的外设。 二 51单片机的定时/计数器 单片机外部晶振12MHZ&#xff0c;…

Facebook的元宇宙实践:数字化社交的新前景

近年来&#xff0c;元宇宙&#xff08;Metaverse&#xff09;这一概念备受瞩目&#xff0c;被认为是数字化社交的未来趋势之一。而在众多科技巨头中&#xff0c;Facebook&#xff08;现更名为Meta&#xff09;一直处于元宇宙发展的前沿。在本文中&#xff0c;我们将深入探讨Fac…