IO介绍-中
系统接口
块设备接口
- 块设备:数据的存取和传输都是以数据块为单位的设备。典型的块设备是磁盘。该设备的基本特征是传输速率高,另一特征是可寻址,即能指定数据的输入源地址及输出的目标地址,可随机读写。磁盘设备通常采用DMA方式。
- 隐藏了磁盘的二维结构
- 将抽象命令映射为低层操作:块设备支持上层发来的对文件或设备的打开、读写、关闭等抽象命令。该接口会将上述的接口转换成实际的需要的更为复杂的命令
流设备接口
- 字符设备:数据存取都是以字符为单位,如键盘、打印机等。字符设备基本的特征是传输速度慢,通常每秒几个字节到几千个字节。还有一个特征是不可寻址,不能只能数据的输入源和输出的目标地址。字符设备在输入/输出时采用中断驱动方式
- get和put操作:由于字符是不可寻址的,因而对它只能采用顺序存取的方式。通常是为每一个字符设备建立一个字符缓冲区(队列),设备的IO字符流顺序地进入队列,或者是从队列中取走一个字符。get是从缓冲区立刻获取一个字符,pu是把一个新的字符写入缓冲区,等待送到设备
- in-control :因为字符设备类型太多,为了统一管理他们,通常在流设备接口中提供一种通用的in-control指令,在该指令中包含了许多参数,每一个参数表示一个鱼具体设备相关的特定功能。大多数字符设备是独占设备,必须采取互斥方式实现共享。因为,设备提供了打开和关闭的操作。在使用这类设备时,必须先打开设备,才能使用。如果已被打开,表示其他进程正在使用该设备。
网络通信接口
网卡
设备与控制器之间的接口

- 数据信号线:比如输入设备中,由外界输入的信号经过转换器转换后,所形成的数据通常是先进入缓冲器中,当数据量达到一定量后,再从缓冲器通过一组数据信号线传送给设备控制器;对于输出设备而言,是先从设备控制器经过数据线传来的一批缓冲器中,经过适当的转换后,再逐个字符输出
- 控制信号线:是由设备控制器向设备发送控制信号的通路。该信号规定了设备要执行的操作,如读操作或写操作或者是移动磁头的操作
- 状态信号线:用来传送设备的当前状态的信号。设备当前的状态有:在读、在写、已读、已写、并准好新的数据传送
设备控制器
- 控制字符设备的控制器
- 控制块设备的控制器
设备控制器基本功能
- 接受和识别命令:在控制器中有对应的控制寄存器,用户存放接收到的命令和参数,并对所接收的命令进行译码。
- 数据交换:它能接受cpu传来的数据,同时还要接收设备传来的数据。所以,它必须设置对应的数据寄存器
- 标识和报告设备状态:它有对应的状态寄存器,用其中的每一位表示设备的某一种状态。当cpu需要知道当前设备的状态,直接从控制器就返回了
- 地址识别:设备控制器必须能识别每个设备的地址,还有对应寄存器中对应的唯一的地址
- 数据缓冲区:由于IO设备速度较低,而CPU和内存的速度很高,所以在控制器中必须设置一个缓冲区。设备到内存时,可以累积一批数据后,再将缓冲区的数据高速传递给内存;内存到设备时,先是多次将数据存入缓冲区中,再一次性送到设备。
- 差错控制:如果出现错误,会将错误向cpu报告,于是cpu会将本次传输的数据丢掉,再进行重新一次的传输。
设备控制器的组成
- 设备控制器和cpu的接口:用于实现设备控制器和cpu的交互。所以该接口中三类信号线:
- 数据线:通常和两类寄存器连接,一种是数据寄存器,这种寄存器有一个或者多个,用于存输入或者输出的数据;另一种是控制/状态寄存器,用来存放cpu发送的指令或者是设备状态;
- 地址线
- 控制线
- 设备控制器与设备的接口:一个设备控制器可以控制多个设备。每个接口中都有数据、控制和状态三种类型的信号。控制器中IO逻辑根据发来的地址选择一个设备口。
- IO逻辑:它实现对设备的控制。它是通过一组控制线与CPU交互,CPU利用该逻辑向控制器发送IO命令。每当CPU要启动一个设备时,一方面将启动命令发送给控制器,另一方面同时通过地址线把地址发送给控制器,由控制器的IO逻辑对收到的地址进行译码,再根据翻译后的命令对设备进行控制。
内存映像IO
- 利用特定的IO指令:
固定的命令:如io-store cpu-reg,dev-no,dev-regcpu-reg :cpu某一个寄存器dev-no: 指定的设备dev-reg : 指定控制器里面的寄存器这种方式的缺点:访问内存和访问设备需要两种不同的指令
- 内存映像IO:
这种方式在编址和前面不同,它不区分是cpu寄存器,还是存储设备或者是寄存器地址,统一使用K值。当k在0~n-1时,表示内存地址;大于等于n时,表示第0个设备控制器的第一个寄存器地址。通过确定是n的多少倍,确定是第几个设备控制器,通过余数确定是寄存器的地址。所以,在编致上面简化了很多。例如:sore cpu-reg,n
IO通道
通道类型
- 字节多路通道:一个主通道连接几个到几百个数量不等的子通道。按照字节交叉式工作的通道。多个子通道连接一个主通道,当一个子通道完成数据交换以后,换成第二个子通道和主通道连接,进行交换数据。
- 数组选择通道:字节多路通道不适合连接高速的设备,数据读取消耗的时候还没有切换子通道的耗时多,所以有了数组选择通道。一个通过可以连接多个高速设备,但是,这个通道在一段时间内只能执行一道通道程序,控制一台设备进行数据传送。当一个设备占用了该通道以后,它就一直占着,即使它没有数据传输也会占着,直到该设备的数据传输完毕以后才会释放该通道。所以,这种通道的利用率很低。
- 数组多路通道:它有字节多路通道的多路,有数组选择通道的传输速率。所以,这种方式使用率最高。
通道中的瓶颈问题
IO介绍-中的更多相关文章
- Java之IO(十四)IO包中其它类
转载请注明出处:http://www.cnblogs.com/lighten/p/7267553.html 1.前言 此章介绍IO包中剩余未介绍的几个流和工具类,包括LineNumberReader. ...
- io流中的装饰模式对理解io流的重要性
为了说明 io流中的装饰者模式对理解io流的重要性,我想先简要介绍以下io的装饰模式. 装饰(decorator)你也可以翻译成修饰.比如:一个会精通化学数学的物理学家.在这个"物理学家&q ...
- 【python】-- 事件驱动介绍、阻塞IO, 非阻塞IO, 同步IO,异步IO介绍
事件驱动介绍 一.前言 通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求: (2)每收到一个请求,创建一个新的线程,来处理该请求: (3)每收 ...
- Netty之WebSocket和四种IO介绍
Netty简介 一.什么是netty? 高性能 事件驱动 异步非堵塞 基于NIO的客户端,服务器端编程框架 稳定性和伸缩性 二.Netty的使用场景 高性能领域 多线程并发领域 异步通信领域 ...
- 揭开Java IO流中的flush()的神秘面纱
大家在使用Java IO流中OutputStream.PrintWriter --时,会经常用到它的flush()方法. 与在网络硬件中缓存一样,流还可以在软件中得到缓存,即直接在Java代码中缓存. ...
- ORACLE数据库异步IO介绍
异步IO概念 Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能.它是Linux 2.6 版本内核的一个标准特性,当然我们在2.4 版本内核的补丁中也可以找到它.AIO 背 ...
- java.io包中的字节流—— FilterInputStream和FilterOutputStream
接着上篇文章,本篇继续说java.io包中的字节流.按照前篇文章所说,java.io包中的字节流中的类关系有用到GoF<设计模式>中的装饰者模式,而这正体现在FilterInputStre ...
- 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类
---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或 ...
- Java IO流中的File类学习总结
一.File类概述 File类位于java.io包中,是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹. File类有多种重载的构造方法.File类保存文件或目录的各种 ...
- 1.java.io包中定义了多个流类型来实现输入和输出功能,
1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G) A.输入流和输出流 B ...
随机推荐
- 完美转发(模板)--T&&
在C++模板编程中,完美转发(Perfect Forwarding)是一种技术,旨在保留函数参数的值类别,即在将参数传递到另一个函数时,无论参数是左值还是右值,都能够保持它的原始性质,而不会因为转发丢 ...
- 揭秘!尤雨溪成立的VoidZero如何改变前端世界
前言 Vue和Vite之父尤雨溪宣布成立公司 VoidZero,目前已经融资3200万.这篇文章欧阳将带你了解VoidZero是如何改变javascript的世界! 关注公众号:[前端欧阳],给自己一 ...
- Java日期时间API系列22-----Jdk8中java.time包中的新的日期时间API类,Month月份和DayOfWeek星期的计算。
Java8中为月份和星期新增的了,Month和DayOfWeek,来处理月份和星期的特殊问题,这2个类都是枚举类,对Month.DayOfWeek源码说明和简单应用,月份英文,月份英文简称,月份中文, ...
- store文件夹的处理,vuex模块化modules
index文件代码: import Vue from "vue"; import Vuex from "vuex"; // 导入根getters import ...
- MySQL数据的导入
我们在帖子MySQL数据的导出 - brucexia - 博客园 (cnblogs.com)中讲了MySQL数据的导出,本文讲讲解MySQL数据的导入. MySQL数据的导入包括使用LOAD DATA ...
- 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-2-环境准备与搭建-基于Maven(详细教程)
1.简介 上一篇宏哥已经讲解和分享了如何通过引入jar包来搭建Java+Playwright自动化测试环境,这一种是比较老的方法,说白了就是过时的老古董,但是我们必须了解和知道,其实maven搭建无非 ...
- 中通快递关键业务和复杂架构挑战下的 Kubernetes 集群服务暴露实践
本文是上海站 Meetup 讲师王文虎根据其分享内容整理的文章. KubeSphere 社区的小伙伴们,大家好.我是中通快递容器云平台的研发工程师王文虎,主要负责中通快递容器云平台开发.应用容器化推广 ...
- Meteor:全栈JavaScript开发框架的先驱
Meteor 是一个功能强大且易用的全栈 JavaScript 框架,它简化了现代 Web 应用的开发流程,从数据库到用户界面都可以通过一套统一的技术栈来实现.无论你是构建实时应用还是想要一个快速的原 ...
- hasOwnProperty()方法
hasOwnProperty()方法可以检测对象是否有某个属性 var man = { legs:2, hands:2, heads:1 } man.hasOwnProperty("head ...
- Spire.Pdf打印PDF文件
1 /// <summary> 2 /// Spire.Pdf打印PDF文件 3 /// </summary> 4 /// <param name="fileN ...