当前位置: 首页 > news >正文

操作系统——第五章(I/O设备)

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

1.知识概览

    

2.什么是I/O设备

“I/O”就是“输入/输出”(Input/,Output)
I/O设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。

  

3.I/O设备的分类——按使用特性

4..I/O设备的分类——按传输速率

       

 

5..I/O设备的分类——按信息交换的单位

6.知识回顾


二、I/O控制器

1.知识总览

   

2.机械部件

I/O设备的机械部件主要用来执行具体I/O操作。
如我们看得见摸得着的鼠标/键盘的按钮;显示器的LED屏:移动硬盘的磁臂、磁盘盘面。
I/O设备的电子部件通常是一块插入主板扩充槽的印刷电路板。

3.电子部件(I/O控制器)

CPU无法直接控制/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和/O设备机械部
件之间的“中介”,用于实现CPU对设备的控制

【注】:①一个I/O控制器可能会对应多个设备;
数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O:另一些计算机则采用I/O专用地址,即寄存器独立编址。

内存映射VS寄存器独立编制

4.知识图谱


三、I/O控制方式

1.知识概览

2.程序直接控制方式

程序直接控制方式是最基础的I/O控制方法,CPU全程参与数据传输过程。该方式完全由程序主动控制I/O操作,通过循环查询设备状态实现同步。

                  

轮询:

CPU持续向I/O设备的状态寄存器发送查询指令,检测设备是否就绪。在设备未准备完成时,CPU会进入"忙等待"状态,不断重复检查状态寄存器的值。

当状态寄存器显示设备就绪后,CPU才会执行实际的数据传输。对于输入操作,CPU从数据寄存器读取数据;对于输出操作,CPU将数据写入数据寄存器。

典型特征

  • 同步阻塞:CPU必须等待每个I/O操作完成才能继续后续工作

  • 高CPU占用:等待期间CPU不断执行状态检查指令

  • 简单实现:不需要额外硬件支持,仅需状态寄存器和基本指令

                                        

3.中断驱动方式

引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行。
注意:
①CPU会在每个指令周期的末尾检查中断;
②中断处理过程中需要保存、恢复进程的运行环境,
这个过程是需要一定时间开销的。可见,如果中断发生的频率太高,也会降低系统性能。

                                                                                                                   

4.DMA方式

与“中断驱动方式”相比,DMA方式(Direct Memory Access,直接存储器存取。主要用于块设备的I/O控制)有这样几个改进:
①数据的传送单位是“块”。不再是一个字、一个字的传送;
②数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为“快递小哥”;
③仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。

DMA控制器

DR(Data Register,数据寄存器):暂存从设备到内存,或从内存到设备的数据。
MAR(Memory Address Register,.内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置;输出时MAR表示要输出的数据放在内存中的什么位置。
DC(Data Counter,数据计数器):表示剩余要读/写的字节数。
CR(Command Register,命令/状态寄存器):用于存放CPU发来的I/O命令,或设备的状态信息。

                         

5.通道控制方式

        

“弱鸡版的CPU”——与CPU相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中的,也就是说通道与CPU共享内存。

                                                                                                         

6.知识回顾


四、I/O软件层次结构

1.知识图谱

  

2.用户层软件

  

3.设备独立性软件

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

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

4.设备驱动程序

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

设备独立性软件不可以直接操作硬件,它必须调用设备驱动程序来实现对硬件的控制。

      

5.中断处理程序

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

         

6.知识回顾

直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的。
 


五、I/O应用程序接口and设备驱动程序接口

1.知识总览

  

2.I/O应用程序接口

    

I/O应用程序接口的原理基于用户空间与内核空间的分层协作,通过文件描述符(fd)抽象实现对底层硬件的统一操作:在用户空间,应用程序通过持有socket对应的fd调用write()/read()等系统调用发起I/O请求,这些调用触发从用户态到内核态的切换,使内核通过socket内核对象(关联IP、端口等信息)管理数据传输;在数据发送流程中,内核将用户数据拷贝至发送缓冲区,经网络协议栈(TCP/IP)封装后,通过“设备无关软件层”调用网络控制器驱动程序,最终由网卡将数据按TCP/IP格式发送至物理链路;数据接收时,网卡接收数据包并通过中断或DMA唤醒内核,内核协议栈解封装后将数据存入接收缓冲区,若对应socket被read()监听则唤醒进程,完成用户空间数据获取。这一过程依赖文件描述符的统一抽象(遵循“一切皆文件”设计)、内核缓冲区的中转隔离(避免用户空间直接操作硬件)、中断/异步通知机制(高效处理硬件事件)及端口号的唯一性标识(区分同一主机不同进程),其核心本质是通过分层抽象屏蔽底层硬件与协议细节,为上层应用提供简洁统一的I/O操作接口,在保证跨设备兼容性的同时优化系统性能。

3.阻塞和非阻塞I/O

阻塞I/O:应用程序发I/O系统调进程需转阻塞态筹待。eg:子符设备接口一一从键盘读一个字符get。
非阻塞I/O:应用程序发出I/O系统调用系统调用可迅速返回,进程无需阻塞等待。eg:块设备接口一一往磁盘写数据write。


4.设备驱动程序接口

   

  

不同的操作系统,对设备驱动程序接口的标准各不相同。
设备厂商必须根据操作系统的接口要求,开发相应的设备驱动程序,设备才能被使用。

5.I/O核心子系统

操作系统中I/O核心子系统的三个主要组成部分及其功能如下:

设备管理模块

  • 负责物理设备的分配与调度
  • 维护设备状态表跟踪设备忙闲状态
  • 实现设备独立性,提供统一逻辑设备名访问接口
  • 处理设备保护与安全控制

缓冲管理模块

  • 建立数据缓冲区协调速度差异
  • 采用单/双缓冲、循环缓冲等机制
  • 实现高速缓存提升访问性能
  • 通过预读和延迟写优化I/O效率

设备驱动程序

  • 包含设备控制表(DCT)等数据结构
  • 实现设备控制寄存器操作指令
  • 处理设备初始化/启动/停止等操作
  • 转换抽象请求为具体控制信号
// 典型设备驱动结构示例
struct device_driver {void (*init)(struct device*);int (*read)(struct device*, char*, int);int (*write)(struct device*, char*, int);void (*interrupt_handler)(int);
};

这三个模块协同工作,通过层次化设计实现:

  • 用户程序与物理设备解耦
  • 提高I/O操作可靠性
  • 优化系统整体性能
  • 支持多种设备类型扩展


     


下一讲,假脱机技术(SPOOLing技术)I/O调度、设备保护、设备分配与回收、缓冲区管理(即缓冲与高速缓存),敬请期待(* ̄︶ ̄)。

相关文章:

  • [架构之美]深入优化Spring Boot WebFlux应用
  • 机器学习-黑马笔记
  • STM32 开发 - 中断案例(中断概述、STM32 的中断、NVIC 嵌套向量中断控制器、外部中断配置寄存器组、EXTI 外部中断控制器、实例实操)
  • Python中的函数和方法概要
  • 【AS32系列MCU调试教程】硬件调试:JLink 驱动配置与调试技巧
  • MCU、MPU、GPU、Soc、DSP、FPGA、CPLD……它们到底是什么?
  • C# 结构(构造函数和析构函数)
  • BEV和OCC学习-8:mmdet3d 3D分割demo测试
  • stm32f103 标准库移植rt-thread nano
  • Django(自用)
  • 无人机遥控器低延迟高刷新技术解析
  • 38道Linux命令高频题整理(附答案背诵版)
  • [python] 使用python设计滤波器
  • Python实战应用-Python实现Web请求与响应
  • Verilog基础:标识符的定义位置
  • Vue 中 this.$emit(‘mount‘) 的妙用
  • [C++][设计模式] : 单例模式(饿汉和懒汉)
  • 2.监控领域中行业黑话知识学习指南
  • 使用Ollama+open-webui搭建本地AI模型
  • 写实交互数字人:赋能消防知识科普,点亮智能交互讲解新未来
  • 河北建设集团在哪个网站采购/电商运营怎么做如何从零开始
  • 个人网站做废品回收/魔方优化大师官网下载
  • 如何做好seo/南宁seo咨询
  • 建手机网站价格/公司官网制作多少钱
  • 滨海新区商城网站建设/网站建设步骤
  • 制造行业网站建设/高级seo培训