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 ...
随机推荐
- 【原创】解决NasCab掉进程,NasCab进程维护
最近对象吐槽家里服务器又连不上,看不了考研视频了. 我掏出手机一试,确实连不上.家里的服务器是Win11平台,用NasCab管理的视频文件,然后通过frpc做的内网穿透. 我们在外面的图书馆,连不上无 ...
- [The Trellor] Chapter 1
翻译软件真的翻不好,读英文小说要相信你的脑子. There's only one thing to do in Berlen - that is listening the sound of wind ...
- Word、Excel办公书的资源下载
我是清华社编辑,下载资源没有版权问题,可供读者个人学习用,但不允许商用. 微信扫描,清华社网盘,可转自己邮箱下载.安全,无风险. <Word/Excel/PPT 2019商务办公从入门到精通&g ...
- LeetCode 407. 接雨水 II (优先队列)
参考 优先队列的思路解决接雨水II,逐行解释 从最外圈开始不断向内遍历,如果内部的高度小于外部的高度,则证明该位置可以蓄水,否则不能,水会顺着该外圈流出去. 每次都处理外圈高度最小的那个位置 a,遍历 ...
- balance_dirty_pages_ratelimited分析
balance_dirty_pages_ratelimited分析 nr_dirtied_pause:当前task的脏页门限: dirty_exceeded:全局的脏页数超过门限或者该bdi的脏页数超 ...
- NICE与静态优先级的关系
在Linux系统中,nice值和静态优先级用于控制进程调度的优先级,但它们的范围和含义有所不同.让我们详细解释一下两者的区别和联系. 1. Nice值 范围:nice值的范围是从 -20 到 19. ...
- 墨天轮国产数据库沙龙 | 胡津铭:时序数据库DolphinDB,从量化金融到万物互联
分享嘉宾:胡津铭 DolphinDB研发副总监 整理:墨天轮社区 导读 DolphinDB是高性能分布式时序数据库,集成了功能强大的编程语言和高容量高速度的流数据分析系统,为海量结构化数据的快速存储. ...
- .NET高级调试 - 3.9~3.11代码审查以及杂项命令
简介 代码审查就是观察代码,代码形态分为三种C#代码>IL代码>汇编代码.通过代码审查,可以从原始代码的字节流中推测出逻辑详情 高级调试本质上属于逆向分析,更多的是以汇编为主. 反汇编代码 ...
- sqlplus登录脚本glogin.sql的配置
DEFINE sqlprompt=SQL COLUMN sqlprompt NEW_VALUE sqlprompt SET TERMOUT OFF SELECT USER || '@' || NVL( ...
- 云原生的 WebAssembly 能取代 Docker 吗?
WebAssembly 是一个可移植.体积小.加载快并且兼容 Web 的全新格式.由于 WebAssembly 具有很高的安全性,可移植性,效率和轻量级功能,因此它是应用程序安全沙箱方案的理想选择.现 ...