I/O硬件原理
I/O设备
I/O设备分为块设备和字符设备
-
块设备:信息存储在固定大小的块中,块都有自己的地址,每个块也都能独立读写;包括硬盘、光盘、U盘等
-
字符设备:以字符为单位发送或接受一个字符流;如鼠标、打印机、网络接口等
设备控制器
I/O设备由机械部件和电子部件两部分组成
电子部件又称为设备控制器或适配器,负责设备与外界的联系,将数据流转换为字节块
机械部件就是设备本身
内存映射I/O
控制器拥有数个寄存器,通过这些寄存器完成与操作系统的联系
CPU与寄存器通信的方法之一就是内存映射I/O,即给每个控制寄存器分配唯一专有的内存地址;CPU申请读入信息时,将读入信号和地址发送在总线上,负责相应地址的内存模块或I/O设备将响应请求
-
通常情况下,需要使用汇编代码访问寄存器
-
操作系统不需要特殊的保护机制阻止用户进行I/O操作,只需将寄存器地址与用户地址分开即可
-
引用内存的指令也可以引用寄存器
-
应避免寄存器使用高速缓存,否则将循环引用高速缓存的值
直接存储器存取(DMA)
DMA在任何物理位置都能独立于CPU访问系统总线,当硬件具有DMA控制器时才能使用DMA
-
CPU通过设置DMA控制器的寄存器进行编程处理
-
DMA在完成编程后,向磁盘控制器发出命令,使数据从磁盘读入缓冲区,然后可以在地址总线上发起读请求,令数据从缓冲区读入内存,读完一个地址块后,收到磁盘控制器响应的DMA控制器就将下一个需要读取的地址发往地址总线
I/O软件原理
I/O软件的目标
-
设备独立性:无论程序由什么设备所写,需要访问什么目的设备,都可以相同地工作
-
统一命名:每一个文件的名字都应该是独一无二的,可以通过一个字符串检索到唯一的文件
-
错误处理:当控制器发现某错误时,需要设法自己解决,若无法解决,则交由设备驱动设备解决,最后再交由高层解决
程序控制I/O
当用户需要打印一个字符串时
-
进程将字符串存放在缓冲区
-
进程调用打印机直至拥有
-
操作系统将缓冲区的字符复制到内核中的数组里
-
等待直至打印机可用,即发送数据到打印机的数据寄存器中
-
打印机再次就绪后继续发送字符直至打印完所有字符
中断驱动I/O
中断驱动I/O允许CPU在等待打印机就绪的过程中做其他的事情,直至打印机就绪完毕发起中断请求将正在运行的程序挂起,继续打印字符串
使用DMA的I/O
使用DMA一次给打印机提供一个字符而不去打扰CPU,可以让CPU在此期间做更有意义的工作
I/O软件层次
中断处理程序
中断在计算机系统中是应该尽量避免的,因为对中断的处理需要大量的CPU指令,特别是在存在虚拟内存的机器上
设备驱动程序
不同的I/O设备的工作内容和工作原理是不相同的,需要有一套程序对不同的I/O设备进行控制
程序需要访问设备的硬件,设备驱动程序需要是操作系统内核的一部分;程序需要工作时,操作系统将程序文件所在的地址映射到内存中(装载)
与设备无关的I/O软件
-
不同的设备驱动程序对内核的调用函数是不同的,不可能为了每一个设备去修改操作系统,于是操作系统需要提供一个统一的接口
-
缓冲:当需要在用户、内核与控制器之间进行数据传输时,需要设置缓冲区以确保数据传输的连续性,避免中断产生的大量浪费
-
错误报告:当操作系统发现出现了错误,需要返回错误代码或向用户请示通知
守护进程和假脱机目录
当进程需要调用打印机时,需要将等待打印的文件放入假脱机目录下,由守护进程进行逐一打印;这样就可以防止进程无止境地占有打印机了
盘
RAID
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,简称为「磁盘阵列」,其实就是用多个独立的磁盘组成在一起形成一个大的磁盘系统,从而实现比单块磁盘更好的存储性能和更高的可靠性。
-
RAID0:RAID0 是一种非常简单的的方式,它将多块磁盘组合在一起形成一个大容量的存储。当我们要写数据的时候,会将数据分为N份,以独立的方式实现N块磁盘的读写,那么这N份数据会同时并发的写到磁盘中,因此执行性能非常的高。但RAID0的问题是,它并不提供数据校验或冗余备份,因此一旦某块磁盘损坏了,数据就直接丢失,无法恢复了。因此RAID0就不可能用于高要求的业务中,但可以用在对可靠性要求不高,对读写性能要求高的场景中。
-
RAID1:RAID1是磁盘阵列中单位成本最高的一种方式。因为它的原理是在往磁盘写数据的时候,将同一份数据无差别的写两份到磁盘,分别写到工作磁盘和镜像磁盘,那么它的实际空间使用率只有50%了,两块磁盘当做一块用,这是一种比较昂贵的方案。
-
RAID3:RAID3的方式是:将数据按照RAID0的形式,分成多份同时写入多块磁盘,但是还会另外再留出一块磁盘用于写「奇偶校验码」。例如总共有N块磁盘,那么就会让其中额度N-1块用来并发的写数据,第N块磁盘用记录校验码数据。一旦某一块磁盘坏掉了,就可以利用其它的N-1块磁盘去恢复数据.但是由于第N块磁盘是校验码磁盘,因此有任何数据的写入都会要去更新这块磁盘,导致这块磁盘的读写是最频繁的,也就非常的容易损坏。
-
RAID5: RAID5模式中,不再需要用单独的磁盘写校验码了。它把校验码信息分布到各个磁盘上。例如,总共有N块磁盘,那么会将要写入的数据分成N份,并发的写入到N块磁盘中,同时还将数据的校验码信息也写入到这N块磁盘中(数据与对应的校验码信息必须得分开存储在不同的磁盘上)。一旦某一块磁盘损坏了,就可以用剩下的数据和对应的奇偶校验码信息去恢复损坏的数据。
磁盘格式化
- 柱面斜进:当磁头需要转移到另一个磁道时,由于磁盘仍会旋转一段距离,磁头也就无法直接顺序读取信息
时钟
输入输出软件
本文共2461字符